Arcgis-Arcpy
持续更新
安装
基础介绍
地理信息系统(geography information system,GIS)是在计算机硬件支持下,对整个或者部分地球表层空间中的有关地理分布数据进行采集,存储,管路,运算,分析,显示和描述的技术系统。地理信息系统处理和管理的对象是多种地理空间实体数据及其关系,包括空间定位数据,图形数据,遥感图像数据,属性数据,主要用于分析和处理一定地理区域内分布的各种现象和过程,解决复杂的规划,决策的管理问题。(有些官方,看看就行)
其他:略(嘿嘿嘿,可以去看看官方文档,本文主要讲数据变换,平时的基础操作只能熟能生巧了)
- 数据变换:对数据进行放大,缩小等几何位置,形状和方位的改变等操作。
方法 | 描述 | 操作方法 |
空间校正 | 对于数据进行一些校正处理 | 编辑器|空间校正|设置校正数据|设置校正方法、空间校正 |
橡皮页变换 | 对两个图层或多个图层进行小型的几何校正 | 编辑器|空间校正|设置校正数据|设置校正方法|橡皮页变换 |
边匹配 | 创建两个相邻图层的位移连接 | 编辑器|空间校正|设置校正数据|设置校正方法|边捕捉 |
地理配准 | 用于栅格数据的空间位置匹配 | 编辑器|地理配准 |
翻转 | 将栅格数据通过数据中心点的水平轴线 | 数据管理工具|投影和变换|栅格|翻转 |
镜像 | 将栅格数据通过数据中心点的垂直轴线 | 数据管理工具|投影和变换|栅格|镜像 |
重设比例尺 | 将栅格数据按照指定的比例分别沿X轴和Y轴放大或缩小 | 数据管理工具|投影和变换|栅格|重设比例 |
扭曲 | 将栅格数据通过输入的控制点进行多项式变换 | 数据管理工具|投影和变换|栅格|扭曲 |
自学疑惑
- 为什么要进行地理配准
是为了使所有的图像的坐标系统一样,从而在一个坐标系统中更好的显示数据。
- 为什么要建立拓扑关系
拓扑bai检查主要是检查数据的拓du扑关系是否正确且完整,如果通过检查,说明数据有完整的拓扑关系,错误的拓扑关系不存在,比如重复线,相交线的交点是断点等情况。
- 个人地理数据库和文件地理数据库的区别
文件bai地理数据库是ESRI公司的数据库,du存储格式为包含二进制文件的文zhi件夹,存储能力dao1TB,支持任何平台个人地理数据库存储格式为Microsoft Access,存储能力为2GB,只支持Windows平台。
- 为什么要建立数据库
数据组织是在数据采集之后的按照一定的方式和规则对数据进行归并,存储和处理的过程,数据处理的好坏,直接影响到GIS系统的性能。地理数据库是按照层次型的数据对象来组织地理数据,这些数据对象包括对象类(表格),要素类(要素)和要素数据类。
- 数据的符号化和图表化的方式显示的区别和目的
符号化:直接在图像上显示;图表化:单独建立一个图表;共同目的:让数据看起来更清晰明了。
- 怎么从excel里面导入数据
从catalog中的excel里面选择从XY表创建要素类。
- 栅格数据和矢量数据的区别
栅格数据可以是照片,用像元组成,要波段信息;矢量数据是点线面,打开会有属性表。
- 为什么矢量分析和栅格分析可以分析三维空间信息,但是在实际中不能用于三维空间分析
矢量数据模型三维分析方法主要是基于数学分析和图论的思想;栅格数据以矩阵计算为理论基础进行分析。当前,GIS的研究成果和应用系统主要集中于描述二维空间信息,各项技术已较为成熟,但由于二维地理信息系统将实际的三维实体采用二维表示,具有很大的局限性,大量的多维空间信息无法得到利用,因此必须用三维。
- 为什么要建立和验证拓扑关系
拓扑关系本身就是点线,点面,线线,线面,面面之间的关系,进行拓扑验证可以更好的验证他们之间的关系,从而更好的实施操作
- 拓扑错误类型以及好的解决方法
常见错误类型:面不能相互重叠,面不能有缝隙,线不能相交,线不能有悬挂,其他错误
推荐解决方法:
面不能相互重叠:在错误上右键选择 merge,将重叠部分合并到其中一个面里;
面不能有缝隙:在错误上右键选择 create feature,将缝隙部分生成一个新的要素,然后利用editor 下的 merge 把生成的面合并到相邻的一个面里;
线不能相交:部分重叠可以在错误上右键选择 subtract 去除重复部分;
线不能有悬挂:根据实际情况对线进行修改消除悬挂线;
其他错误:。
Arcgis和数据库连接
Arcpy
基础了解
- 判断文件是否存在
>>> result = arcpy.Exists(r'E:\arcgis 光盘\Chp3\Ex1\Blocks.shp')
>>> print(result)
- 判断矢量数据要素数量
>>> arcpy.GetCount_management(r'E:\arcgis 光盘\Chp3\Ex1\Blocks.shp')
>>> <Result '219'>
地图文档部分:即mxd
英语 | 中文 | 英语 | 中文 |
map | 地图 | author | 作者 |
mapping | 制图 | summary | 小结 |
document | 文档 | description | 描述 |
mapDocument | 地图文档 | default | 默认 |
properties | 属性 | relative | 相对 |
current | 当前 | path | 路径 |
title | 标题 | relativepaths | 相对路径 |
- 引用和查看地图文档
>>> import arcpy
>>> import arcpy.mapping as mp
>>> mxd = mp.MapDocument('current') # current表示是当前地图文档
>>> mxd = mp.MapDocument(file) # 查看其它地图文档
- API介绍
'''
dir(object):返回当前范围内的变量,方法和定义的类型列表
str.startswith(str, beg=0, end=len(string)):检查字符串是否以指定字符串开头
hasattr(object, name):判断对象是否包含对应的属性
getattr(object, name[,defalut]):返回一个对象属性值
'''
- 修改地图属性
mxd.title = ur’’ | 修改标题 |
mxd.author = ur’’ | 修改作者 |
mxd.credits = ur’’ | 修改单位 |
mxd.relativePaths = False | 修改相对路径 |
- 保存地图文档
地图文档保存API | MapDocument.save() |
地图文档另存为 | MapDocument.saveACopy(filename, {version}) |
换个文件名保存副本 | mxd.saveACopy(ur’’) |
# 修改文档示例
mxd.author = ur''
# 保存文档
mxd.saveACopy(ur'')
数据框部分
英语 | 中文 | 英语 | 中文 |
data | 数据 | extent | 范围 |
frame | 框架 | zoomToSelectedFeatures | 缩放 |
dataFrame | 数据库 | selected | 选中 |
active | 活动的 | feature | 要素 |
activeDataFrame | 当前数据框 | zoomToSelectedFeatures | 缩放至选中要素 |
TOC table of contents | 内容列表 | spatialReference | 空间参考 |
refresh | 刷新 | layer | 图层 |
refreshTOC | 刷新内容列表 | geodatabase | 地理数据库 |
list | 列举 | referenceScale | 参考比例尺 |
General | 常规的 | rotation | 旋转角度 |
zoom | 缩放 | displayUnits | 显示单位 |
CGCS2000 | 中国2000坐标系 | mapUnits | 地图单位 |
- 获取数据框的名称
>>> adf = mxd.activeDataFrame # 获得数据框
>>> print(adf.name) # 数据框名称
- 列举所有数据框
dfs = mp.ListDataFrames(mxd)
for df in dfs:
print(df.name)
- 查看数据框的所有成员
callable(object) -> bool # 检查一个数据框是否可以调用
for i in dir(adf):
if not i.startswith("_") and callable(getattr(adf,i)):
print(i,getattr(adf,i))
- 动态旋转地图
adf.rotation # 数据框旋转角度
acrpy.RefreshActiveView # 刷新活动视角
time.sleep(secs) # 推迟调用线程的运行,运行secs参数,表示进程挂起的时间
- 查看数据框的空间参考
adf = mxd.activeDataFrame
sr = adf.spatialReference # 空间参考
sr.name # 名称
u'CGCS2000_3_Degree_GK_Zone_36' # 高斯投影
- 查看数据框的四至空间范围
ext = adf.extent # 数据框范围
ext.XMin
ext.XMax
ext.YMin
ext.YMax
- 更改数据框显示范围以显示全图
'''
1. 主要任务
将选中要素最大化显示出来
2. 准备工作
用鼠标移动地图,并用鼠标选择钦南区
'''
adf.zoomToSelectedFeatures() # 缩放至选中要素
arcpy.RefreshActiveView() # 刷新活动视角
- 跟踪目标运动
import numpy as np
ext = adf.extent
xs = np.linespace(ext.XMin,ext.XMax,50)
ys = np.linespace(ext.YMin,ext.YMax,50)
xys = zip(xs,ys)
for xy in xys:
x=xy[0]
y=xy[1]
extent = arcpy.Extent(x,y,x,y)
adf.panToExtent(extent)
arcpy.RefreshActiveView()
time.sleep()
图层部分
英语 | 中文 | 英语 | 中文 |
Layer | 图层 | transparency | 透明度 |
len,length | 长度 | source | 来源 |
visiable | 可见性 | extent | 范围 |
description | 描述 | FeatureLayer | 要素图层 |
definition | 定义 | SelectionSet | 选择集 |
query | 查询 | symbology | 符号 |
scale | 比例尺 | label | 标注 |
min,minimum | 最小 | field | 字段 |
max,maximum | 最大 | contain | 包含 |
FID,FeatureID | 要素编号 | definitionQuery | 定义查询 |
- 获取地图内所有图层
lys = mp.ListLayers(mxd) # 获得所有图层
for each in lys:
print(each.name,)
- 获取数据框内所有图层
lys = mp.ListLayers(mxd, data_frame=adf) # 获得所有图层
for each in lys:
print(each.name,)
- 图层定位和模糊查询
lys = mp.ListLayers(mxd, 'mohu*') # 获得所有图层
ly = lys[0]
print(ly)
- 查看图层所有成员
lys = mp.ListLayers(mxd, data_frame=adf) # 获得所有图层
ly = lys[0]
for i in dir(ly):
if hasattr(ly,i) and not i.startswith("_"):
print(i,getattr(ly,i))
- 获取图层四至
lys = mp.ListLayers(mxd) # 获得所有图层
ly = lys[0]
ext = ly.Extent()
print(ext.XMin,ext.XMax,ext.YMin,ext.YMax)
- 点和图层之间的关系
# 验证中心点在图层之内
lys = mp.ListLayers(mxd) # 获得所有图层
ly = lys[0]
ext = ly.Extent()
x0 = (ext.XMin + ext.XMax)/2
y0 = (ext.YMin + ext.YMax)/2
p0 = arcpy.Point(x0,y0)
ext.contain(p0)
# 测试随机点和图层的关系
- 平移或缩放图层
adf = mxd.activeDataFrame # 获得数据框
lys = mp.ListLayers(mxd) # 获得所有图层
ly = lys[0]
extent = ly.Extent()
adf.panToExtent(extent) # 平移
arcpy.RefreshActiveView()
adf.extent = extent # 缩放
- 平移或缩放某一选择范围
adf = mxd.activeDataFrame # 获得数据框
lys = mp.ListLayers(mxd) # 获得所有图层
ly = lys[0]
adf.extent = ly.getSelectedExtent() # 图层的选择范围
adf.panToExtent(extent) # 平移
arcpy.RefreshActiveView()
adf.extent = extent # 缩放
arcpy.RefreshActiveView()
- 选择图层的数据集
adf = mxd.activeDataFrame # 获得数据框
lys = mp.ListLayers(mxd) # 获得所有图层
ly = lys[0]
adf.extent = ly.getSelectionSet()
- 图层的定义查询
lys = mp.ListLayers(mxd) # 获得所有图层
ly = lys[0]
qujie.definitionQuery # 获取定义查询
qujie.definitionQuery = '查询条件' # 设置定义查询
arcpy.RefreshActiveView()
qujie.definitionQuery = '' # 清除定义查询
arcpy.RefreshActiveView()
空间数据源
英语 | 中文 | 英语 | 中文 |
DataSource | 数据源 | env | 环境 |
DataLink | 数据链接 | replace | 替换 |
Workspace | 工作空间 | overwrite | 覆盖 |
- 获取数据源和属性
lyr.isFeatureLayer # 是否要素图层
print(lyr.dataSource) # 数据源,返回路径
print(lyr.datasetName) # 数据集名称
- 获取数据源的工作空间,数据集的关系
# 工作空间
import os
print(os.path.split(lyr.dataSource)[0])
print(lyr.workaspacePath)
# 数据名
print(os.path.split(lyr.dataSource)[1])
# 文件命名
print(lyr.datasetName)
# 文件类型
print(os.path.splitext(lyr.dataSource))
- 添加数据
arcpy.env.workspace = r'工作路径' # 工作空间
layer = mp.Layer('区界.shp') # shp生成layer
mp.ADDLayer(mxd.activeDataFrame,layer) # 添加图层
- 插入数据
layers = mp.ListLayers(mxd)
refLyr = layers[1]
print(refLyr.name) # 参考图层名称
arcpy.env.workspace = r'工作路径' # 工作空间
layer = mp.Layer('区界.shp') # shp生成layer
mp.InsertLayer(mxd.activeDataFrame,refLyr,layer,"位置(bottom)") # 添加图层
- 保存图层
layer = mp.ListLayers(mxd)[1] # 定位图层
lyr = r'路径' # 添加图层
arcpy.env.overwriteOutput = True # 覆盖输出
layer.saveACopy # 保存图层
- 替换数据源
lyr.replaceDtaSource('','','')
文件制图
英语 | 中文 | 英语 | 中文 |
export | 导出 | print | 打印 |
JPEG,Joint Photographic Experts Group | 联合图像专家组 | PDF,Portable Document Format | 便携式文档格式 |
ExportToPDF | 导出至pdf | ExportToJPEG | 导出至JPG |
- 数据框导出为pdf文件
dfPDF = r'路径' # 目标jpg路径
mp.ExportToPDF(mxd,dfPDF,mxd.activeDataFrame) # 导出图片
- 数据框导出为jpeg文件
dfjpeg = r'路径' # 目标jpg路径
mp.ExportToJPEG(mxd,dfjpeg,mxd.activeDataFrame) # 导出图片
- 地图文档导出为图片
dfjpeg = r'路径' # 目标jpg路径
mp.ExportToJPEG(mxd,dfjpeg) # 导出图片
- 单文件批量出图
lyr.definitionQuery = '条件' # 图层过滤
extent = lyr.getExtent() # 获取图层范围
adf.extent = extent # 设置数据框范围
arcpy.RefreshActiveView()
dfjpeg = r'路径' # 目标jpg路径
mp.ExportToJPEG(mxd,dfjpeg,mxd.activeDataFrame) # 导出图片
lyr.definitionQuery='' # 消除过滤
后续更新