模块

ArcPy中的模块按照功能进行分类,主要包括:包括数据访问模块 (arcpy.da)、制图模块 (arcpy.mapping)、ArcGIS Spatial Analyst 扩展模块 模块 (arcpy.sa) 以及 ArcGIS Network Analyst 扩展模块 模块 (arcpy.na)。

导入ArcPy

ArcPy存在于模块arcpy中,要想使用ArcPy,必须在使用时导入arcpy:

  1. import arcpy

当然,还有一个必不可少的条件就是需要先打开Liscense。但是打开Liscense也不代表许可有效,我们还可以通过代码检查许可是否有效:

  1. arcpy.CheckProduct("ArcInfo") == "Available"

ArcInfo产品编码名称,指代于 ArcGIS for Desktop Advanced,CheckProduct返回的值是Available,则代表可以使用ArcGIS for Desktop Advanced产品编码名称有如下值:

  • ArcView(等效于 ArcGIS for Desktop Basic 许可)
  • ArcEditor(等效于 ArcGIS for Desktop Standard 许可)
  • ArcInfo(等效于 ArcGIS for Desktop Advanced 许可)
  • Engine
  • EngineGeoDB
  • ArcServer


你可以通过arcpy.ProductInfo()来获取当前产品的编码名称。

环境-arcpy.env

环境主要是指对地理处理结果的一些附属参数,包括工作空间、范围、坐标系等等。这些参数与正常的工具参数是不不同的,环境的设置是全局性的。

环境设置是通过env来设置的,例如设置工作空间:

  1. # 设置工作空间
  2. arcpy.env.workspace = r"C:\Users\YaO\Documents\ArcGIS\Default.gdb"

这样,当读取数据或者创建数据时,如果仅仅指定了文件名,未指定文件所在的目录(文件夹)时,将会从arcpy.env.workspace所在设置的目录中进行进行读取。

arcpy.env有很多属性值,其和ArcGIS Desktop地理处理菜单下的环境设置是相对应的。你可以在https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-classes/env.htm 看到完整的列表,常用一般有extent、workspace、overwriteOutput等。

常用函数

获取元数据-arcpy.Describe

ArcGIS官方对于arcpy.Describe定义是描述一个数据,其实就是获取数据的元数据,例如:数据名、投影、MBR范围等。其定义非常简单:

  1. Describe(value)

只需要你给个value,arcpy九江为你返回一个关于该value相关方元数据信息。对于不同类型的value,其返回值的类型不同。关于返回值的类型,具体可以在https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-functions/arcinfo-item-properties.htm进行查看。

从Describe的返回值获取元数据,只需要访问其属性即可:

  1. desc = arcpy.Describe(xxx)
  2. print(desc.name)
  3. print(desc.spatialReference.name)
  4. print(desc.extent.XMin)

获取所有字段-arcpy.ListFields

arcpy.ListFields是用来查看数据的所有字段名的,其定义如下:

  1. ListFields(dataset, {wild_card}, {field_type})
  1. dataset——字符串,要查看字段的数据源
  2. wild_card——字符串,用来过滤字段名的字符串,可以使用通配符。
  3. field_type——字符串,显示字段的类型其值有以下类型:
  4. All — 返回所有字段类型。这是默认设置。
  5. BLOB —仅返回 BLOB 字段类型。
  6. Date —仅返回日期字段类型。
  7. Double —仅返回双精度字段类型。
  8. Geometry —仅返回几何字段类型。
  9. GlobalID —仅返回 GlobalID 字段类型。
  10. GUID —仅返回 GUID 字段类型。
  11. Integer —仅返回整型字段类型。
  12. OID —仅返回 OID 字段类型。
  13. Raster —仅返回栅格字段类型。
  14. Single —仅返回单精度字段类型。
  15. SmallInteger —仅返回短整型字段类型。
  16. String —仅返回字符串字段类型。

引用自:https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-functions/listfields.htm

arcpy.ListFields返回的是Field对象列表,可以通过其name属性获取字段名,通过type属性获取字段类型。

获取工作空间内所有要素类-arcpy.ListFeatureClasses

arcpy.ListFeatureClasses用于列出工作空间中的要素类,因此在使用此函数前必须先设置arcpy.env.workspace,其定义如下:

  1. ListFeatureClasses({wild_card}, {feature_type}, {feature_dataset})
  1. wild_card——字符串,用来过滤字段名的字符串,可以使用通配符。
  2. feature_type——字符串,要素类型,包括以下值:
    • Annotation —仅返回注记要素类。
    • Arc —仅返回弧(或线)要素类。
    • Dimension —仅返回尺寸要素类。
    • Edge —仅返回边要素类。
    • Junction —仅返回交汇点要素类。
    • Label — 仅返回标注要素类。
    • Line —仅返回线(或弧)要素类。
    • Multipatch —仅返回多面体要素类。
    • Node —仅返回节点要素类。
    • Point —仅返回点要素类。
    • Polygon —仅返回面要素类。
    • Polyline —仅返回线(或弧)要素类。
    • Region —仅返回区域要素类。
    • Route —仅返回路径要素类。
    • Tic —仅返回控制点要素类。
    • All — 工作空间中的所有数据集。这是默认值。
  3. feature_dataset——字符串,若指定,则限制返回到要素数据集的要素类。若留空,则在工作空间中将仅返回独立要素类。

    删除利器-arcpy.Delete_management

    如果我们需要删除shapefile,直接使用python来删除可能会比较麻烦。shapefile包括一组文件,至少包括主文件.shp、索引文件.shx、属性文件.dbf。因此,如果我们想要删除一个shapefile,就要把这些文件全部删除,通过python的os模块就需要一个一个文件的删除。如果使用arcpy.Delete_management来实现就会比较简单,使用arcpy.Delete_management仅需要指定.shp文件路径即可。arcpy.Delete_management的定义如下:

    1. arcpy.Delete_management(out_data, data_type)

    其中,in_data是指要删除的要删除数据,如果我们要删除某个shapefile,则只需要如下使用即可:

    1. arcpy.Delete_management(r"x:\folder\a.shp")

    如果in_data为目录,则整个目录都将被删除。arcpy.Delete_management还可以删除内存工作空间的的数据集:

    1. arcpy.Delete_management("in_memory")

    坐标系对象-arcpy.SpatialReference

    对用空间数据而已,没有坐标系所有的几何坐标信息都没有意义。arcpy声明一个坐标系使用arcpy.SpatialReference函数:

    1. SpatialReference({item})

    item有三种可选类型的值:

  4. 坐标系名,例如arcpy.SpatialReference('WGS 1984')

  5. 投影文件 (.prj),例如arcpy.SpatialReference(r"x:\folder\a.prj")
  6. 使用坐标系工厂代码(或权限代码)代码,例如:arcpy.SpatialReference(4326)


关于第三点,个人觉得这个代码就是EPSG代码,使用4326、3857、4490分别声明一个坐标系,然后获取其name属性,得到如下结果:

  1. >>> arcpy.SpatialReference(4326).name
  2. u'GCS_WGS_1984'
  3. >>> arcpy.SpatialReference(3857).name
  4. u'WGS_1984_Web_Mercator_Auxiliary_Sphere'
  5. >>> arcpy.SpatialReference(4490).name
  6. u'GCS_China_Geodetic_Coordinate_System_2000'

而4326、3857、4490则正是WGS 1984坐标系、Web墨卡托投影和中国大地2000坐标系。EPSG代码则可以在epsg.io上进行搜索。

此外,如果我们再使用arcpy的工具时,如果想要指定一个坐标系与现有数据的坐标系一致,可以直接将现有的数据赋值过去,arcpy可以这个数据中获取到坐标系,例如:

  1. arcpy.CreateFeatureclass_management(dir_name, out_name=new_shp_name, geometry_type='Point', spatial_reference= r'x:\folder\a.shp')