【3】通过GDAL解析shape文件

208 阅读2分钟

1.gdal安装

www.lfd.uci.edu/~gohlke/pyt… 下载gdal安装包

image.png 选择自己对应的版本

2.进去自己安装的pip文件夹目录下

image.png

输入命令

pip  install GDAL-3.4.3-cp39-cp39-win_amd64.whl

2.代码演示

import sys

from osgeo import ogr

driver = ogr.GetDriverByName('ESRI Shapefile')
filename = 'D:/upload/test/1.shp'
dataSource = driver.Open(filename, 0)
if dataSource is None:
    print('could not open')
    sys.exit(1)

# 获取数据层
layer = dataSource.GetLayer(0)  # 一般ESRI的shapefile都是填0的,如果不填的话默认也是0.

# 获取图层数量
n = layer.GetFeatureCount()
print('feature count:', n)
# 获取单个图层
feature = layer.GetFeature(0)

# 获取字段数量
field_num = feature.GetFieldCount()
print("字段数量:" + str(field_num))
# 获取字段
for i in range(0, field_num):
    field = feature.GetFieldDefnRef(i)
    print("字段名称:" + field.GetName())
    # 根据字段获取字段内容
    print("内容:"+feature.GetFieldAsString(field.GetName()))

# 获取图形
geom=feature.GetGeometryRef()

wkt=geom.ExportToWkt()
print("WKT格式:"+wkt)

json=geom.ExportToJson()
print("json格式:"+json)

feature_json=feature.ExportToJson()
print("json格式:"+feature_json)



print('done!')

image.png

3.关于GDAL的驱动

首先导入ogr,查看其方法和属性,发现了三个相关的方法。

from osgeo import ogr
dir(ogr)

image.png

image.png

我们知道了这个driver有82个,那就可以分别看看这82个是啥。

image.png

于是得到以下所有driver的name,如15行的"ESRI Shapefile",这个name是用于GetDriverByName的,如:

driver = ogr.GetDriverByName("ESRI Shapefile")

0 ESRIC
1 FITS
2 PCIDSK
3 netCDF
4 PDS4
5 VICAR
6 JP2OpenJPEG
7 JPEG2000
8 PDF
9 MBTiles
10 BAG
11 EEDA
12 OGCAPI
13 DB2ODBC
14 ESRI Shapefile
15 MapInfo File
16 UK .NTF
17 LVBAG
18 OGR_SDTS
19 S57
20 DGN
21 OGR_VRT
22 REC
23 Memory
24 CSV
25 GML
26 GPX
27 LIBKML
28 KML
29 GeoJSON
30 GeoJSONSeq
31 ESRIJSON
32 TopoJSON
33 OGR_GMT
34 GPKG
35 SQLite
36 ODBC
37 WAsP
38 PGeo
39 MSSQLSpatial
40 PostgreSQL
41 OpenFileGDB
42 DXF
43 CAD
44 FlatGeobuf
45 Geoconcept
46 GeoRSS
47 GPSTrackMaker
48 VFK
49 PGDUMP
50 OSM
51 GPSBabel
52 OGR_PDS
53 WFS
54 OAPIF
55 Geomedia
56 EDIGEO
57 SVG
58 CouchDB
59 Cloudant
60 Idrisi
61 ARCGEN
62 XLS
63 ODS
64 XLSX
65 Elasticsearch
66 Walk
67 Carto
68 AmigoCloud
69 SXF
70 Selafin
71 JML
72 PLSCENES
73 CSW
74 VDV
75 MVT
76 NGW
77 MapML
78 TIGER
79 AVCBin
80 AVCE00
81 HTTP