python處理地理數據-geopandas和pyshp


這邊博客並不是有關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中的屬性表)。要處理這個問題有以下解決方案:

  1. 使用geopandas處理數據但是使用pyshp寫文件:

    這個方案比較好,寫出來的文件Arcgis和Qgis都能識別
  2. 使用geopandas寫文件然后再對dbf進行后續處理

    可悲的是pandas並沒有提供對dbf文件的讀寫(這里有個不錯的解決方案),可使用用simpledbf包對其讀取,然后使用dbf包寫入。但是這個方案也可以使用pyshp來實現,因為pyshp實現了單獨對dbf文件進行讀寫的功能

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM