熊猫分布密度制图(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 函数列表 按字母顺序排序的 ...
随机推荐
- 恶意软件开发——内存相关API
一.前言 Windows操作系统的内存有三种属性,分别为:可读.可写.可执行,并且操作系统将每个进程的内存都隔离开来,当进程运行时,创建一个虚拟的内存空间,系统的内存管理器将虚拟内存空间映射到物理内存 ...
- Qt 自定义事件
Qt 自定义事件很简单,同其它类库的使用很相似,都是要继承一个类进行扩展.在 Qt 中,你需要继承的类是 QEvent. 继承QEvent类,你需要提供一个QEvent::Type类型的参数,作为自定 ...
- mpvue 生成字节跳动小程序的问题!!
初始化项目文件 $ vue init mpvue/mpvue-quickstart fuck $ cd fuck $ npm install 这个时候就初始化好了,接下来 $ npm run dev: ...
- Mybatis-Plus - 条件构造器 QueryWrapper 的使用
目录 前言 查询示例 基础代码 QueryWrapper 的基本使用 QueryWrapper 的lambada写法 LambadaQueryWrapper 的使用 LambdaQueryChainW ...
- 🏆【Alibaba工具型技术系列】「EasyExcel技术专题」摒除OOM!让你的Excel操作变得更加优雅和安全
前提概要 针对于后端开发者而言的,作为报表的导入和导出是一个很基础且有很棘手的问题!之前常用的工具和方案大概有这么几种: JXL(Java Excel API 工具服务),此种只支持xls的文件格式, ...
- python 修改图像大小和分辨率
1 概念: 分辨率,指的是图像或者显示屏在长和宽上各拥有的像素个数.比如一张照片分辨率为1920x1080,意思是这张照片是由横向1920个像素点和纵向1080个像素点构成,一共包含了1920x108 ...
- lua中的随机数
Lua 生成随机数需要用到两个函数:math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一个整数 n 作为随机序列种 ...
- java版gRPC实战之六:客户端动态获取服务端地址
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Python中with...as...的用法详解
简介 with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和资源分配释放相关代码统统去掉,简化try-.exc ...
- 【原创】【长期更新】【未完待续】自制vector类型
继<自制string类型>以来的第二篇自制类型的文章.马上要开学了,时间也不多了,争取在今年写完吧. 目录 一,vector类型简单介绍 1.简介 1.1.STL 1.2.vector 2 ...