工具介绍
在测绘数据中,有一类txt文件,如下图:
文件中记录了要素的坐标系、地块名称、用地性质、折点坐标等信息。
通过提取坐标点信息,转化成折点,再生成面要素,并且将要素信息提取到要素的字段里,就是本工具的主要功能。
考虑到一般情况下,需要转换多个 txt文件,因此工具做成批处理的方式。
参数设置
参数有3个。
1、【输入文件夹位置】——输入包括txt文件的文件夹。工具通过读取文件夹下的txt文件来获取测绘文件,因此该文件夹下不要有其他乱七八糟的文件。
2、【输入转换后坐标系】——输入生成要素所定义的坐标系,要和txt文件里的坐标信息一致。
3、【输出要素】——输出生成的面要素的位置,建议放在数据库里,不要用shp。
脚本编写
主要思路
通过提取坐标点信息,转化成折点,再生成面要素,并且将要素信息提取出来,分离,并赋值给新生成的面要素,以字段的形式保存下来。
完整代码如下:
import arcpy
import os
arcpy.env.overwriteOutput = True
filePath = arcpy.GetParameterAsText(0)
coordinate = arcpy.GetParameterAsText(1)
output_feature = arcpy.GetParameterAsText(2)
files = os.listdir(filePath)
def Txt_to_Feature():
list_Polygon = []
for i in range(len(files)):
# 读取txt测绘文件
arcpy.AddMessage('转换文件-----' + str(i+1) + '-----:' + files[i])
f = open(filePath + '\\' + files[i])
txt = f.read()
# 截取地块属性和坐标点文字
sp_txt = txt[txt.find('[地块坐标]'):].split('@')
for k in range(1, len(sp_txt)):
main_txt = sp_txt[k-1].split('\n')[-1] + sp_txt[k]
area_txt = main_txt.split('\n')[0].split(',')
p_index = area_txt[2]
p_name = area_txt[3]
p_type = area_txt[6]
poi_txt = main_txt[main_txt.find('J1'):].split('\n')
# 生成点要素
list_point = []
names = locals()
for j in range(len(poi_txt)-1):
if len(poi_txt[j]) > 0:
x = float(poi_txt[j].split(',')[3])
y = float(poi_txt[j].split(',')[2])
names['n' + str(i)] = arcpy.Point(x, y)
list_point.append(names['n' + str(i)])
# 生成面要素
array = arcpy.Array(list_point)
polygon = arcpy.Polygon(array)
output_polygon = arcpy.CopyFeatures_management(polygon, r'memory\output_poly' + str(i) + str(k))
# 字段赋值
arcpy.management.AddField(output_polygon, '编号', 'TEXT')
arcpy.management.AddField(output_polygon, '项目名称', 'TEXT')
arcpy.management.AddField(output_polygon, '类型', 'TEXT')
with arcpy.da.UpdateCursor(output_polygon, ['编号', '项目名称', '类型']) as cursor:
for row in cursor:
row[0] = p_index
row[1] = p_name
row[2] = p_type
cursor.updateRow(row)
# 生成面加入列表
list_Polygon.append(r'memory\output_poly' + str(i) + str(k))
# 多个要素合并
arcpy.management.Merge(list_Polygon, output_feature)
# 定义坐标系
arcpy.management.DefineProjection(output_feature, coordinate)
if __name__ == '__main__':
Txt_to_Feature()
结果展示
转换结果如下:
工具下载
最后,贴上工具下载地址:
工具下载:标准txt测绘文件转面要素https://pan.baidu.com/s/1OLxiUhoNYx01ksYhFqHPyg?pwd=pj6f