如何读取角坐标的度数?

2024-09-29 01:23:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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中有一些函数用于此


Tags: 函数信息sizeds单位arealeftmetadata
1条回答
网友
1楼 · 发布于 2024-09-29 01:23:58

您需要将坐标转换为其他投影,使用GDAL,这可以通过使用osr模块来完成

需要注意的是,由于GDAL 3 and above,坐标的顺序取决于投影。下面的示例显示了如何获得“旧”行为(始终是x,y),但这当然取决于您的用例。如果你不想的话,把那些线去掉

从数据集中获取属性

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

将geotransform转换为角点坐标:

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)

相关问题 更多 >