用osr从矢量图层中获取原始坐标系,并转换成投影坐标系
时间: 2024-04-17 16:29:42 浏览: 100
坐标系及投影面转换
要使用`osgeo.osr`模块从矢量图层中获取原始坐标系,并将其转换为投影坐标系,可以按照以下步骤操作:
```python
from osgeo import ogr, osr
# 打开矢量图层
shapefile_path = 'your_shapefile.shp'
driver = ogr.GetDriverByName('ESRI Shapefile')
dataSource = driver.Open(shapefile_path, 0)
layer = dataSource.GetLayer()
# 获取原始坐标系
sourceSpatialRef = layer.GetSpatialRef()
# 定义目标坐标系(例如 EPSG:3857)
targetSpatialRef = osr.SpatialReference()
targetSpatialRef.ImportFromEPSG(3857)
# 创建坐标转换对象
transform = osr.CoordinateTransformation(sourceSpatialRef, targetSpatialRef)
# 创建投影图层
projShapefile = 'projected_shapefile.shp'
projDriver = ogr.GetDriverByName('ESRI Shapefile')
projDataSource = projDriver.CreateDataSource(projShapefile)
projLayer = projDataSource.CreateLayer('projected_layer', targetSpatialRef, geom_type=ogr.wkbPolygon)
# 遍历原始图层的要素,进行投影转换并添加到投影图层
feature = layer.GetNextFeature()
while feature:
geometry = feature.GetGeometryRef()
geometry.Transform(transform)
projFeature = ogr.Feature(projLayer.GetLayerDefn())
projFeature.SetGeometry(geometry)
projLayer.CreateFeature(projFeature)
feature = layer.GetNextFeature()
# 释放资源
dataSource.Destroy()
projDataSource.Destroy()
```
在这个示例中,我们首先使用`ogr`模块打开矢量图层文件,并获取图层对象。然后,我们使用`GetSpatialRef`方法获取原始坐标系。
接下来,我们定义了目标坐标系(例如EPSG:3857),并使用`osr.SpatialReference`创建了一个目标坐标系对象。
然后,我们使用`osr.CoordinateTransformation`创建了一个坐标转换对象,用于将原始坐标系转换为目标坐标系。
接着,我们创建了一个新的投影图层,并使用`CreateFeature`方法遍历原始图层的要素。在循环中,我们获取要素的几何对象,并使用转换对象对其进行投影转换。然后,我们创建了一个新的投影要素,并将投影后的几何对象添加到投影图层中。
最后,我们释放了资源并关闭文件。
请确保你已经安装了GDAL库,并将代码中的`your_shapefile.shp`替换为你自己的Shapefile文件路径,并将`projected_shapefile.shp`替换为你希望保存投影结果的文件路径。
阅读全文