1、读取含有POI点的CSV文件,将点在Arcmap中进行展示。
image.png该数据集中,共有205567个POI,分为8类,裁剪出鼓楼区的POI
ArcToolBox--分析工具--提取分析--裁剪
输入数据:all_point
裁剪数据:鼓楼区矢量图
裁剪结果:
image.png
2、分别提取出鼓楼区各个类别的POI
image.png将结果导出:
image.png
导出8类数据,分别加载已导出数据
3、找出每个格网中 包含的POI 计算每个格网的中心POI点
加载格网数据,利用之前文章中 算出的POI类别与人口密度的相关系数 将格网人口 按比例分配给每一类
image.png
计算公式为:a类人口=格网人口数*系数a/总系数
对每个格网进行迭代,找出每个格网中所包含的POI 并将其信息输出成JSON格式
具体模型为:
image.png
输出的JSON名称为格网编号,代表每个格网中的POI信息。
对每个POI经纬度取其平均值,计算出 每个格网的中心POI
并输出为CSV文件
具体代码如下:
import json
import csv
list1 = []
for i in range(1,5548):
list2 = []
filename = 'E:\\人口密度\\dian\\gezidian\\' + str(i)+'.json'
with open(filename,'r') as f:
js = json.load(f)
features = js['features']
print(i)
lng = 0
lat = 0
count = len(features)
for l in features:
lng += l['attributes']['Field5']
lat += l['attributes']['Field6']
if count != 0:
lng_ave = lng/count
lat_ave = lat/count
list2.append(i)
list2.append(lng_ave)
list2.append(lat_ave)
list1.append(list2)
else:
lng_ave = -1
lat_ave = -1
with open('E:\\人口密度\\0731\\zb.csv','w',encoding='utf-8',newline='') as f:
csv_file = csv.writer(f)
for l in list1:
csv_file.writerow(l)
4、根据每个格网的中心点 形成鼓楼区的泰森多边形
加载中心点的CSV文件 展示点 将其输出为点图层
生成泰森多边形:
image.png
image.png
5、将格网属性附加到泰森多边形上
每个泰森多边形 可能由多个格网组成
ArcToolBox--分析工具--叠加--标识
输入数据 : 鼓楼区格网
标识数据 : 泰森多边形
image.png
将生成的图 加入到文件地理数据库中(加入数据库中有每个区域的面积 和 外接长度)生成的矢量图层为:
image.png
每个艾森多边形由多个小区域组成:
image.png
属性:
image.png
每个小区域面积占整个格网面积的多少 可以计算出小区域的人口
将小区域人口叠加 即可得到泰森多边形的人口
依据泰森多边形的ID 对小区域的面积和人口数量进行汇总 即可得到泰森多边形的面积和人口
右击泰森多边形字段 选择汇总 对面积和人口进行汇总
image.png
生成两张新表
sum_renkou、sum_area
6、计算泰森多边形的密度
将上一步生成的两张表 与泰森多边形图层 按照ID 进行关联
计算出每个区域的人口密度
将泰森多边形 裁剪出鼓楼区形状 按照密度分级展示
image.png
image.png
裁剪后:
image.png
网友评论