Tracer des cartes raster en python?


8

J'essaie de tracer une carte raster en utilisant Pyhton. L'image n'est pas enregistrée, bien qu'elle apparaisse. De plus, les pixels n'apparaissent pas à l'endroit exact. Je reçois l'image comme indiqué ci-dessous (ce qui est faux, cependant, l'étiquetage lat-lon est correct.)

entrez la description de l'image ici

Vous trouverez ci-dessous l'orientation correcte, que j'ai exportée depuis ArcGIS. entrez la description de l'image ici

Il y a une erreur en plaçant le pixel au bon endroit, mais je ne l'obtiens pas. Comment le corriger?

Voici mon script.

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)    

Avez-vous essayé imshowau lieu de pcolormesh? Il prend un coin différent comme origine de l'image par défaut.
compatriote

Quand je remplace pcolormeshavec imshowelle dit NameError: nom « imshow » est pas défini Comment utiliser `imshow ici? @countryman
Mario


1
il est retourné vers le bas si vous avez inversé l'origine du raster qui peut être en bas à gauche ou en haut à gauche dans certaines applications

@DanPatterson Je n'en ai aucune idée, veuillez jeter un œil à mon script pour savoir où je le gâche.
Mario

Réponses:


6

J'ai résolu ce problème.

Je lisais le fichier raster en ligne de haut en bas et je le traçais en ligne de bas en haut.

Depuis, je ne peux rien faire avec le traçage, j'ai inversé le tableau, et cela a fonctionné.

Voici la modification que j'ai apportée,

ds = gdal.Open('Path\\To\\Raster.tif')
data = ds.ReadAsArray()
data = np.flipud(data)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.