ArcGIS的swm二進位制檔案處理成為矩陣形式的文字檔案
阿新 • • 發佈:2019-01-27
空間權重矩陣是空間分析的資料基礎。我們常用ArcGIS的空間統計模組的工具生成空間權重矩陣,然而其所得結果儲存在swm檔案中。該檔案是二進位制檔案,資料結構不明。我們通常需要將swm處理成為矩陣形式,以便於進行進一步的資料分析。本人在做實驗的過程中需要用到鄰接矩陣,鄰接矩陣是一種特殊的空間權重矩陣,元素只含0或1。我將過程經驗總結下來,方便遇到類似問題的人。
我使用的是python,用到的模組包括pysal,numpy,pandas。首先,我們利用ArcGIS提供的工具將swm檔案轉為dbf檔案。
第二步,編寫程式,讀取dbf的內容並處理成為矩陣形式。參考程式碼如下:
import pandas as pd import numpy as np import pysal field_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) #將相鄰的兩個物件對應的位置元素改為1 for (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')
最後,來看下結果
希望對觀看此文的讀者有所幫助!