這邊博客並不是有關geopandas的教程和pyshp的教程!
使用python來處理地理數據有很多相關的包,最近研究需要處理一些地理數據,然而arcgis的arcpy總是不能令人滿意。所以這里說說python中其它的有關地理數據處理的包。
1.地理數據的讀寫
地理數據一般比較通用的格式是shp文件,對其進行讀寫有兩個包,一個是Fiona一個是pyshp。
Fiona是基於C++的庫包裝的,因此直接使用pip安裝在使用的時候會有問題,可以使用conda首先安裝GDAL,然后再安裝Fiona就可以了。
pyshp是純凈的python腳本寫的包,因此安裝和使用起來體驗比Fiona要好一點,但是效率上可能會稍微低一點,這個我也沒做測試。
2.地理數據的處理
地理數據的處理一般是shapely這個庫,這里不做詳細介紹,它主要來產生緩沖區啊,等等這類的地理數據處理操作
3.如何同時處理屬性數據和集合數據
在pandas下有個包叫geopandas它擴充了pandas用來處理地理數據。它主要在pandas,fiona和shpely上進行了包裝。因此安裝它之前要首先安裝這些依賴
geopandas可以同時對地理數據進行讀寫和處理,也同時可以對屬性數據進行處理。因此比較推薦使用這個庫
4.對比總結
使用geopandas的時候要首先對shapely和pandas有些了解,我在使用geopandas保存為shape文件的時候老師報錯:
1
WARNING:Fiona:CPLE_AppDefined in One or several characters couldn't be converted correctly from UTF-8 to ISO-8859-1.
This warning will not be emitted anymore.
File "F:/xiaokangworkspace/pythonwork/geopandasFrompandas.py", line 46, in <module> 2 test1.to_file('test6.shp') 3 4 File "C:\Users\wybert\Anaconda2\lib\site-packages\geopandas\geodataframe.py", line 305, in to_file 5 c.write(feature(i, row)) 6 7 File "C:\Users\wybert\Anaconda2\lib\site-packages\fiona\collection.py", line 402, in __exit__ 8 self.close() 9 10 File "C:\Users\wybert\Anaconda2\lib\site-packages\fiona\collection.py", line 386, in close 11 self.flush() 12 13 File "C:\Users\wybert\Anaconda2\lib\site-packages\fiona\collection.py", line 376, in flush 14 self.session.sync(self) 15 16 File "fiona/ogrext.pyx", line 939, in fiona.ogrext.WritingSession.sync (fiona/ogrext.c:15649) 17 18 RuntimeError: Failed to sync to disk
這個錯誤是由於我的屬性表中包含中文字符所導致的,說到底它應該是一個編碼問題,我使用python3也做過這個處理,沒有出現警告信息,但是仍然出現同樣的問題。使用arcgis能夠打開已經寫入的文件的集合信息但是屬性表卻打不開,但是使用Qgis能夠打開,可以看到屬性表中包含中文的那一列出現了亂碼(使用exce也l能打開看到dbf中的屬性表)。要處理這個問題有以下解決方案:
-
使用geopandas處理數據但是使用pyshp寫文件:
這個方案比較好,寫出來的文件Arcgis和Qgis都能識別 -
使用geopandas寫文件然后再對dbf進行后續處理:
可悲的是pandas並沒有提供對dbf文件的讀寫(這里有個不錯的解決方案),可使用用simpledbf包對其讀取,然后使用dbf包寫入。但是這個方案也可以使用pyshp來實現,因為pyshp實現了單獨對dbf文件進行讀寫的功能