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)
imshow
anstattpcolormesh
? Standardmäßig wird eine andere Ecke als Bildursprung verwendet.pcolormesh
mitimshow
ihm sagt Nameerror: name ‚imshow‘ ist nicht definiert So verwenden `imshow‘ hier? @ CountrymanAntworten:
Ich habe dieses Problem gelöst.
Ich las die Rasterdatei zeilenweise von oben nach unten und zeichnete sie zeilenweise von unten nach oben.
Da ich mit dem Plotten nichts anfangen kann, habe ich das Array umgedreht und es hat funktioniert.
Unten ist die Modifikation, die ich gemacht habe,
quelle