通常我们在解决实际问题时候,可能会遇到将坐标数据转为shp点数据,在数据量很小,或者经纬度坐标直接给出的excel表中可以通过直接导入arcgis进行转化成点或者面shp数据。而在实际问题中,我们也会遇到下面这种情况:
给出批量的txt形式的气象站点数据,如何将其直接转化为arcgis中的点或者面数据,就是今天我们要解决的问题。如下如,我自己先建立一个txt文本数据
然后利用代码直接构建出利用txt数据直接转shp数据。代码贴出:
#coding:utf-8 import os import arcpy txt_filename = 'C:/Users/Administrator/Desktop/data1.txt' path='C:/Users/Administrator/Desktop/' outputname="polygontest.shp" dir=path+outputname; in_file = open(txt_filename,'r'); spatRef = arcpy.SpatialReference(4326) createFC = arcpy.CreateFeatureclass_management(os.path.dirname(dir), os.path.basename(dir), "POLYGON", "", "", "",spatRef) #创建字段 arcpy.AddField_management(createFC, "index", "TEXT", 50) # 左下角 arcpy.AddField_management(createFC, "minX", "TEXT", 50) arcpy.AddField_management(createFC, "minY", "TEXT", 50) # 右上角 arcpy.AddField_management(createFC, "maxX", "TEXT", 50) arcpy.AddField_management(createFC, "maxY", "TEXT", 50) cur = arcpy.InsertCursor(createFC) for line in in_file: p = line.split(','); array = arcpy.Array() index=p[0] minX=p[1] minY=p[2] maxX=p[3] maxY=p[4] pointLB = arcpy.Point() pointLB.X=minX pointLB.Y=minY pointRB = arcpy.Point() pointRB.X=maxX pointRB.Y=minY pointRU = arcpy.Point() pointRU.X=maxX pointRU.Y=maxY pointLU = arcpy.Point() pointLU.X=minX pointLU.Y=maxY array.append(pointLB) array.append(pointRB) array.append(pointRU) array.append(pointLU) row = cur.newRow() row.shape = array row.index = index row.minX=minX row.minY=minY row.maxX=maxX row.maxY=maxY cur.insertRow(row) print 'finished'
生成结果如下:
这里我们需要注意的是,txt文本中的数据一定是英文状态下的逗号,不然机会报错,说list index out of range,即列表越界,如果觉得对你有帮助,就点个关注呗。8年giser,不定期更新博客。