arcpy例子

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('完成')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341