ArcGIS的swm二进制文件处理成为矩阵形式的文本文件

来源:互联网 发布:阿里云主机多少钱 编辑:程序博客网 时间:2024/05/19 15:43

空间权重矩阵是空间分析的数据基础。我们常用ArcGIS的空间统计模块的工具生成空间权重矩阵,然而其所得结果储存在swm文件中。该文件是二进制文件,数据结构不明。我们通常需要将swm处理成为矩阵形式,以便于进行进一步的数据分析。本人在做实验的过程中需要用到邻接矩阵,邻接矩阵是一种特殊的空间权重矩阵,元素只含0或1。我将过程经验总结下来,方便遇到类似问题的人。

我使用的是python,用到的模块包括pysal,numpy,pandas。首先,我们利用ArcGIS提供的工具将swm文件转为dbf文件。


第二步,编写程序,读取dbf的内容并处理成为矩阵形式。参考代码如下:

import pandas as pdimport numpy as npimport pysalfield_dbf=pysal.open(r'E:\atest\linjie.dbf')#只需将FIDNUM和NID两列储存到arr中,前者是对象唯一标识,后者是与前者邻近的对象标识arr=field_dbf.by_col_array('FIDNUM','NID')df1=pd.DataFrame(arr,columns=(('FID','NID')))index_list=sorted(list(set(arr[:,0])))#用于空间权重矩阵的排列n=len(index_list)#初始化一个元素全为0的矩阵df=pd.DataFrame(np.zeros(n*n).reshape(n,n),index=index_list,columns=index_list)#将相邻的两个对象对应的位置元素改为1for (k1, k2), group in df1.groupby(['FID','NID']):    a=index_list.index(k1)    b=index_list.index(int(k2))    df.iloc[a,b]+=1#将结果储存到csv文件中   df.to_csv(r'E:\atest\linjie2.csv')

最后,来看下结果


希望对观看此文的读者有所帮助!

原创粉丝点击