Как я могу прочитать координаты угла в градусах? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть geotiff, gdalinfo возвращает мне такую ​​информацию: .....

Pixel Size = (0.740750480607563,-0.740750480607565)  Metadata:   AREA_OR_POINT=Area 
Corner Coordinates:  Upper Left  (  408834.576, 4521463.892) ( 13d55'7.11"E,40d50'20.93"N)  
Lower Left (  408834.576, 4497345.057) (13d55'19.75"E, 40d37'18.87"N)

..... Я использую python и читаю информацию из tiff вот так:

ds = gdal.Open("name.tiff") 
xoff, a, b, yoff, d, e = ds.GetGeoTransform()

xoff, a, b, yoff, d, e будут использоваться в функциях преобразования (координаты пикселя в гео), но GetGeoTransform () дает мне значения xoff и yoff в метрах (это первое число в углу координаты), не в градусах. Как я могу прочитать координаты левого угла Upeer в градусах? Я понимаю, что могу запустить gdalinfo и прочитать много информации, может быть, в python есть какая-то функция для этого?

1 Ответ

0 голосов
/ 18 февраля 2020

Вам необходимо преобразовать координаты в другую проекцию, с помощью GDAL это можно сделать с помощью модуля osr.

Важно знать, что с GDAL 3 и выше порядок координат зависит от проекции. В приведенном ниже примере показано, как вы можете получить «старое» поведение (всегда x, y), но это, конечно, зависит от вашего варианта использования. Удалите эти строки, если вы этого не хотите.

Получите свойства из набора данных

wkt_srs = ds.GetProjection()
gt = ds.GetGeoTransform()
xs = ds.RasterXSize
ys = ds.RasterYSize

Преобразуйте геотрансформатор в угловые координаты:

ulx, uly = gdal.ApplyGeoTransform(gt, 0, 0)
lrx, lry = gdal.ApplyGeoTransform(gt, xs, ys)

Установить вверх объекта преобразования:

src_srs = gdal.osr.SpatialReference()
src_srs.ImportFromWkt(wkt_srs)

tar_srs = gdal.osr.SpatialReference()
tar_srs.ImportFromEPSG(4326)

# with recent versions of GDAL the axis order (x,y vs y,x) depends
# on the projection. Force "x,y" with:
src_srs.SetAxisMappingStrategy(gdal.osr.OAMS_TRADITIONAL_GIS_ORDER)
tar_srs.SetAxisMappingStrategy(gdal.osr.OAMS_TRADITIONAL_GIS_ORDER)

ct = gdal.osr.CoordinateTransformation(src_srs, tar_srs)

Преобразование координат:

ulx_deg, uly_deg = ct.TransformPoint(ulx, uly)
lrx_deg, lry_deg = ct.TransformPoint(lrx, lry)
...