Ich versuche, eine Rasterkarte mit Pyhton zu zeichnen. Das Bild wird nicht gespeichert, obwohl es angezeigt wird. Darüber hinaus erscheinen Pixel nicht genau an der Stelle. Ich erhalte ein Bild wie unten gezeigt (was FALSCH ist, aber die Lat-Lon-Kennzeichnung ist korrekt.)
Unten finden Sie die korrekte Ausrichtung, die ich aus ArcGIS exportiert habe.
Es ist ein Fehler, das Pixel an der richtigen Stelle zu platzieren, aber ich verstehe es nicht. Wie kann ich das korrigieren?
Hier ist mein Skript.
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from osgeo import gdal
from numpy import linspace
from numpy import meshgrid
import numpy as
#################################################################################
ds = gdal.Open('Path\\To\\Raster.tif')
data = ds.ReadAsArray()
gt = ds.GetGeoTransform()
proj = ds.GetProjection()
#################################################################################
xres = gt[1]
yres = gt[5]
xmin = gt[0] + xres * 0.5
xmax = gt[0] + (xres * ds.RasterXSize) - xres * 0.5
ymin = gt[3] + (yres * ds.RasterYSize) + yres * 0.5
ymax = gt[3] - yres * 0.5
x_center=(xmin+xmax)/2
y_center=(ymin+ymax)/2
#################################################################################
fig = plt.figure(figsize=(18, 10))
ax = fig.add_subplot(111, axisbg='w', frame_on=True)
m = Basemap(llcrnrlon=xmin,llcrnrlat=ymin,urcrnrlon=xmax,urcrnrlat=ymax,
projection='tmerc', lat_0 = y_center, lon_0 = x_center)
parallels = np.arange(15.,30.,0.25)
m.drawparallels(parallels,labels=[1,0,0,0],fontsize=12, linewidth=0.4)
meridians = np.arange(70.,90.,0.25)
m.drawmeridians(meridians,labels=[0,0,0,1],fontsize=12, linewidth=0.4)
x = linspace(0, m.urcrnrx, data.shape[1])
y = linspace(0, m.urcrnry, data.shape[0])
xx, yy = meshgrid(x, y)
m.pcolormesh(xx, yy, data, cmap=plt.cm.jet)
plt.show()
plt.savefig('Path\\To\\Save_Image.png', bbox_inches='tight', pad_inches=.2, dpi=600)
pcolormesh
mit imshow
ihm sagt Nameerror: name ‚imshow‘ ist nicht definiert So verwenden `imshow‘ hier? @ Countryman
imshow
anstattpcolormesh
? Standardmäßig wird eine andere Ecke als Bildursprung verwendet.