熊猫分布密度制图(ArcPy实现)
一、背景
大熊猫是我国国家级珍惜保护动物,熊猫的生存必须满足一定槽域(独占的猎食与活动范围)条件。因此,科学准确的分析熊猫的分布情况,对合理制定保护措施和评价保护成效具有重要意义。
二、目的
通过练习,熟悉ArcGIS密度制图函数的原理及差异性,掌握如何根据事迹采样数据特点,结合ArcGIS提供的密度制图功能和其它空间分析,制作符合要求的密度图。
三、要求
1)熊猫活动具有一定的槽域范围,一个槽域范围只有一个或一对熊猫,假设熊猫槽域半径为5000m,理论上最大槽域面积为3.1450005000
2)虽然一个采样点代表一个熊猫,但由于熊猫的生存具有确定槽域特征,不同的采样点具有不同的空间控制面积。假定熊猫活动范围分布满足以采样点为中心的泰森多边形,如何将这一信息加入密度分布图是本练习的重点。
3)在野外实采的熊猫活动足迹数据的基础上,以每个熊猫槽域范围为权重,运用ArcGIS 中的区域分配功能和密度制图功能制作该地区熊猫分布密度图。
四、数据
野外实采的熊猫活动足迹数据,一个足迹代表一个熊猫曾在此处活动过,相同足迹只记载一次。(\Chp8\Ex3)
五、计算原理
首先利用栅格数据空间分析模块提供的区域分配功能提取熊猫的槽域范围,然后用理论最大域面积(假定是半径为5km的圆,面积为3.141592755 km²)除以所提取的熊猫实际槽域面积,作为采样点的加权值(记为Power字段),生成熊猫分布密度图。
解题思路:
1)欧式分配,求出每个熊猫的实际控制范围
2)添加字段area,计算每个熊猫的实际控制面积:栅格数栅格边长栅格边长
3)添加power字段,计算权重:理论上最大槽域面积/栅格数栅格边长栅格边长
4)利用power字段进行核密度分析
操作流程图:

六、模型构建器

七、ArcPy实现
# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# 8-3熊猫密度图.py
# Created on: 2021-10-10 15:53:34.00000
# (generated by ArcGIS/ModelBuilder)
# Description:
# ---------------------------------------------------------------------------
# Import arcpy module
import arcpy
import os
path = raw_input("请输入数据所在的绝对路径:").decode("utf-8")
paths = path + "\\result"
if not os.path.exists(paths):
os.mkdir(paths)
# Local variables:
Xmpoint = path + "\\Xmpoint.shp" # 数据
Output_distance_grid = "Distance" # 输出距离栅格,格网基本名称的长度不能超过了 13
Output_direction_grid = "Direction" # 输出方向栅格,格网基本名称的长度不能超过了 13
Output_inverse_grid = "Inverse" # 输出反向栅格,格网基本名称的长度不能超过了 13
EucAllo_shp = "EucAllo_shp" # 欧式分配输出要素
KernelD_shp = "KernelD_shp" # 核密度分析输出要素
constant = "10000000"
Distribution_map = "密度分布图" # 格网基本名称的长度不能超过了 13
# Set Geoprocessing environments
print "Set Geoprocessing environments"
arcpy.env.workspace = paths # 工作空间
arcpy.env.scratchWorkspace = paths # 临时工作空间
arcpy.env.extent = "15153765.390904 -140950.922884 15227181.528600 -92036.748014" # 处理范围,左下右上
# Process: 检查属性表字段是否含有"area", "power",有则删除
fields = arcpy.ListFields(Xmpoint)
for field in fields:
if fields.name.lower() in ["area", "power"]:
arcpy.DeleteField_management(Xmpoint, fields.name)
# Process: 欧氏分配
print "Process: 欧氏分配"
arcpy.gp.EucAllocation_sa(Xmpoint, EucAllo_shp, "5000", "", "500", "ID", Output_distance_grid, Output_direction_grid, "PLANAR", "", Output_inverse_grid)
# Process: 添加字段
print "Process: 添加字段"
arcpy.AddField_management(EucAllo_shp, "Area", "LONG", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")
# Process: 计算字段
print "Process: 计算字段"
arcpy.CalculateField_management(EucAllo_shp, "Area", "[COUNT] * 500 *500", "VB", "")
# Process: 连接字段
print "Process: 连接字段"
arcpy.JoinField_management(Xmpoint, "ID", EucAllo_shp, "Value", "Area")
# Process: 添加字段 (2)
print "Process: 添加字段 (2)"
arcpy.AddField_management(Xmpoint, "power", "LONG", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")
# Process: 计算字段 (2)
print "Process: 计算字段 (2)"
arcpy.CalculateField_management(Xmpoint, "power", "3.1415927*5000*5000 / [Area]", "VB", "")
# Process: 核密度分析
print "Process: 核密度分析"
arcpy.gp.KernelDensity_sa(Xmpoint, "power", KernelD_shp, "500", "", "SQUARE_MAP_UNITS", "DENSITIES", "PLANAR")
# Process: 乘
print "Process: 乘"
arcpy.gp.Times_sa(KernelD_shp, constant, Distribution_map)
rasters = arcpy.ListRasters()
for raster in rasters:
if u"分布图" not in raster:
print u"正在删除{}".format(raster)
arcpy.Delete_management(raster)
print "运行完毕~~~"
注意看注释提示!
八、结果

实验结束 byebye~
熊猫分布密度制图(ArcPy实现)的更多相关文章
- arcpy.mapping实战-专题图制图自动化
arcpy.mapping实战-专题图制图自动化 by 李远祥 最初对arcpy.mapping感兴趣是因为一次大规模的专题地图调整的需要,由于某某单位利用ArcEngine编写的专题图出图系统,出现 ...
- arcpy.mapping常用四大件-StyleItem
arcpy.mapping常用四大件-StyleItem by 李远祥 StyleItem 笔者将其归类到arcpy.mapping的四大件当中,主要是因为它的独特之处,就是其能力是直接读取.styl ...
- arcpy.mapping常用四大件-MapsurroundElement
arcpy.mapping常用四大件-MapsurroundElement by 李远祥 在arcpy.mapping 中,除了数据入口MapDocument.图层Layer之外,另一重要的角色就是M ...
- arcpy.mapping常用四大件-Layer
arcpy.mapping常用四大件-Layer by 李远祥 图层是地图里面非常重要的组成,几乎所有的制图显示都与图层有关.首先它是连接数据与符号渲染的重要桥梁,其次在出版地图中,图层又与图例关联在 ...
- ArcGIS制图技巧系列(2)地形渲染
ArcGIS制图技巧系列(2)地形渲染 by 李远祥 DEM数据是常见的地形数据,在GIS常规的制图中,DEM一直扮演着增强效果.由于带有高程值,DEM在很多情况下都在三维中显示,但这里主要介绍的是在 ...
- 使用python制作ArcGIS插件(3)ArcPy的使用说明
使用python制作ArcGIS插件(3)ArcPy的使用说明 by 李远祥 ArcPy 是一个以成功的 arcgisscripting 模块为基础并继承了 arcgisscripting 功能进而构 ...
- ArcPy开发教程2-管理地图文档1
联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com ArcPy开发教程2-管理地图文档1 第二次课:2019年2月26日上午第二节 讲解: 地图文档:Map docume ...
- 【284】◀▶ arcpy.da & arcpy 数据访问模块
使用游标访问数据 数据访问模块 (arcpy.da) 参考: ArcGIS Python编程案例(9)-ArcPy数据访问模块 读取几何 写入几何 使用 Python 指定查询 01 da.Sea ...
- 【281】◀▶ arcpy.mapping 常用类说明
arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...
随机推荐
- 1TB是多大?
TB是计算机的存储单位,用来描述计算机的存储容量.另外还有GB.MB.KB.B.就像长度单位米.分米.厘米.毫米一样,它们之间有换算关系: 1KB = 1024B 1M = 1024KB 1GB = ...
- rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台
rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...
- centos6.10下安装mysql8.0.16root密码修改的坑
上图截取别人的自己懒得弄,检查自己的linux是否有安装就按上图做就行了 接下来是我的干货 mysql8.0安群策略对密码设置很严格规则:大小写加数字和特殊字符串 使用yum安装mysql 后 my. ...
- for in和for of的简单区别
//for in可以遍历数组和对象,但是for of只能遍历数组,不可以遍历对象 var arr = [1,4,5,6,7,8]; var obj = { name:'za', age:19, say ...
- Redis笔记(一)
redis:1.什么是缓存? mybatis一级缓存和二级缓存 mybatis的一级缓存存在哪? SqlSession,就不会再走数据库 什么情况下一级缓存会失效? 当被更新,删除的时候sqlsess ...
- 20200713晚 noip14
考场 很紧张,上午考太烂了 开场看到"影魔",想起以前看过(但没做),心态爆炸,咆哮时被 hkh diss 了 T1 一开始想建边跑最长路,每个点在记录一下 \(\min\{a\} ...
- Intel® QAT加速卡之加密、哈希操作流程和示例
Intel QAT 加密API介绍 文章主要讲述了Intel QAT 加密API接口的说明,以及多种应用场景下的使用方法. 文章目录 Intel QAT 加密API介绍 1. 概述 1.1 会话(se ...
- 如果还是看不懂container_of()函数,那算我输
在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义 ...
- Ubuntu / CoreOS修改DNS配置
不要直接手动修改文件 /etc/resolv.conf 安装好Ubuntu之后设置了静态IP地址,再重启后就无法解析域名.想重新设置一下DNS,打开/etc/resolv.conf cat /etc/ ...
- throw关键字
1.基础用法 2.方法中加合法校验,告知方法的调用者 数组越界判断 3.一切皆为对象,创建的是运行期对象,则可以不处理(throws/try catch),直接交给JVM处理(打印并终止程序) 4.O ...