Python|勘测定界TXT坐标点转shp文件——Arcpy实现

这篇具有很好参考价值的文章主要介绍了Python|勘测定界TXT坐标点转shp文件——Arcpy实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

平时日常工作中,经常会遇到txt格式的测绘数据,这类数据通常只有不同地块的界址点集和坐标系信息,没法直接导入GIS软件中进行分析。拿到这类原始文本文件,首要工作就是将之转换为shp图层数据。

今天,主要分享两种转shp数据的方法,一种是在arcmap中直接转换,另一种是通过arcpy编程的方式进行转换。前者适合地块数量较少的情况,后者适合地块较多时批量处理。

一、ArcMap实现

1、txt文件转Excel文件

首先打开原始txt坐标文件,将红框中某个地块的坐标点集复制保存到另一个空白txt文件中。

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

然后新建一个Excel文件,在文件打开中导入新保存的txt文件。

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

注意选择好分隔符,本例子中分割符为逗号。

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

将含有xy坐标的两列数据类型修改为数值,设置小数位数,并加上列头方便后续识别。其他列可以保留也可以删除掉,最后另存为97-2003版本后缀为xls的Excel文件。

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

2、Excel文件生成点要素

打开ArcMap,选择【添加XY数据】,选择刚才生成的xls文件,指定XY字段和坐标系,坐标系可以通过原始txt文件判断,最后点击确定即可生成点要素。

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

生成的点要素如下图所示:

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

3、点要素转线要素

首先将生成的点导出为shp文件,然后打开ArcToolbox工具栏,选择【数据管理工具】--->【要素】--->【点集转线】工具,选择导出的shp文件,点击确定。

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

生成的线要素如下图所示:

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

4、线要素转面要素

打开ArcToolbox工具栏,选择【数据管理工具】--->【要素】--->【要素转面】工具,选择生成的线要素,点击确定。

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

生成的面要素如下图所示:

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

5、面要素导出为shp

Python|勘测定界TXT坐标点转shp文件——Arcpy实现

二、ArcPy实现

上述步骤只是将一个地块界址点生成面图层shp,操作起来就已经很繁琐了,假如一个txt文件中包含大量地块或同时拥有许多txt文件时那工作量就要爆炸了。因此,可以通过调用上述几个脚本工具编写python脚本进行批量处理。

1、核心函数介绍

①遍历文件夹批量获取txt文件名

指定文件根目录,遍历根目录获取所有txt完整路径名,同时修改包含特殊字符的文件名称,最后保存为一个txt文件名称列表。

 1def getfnames(root, filetype):
 2    txt_fullname_list = []
 3    #遍历获取文件名,顺便更改特殊字符
 4    for root, dirs, files in os.walk(root):
 5        files[:] = [f for f in files if f.endswith(filetype)]
 6        for txt in files:
 7            txt_fullname = os.path.join(root, txt)
 8            new_txt_fullname = txt_fullname.replace('-', '_').replace('、', '').replace('(', '').replace(')', '')
 9            #修改原文本文件名,去掉特殊字符
10            os.rename(txt_fullname, new_txt_fullname)
11            txt_fullname_list.append(new_txt_fullname)
12    return txt_fullname_list

②单个txt转面shp文件

依次遍历txt文件名称列表,将每一个txt文件生成一个同名称shp文件。注意,所有txt文件默认编码方式需为gbk编码。

 1def txtToshp(txtfname):
 2    print(txtfname)
 3    #1.读取坐标信息
 4    polygon_list = []
 5    polygonGeometryList = []
 6    arcpy.env.workspace = u"E:\\shp\\陕西txt"
 7
 8    polygon = []
 9    id = ''
10    with open(txtfname, 'r') as file:
11        line = file.readline().decode('gbk').encode('utf-8')
12        while line:
13            line = file.readline().decode('gbk').encode('utf-8')
14            if "带号" in line:
15                id = line.split('=')[-1].strip('\n')
16            if len(line.split(',')) == 4:
17                point = [[], []]
18                c, d, e, f = line.split(',')
19                point[1].append(e)  # Y坐标
20                point[0].append(f)  # X坐标
21                polygon.append(point)
22            elif len(line.split(',')) >= 6:
23                if polygon:
24                    polygon_list.append(polygon)
25                polygon = []
26        polygon_list.append(polygon)
27
28    #2.创建面要素
29    outfile = txtfname.split('.')[0] + ".shp"
30    for polygon in polygon_list:
31        array = arcpy.Array()
32        for xy in polygon:
33            point = arcpy.Point(float(xy[0][0]), float(xy[1][0]))
34            #print(point)
35            array.add(point)
36        # 创建面
37        polygon = arcpy.Polygon(array)
38        polygonGeometryList.append(polygon)
39
40    if arcpy.Exists(outfile):
41        print(outfile + " have alread!")
42    else:
43        # 保存要素到工作空间
44        arcpy.CopyFeatures_management(polygonGeometryList, outfile)
45        # 定义投影
46        spatial_id_dic = {'35':4523,'36':4524,'37':4525,'38':4526}
47        #print(id)
48        spatial_id = spatial_id_dic[id]
49        #print(spatial_id)
50        if spatial_id:
51            spatial = arcpy.SpatialReference(spatial_id)
52            arcpy.DefineProjection_management(outfile, spatial)
53        else:
54            print("spatial_id error....")

2、完整脚本

 1# -*- coding: utf-8 -*-
 2# @Time    : 2021/5/20 16:43
 3# @Author  : 药菌
 4
 5import arcpy
 6import os
 7
 8def getfnames(root, filetype):
 9    txt_fullname_list = []
10    #遍历获取文件名,顺便更改特殊字符
11    for root, dirs, files in os.walk(root):
12        files[:] = [f for f in files if f.endswith(filetype)]
13        for txt in files:
14            txt_fullname = os.path.join(root, txt)
15            new_txt_fullname = txt_fullname.replace('-', '_').replace('、', '').replace('(', '').replace(')', '')
16            #修改原文本文件名,去掉特殊字符
17            os.rename(txt_fullname, new_txt_fullname)
18            txt_fullname_list.append(new_txt_fullname)
19    return txt_fullname_list
20
21def txtToshp(txtfname):
22    print(txtfname)
23    #1.读取坐标信息
24    polygon_list = []
25    polygonGeometryList = []
26    arcpy.env.workspace = u"E:\\shp\\陕西txt"
27
28    polygon = []
29    id = ''
30    with open(txtfname, 'r') as file:
31        line = file.readline().decode('gbk').encode('utf-8')
32        while line:
33            line = file.readline().decode('gbk').encode('utf-8')
34            if "带号" in line:
35                id = line.split('=')[-1].strip('\n')
36            if len(line.split(',')) == 4:
37                point = [[], []]
38                c, d, e, f = line.split(',')
39                point[1].append(e)  # Y坐标
40                point[0].append(f)  # X坐标
41                polygon.append(point)
42            elif len(line.split(',')) >= 6:
43                if polygon:
44                    polygon_list.append(polygon)
45                polygon = []
46        polygon_list.append(polygon)
47
48    #2.创建面要素
49    outfile = txtfname.split('.')[0] + ".shp"
50    for polygon in polygon_list:
51        array = arcpy.Array()
52        for xy in polygon:
53            point = arcpy.Point(float(xy[0][0]), float(xy[1][0]))
54            #print(point)
55            array.add(point)
56        # 创建面
57        polygon = arcpy.Polygon(array)
58        polygonGeometryList.append(polygon)
59
60    if arcpy.Exists(outfile):
61        print(outfile + " have alread!")
62    else:
63        # 保存要素到工作空间
64        arcpy.CopyFeatures_management(polygonGeometryList, outfile)
65        # 定义投影
66        spatial_id_dic = {'35':4523,'36':4524,'37':4525,'38':4526}
67        #print(id)
68        spatial_id = spatial_id_dic[id]
69        #print(spatial_id)
70        if spatial_id:
71            spatial = arcpy.SpatialReference(spatial_id)
72            arcpy.DefineProjection_management(outfile, spatial)
73        else:
74            print("spatial_id error....")
75
76if __name__ == '__main__':
77
78    #root = u"E:\\shp\\陕西txt"
79    root = arcpy.GetParameterAsText(0)
80
81    #获取指定目录下所有txt文件的全路径
82    txt_fullname_list = getfnames(root, '.txt')
83
84    #各文本文件依次生成shp图层文件
85    for txt_fullname in txt_fullname_list:
86        txtToshp(txt_fullname)
87        pass

以上就是这次的分享的全部内容了,如有问题,请在后台留言。如果觉得这篇内容还不错,欢迎大家点赞、转发、转载,感谢大家的支持与陪伴。文章来源地址https://www.toymoban.com/news/detail-422461.html

到了这里,关于Python|勘测定界TXT坐标点转shp文件——Arcpy实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现将txt文件转换成对应的excel或csv文件

    前言 本文是该专栏的第29篇,后面会持续分享python的各种干货知识,值得关注。 工作上可能会遇到这样的情况,使用python将某个txt文本,按照 行索引 和 列索引 转换成对应的excel文件或者是csv文件。 那对于这样的需求,用python如何实现呢?跟着笔者直接往下看解决方法。(

    2024年02月08日
    浏览(55)
  • 【python利用shp文件进行绘图白化】

    参考博文【matlab利用shp文件制作mask白化文件】 python借助shp文件对绘图进行白化,不需要进行mask文件的制作,可以高效地进行区域绘制 参考:https://mp.weixin.qq.com/s?__biz=MzIxODQxODQ4NQ==mid=2247484487idx=1sn=e654ab7eeeb41a15f816b52b391e93cbchksm=97eb981da09c110ba06115ed93a4a4450bbe84f8b57b90a9819b6b06f801b533

    2024年02月11日
    浏览(41)
  • SQ工具|11|ArcMap中关于土地报备坐标的转换(txt与shp的转换)

    第一部分:shp转txt ①界面关键功能介绍 红色框中分组字段下拉框是为了解决将多个要素转换至一个txt中的需求,当多个图斑的分组字段具有相同值时,将转换至一个txt文件中;若需每个图斑转换至一个txt文件,选择数据源一个不具有重复值的字段,推荐FID字段。绿色框中为

    2024年02月16日
    浏览(65)
  • (Arcgis)Python3.8批量裁剪利用shp文件裁剪tif栅格影像数据

    使用环境: pycharm2020 arcgis pro 中的python3.8 一、pycharm中设置python编译器。左上角“文件”——“设置”——找到python interpreter——找到arcgis pro安装文件夹中的python 使用arcgis pro原因 :自带 arcpy 库,不需要进行 pip install 安装。(我是有python官网上的,但是不知道为什么装不了

    2024年01月21日
    浏览(56)
  • 【Python 文件读写】— txt文件

    目录 一、文件读写模式 二、读文件 1、所用函数 2、示例 三、写文件 1、所用函数 2、示例 四、另一种书写形式 1、读文件 2、写文件 模式 具体信息 r 文件只读,若文件不存在则报错 r+ 文件可读可写,若文件不存在则报错,写入时会覆盖原有内容 rb 文件只读(二进制形式),若

    2024年02月12日
    浏览(62)
  • Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示

    GeoTools 是一个开源的 Java GIS 工具包,可利用它来开发符合标准的地理信息系统。 GeoTools 提供了 OGC (Open Geospatial Consortium) 规范的一个实现来作为他们的开发。 官网地址: GeoTools The Open Source Java GIS Toolkit — GeoTools 参考其quick start教程,实现集成到maven项目中并运行示例代码。

    2024年02月08日
    浏览(73)
  • Python读取txt文件

    Python是一种流行的编程语言,提供了许多处理文件的功能。在Python中,我们可以使用内置的文件操作函数来读取和处理文本文件,包括读取txt文件。本文将介绍如何使用Python读取txt文件,并提供相应的源代码。 打开文件 要读取一个txt文件,首先需要使用Python的内置函数 ope

    2024年02月06日
    浏览(53)
  • python读写txt 文件

    一、读文件 步骤:打开 – 读取 – 关闭 f= open(‘D:pythontxt1.txt’) f.read() #返回txt 文件的所有内容 while True: lines = f.readline() # 按行读取数据,行自动+1 if not lines: break pass print(lines) 二、文件写入 f1= open(‘D:pythontxt1.txt’,‘w’) f1.write(‘5.5 5.6!’) f1.close() //只有close的时候文件才

    2023年04月09日
    浏览(44)
  • python 将txt文件转换成csv文件

    今天今天又来了一个冷门脚本!读取txt文件中的数据转换成csv文件。 比如下面文件开始有规律分布着需要提取的数据,从第三行开始提取,并且对数据进行处理,最后进行输出。 说明: 以下代码不仅仅是提取数据,还包含处理的步骤,处理的方式不进行公开, from utils.fea

    2024年02月12日
    浏览(70)
  • python中读取文本文件txt

    文件创建 如果文件不存在就是创建,如果文件存在就是打开操作 文件对象创建 文件读 以下的函数都是文件对象的成员函数 read() 一次性读取文件的所有内容放在一个大字符串中,即存在内存中 readline() 逐行读取文本,结果是一个list readlines() 一次性读取文本的所有内容,结

    2024年02月05日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包