Koordinat aneh setelah mengubah array numpy menjadi raster
Saya memiliki array NumPy dan koordinat kotak pembatasnya. Saya telah mencoba mengubahnya menjadi raster menggunakan rasterio, berdasarkan jawaban ini , dan itu menyimpannya sebagai raster, tetapi ketika saya menggunakan rasterio. menunjukkan koordinatnya sangat salah.
Ini adalah skrip yang telah saya gunakan:
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)
Seperti yang Anda lihat, angka-angka tersebut sama sekali bukan koordinat yang benar.
Tujuan akhir saya: untuk dapat memproyeksikan ulang array NumPy ke WGS84 dengan benar.
* Postingan ini juga terkait dengan postingan ini
Jawaban
Anda tidak melaporkan bahwa ini adalah rangkaian dari memproyeksikan ulang array NumPy dengan transformasi affine di mana Anda menggunakanrasterio.transform.from_bounds
Dari modul rasterio.transform
rasterio.transform.from_bounds (barat, selatan, timur, utara, lebar, tinggi)
Mengembalikan transformasi Affine dengan batasan, lebar dan tinggi.
Kembalikan transformasi Affine untuk raster bergeoreferensi yang diberi batas barat, selatan, timur, utara, serta lebar dan tingginya dalam jumlah piksel.
Dan
rasterio.transform.from_origin (west, north, xsize, ysize)
Mengembalikan transformasi Affine berdasarkan kiri atas dan ukuran piksel.
Kembalikan transformasi Affine untuk raster bergeoreferensi dengan koordinat sudut kiri atas barat, utara dan ukuran piksel xsize, ysize.
Ini bukanlah hal yang sama dan hasilnya berbeda
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)
Baru
Keempat sudut raster dari batas (lebar = 1103, tinggi = 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()
Transformasi
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()