Seltsame Koordinaten nach der Konvertierung des Numpy-Arrays in ein Raster
Ich habe das NumPy-Array und seine Begrenzungsrahmenkoordinaten. Ich habe versucht, es basierend auf dieser Antwort mit Rasterio in ein Raster zu konvertieren , und es hat es als Raster gespeichert, aber wenn ich rasterio.show verwende, sind die Koordinaten sehr falsch.
Dies ist das Skript, das ich verwendet habe:
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)

Wie Sie sehen können, sind die Zahlen absolut nicht die richtigen Koordinaten.
Mein Endziel: das NumPy-Array korrekt in WGS84 projizieren zu können.
* Dieser Beitrag bezieht sich auch auf diesen Beitrag
Antworten
Sie berichten nicht, dass dies eine Suite von Reproject a NumPy Array mit affiner Transformation ist, wo Sie verwendenrasterio.transform.from_bounds
Aus dem Modul rasterio.transform
rasterio.transform.from_bounds (West, Süd, Ost, Nord, Breite, Höhe)
Gibt eine affine Transformation mit gegebenen Grenzen, Breite und Höhe zurück.
Geben Sie eine affine Transformation für ein georeferenziertes Raster aufgrund seiner Grenzen nach Westen, Süden, Osten, Norden und seiner Breite und Höhe in Pixel zurück.
Und
rasterio.transform.from_origin (West, Nord, xsize, ysize) Gibt
eine affine Transformation bei gegebener Größe oben links und Pixelgröße zurück.
Geben Sie eine affine Transformation für ein georeferenziertes Raster mit den Koordinaten der oberen linken Ecke West, Nord und den Pixelgrößen xsize, ysize zurück.
Es ist nicht dasselbe und die Ergebnisse sind unterschiedlich
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)
Neu
Die vier Ecken des Rasters von der Grenze (Breite = 1103, Höhe = 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()

Die 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()
