使用python和gdal在.geotiff中查找像素点的经纬度坐标

问题描述 投票:0回答:1

我有一个由.geotiff imagesat中的像素坐标定义的点。

我正在尝试将这些像素坐标转换为经度和纬度。

起初,我试图从我之前问过的反问题here改编给定的代码

def pixel_to_world(geo_matrix, x, y):
    ul_x   = geo_matrix[0]
    ul_y   = geo_matrix[3]
    x_dist = geo_matrix[1]
    y_dist = geo_matrix[5]
    _x = x * x_dist + ul_x
    _y = y * y_dist + ul_y
    return (_x, _y)

def build_transform_inverse(dataset, EPSG):
    source = osr.SpatialReference(wkt=dataset.GetProjection())
    target = osr.SpatialReference()
    target.ImportFromEPSG(4326)
    return osr.CoordinateTransformation(source, target)

def find_spatial_coordinate_from_pixel(dataset, transform, x, y):
    point = ogr.Geometry(ogr.wkbPoint)
    point.AddPoint(float(x), float(y))
    point.Transform(transform)
    return pixel_to_world(dataset.GetGeoTransform(), point.GetX(), point.GetY())

ds = gdal.Open(source_directory_path + filename)
_t = build_transform_inverse(ds, 4326)
coordinates = find_spatial_coordinate_from_pixel(ds, _t, point[0], point[1])

但是我的最终坐标不正确,我得到类似[[(-1528281.9351183572,1065990.778732022),而不是带有[]的(-13.728790283203121,9.531686027524676)ul_x = -1528281.943533814, ul_y = 1065990.7964650677, x_dist = 0.5970709765586435, y_dist = -0.5972870511184641

我也尝试过光栅方法,例如:

import rasterio with rasterio.open('path/to/file.tiff') as map_layer: pixels2coords = map_layer.xy(2679,2157) print(pixels2coords)

Witch无法返回适当的长纬度坐标对(它返回(-1526993.7629018887,1064390.365811596)。]]

我在做什么错?

我有一个由.geotiff imagesat中的像素坐标定义的点。我正在尝试将这些像素坐标转换为经度和纬度。首先,尝试从...

python gdal ogr rasterio
1个回答
0
投票
您已经翻转了在像素,投影坐标和经纬度之间转换的顺序。您正在执行订单pixels -> lat lngs -> projected,应该为pixels -> projected -> lat lngs

以下内容应该起作用

© www.soinside.com 2019 - 2024. All rights reserved.