• 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:UserswybertAnaconda2libsite-packagesgeopandasgeodataframe.py", line 305, in to_file
     5     c.write(feature(i, row))
     6 
     7   File "C:UserswybertAnaconda2libsite-packagesfionacollection.py", line 402, in __exit__
     8     self.close()
     9 
    10   File "C:UserswybertAnaconda2libsite-packagesfionacollection.py", line 386, in close
    11     self.flush()
    12 
    13   File "C:UserswybertAnaconda2libsite-packagesfionacollection.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文件进行读写的功能

  • 相关阅读:
    nginx设置开机自启
    sublimeText3和phpstrom使用
    快捷键整理
    nginx日志分割及备份
    nginx日志设置
    nginx上部署PHP
    C语言三种参数传递方式
    浮点数在内存中的存储方式
    windows下git安装过程
    偏移二进制编码和二进制补码的区别
  • 原文地址:https://www.cnblogs.com/wybert/p/5023533.html
Copyright © 2020-2023  润新知