美文网首页
使用python读写shapefile文件以及shapefile

使用python读写shapefile文件以及shapefile

作者: frankie_cheung | 来源:发表于2019-02-02 15:34 被阅读0次

    有一段时间需要使用python生成shapefile文件,并且转为kml文件,放到Google earth中展示,中间有过摸索特此记下:

    环境搭建

    读写shape file需要两个库 gdal 和pyshp,其中gdal我在网上看到需要什么C++编译环境,弄了很久都没有成功,后来直接下载了一个whl文件 自己pip install 安装就行了。下载地址下载完后,把这个文件复制到你的python路径Scripts下 然后直接在路径上cmd 输入命令pip install +你下载的文件名,安装好,在命令行输入:python 进入python环境,import osgeo 没有报错即为安装成功~

    读取shapefile文件

    我看到的维基百科shapefile文件主要由三部分构成:

    • Shp:图形格式。一个地形的图片。

    • shx :图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率

    • Dbf:属性数据格式,以dBaseIV的数据表格式存储每个几何形状的属性数据

    我理解的读取shapefile文件主要是使用dbf里面的数据。

    代码:

    
    from osgeo import ogr
    
    importjson
    
    data
    
    = ogr.Open('D:/work/python/Tif_to_png/shp/shape file文件名.shp') #返回一个DataSource对象
    
    layer= data.GetLayer(0) #获得第一层数据(多数Shapefile只有一层)
    
    extent= layer.GetExtent()  # 当前图层的地理范围
    
    print(f'the extent of the layer: {extent}')
    
    srs= layer.GetSpatialRef()
    
    print(f'the spatial reference system of
    
    the data: {srs.ExportToPrettyWkt()}')
    
    schema=[]  # 当前图层的属性字段
    
    ldefn= layer.GetLayerDefn()
    
    forn in range(ldefn.GetFieldCount()):
    
    fdefn = ldefn.GetFieldDefn(n)
    
    schema.append(fdefn.name)
    
    print(f'the fields of this layer: {schema}')
    
    features=[]
    
    fori in range(layer.GetFeatureCount()):
    
    feature = layer.GetFeature(i)
    
    features.append(json.loads(feature.ExportToJson()))
    
    print(f'the first feature represented with JSON: {features[0]}')
    
    

    写shapefile文件

    写shapefile文件,我主要使用pyshp这个库,安装方式为:为 pip install pyshp

    假如提示time out 可以尝试:pip install PyShp -i https://pypi.tuna.tsinghua.edu.cn/simple/

    代码如下(已生成多个点为例):

    
    import shapefile #这边导入的名字是shapefile 不是pyshp,别到错了。
    
    w = shapefile.Writer('shapefiles/test/point')
    
    w.field('你的字段名', 'C')
    
    w.point(111,22)
    
    w.record(字段名)
    
    w.close()
    
    

    我的理解:point是增加数值,而record是在增加关于这个数值的描述,其中w.point和w.record都可以循环执行写入数据。

    shapefile转kml文件

    这次需要在Linux安装一个gdal,(其实windows应该也可以,就是我还没学会)

    安装步骤:

    sudo find / -name gdal.py

    把这些路径和自己Linux中python的路径全部加到

    sudo gedit /etc/profile这里面 格式为:

    Export PYTHONPATH ********路径********* :$PYTHPNPATH

    • 执行python命令 进去import osgeo 没有反应就是成功了

    把你需要转的shapefile文件放到linux 路径下,一定要记得是三个文件(shp、shx、dbf)!!!

    然后在Linux执行命令:

    ogr2ogr -f KML 转换后的文件名.kml 转换前的文件名.shp


    update一下:写shapefile 可以去看pyshp的官方文档,里面的demo非常详细,也很容易入门。
    地址:(https://github.com/GeospatialPython/pyshp#writing-shapefiles

    相关文章

      网友评论

          本文标题:使用python读写shapefile文件以及shapefile

          本文链接:https://www.haomeiwen.com/subject/dhbssqtx.html