使用python读写shapefile文件以及shapefile文件转为kml

有一段时间需要使用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应该也可以,就是我还没学会)

安装步骤:

  • wgethttp://download.osgeo.org/gdal/2.2.1/gdal-2.2.1.tar.gz

  • tar xvf gal-2.2.1.tar.gz

  • cd gdal-2.2.1

  • sudo ./configure --with-python

  • Sudo make

  • Sudo make install

  • 出现ImportError: No module named _gdal错误解决方案:

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文件转为kml)