前言:
本系列Arcpy实验包含以下内容:
- 提取江苏省县区级行政区域的质心,形成一个点类型shape文件,至少含有县区名称属性;
- 将2021年各区数据整理为excel数据,两列,一列为县区名称,一列为2021年县区常住人口;
- 编写一个脚本工具,将县区常住人口数据作为属性值附加到县区质心点数据上;
- 编写脚本工具,对江苏2021年常住人口数据进行插值,插值方法任选;
- 制作一个绘图模版,绘制江苏各地级市2021年人口分布图(注意是地级市,需要用地级数据分别裁剪人口分布数据)。
Arcpy 从Excel(县区常住人口数据)获取属性值并附加到质心点数据上
通过之前的文章,已经有了江苏省县区级行政区域的质心点矢量shape文件,并且给这个点矢量数据增加了人口数量属性,现在需要对其进行插值,以期得到江苏2021年人口分布图。
Arcmap中的插值方法有很多,不同插值方法需要设置的参数不一样,对应于代码如何写,其中的参数有哪些可能对我们编写代码是一个挑战。
解决办法也很简单,直接从Arcmap中复制代码片段。大致步骤为先在软件上试运行一次,然后在结果窗口中,在当前会话找到刚刚的操作,右键-复制为 Python 代码片段,最后根据实际情况略微调整参数即可,这种方法同样适合其它工具。
04-人口数量点数据插值
【目的要求】:
编写脚本工具,对江苏2021年常住人口数据进行插值,插值方法任选。
【主要思路】:
插值方法主要是其参数的设置,可以先在Arcmap中找到对应插值工具试运行一次。
接着在菜单栏:【地图处理】-【结果】的当前会话中找到试运行记录,右键-【复制为python代码片段】,然后根据实际情况略微修改代码。
【实现步骤】:
- 为了将插值结果自动添加到当前图层查看效果,先定义添加文件到当前图层的函数add_currentMxd()
- 插值需提前设置掩膜文件,这样的结果才不会是矩形,这一步相当于在环境设置进行掩膜。
- IDW插值-反距离权重法与Kriging插值-克里金法的参数设置:
- 人口数据插值脚本工具的界面如下所示:
【实验结果】:
【脚本使用说明】:人口数据进行插值脚本工具,需要输入属性表中含有人口数量的质心点数据,设置输出文件夹路径,掩膜文件。在插值方法中可自由选择IDW、Kriging、Spline插值方法,默认使用IDW插值方法。
填写相关参数,在Arcmap中运行该脚本,IDW、Kriging、Spline插值结果分别如下所示:
源代码(仅供参考):
# -*- coding: GB2312 -*-
# (4)编写脚本工具,对江苏2021年常住人口数据进行插值,插值方法任选;
import arcpy
# 定义添加文件到当前图层的函数add_currentMxd()
def add_currentMxd(fileDir):
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
addLayer = arcpy.mapping.Layer(fileDir)
arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
# 图层刷新
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd
arcpy.env.overwriteOutput = True
# 文件路径设置
pointFile = arcpy.GetParameterAsText(0) # 插值点文件
outFolder = arcpy.GetParameterAsText(1) # 输出文件夹
outFile = outFolder + "/JS_County_Point3_"
# 环境设置
maskFile = arcpy.GetParameterAsText(2) # 掩膜文件
arcpy.env.workspace = "D:/Geo_Task/WorkSpace" # 设置工作空间
arcpy.env.mask = maskFile # 设置掩膜文件
arcpy.env.extent = maskFile # 设置处理范围
arcpy.CheckOutExtension("Spatial")
IDW_Flag = arcpy.GetParameterAsText(3)
Kriging_Flag = arcpy.GetParameterAsText(4)
Spline_Flag = arcpy.GetParameterAsText(5)
# 插值参数设置
zField = "Num" # 插值字段:Z值字段
# 输出文件名称设置
IDW_outFileName = "IDW_1.tif"
Kriging_outFileName = "Kriging_1.tif"
Spline_outFileName = "Spline_1.tif"
# 输出像元大小设置
cellSize = "1.74676370500002E-02"
# IDW插值-反距离权重法
if IDW_Flag == 'true':
arcpy.AddWarning("IDW插值中……")
arcpy.gp.Idw_sa(pointFile, # 输入点要素
zField, # Z值字段
# 输出栅格路径
outFile + IDW_outFileName,
cellSize, # 输出像元大小
"2",
"VARIABLE 12", # 搜索半径点数
"")
arcpy.AddMessage("IDW插值完成!")
add_currentMxd(outFile + IDW_outFileName)
# Kriging插值-克里金法
if Kriging_Flag == 'true':
arcpy.AddWarning("Kriging插值中……")
arcpy.gp.Kriging_sa(pointFile,
zField,
outFile + Kriging_outFileName,
# 半变异模型-球面函数,步长大小
"Spherical 0.015495",
cellSize,
"VARIABLE 12", # 搜索半径点数
"")
arcpy.AddMessage("Kriging插值完成!")
add_currentMxd(outFile + Kriging_outFileName)
# Spline插值-样条函数法
if Spline_Flag == 'true':
arcpy.AddWarning("Spline插值中……")
arcpy.gp.Spline_sa(pointFile,
zField,
outFile + Spline_outFileName,
cellSize,
"TENSION", # 样条函数类型
"0.1", # 权重
"12" # 点数
)
arcpy.AddMessage("Spline插值完成!")
add_currentMxd(outFile + Spline_outFileName)
arcpy.AddMessage("插值结束!")
arcpy.AddWarning("生成文件已添加至当前图层!")
结语
总结
本文主要介绍了如何利用Arcpy对点矢量数据进行插值,介绍了如何从Arcmap中复制代码片段的方法。
下文预告:
获取了江苏省的人口分布图,下面就是出图了。
接下来的文章会介绍如何绘制江苏各地级市2021年人口分布图并批量导出各地级市的人口分布图。(注意是地级市,需要用地级数据分别裁剪人口分布数据)。
如果对你有所帮助,还请顺手点个赞,感谢你看到这,祝你生活愉快!