计算鼓楼区人口密度

2019-08-01  本文已影响0人  机智的柠檬

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
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

裁剪后:


image.png
上一篇 下一篇

猜你喜欢

热点阅读