(GIS可视化)蜂窝多边形密度图
目录
一、渔网图
在地图可视化中我们一定都见过好看的渔网图:
这个其实很简单,直接用Arcgis的渔网工具就可以 创建。
可创建包含由矩形像元所组成网络的要素类。创建渔网需要三条基本信息:渔网的空间范围、行数和列数以及旋转的角度。要指定这些基本信息可通过多种方法。例如,您可能不确定准确的行数和列数,但却清楚每个矩形像元必须正好为 110 米乘 63 米,并且必须覆盖另一要素类的空间范围。
此工具共包含 11 个参数,您最好将这些参数分成不同的四组:
- 渔网的空间范围
- 渔网的行数与列数以及各单位的高度与宽度
- 渔网的旋转角度
- 定义输出要素类名称和类型(面或线)的参数以及包含各像元质心的可选点数据集
这个很简单,不必多说,下面来看怎么制作好看的蜂窝图:
二、生成蜂窝点
2.1蜂窝密度是干什么的?
你看到这幅图可能会问了,为什么要做这样一幅图,有什么用?
原因就是,现有的分析范围不能满足我们的需求。
比如我们有邯郸市的餐厅数据表,我们想知道邯郸市到底哪个商业区(新天地,新世纪)的餐厅密度大。但是我们现在只有大的行政区表(邯山区,复兴区,丛台区),现在问题来了如何缩小文门的分析范围?
使用蜂窝图(渔网图)就可以完美解决这一问题,我们可以自定义分析区域的大小,从而得到我们想要的图。
2.2蜂窝点算法
传统的渔网点直接使用渔网工具即可,生成出来是正四边形。
我们来看看生成蜂窝点的算法脚本:
#!/usr/bin/env python
"""
为泰森多边形创建六边形点.
ArcGIS 版本: 10.2
"""
import math
import os
import arcpy
def create_thiessen_points(study_area, side_length, output_fc):
# 输入图层
count = int(str(arcpy.GetCount_management(study_area)))
if count == 0:
arcpy.AddError('没有找到该图层' + str(study_area))
return
side_length = float(side_length)
if side_length <= 0:
arcpy.AddError('超出范围')
return
# 计算点范围
dx = 3.0 * side_length
dy = side_length / 2.0 * math.sqrt(3.0)
indent = dx / 2
desc = arcpy.Describe(study_area)
if desc.dataType == "FeatureLayer":
desc = arcpy.Describe(desc.featureClass.catalogPath)
ext = desc.extent
# 计算行列
xmin = ext.XMin - dx
ymin = ext.YMin - dy * 3.0
xmax = ext.XMax + dx
ymax = ext.YMax + dy * 3.0
num_rows = int((ymax - ymin) / dy) + 1
num_cols = int((xmax - xmin) / dx) + 2
# 创建输出图层
spatial_ref = desc.spatialReference
workspace = os.path.dirname(output_fc)
fc_name = os.path.basename(output_fc)
fc = arcpy.CreateFeatureclass_management(
workspace, fc_name, "POINT", "", "", "", spatial_ref)
arcpy.AddMessage('Creating ' + str(num_rows * num_cols) + ' points...')
cursor = arcpy.InsertCursor(output_fc)
feature = None
try:
y = ymin
for r in range(num_rows):
x = xmin - indent / 2
if r % 2 != 0:
x += indent
for c in range(num_cols):
feature = cursor.newRow()
p = arcpy.Point()
p.X = x
p.Y = y
feature.shape = p
cursor.insertRow(feature)
x += dx
y += dy
finally:
if feature:
del feature
if cursor:
del cursor
if __name__ == '__main__':
is_test = False
if is_test:
raise Exception(' Testing not yet implemented')
else:
study_area = arcpy.GetParameterAsText(0)
side_length = arcpy.GetParameterAsText(1)
output_fc = arcpy.GetParameterAsText(2)
create_thiessen_points(study_area, side_length, output_fc)
我们直接将脚本在Arcgis中封装成工具箱即可。
生成后的渔网点:
3.生成蜂窝六边形
有了渔网点后,我们根据渔网点创建泰森多边形。
这样未经处理的数据肯定不是我们想要的结果,所以我们要根据我们需要的边界将多余的去除。
我们按输入图层的空间关系进行选择,然以删掉多余图层,得到结果:
下面是我整理好的工具箱。
4.数据分析
有了蜂窝多边形我们就可以做可视化分析了。
以上面邯郸市餐饮数据为例。
我们将餐饮数据和多边形进行空间链接(以多边形为目标表)
有关空间链接,参考http://blog.csdn.net/qq_34149805/article/details/70170867
可以得到每个多边形落入餐厅的个数,然后我们制作成分级色彩图:
最终效果:
转载自:https://blog.csdn.net/qq_34149805/article/details/70217232