arcpy自动制图实战(arcpy.mapping迁移至arcpy.mp)(转)

摘要:
许多关于arcpy自动映射的文章也由许多领导者撰写,但搜索到的许多文章都是使用arcpy开发的。映射API和arcpy。映射基于ArcGIS Desktop的mxd地图文档。有关arcpy.mapping迁移到arcpy.mp的详细说明,请访问官方网站:从arcpy.maping迁移到ArcGISProarcpy.mappiing主要处理。mxd地图文档,而arcpy.mp主要处理。由pro创建的aprx项目文件。Arcpy.mp在Arcpy.mapping的基础上添加和更新了许多接口。这里有一个简单的栗子:我有五个省的行政边界shp数据,并使用arcpy.mapping和arcpy.mp自动生成省边界地图。

在很多GIS项目中会遇到自动制图的需求,第一时间想到的就是esri强大的arcpy。关于arcpy自动制图的文章也有很多大佬写过,但搜了很多文章都是利用arcp.mapping API开发的,而arcpy.mapping是基于ArcGIS Desktop的mxd地图文档进行制图的。要知道,强大的esri已经将桌面产品更新至pro好几代了,在埋头拉车时也要跟近技术哈。

有关arcpy.mapping迁移至arcpy.mp的详细说明请前往官网查看:从 arcpy.mapping 迁移至 ArcGIS Pro

arcpy.mapping主要是对.mxd地图文档进行处理,而arcpy.mp主要是对pro创建的.aprx工程文件进行处理。arcpy.mp在arcpy.mapping的基础上添加和更新了很多接口。但具体是使用.mapping还是.mp还得根据个人需求。

光说不练~来,下面呢我举个简单的栗子: 我这里呢有五个省的行政边界shp数据,分别用arcpy.mapping和arcpy.mp自动制作省级边界图。

先理一下思路,我是这样想的,先用某个省的数据制作.mxd地图文档和.aprx工程文件,用同一个模板,然后替换图层数据源,最后出图。emmm~~~听起来好简单,那就操作起来吧!

arcpy.mapping自动制图
1. .mxd制图模板
怎么用arcmap制作.mxd地图文档这项技能作为一个搞GIS的应该没的说,看看我做的一个粗糙的.mxd布局模板。

仔细看上图,每个省的专题图标题肯定不同,这里我还加了制图日期,所以要注意,在制作模板时,将标题和制图日期的文本框元素名称要做以修改,以便于区分和代码实现内容的修改。

2. 代码实现图层数据源的修改和地图相关内容的修改
这里我不多说,直接码代码,相关说明见注释。

#coding=utf-8
import arcpy, os
from datetime import datetime
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

path = u"E:/省份"
names = []
#遍历.shp文件名
file_list = os.listdir(path)
for file in file_list:
if os.path.splitext(file)[1] == ".shp":
names.append(file)

#加载地图文档
mxd_path = u"E:/省份/City.mxd"
mxd = arcpy.mapping.MapDocument(mxd_path)
#获取图层
layer = arcpy.mapping.ListLayers(mxd, "省份")[0]
for name in names:
#修改数据源
layer.replaceDataSource(path, "SHAPEFILE_WORKSPACE", name[0:3])
#更新布局视图范围
df = arcpy.mapping.ListDataFrames(mxd)[0]
df.extent = layer.getExtent()
#修改标题
title = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "标题")[0]
title.text = "%s边界图" % name[0:3]
#修改下标日期
day_title = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "日期")[0]
day_title.text = "%s年%s月%s日制" % (datetime.today().year, datetime.today().month, datetime.today().day)

export_path = "E:/省级边界图/%s.png" % name[0:3]
arcpy.mapping.ExportToPNG(mxd, export_path, resolution=300)

del mxd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
3. 运行结果


arcpy.mp自动制图
1. 准备.aprx工程文件
利用arcgis pro制作地图模板,虽然与arcmap有所不同,但制图,,,就不用说了吧,如果不会,看看培训视频。
这里还是和制作.mxd地图文档时需要注意将标题和制图日期的文本框元素名称要做以修改。
2. 代码实现图层数据源的修改,图层符号和地图相关内容的修改
在这里呢会看到我将图层符号进行了修改,为啥arcpy.mapping中我没做修改呢,这个问题我留到总结时说吧。

import arcpy, os
from datetime import datetime

path = "E:/省份"
names = []
#遍历.shp文件名
file_list = os.listdir(path)
for file in file_list:
if os.path.splitext(file)[1] == ".shp":
names.append(file)

#加载工程文件
aprx_path = "E:/省份/City/City.aprx"
aprx = arcpy.mp.ArcGISProject(aprx_path)
#获取图层
layer = aprx.listMaps("map")[0].listLayers("省份")[0]
R, G, B, A = 255, 210, 110, 100
for name in names:
#修改数据源
replace_dict = {"database": path,
"dataset": name,
"workspace_factory": "Shape File"}
layer.updateConnectionProperties(layer.connectionProperties, replace_dict)

#修改符号颜色
R = R - 20
G = G - 20
B = B + 20
symbol_color = {'RGB' : [R, G, B, A]}
symbol = layer.symbology
symbol.renderer.symbol.color = symbol_color
layer.symbology = symbol

layout = aprx.listLayouts()[0]
#更新布局视图范围
mf = layout.listElements('MAPFRAME_ELEMENT')[0]
mf.camera.setExtent(mf.getLayerExtent(layer))
#修改标题
title = layout.listElements("TEXT_ELEMENT", "标题")[0]
title.text = "%s边界图" % name[0:3]
#修改下标日期
day_title = layout.listElements("TEXT_ELEMENT", "日期")[0]
day_title.text = "%s年%s月%s日制" % (datetime.today().year, datetime.today().month, datetime.today().day)

export_path = "E:/省级边界图/%s.png" % name[0:3]
layout.exportToPNG(export_path, resolution=300)

del aprx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
3. 运行结果


总结
仔细看代码,会发现arcpy.mapping和arcpy.mp里面的类还是发生了很大变化的,但其整体处理思路是一样的。在这里有个很大的也很突出的问题:为啥arcpy.mapping出图后的专题图都是同一个颜色呢,而arcpy.mp可以改变图层颜色呢。
这个问题很重要,在查看arcpy.mapping接口文档时你会发现它对图层符号是不允许赋值更改的。

但是呢,你可以通过StylelItem接口来修改图层符号样式,同时如果对应的symbologyType类型是受支持的,可以通过修改属性对象内部来实现,我这里是单一符号进行符号化的,所以无法更改属性值。
但是arcpy.mp就不一样了,它完全支持图层符号属性的修改,代码中也用到了,symbology不再是只读了,你可以随意修改。

同时arcpy.mapping只能用python2,arcpy.mp只能用python3开发,.aprx工程文件在Linux下是没法解析的,而.mxd文件是可以完美解析的,所以暂时来说arcpy.mapping与arcpy.mp各有用武之地,不过arcpy.mp更加完美。

这篇文章只是对一小部分的内容进行说明,还有很多技术等着发掘哦~~~
————————————————
版权声明:本文为CSDN博主「陌上桑la」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24655701/article/details/88601682

免责声明:文章转载自《arcpy自动制图实战(arcpy.mapping迁移至arcpy.mp)(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇scala 日期格式转换全面解决Html页面缓存的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

iOS-代码修改Info.plist文件

解决方案:1.首先,系统信息Plist文件是只读的,无法写入。目前,我无法亲自保存。官方属性可以被视为readOnly2。那么,如果我们想修改Info,我们该怎么办呢。Plist文件的代码?编辑也在互联网谷歌上做了一些工作,大多数方法是更改信息。plist文件存储在iOS沙盒文件中的一个相同文件中。现在有两个信息。手机中的plist文件。一个是系统信息。pl...

Mysql 查询以某个字符开头的语句

为了查询以某个字符开头的数据,MySQL中经常使用它。常见的语句如下:以查询文章标题以单词“positive”开头的语句为例:使用通配符:1SELECT*FROM`article`,其中title类似于“positive%”;使用左函数:使用字符串截断函数:1SELECT*FROM`article`其中substring(title,1,1)='positi...

【01】如何在XMind中排列自由主题

如何在XMind中安排免费主题。在XMind思维导图软件中,用户可以根据需要添加免费主题。然而,由于自由主题的灵活性,它并不整洁,与需要控制界面有序排列的用户相比,这会造成一定的麻烦。首先选择要组织的所有免费主题,单击,然后在下拉框中选择以安排免费主题。有六种排列方式:左对齐、垂直居中、右对齐、顶部对齐、水平居中和底部对齐。...

(二)Jenkins配置主从节点实例

4.从节点配置和相关配置中从节点机创建jenkins用户,并从一些环境配置中创建jenkings用户的ssh密钥,用于指定上述配置界面的ssh启动模式;在配置启动模式和项目源代码管理中从远程仓库获取源代码;创建Jenkins用户并使用root登录到远程子节点计算机。#adduserjenkins#passwdjenkins生成Jenkins用户的ssh密钥。...

WPF 制作圆角按钮

在程序对应坐置插入以下代码,或是先拖一个按钮控件到窗体中,再替换对应的代码。...

Sublime Text3注册激活和部分配置

此时,我们可以输入要安装的插件包ConvertToUTF85。设置中文对齐方式、字体等//设置默认代码“default_encoding”:“UTF-8”,//显示代码“show_encoding”:true,//显示行号“show_line_endings”:true,//设置字号“font_size”:14,//设置字体对齐方式“font_options...