基于主成分所得的综合评价值,在ArGIS的Generate方法下,用fishnet模块直接生成5km×5km的格网及对应的label点。起初选用1km*1km格网,但数据量过大,难以操作。利用长三角及京津冀城市群边界图裁切,得到相应地区格网图,并分别计算各城市到格网点的距离。后续计算过程通过编写python程序完成:利用引力模型计算各网格受区域内各个城市的辐射值,按照“取大”的原则确定各网格的被辐射值及归属城市。最后将计算结果链接到ArcGIS中,通过分层设色,按颜色深浅表示辐射的强弱作出辐射强度图。由于辐射值过小,为了便于显示结果,统一乘1000000。利用唯一值法表示,则可以说明各城市的辐射范围[借鉴自潘竟虎文章]。
#coding=utf-8
"""
Created on Tue Oct 18 16:19:20 2016
@author: Administrator
"""
import pandas as pd
bj=pd.read_table('D:/5km+/bj.txt',sep=',')
bj['power']=0
bj['power']=bj['jjjpower_txt_value']/((bj['DISTANCE'])*(bj['DISTANCE']))*1000000
#利用引力模型计算辐射强度值
bj_ex=bj.iloc[:,[1,2,5,7,11]]
bj_ex=bj_ex.sort_values(by=['Id'])
#切片出需要的字段,以id字段进行排序
q=[]
c=bj_ex['Id'].drop_duplicates()
for i,j in enumerate(c):
print(j)
group=bj_ex.iloc[14*i:14*(i+1),:]
print(group)
#对各网格数据分组
max_value=group['power'].max()
#求出各组的最大值
print(max_value)
r=group[group['power']==max_value]
print(r)
q.append(r)
#提取最大值所在行,并添加到列表
bj_df=q[0]
for index,i in enumerate(q):
if index>0:
bj_df=pd.concat([bj_df,i])
#合并列表内容
bjr=bj_df[bj_df['NAME']=='北京']
#提取北京的数据
bjr.to_excel('D:/5km+/bjr.xlsx')
bj_df.to_excel('D:/5km+/bj_df.xlsx')