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

Python中通过osgeo.osrCoordinateTransformation()实现点坐标转换的实际案例

发布时间:2023-12-23 08:21:02

在Python中,可以通过osgeo.osr模块中的CoordinateTransformation()函数来实现点坐标的转换。CoordinateTransformation()函数可以创建一个坐标转换对象,该对象可以将一个坐标系统中的坐标转换为另一个坐标系统中的坐标。

下面是一个实际案例,假设有一个点的经纬度坐标,需要将其转换为投影坐标:

from osgeo import osr

def convert_coordinate(src_coord, src_epsg, tgt_epsg):
    # 创建源坐标系统对象
    src_srs = osr.SpatialReference()
    src_srs.ImportFromEPSG(src_epsg)
    
    # 创建目标坐标系统对象
    tgt_srs = osr.SpatialReference()
    tgt_srs.ImportFromEPSG(tgt_epsg)

    # 创建坐标转换对象
    transform = osr.CoordinateTransformation(src_srs, tgt_srs)

    # 创建源坐标点对象
    src_point = osr.Geometry(osr.wkbPoint)
    src_point.AddPoint(src_coord[0], src_coord[1])

    # 进行坐标转换
    tgt_point = src_point.Clone()
    tgt_point.Transform(transform)

    # 返回目标坐标
    return tgt_point.GetX(), tgt_point.GetY()

# 源坐标的经纬度坐标和EPSG代码
src_coord = (116.3975, 39.9086)
src_epsg = 4326

# 目标坐标的投影坐标和EPSG代码
tgt_epsg = 3857

# 进行坐标转换
tgt_coord = convert_coordinate(src_coord, src_epsg, tgt_epsg)

# 输出目标坐标
print("目标坐标:", tgt_coord)

这个例子中,通过convert_coordinate()函数实现了将经纬度坐标(116.3975, 39.9086)转换为投影坐标的功能。源坐标的EPSG代码为4326(表示WGS84坐标系),目标坐标的EPSG代码为3857(表示Web墨卡托投影)。

在函数体内部,首先使用osr.SpatialReference()创建源坐标系统对象和目标坐标系统对象,使用ImportFromEPSG()方法将EPSG代码导入到坐标系统对象中。

然后,使用osr.CoordinateTransformation()函数创建一个坐标转换对象,该对象使用源坐标系统和目标坐标系统作为参数。

接着,使用osr.Geometry()创建源坐标点对象,并使用AddPoint()方法将源坐标填充到点对象中。

最后,调用点对象的Transform()方法,将源坐标转换为目标坐标,并通过GetX()GetY()方法获取转换后的目标坐标。

在执行代码后,将会输出转换后的目标坐标,结果可能为(12955473.304028241, 4822720.644522646),表示投影坐标。