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

  • 相关阅读:
    SSL证书的生成方法
    某些系统文件破坏后的修复方式
    dd命令的使用简介
    浅谈访问控制列表(ACL)
    发送端usleep(900)单线程带宽
    1024个读出线程的测试结果
    寻找ROS取数的瓶颈:思路整理(2)
    ROS:32个接收进程的接收带宽
    ROS: 将接收端的接收函数注释掉,TCP只发送,不接受数据时的recv-Q和send-Q长度实验
    ROS:16个接收进程的接收带宽
  • 原文地址:https://www.cnblogs.com/wybert/p/5023533.html
Copyright © 2020-2023  润新知