python、arcgis求解辐射力范围

基于主成分所得的综合评价值,在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')     

你可能感兴趣的:(python、arcgis求解辐射力范围)