在 Python 底图上镜像的 GeoTIFF 栅格
GeoTIFF raster mirrored on Python basemap
我正在尝试使用底图在我的地图上绘制 .tif 栅格。使用 QGIS,我看到了应该是的栅格层:
QGIS image
然而,当使用 python 底图绘制时,颜色不正确,并且投影以某种方式旋转了 180 度并进行了镜像,在图表左侧投影了一条随机蓝线:
关于 .tif 文件的一些信息(通过 rasterio 和 earthpy 包获得):
<osgeo.gdal.Dataset; proxy of <Swig Object of type 'GDALDatasetShadow *' at 0x7fcf9bdbef90> >
{'driver': 'GTiff', 'dtype': 'float32', 'nodata': -3.4028234663852886e+38, 'width': 2760, 'height': 1350, 'count': 1, 'crs': CRS.from_epsg(4326), 'transform': Affine(0.01, 0.0, 3.7,
0.0, -0.01, 71.2)}
EPSG:4326
BoundingBox(left=3.7, bottom=57.7, right=31.3, top=71.2)
+proj=longlat +datum=WGS84 +no_defs
下载原始栅格数据here(森林恢复潜力)并使用 QGIS 裁剪到正确的经纬度。
我做错了什么?
import gdal
from numpy import linspace
from numpy import meshgrid
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
lowlong = 3.7 #lower left corner of longitude
lowlat = 57.7 #lower left corner of latitude
upplong = 31.3 #upper right corner of longitude
upplat = 71.2 #upper right corner of latitude
pathToRaster = r'~/Data/Shapefile/NorwayPotential.tif'
raster = gdal.Open(pathToRaster,1)
print(raster)
geo = raster.GetGeoTransform()
geo = raster.ReadAsArray()
mp = Basemap(projection='merc',
llcrnrlon=lowlong,
llcrnrlat=lowlat,
urcrnrlon=upplong,
urcrnrlat=upplat,
resolution='i')
mp.drawcoastlines()
mp.drawcountries()
x = linspace(0,mp.urcrnrx,geo.shape[1])
y = linspace(0,mp.urcrnry,geo.shape[0])
xx,yy = meshgrid(x,y)
mp.pcolormesh(xx,yy,geo)
plt.show()
代码行后:
geo = raster.ReadAsArray()
你可以通过
翻转数据数组
geo = geo[::-1,:]
并且应该得到正确的结果。
我正在尝试使用底图在我的地图上绘制 .tif 栅格。使用 QGIS,我看到了应该是的栅格层: QGIS image
然而,当使用 python 底图绘制时,颜色不正确,并且投影以某种方式旋转了 180 度并进行了镜像,在图表左侧投影了一条随机蓝线:
关于 .tif 文件的一些信息(通过 rasterio 和 earthpy 包获得):
<osgeo.gdal.Dataset; proxy of <Swig Object of type 'GDALDatasetShadow *' at 0x7fcf9bdbef90> >
{'driver': 'GTiff', 'dtype': 'float32', 'nodata': -3.4028234663852886e+38, 'width': 2760, 'height': 1350, 'count': 1, 'crs': CRS.from_epsg(4326), 'transform': Affine(0.01, 0.0, 3.7,
0.0, -0.01, 71.2)}
EPSG:4326
BoundingBox(left=3.7, bottom=57.7, right=31.3, top=71.2)
+proj=longlat +datum=WGS84 +no_defs
下载原始栅格数据here(森林恢复潜力)并使用 QGIS 裁剪到正确的经纬度。
我做错了什么?
import gdal
from numpy import linspace
from numpy import meshgrid
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
lowlong = 3.7 #lower left corner of longitude
lowlat = 57.7 #lower left corner of latitude
upplong = 31.3 #upper right corner of longitude
upplat = 71.2 #upper right corner of latitude
pathToRaster = r'~/Data/Shapefile/NorwayPotential.tif'
raster = gdal.Open(pathToRaster,1)
print(raster)
geo = raster.GetGeoTransform()
geo = raster.ReadAsArray()
mp = Basemap(projection='merc',
llcrnrlon=lowlong,
llcrnrlat=lowlat,
urcrnrlon=upplong,
urcrnrlat=upplat,
resolution='i')
mp.drawcoastlines()
mp.drawcountries()
x = linspace(0,mp.urcrnrx,geo.shape[1])
y = linspace(0,mp.urcrnry,geo.shape[0])
xx,yy = meshgrid(x,y)
mp.pcolormesh(xx,yy,geo)
plt.show()
代码行后:
geo = raster.ReadAsArray()
你可以通过
翻转数据数组geo = geo[::-1,:]
并且应该得到正确的结果。