1. 解决途径
【1】arcgis帮助文档10.2链接,对于有对应工具箱中的tool,那么直接在arcgis软件中点击帮助查看即可,然后再组合。对于一些工具箱中不存在的,需要专门搜索arcpy中对应的函数。
【2】百度(不一定有合适的)
【3】chatgpt,由于国外网站的内容质量相较更高一些,并且arcpy的网站也正规,因此chatgpt的arcpy的代码生成质量很高,改动的较小。
由于arcgis10.x系列均使用python2.7,python2.7采用ASCII编码格式,不像python3采用utf-8,因此写代码时需要特别注意。
2. arcpy的一些使用
【1】读取mxd中有那些layer
【2】读取shp,并将shp写入mxd图层
【3】按属性选择,并导出shp
【4】读取shp、要素图层的属性字段信息内容
......
--------------------------------------------------------------------------------------------------------------
【1】读取mxd中有那些layer
# -*- coding: utf-8 -*-
'''python独立脚本,推荐采用vscode'''
import os
import time
import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')
mxd = arcpy.mapping.MapDocument(ur"***.mxd")
# df = arcpy.mapping.ListDataFrames(mxd)[0] # 可不使用
# layers = arcpy.mapping.ListLayers(mxd, "", df)
layers = arcpy.mapping.ListLayers(mxd)
for layer in layers:
print(layer.name)
if layer.name=="中文layer名字".decode("utf-8"):
print(222222)
break
# 获取此layer的数据源
print(layer.dataSource)
【2】读取shp,并将shp写入mxd图层
# -*- coding: utf-8 -*-
'''python独立脚本,推荐采用vscode'''
import os
import time
import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')
mxd = arcpy.mapping.MapDocument(mxd_path)
df = arcpy.mapping.ListDataFrames(mxd)[0]
# mxd打开时自动将对应路径的shp添加进arcgis界面,推荐shp_path为相对mxd路径
layer = arcpy.mapping.Layer(shp_path)
arcpy.mapping.AddLayer(df, layer)
# 保存; 删除内存mxd
mxd.save()
del mxd
【3】按属性选择,并导出shp
# -*- coding: utf-8 -*-
'''python独立脚本,推荐采用vscode'''
import os
import time
import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# 按属性查找 sql语句类似如下 不论中英文
sql = "%s='%s'" % (sql_field, k)
# sql = '%s=\'%s\''% (sql_field, k)
# sql = "{}='{}'".format(sql_field, k)
# 创建1个图层layer 即导入shp内容 图层名称为lyr
arcpy.MakeFeatureLayer_management(shp_path, "lyr")
# 在lyr图层上 根据sql 新建内容 相当于重写lyr
arcpy.SelectLayerByAttribute_management("lyr", "NEW_SELECTION", sql)
# 将最新的lyr导出成shp
arcpy.CopyFeatures_management("lyr", os.path.join(save_shp_root, "***.shp"))
time.sleep(1) # 由于arcpy底层处理可能是异步的 可能阻塞 因此睡一会 要不就容易for遍历程序死掉
# 删除图层layer
arcpy.Delete_management("lyr")
【4】读取shp、要素图层的属性字段信息内容
# -*- coding: utf-8 -*-
'''python独立脚本,推荐采用vscode'''
import os
import time
import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')
sql_field = "NAME"
# 若要查询多个字段则在 [] 中填写多个,若全部返回 则写"*",也可去掉[]-没有第2个参数即可arcpy.SearchCursor(shp_path)
# 推荐使用arcpy.da.SearchCursor 其与arcpy.SearchCursor参数有所不同 查看官网文档即可使用
# https://resources.arcgis.com/en/help/main/10.2/index.html#//018w00000011000000
shp_rows = arcpy.SearchCursor(shp_path, [sql_field])
# 遍历每一行 字段内容
while True:
row = shp_rows.next()
if not row:
break
# name = row.NAME # 不推荐这样使用
name = row.getValue(sql_field)
print(name)