Python中利用osgeo.osrCoordinateTransformation()进行空间数据投影转换的方法
发布时间:2023-12-23 08:19:17
在Python中,我们可以使用osgeo库中的osr模块来进行空间数据投影转换。osr模块提供了一系列用于处理空间参考系统(Spatial Reference System,SRS)的功能,包括定义、获取和转换坐标系统。
首先,我们需要导入osgeo.osr模块:
from osgeo import osr
然后,我们可以定义源坐标系统和目标坐标系统。坐标系统可以通过EPSG(European Petroleum Survey Group)代码来定义,也可以通过WKT(Well-Known Text)字符串来定义。下面是两个常用的坐标系统定义方式:
source_epsg = 'EPSG:4326' # WGS84坐标系统
target_epsg = 'EPSG:3857' # web墨卡托投影坐标系统
source_wkt = '''PROJCS["WGS 84",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
PROJECTION["Mercator_1SP"],
PARAMETER["central_meridian",0],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
AUTHORITY["EPSG","3857"],
AXIS["X",EAST],
AXIS["Y",NORTH]]''' # web墨卡托投影坐标系统的WKT字符串
接下来,我们可以使用osr.SpatialReference()函数创建源和目标坐标系统对象:
source_srs = osr.SpatialReference() source_srs.ImportFromEPSG(source_epsg) source_srs.ImportFromWkt(source_wkt) target_srs = osr.SpatialReference() target_srs.ImportFromEPSG(target_epsg)
然后,我们可以使用osr.CoordinateTransformation()函数创建一个空间数据投影转换对象:
transform = osr.CoordinateTransformation(source_srs, target_srs)
最后,我们可以使用转换对象的TransformPoint()方法来进行坐标变换。TransformPoint()方法需要传入待转换的点的经度和纬度作为参数,并返回转换后的点的投影坐标:
lon = 121.4737 lat = 31.2304 transformed_point = transform.TransformPoint(lon, lat)
完整的示例代码如下:
from osgeo import osr
source_epsg = 'EPSG:4326' # WGS84坐标系统
target_epsg = 'EPSG:3857' # web墨卡托投影坐标系统
source_wkt = '''PROJCS["WGS 84",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
PROJECTION["Mercator_1SP"],
PARAMETER["central_meridian",0],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
AUTHORITY["EPSG","3857"],
AXIS["X",EAST],
AXIS["Y",NORTH]]''' # web墨卡托投影坐标系统的WKT字符串
source_srs = osr.SpatialReference()
source_srs.ImportFromEPSG(source_epsg)
source_srs.ImportFromWkt(source_wkt)
target_srs = osr.SpatialReference()
target_srs.ImportFromEPSG(target_epsg)
transform = osr.CoordinateTransformation(source_srs, target_srs)
lon = 121.4737
lat = 31.2304
transformed_point = transform.TransformPoint(lon, lat)
print(f'Transformed point: {transformed_point}')
上述代码将将经度为121.4737,纬度为31.2304的点从WGS84坐标系统(EPSG:4326)转换为web墨卡托投影坐标系统(EPSG:3857),并打印转换后的投影坐标点。
总结:通过使用osgeo.osr库中的osr.SpatialReference()、osr.CoordinateTransformation()和TransformPoint()函数,我们可以实现Python中的空间数据投影转换,并将坐标点从一个坐标系统转换为另一个坐标系统。这对于地理信息系统(GIS)和空间数据处理非常有用。
