- 一、初识ArcPy
- 1.1 什么是ArcPy
- 1.2 在ArcMap中打开Python窗口
- 1.3 ArcMap中Python程序的实现
- 1.3.1 Python版本的查看与安装路径
- 1.3.2 ArcPy简单应用示例
- 1.3.3 ArcMap中Python常用设置
- 1.4 练习
- 二、通过ArcPy查看地图文档信息
- 2.1 地图文档的认识
- 2.2 获取和查看当前地图文档
- 2.3 获取和查看文件系统的地图文档
- 2.4 查看与修改地图文档的所有属性
- 2.5 地图文档属性的保存
- 2.6 提供所有版本的地图文档
一、初识ArcPy
1.1 什么是ArcPy
ArcPy是建立在地理处理框架上的Python包,这里主要是基于Python2来实现的。ArcPy提供了有用、高校的方式,用来完成空间数据管理、空间分析、数据转换和制图自动化的功能。
在ArcGIS的Python窗口中的功能非常强大,有智能提示,自动完成,通过拖放生成代码(工具箱拖放、数据拖放、图层拖放)。
ArcPy学习中主要使用的中英文单词
英文 | 中文 |
IDE (Integrated Development Environment) | 集成开发环境 |
IDLE (Integrated Development and Learning Environment) | 集成开发和学习环境 |
Geoprocessing | 地理处理 |
Save As | 另存为 |
count | 数量 |
exists | 存在 |
format | 格式 |
clear | 清除 |
theme | 主题 |
1.2 在ArcMap中打开Python窗口
方法一
方法二
1.3 ArcMap中Python程序的实现
1.3.1 Python版本的查看与安装路径
在ArcMap中编写第一个Python代码
代码的保存
查看arcpy的帮助
查看Python的版本
import sys
print(sys.version)
print(sys.version_info)
查看Python解释器所在路径
import sys
print(sys.exec_prefix)
print(sys.executable)
1.3.2 ArcPy简单应用示例
判断空间数据是否存在
arcpy.Exists(filename) # 判断空间数据是否存在
获取矢量要输的数量
通过拖放工具和数据自动生成代码
1.3.3 ArcMap中Python常用设置
修改背景色等
常用的快捷键
快捷键 | 功能 |
F1 | 查看帮助 |
F2 | 语法检查 |
Shift + 回车键 | 多行输入 |
Control + 回车键 | 多行输入 |
向上键 | 输入历史:上一条记录 |
向下键 | 输入历史:下一条记录 |
鼠标右键 | 更多功能 |
在编写Python脚本时,可以随时按F2进行语法检查。最好在运行前先通过F2检查通过后,再按Enter运行。
1.4 练习
查看打开图层的要素个数
查看shp文件中的要素个数
二、通过ArcPy查看地图文档信息
2.1 地图文档的认识
地图文档(.mxd)是在ArcMap中使用且以文件形式存储在文件系统或数据库的地图,称为ArcMap文档或mxd
地图文档的内容:
- 相关地图图层、页面布局和所有其他地图属性的规范
- 地图中所使用地理信息的显示属性(地图图层的属性和定义、数据框和打印地图的布局等)
- 地图文档在ArcMap中保存、以此来重复使用和共享工作内容
- 通过双击某个地图文档会将其作为新的ArcMap会话打开
地图文档相关术语
英文 | 中文 | 英文 | 中文 |
map | 地图 | author | 作者 |
mapping | 制图 | summary | 小结 |
document | 文档 | description | 描述 |
mapDocument | 地图文档 | default | 默认 |
properties | 属性 | relative | 相对 |
current | 当前 | path | 路径 |
title | 标题 | relativepaths | 相对路径 |
ArcMap中查看地图文档属性
2.2 获取和查看当前地图文档
通过ArcPy代码来引用并查看打开当前地图文档属性
获取地图文档流程
- ArcMap先打开相关地图文档文件
- 导入arcpy包和制图模块arcpy.mapping
- 通过mxd变量,获取当前地图文档信息
# 导入ArcPy包
import arcpy
# 导入制图模块
import arcpy.mapping as mp
# 查看地图文档
mxd = mp.MapDocument("current")
查看地图文档属性
- 通过mxd对象的属性成员,查看对应的属性,重要的属性有title、author和relativePaths
mxd.title # 查看标题信息,返回u'',u为Unicode编码,''为字符串信息
mxd.author # 查看作者信息,返回u'',u为Unicode编码,''为字符串信息
mxd.relativePaths # 查看是否保存为相对路径,返回True(是)或者False(否)
2.3 获取和查看文件系统的地图文档
设置地图文档对应文件的路径,通过mxd对象的属性成员,查看对应的属性,与当前地图文档的区别在于就是将current换为文档的路径.mxd即可。
# 导入ArcPy包
import arcpy
# 导入制图模块
import arcpy.mapping as mp
# 查看地图文档
file = ur"文件名.mxd" # 如果有中文则要加u,无中文则不需要
mxd = mp.MapDocument(file)
mxd.title # 查看标题信息,返回u'',u为Unicode编码,''为字符串信息
mxd.author # 查看作者信息,返回u'',u为Unicode编码,''为字符串信息
mxd.relativePaths # 查看是否保存为相对路径,返回True(是)或者False(否)
2.4 查看与修改地图文档的所有属性
相关API介绍:
dir(object)
# 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表
# 如果参数包含方法__dir__(),则该方法被调用,否则该方法最大限度的收集参数信息
str.startswith(str,beg=0,end=len(str))
# 用于检查字符串是否是以指定子字符串开头,返回True(是)、False(否)
# 如果beg和end指定特定的值,则在指定范围内检查
hasattr(object,name)
# 用于判断对象是否包含对应的属性
getattr(object,name[,default])
# 用于返回一个对象的属性值
地图文档属性的修改,如果有中文要变为u"name"
# 修改作者信息
mxd.author = "name"
# 修改标题信息
mx.title = "name"
# 修改单位信息
mxd.credits = "name"
# 修改是否用相对路径
mxd.relativePaths = False
# 其它的信息也可通过此方式修改
# 同时查询多个已知属性名称,通过放入列表中然后遍历列表获取
attrs = ["author","title","credits"]
for i in attrs:
print(i,getattr(mxd,i))
获取不含有特殊对象的所有属性,以下划线开头的为ArcMap的特殊属性
# 具体实现在2.3节的基础上
# dir(mxd)获取地图文档的所有属性,通过for循环对每一个属性来进行判断
for attr in dir(mxd):
# 检查是否以下划线开头,如果是以下划线开头则说明是特殊的属性(成员),就不进行打印
# 同时判断地图文档是否有这个属性,如果不是这个属性则不进行打印
if not attr.startswith("_") and hasattr(mxd,attr):
print(attr,getattr(mxd,attr))
2.5 地图文档属性的保存
# 地图文档保存API,会覆盖原来的属性值
MapDoucment.save()
# 地图文档另存为API,不会覆盖之前的内容,{version}尽量低版本,也可不添加版本号
MapDoucment.saveACopy(filename,{version})
确认是否更新
- 打开保存的地图文档,手动查看地图文档属性即可,确认filePath,title,author,dateSaved,relativePaths是否更新
2.6 提供所有版本的地图文档
代码如下
# 用一个列表来保存需要另存为的地图文档版本
version = ["10.0","10.1","10.2","10.3","10.4","10.5","10.6"]
path = r"D:\具体路径"
for V in version:
filepath_name = path + r"\保存的名称" + v + ".mxd"
mxd.saveAcopy(filepath_name,v)