欢迎访问宙启技术站
智能推送

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)和空间数据处理非常有用。