Coordonnées étranges après la conversion d'un tableau numpy en raster
J'ai le tableau NumPy et ses coordonnées de boîte englobante. J'ai essayé de le convertir en raster en utilisant rasterio, sur la base de cette réponse , et il l'a enregistré en tant que raster, mais lorsque j'utilise rasterio.show, les coordonnées sont très fausses.
Voici le script que j'ai utilisé:
bbox_coords_wgs84=[-101.7359960059834, 20.21904081937658, -100.5717967351885, 20.8312118894487]
#variables for the projection:
minx=bbox_coords_wgs84[0]
maxy=bbox_coords_wgs84[3]
pixel_size= 10
#according to the post on GIS SO:
import rasterio
from rasterio.transform import from_origin
transform=from_origin(minx,maxy,pixel_size,pixel_size)
crs_img='EPSG:4326'
with rasterio.open('test1.tif',
'w',
driver='GTiff',
height=ndvi.shape[0],
width=ndvi.shape[1],
count=1,
dtype=ndvi.dtype,
crs=crs_img,
nodata=None, # change if data has nodata value
transform=transform) as dst:
dst.write(ndvi, 1)
#display the results:
from matplotlib import pyplot
from rasterio.plot import show
src = rasterio.open('test1.tif')
show(src)

Comme vous pouvez le voir, les nombres ne sont absolument pas les bonnes coordonnées.
Mon objectif final: pouvoir reprojeter correctement le tableau NumPy en WGS84.
* Cet article concerne également cet article
Réponses
Vous ne signalez pas qu'il s'agit d'une suite de Reprojecter un tableau NumPy avec une transformation affine où vous utilisezrasterio.transform.from_bounds
Depuis le module rasterio.transform
rasterio.transform.from_bounds (ouest, sud, est, nord, largeur, hauteur)
Renvoie une transformation affine en fonction des limites, de la largeur et de la hauteur.
Renvoie une transformation affine pour un raster géoréférencé en fonction de ses limites ouest, sud, est, nord et de sa largeur et hauteur en nombre de pixels.
Et
rasterio.transform.from_origin (west, north, xsize, ysize)
Renvoie une transformation affine en fonction de la taille en haut à gauche et des pixels.
Renvoie une transformation affine pour un raster géoréférencé en fonction des coordonnées de son coin supérieur gauche ouest, nord et des tailles de pixels xsize, ysize.
Ce n'est pas la même chose et les résultats sont différents
rasterio.transform.from_bounds( -101.7359960059834,20.21904081937658,-100.5717967351885,20.8312118894487,1103,2039)
Affine(0.0010554843796871222, 0.0, -101.7359960059834,
0.0, -0.0003002310299519955, 20.8312118894487)
rasterio.transform.from_origin(-101.7359960059834,20.8312118894487,10,10)
Affine(10.0, 0.0, -101.7359960059834,
0.0, -10.0, 20.8312118894487)
Nouveau
Les quatre coins du raster à partir de la limite (largeur = 1103, hauteur = 2039)
fig,ax = plt.subplots()
ax.plot(0,0,'ro')
ax.plot(1103,0,'bo')
ax.plot(0,2039,'go')
ax.plot(1103,2039,'co')
plt.show()

La transformation
trans = rasterio.transform.from_bounds(-101.7359960059834,20.21904081937658-100.5717967351885,20.8312118894487,1103,2039)
trans*(0,0)
(-101.7359960059834, 20.8312118894487)
trans*(1103,0)
(-100.5717967351885, 20.8312118894487)
trans*(0,2039)
(-101.7359960059834, 20.21904081937658)
trans*(1103,2039)
(-100.5717967351885, 20.21904081937658)
fig,ax = plt.subplots()
ax.plot(*(trans*(0,0)),'ro')
ax.plot(*(trans*(1103,0)),'bo')
ax.plot(*(trans*(0,2039)),'go')
ax.plot(*(trans*(1103,2039)),'co')
plt.show()
