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文件进行读写的功能

 

posted @ 2015-12-06 13:30  wybert  阅读(19980)  评论(0编辑  收藏  举报