Python 用GDAL库实现加载显示shp文件
时间: 2024-02-02 11:05:29 浏览: 156
以下是一个简单的示例代码,使用GDAL库加载显示shp文件:
```python
from osgeo import ogr
from osgeo import gdal
from osgeo import osr
import matplotlib.pyplot as plt
# 打开shapefile文件
driver = ogr.GetDriverByName('ESRI Shapefile')
shpfile = driver.Open('path/to/your/file.shp', 0)
layer = shpfile.GetLayer()
# 获取图层的空间参考
spatialRef = layer.GetSpatialRef()
print('空间参考:', spatialRef.ExportToWkt())
# 获取图层的范围
extent = layer.GetExtent()
print('图层范围:', extent)
# 获取图层的投影信息
proj4 = spatialRef.ExportToProj4()
print('投影信息:', proj4)
# 将图层转换为gdal格式
gdal.SetConfigOption('GDAL_FILENAME_IS_UTF8', 'NO')
gdal.SetConfigOption('SHAPE_ENCODING', '')
mem_drv = ogr.GetDriverByName('Memory')
mem_ds = mem_drv.CreateDataSource('memData')
mem_layer = mem_ds.CreateLayer('layer', srs=spatialRef, geom_type=layer.GetGeomType())
# 将原始图层的属性表结构复制到新图层中
layer_def = layer.GetLayerDefn()
for i in range(layer_def.GetFieldCount()):
field_def = layer_def.GetFieldDefn(i)
mem_layer.CreateField(field_def)
# 将原始图层中的要素复制到新图层中
for feat in layer:
mem_layer.CreateFeature(feat)
# 将gdal格式的图层转换为numpy数组
driver = gdal.GetDriverByName('MEM')
dst_ds = driver.CreateCopy('', mem_ds, 0)
arr = dst_ds.GetRasterBand(1).ReadAsArray()
# 显示图层
plt.imshow(arr, cmap='gray')
plt.show()
```
说明:
1. 首先通过ogr库打开shp文件,并获取图层的空间参考、范围和投影信息。
2. 然后将图层转换为gdal格式,并将其转换为numpy数组。
3. 最后使用matplotlib库显示数组。
需要注意的是,该示例代码仅适用于包含单一要素类型的shp文件。如果要处理包含多个要素类型的shp文件,需要对代码进行修改。
阅读全文