ArcPy入门(2)-基础
半野

1.模块

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

2.导入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产品编码名称有如下值:

  1. ArcView(等效于 ArcGIS for Desktop Basic 许可)
  2. ArcEditor(等效于 ArcGIS for Desktop Standard 许可)
  3. ArcInfo(等效于 ArcGIS for Desktop Advanced 许可)
  4. Engine
  5. EngineGeoDB
  6. ArcServer

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

3.环境-arcpy.env

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

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

1
`# 设置工作空间 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等。

4.常用函数

4.1.获取元数据-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) print(desc.name) print(desc.spatialReference.name) print(desc.extent.XMin)`

4.2.获取所有字段-arcpy.ListFields

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

1
`ListFields(dataset, {wild_card}, {field_type})`

1.
dataset——字符串,要查看字段的数据源

2.
wild_card——字符串,用来过滤字段名的字符串,可以使用通配符。

3.
field_type——字符串,显示字段的类型其值有以下类型:

-
All — 返回所有字段类型。这是默认设置。

-
BLOB —仅返回 BLOB 字段类型。

-
Date —仅返回日期字段类型。

-
Double —仅返回双精度字段类型。

-
Geometry —仅返回几何字段类型。

-
GlobalID —仅返回 GlobalID 字段类型。

-
GUID —仅返回 GUID 字段类型。

-
Integer —仅返回整型字段类型。

-
OID —仅返回 OID 字段类型。

-
Raster —仅返回栅格字段类型。

-
Single —仅返回单精度字段类型。

-
SmallInteger —仅返回短整型字段类型。

-
String —仅返回字符串字段类型。

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

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

4.3.获取工作空间内所有要素类-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——字符串,若指定,则限制返回到要素数据集的要素类。若留空,则在工作空间中将仅返回独立要素类。

4.4.删除利器-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")`

4.5.坐标系对象-arcpy.SpatialReference

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

1
`SpatialReference({item})`

item有三种可选类型的值:

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

2.
投影文件 (.prj),例如arcpy.SpatialReference(r"x:\folder\a.prj")

3.
使用坐标系工厂代码(或权限代码)代码,例如:arcpy.SpatialReference(4326)

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

1
`>>> arcpy.SpatialReference(4326).name u'GCS_WGS_1984' >>> arcpy.SpatialReference(3857).name u'WGS_1984_Web_Mercator_Auxiliary_Sphere' >>> arcpy.SpatialReference(4490).name 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')`
由 Hexo 驱动 & 主题 Keep
总字数 105.7k 访客数 访问量