QGIS python获取光栅的单位

2024-09-30 18:16:20 发布

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

在使用pyQgis的QGIS中,我想确定输入光栅的单位是度还是米。 Here我了解到我可以使用GDAL从光栅获取投影:

inRaster = gdal.Open(rasterInPath,GA_ReadOnly)
projRef = inRaster.GetProjection()
print(projRef)

是什么给了我EPSG 4326光栅的字符串:

GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]]

对于带有EPSG 3857的光栅:

PROJCS["WGS 84 / Pseudo-Mercator",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"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3857"]]

我想我能做到:

isInMetres = "PROJCS" in projRef

但还有其他解决办法吗?我不认为这是非常可读的,我不确定如果我能用这种方式覆盖所有的角落案例(例如缺少投影)。不需要在GDAL中使用


Tags: parameter光栅unitepsg投影wgsgdaldatum
1条回答
网友
1楼 · 发布于 2024-09-30 18:16:20

使用PyQgis API可以使用^{}对象的mapUnits方法。它返回一个QgsUnitTypes.DistanceUnit值,因此您可以这样使用它,例如:

# lyr is a QgsRasterLayer
crs = lyr.crs()
# crs is a QgsCoordinateReferenceSystem 
unit = crs.mapUnits()
print('Unit is {}'.format(QgsUnitTypes.toString(unit)))
# 'Unit is mètres' (i'm using french language)

重用代码,您可以编写:

isInMetres = crs.mapUnits() == 0

相关问题 更多 >