1、创建点
#-*-coding:utf-8-*-
import sys
import xlrd
import arcpy
reload(sys)
sys.setdefaultencoding("utf-8")
#空间参考
sp = arcpy.SpatialReference(4326)
#文件路径
path =r'D:\工作\地理信息'
filename ='point.shp'
#建立对象
fc =path+'\\'+filename
rr=arcpy.CreateFeatureclass_management(path,filename,'POINT','','','',sp)
#返回的竟然是一个路径,这个路径里面应该带有其他信息
print(rr)
arcpy.AddField_management(fc,'FIDX',"TEXT",50)
#通过游标增加修改数据,操作记录
cursor = arcpy.InsertCursor(fc)
pointS =[[-119.43,85],[-24.5,-63.8],[-44.954,-21.116]]
index =0
for pt in pointS:
point=arcpy.Point()
point.X=pt[0]
point.Y=pt[1]
#创建记录
row=cursor.newRow()
row.shape=point
row.FIDX =index
index+=1
#插入记录
cursor.insertRow(row)
print('finshed')
2、创建多段线要素类
- 先创建点,创建点不需要array类,其他都需要
#-*-coding:utf-8-*-
import sys
import arcpy
reload(sys)
#输入路径
sys.setdefaultencoding("utf-8")
#输入构成线的点坐标,注意分组
poylinePts = [
[
[-80.380734,144.639988],[-61.307339,144.639908],[8.62844,151.451835]
],
[
[32.697248,52.905963],[-46.775229,85.603211],[-95.366972,32.470183]
]
]
#设置空间参考
sp = arcpy.SpatialReference(4326)
path = r'D:\工作\地理信息'.decode('utf-8')
filename = 'polyline.shp'
#设置生成文件的路径
fc = path+'\\'+filename
#创建要素类
arcpy.CreateFeatureclass_management(path,filename,'POLYLINE','','','',sp)
#为要素类增加属性字段
arcpy.AddField_management(fc,'POLYLINE','TEXT',50)
cursor = arcpy.InsertCursor(fc)
#遍历坐标表
for coord in poylinePts:
array = arcpy.Array()
#先创建点,创建点不需要array类,其他都需要
for pt in coord:
point = arcpy.Point()
point.X = pt[0]
point.Y = pt[1]
array.add(point)
print(point.X,point.Y)
#根据点再创建线段,一组点就是一条多段线
polyline = arcpy.Polyline(array)
#通过游标创建记录
row = cursor.newRow()
row.shape = polyline
#对属性赋值
row.POLYLINE ='xxx'
cursor.insertRow(row)
print('finshed')
3、修改字段
#-*-coding:utf-8-*-
import sys
import arcpy
reload(sys)
sys.setdefaultencoding("utf-8")
#空间参考
sp = arcpy.SpatialReference(4326)
filepath =r'D:\工作\地理信息\point.shp'
for field in arcpy.ListFields(filepath):
print('字段名为{},字段长度为{}'.format(field.name,field.length))
arcpy.AddField_management(filepath,'name',"TEXT",50)
arcpy.AddField_management(filepath,'age',"float",10)
arcpy.DeleteField_management(filepath,'age')
4、创建面要素类
#-*-coding:utf-8-*-
import sys
import arcpy
reload(sys)
#输入路径
sys.setdefaultencoding("utf-8")
#输入构成线的点坐标,注意分组
#以三个点构成三角形面,与构建多段线类似
poylinePts = [
[
[-136.238,110.126],[-99,124.639908],[-89.62844,124.451835]
],
[
[32.697248,52.905963],[-1.8172,66.5278],[46.32123,70.2342]
]
]
#设置空间参考
sp = arcpy.SpatialReference(4326)
path = r'D:\工作\地理信息'.decode('utf-8')
filename = 'polygon.shp'
#设置生成文件的路径
fc = path+'\\'+filename
#创建要素类
arcpy.CreateFeatureclass_management(path,filename,'POLYGON','','','',sp)
#为要素类增加属性字段
arcpy.AddField_management(fc,'POLYGON','TEXT',50)
cursor = arcpy.InsertCursor(fc)
#遍历坐标表
for coord in poylinePts:
array = arcpy.Array()
#先创建点,创建点不需要array类,其他都需要
for pt in coord:
point = arcpy.Point()
point.X = pt[0]
point.Y = pt[1]
array.add(point)
print(point.X,point.Y)
#根据点再创建线段,一组点就是一条多段线
polyline = arcpy.Polyline(array)
#通过游标创建记录
row = cursor.newRow()
row.shape = polyline
#对属性赋值
row.POLYGON = 'xxx'
cursor.insertRow(row)
print('finshed')
5、查询游标SearchCursor 和过滤条件的设置
#-*-coding:utf-8-*-
import sys
import xlrd
import arcpy
reload(sys)
sys.setdefaultencoding("utf-8")
#空间参考
filename = r"D:\工作\地理信息\polygon.shp"
'''
arcpy.da.SearchCursor(filename,[选择字段],过滤字段)
'''
#shape属性有点奇怪,返回的是坐标元组
with arcpy.da.SearchCursor(filename,['FID','Shape','Id','POLYGON'],'FID= 1') as cursor:
for row in cursor:
fid = row[0]
Shape = row[1]
Id = row[2]
POLYGON = row[3]
print("当前记录为第{0}条,shape为{1},Id为{2},POLYGON属性为{3}".format(fid,Shape,Id,POLYGON))
6、案例_读取点集的起止点坐标
#-*-coding:utf-8-*-
import sys
import arcpy
reload(sys)
sys.setdefaultencoding("utf-8")
#设置脚本窗口的两个参数
# shpPath =arcpy.GetParameterAsText(0)
# txtPath =arcpy.GetParameterAsText(1)
#定义函数,需要两个参数,文件路径和结果路径
def getFirstAndLastPt(file,txtpath):
with open(txtpath.decode('utf-8'),'w') as f :
#用游标读取记录
#SHAPE@:返回一整个几何要素,因此此处得到的是整个要素shape
with arcpy.da.SearchCursor(file,['FID','SHAPE@']) as cursor:
for row in cursor:
shape=row[1]
fid=row[0]
firstPt = shape.firstPoint
lastPt = shape.lastPoint
strResult =str(fid)+','+str(firstPt.Y)+','+str(lastPt.X)+','+str(lastPt.Y)+'\n'
f.write(strResult)
arcpy.AddMessage('finished')
getFirstAndLastPt('point.shp',r'D:\工作\test.txt')
SHAPE@:返回一整个几何要素,因此此处得到的是整个要素shape
with open(txtpath.decode('utf-8'),'w') as f :防止乱码
添加脚本的模式
# -*-coding:utf-8-*-
import sys
import arcpy
reload(sys)
sys.setdefaultencoding("utf-8")
# 设置脚本窗口的两个参数\\\
shpPath = arcpy.GetParameterAsText(0)
txtPath = arcpy.GetParameterAsText(1)
def getFirstAndLastPt(file, txtpath):
with open(txtpath.decode('utf-8'), 'w') as f:
# 用游标读取记录
# SHAPE@:返回一整个几何要素,因此此处得到的是整个要素shape
with arcpy.da.SearchCursor(file, ['FID', 'SHAPE@']) as cursor:
for row in cursor:
shape = row[1]
fid = row[0]
firstPt = shape.firstPoint
lastPt = shape.lastPoint
strResult = str(fid) + ',' + str(firstPt.Y) + ',' + str(lastPt.X) + ',' + str(lastPt.Y) + '\n'
f.write(strResult)
arcpy.AddMessage('finished')
# getFirstAndLastPt('point.shp',r'D:\工作\test.txt')
getFirstAndLastPt(shpPath, txtPath)
7、UpdataCursor 改数据
#-*-coding:utf-8-*-
import sys
import xlrd
import arcpy
reload(sys)
sys.setdefaultencoding("utf-8")
#空间参考
filename = r"D:\工作\地理信息\polygon.shp"
'''
arcpy.da.SearchCursor(filename,[选择字段],过滤字段)
'''
#shape属性有点奇怪,返回的是坐标元组
with arcpy.da.UpdateCursor(filename,['POLYGON'],'FID= 0') as cursor:
for row in cursor:
POLYGON = row[0]
if POLYGON == 'xxx':
row[0] = '吴迪'
#方法名称别写错了
cursor.updateRow(row)
print("POLYGON属性为{0}".format(row[0]))
else:
print("POLYGON属性为{0}".format(POLYGON))
8、将shape文件属性写入到csv和txt(txt 见代码中注释部分)
#-*-coding:utf-8-*-
import sys
import arcpy
reload(sys)
import codecs
import csv
sys.setdefaultencoding("utf-8")
cvsPath = r'D:\工作\地理信息\cs1.csv'
f= open(cvsPath.decode('utf-8'),'wb')
f.write(codecs.BOM_UTF8)
csv_write = csv.writer(f)
shpPath =r"D:\工作\地理信息\polygon.shp".decode('utf-8')
with arcpy.da.SearchCursor(shpPath.decode('utf-8'),['FID','Id','POLYGON']) as cursor:
for row in cursor:
data = [row[0],row[1],row[2]]
#注意大小写
csv_write.writerow(data)
print('第{}行数据已经写入'.format(str(row[0]+1)))
"""
写入到txt
data =','.join([row[0],row[1],row[2]])+'\n'
file.write(data)
"""
print('完成')