Arcpy编写过程中几个特别注意事项

Arcpy编写过程中几个特别注意事项

  1. 路径问题:
          只能是单斜杠、双反斜杠、前面加r的单反斜杠;
import arcpy
arcpy.GetCount_management("c:/temp/streams.shp")//单斜杠
arcpy.GetCount_management("c:\\temp\\streams.shp")//双反斜杠
arcpy.GetCount_management(r"c:\temp\streams.shp")//前面加r的单反斜杠
  1. 参数问题:
          列表参数、字符串、ValueTable;
import arcpy 
from arcpy import env 
env.workspace = "C:/base/data/gdb" 
arcpy.DeleteField_management("roads", ["STREET_NAM", "LABEL", "CLASS"])//列表
arcpy.DeleteField_management("roads", "STREET_NAM;LABEL;CLASS")//字符串
vt = arcpy.ValueTable()
vt.addRow("STREET_NAM")
vt.addRow("LABEL")
vt.addRow("CLASS")
arcpy.DeleteField_management("roads", vt)//ValueTable


  1. 性能优化问题:
          操作arcpy.da.InsertCursor、arcpy.da.SearchCursor、arcpy.da.UpdateCursor时尽量采用with 方式,这种方式不仅性能高而且内存自动释放;
//第一种尽量不采用
import arcpy
cursor = arcpy.da.SearchCursor(fc, ['fieldA', 'fieldB'])
for row in cursor:
    print(row)
//第二种最好采用
import arcpy
with arcpy.da.SearchCursor(fc, ['fieldA', 'fieldB']) as cursor:
    for row in cursor:
        print(row)

  1. SQL中where条件书写问题:
          SQL 表达式中使用的字段分隔符因所查询数据的格式而异。例如,文件地理数据库(也可以不需要)和 shapefile 使用双引号 (" "),个人地理数据库使用方括号 ([ ]),企业级地理数据库不使用字段分隔符。该函数可免去为确保与 SQL 表达式一起使用的字段分隔符的正确性而进行的推测过程;
    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/9ae517d146ef4406ad677ebf0ffd3fa9.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qKF6YeM6Zuq5bGxR0lT,size_10,color_FFFFFF,t_70,g_se,x_16)
    (1)第一种:
improt arcpy
fc="c:/Data/study.gdb/roads"
qry = "SVCAREA" = 'North'//shapefile、文件地理数据库、ArcSDE地理数据库
cursor=arcpy.da.SearchCursor(fc,["NAME","CLASSCODE"],qry ) 
for row in cursor:
	print row[0]
del row
del cursor

(2)第二种:

improt arcpy
fc="c:/Data/study.gdb/roads"
qry = [SVCAREA] = 'North'//个人地理数据库(*.mdb)
cursor=arcpy.da.SearchCursor(fc,["NAME","CLASSCODE"],qry ) 
for row in cursor:
	print row[0]
del row
del cursor

(3)第三种:包含第一第二两种用法.

improt arcpy
fieldname="SVCAREA"
fc="c:/Data/study.gdb/roads"
delimfield=arcpy.AddFiledDelimiters(fc,fieldldname)
cursor=arcpy.da.SearchCursor(fc,["NAME","CLASSCODE"],delimfield+"= 'LONGWOOD'") 
for row in cursor:
	print row[0]
del row
del cursor
  1. 模糊查询语句在不同数据类型的中表达不一样:
          除了个人地理数据库,其他数据集(shapefile、文件地理数据库、ArcSDE地理数据库)使用百分号(%)字符表示多个字符而下划线(_)字符来表示单个字符。如果你当前使用的是个人地理数据库,那么星号(*)字符用于匹配多个字符而问号(?)字符来匹配单个字符。
posted @ 2022-06-19 20:37  XYSGIS  阅读(142)  评论(0)    收藏  举报