Numpy dizisini raster'e dönüştürdükten sonra garip koordinatlar

Jan 03 2021

NumPy dizisine ve sınırlayıcı kutu koordinatlarına sahibim. Bu cevaba göre rasterio kullanarak onu raster'e dönüştürmeye çalıştım ve raster olarak kaydetti, ancak rasterio.show'u kullandığımda koordinatlar çok yanlış.

Kullandığım komut dosyası bu:

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)

Gördüğünüz gibi, sayılar kesinlikle doğru koordinatlar değil.

Nihai hedefim: NumPy dizisini WGS84'e doğru bir şekilde yeniden yansıtabilmek.

* Bu gönderi, bu gönderi ile de ilgilidir

Yanıtlar

2 gene Jan 03 2021 at 21:44

Bunun, kullandığınız yerde afin dönüşümü olan bir NumPy dizisini Reproject paketi olduğunu bildirmiyorsunuz.rasterio.transform.from_bounds

Gönderen rasterio.transform modülü

rasterio.transform.from_bounds (batı, güney, doğu, kuzey, genişlik, yükseklik)
Sınırlar, genişlik ve yükseklik verilen bir Afin dönüşümü döndürür.
Batı, güney, doğu, kuzey sınırları ve piksel sayısı olarak genişliği ve yüksekliği verilen bir coğrafi referanslı raster için Affine dönüşümü döndürür.

Ve

rasterio.transform.from_origin (batı, kuzey, xsize, ysize)
Sol üst ve piksel boyutları verilen bir Afin dönüşümü döndürür.
Sol üst köşesinin batı, kuzey koordinatları ve xsize, ysize piksel boyutları verildiğinde, coğrafi referanslı bir raster için bir Afin dönüşümü döndürür.

Aynı şey değil ve sonuçlar farklı

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)

Yeni

Sınırdan rasterin dört köşesi (genişlik = 1103, yükseklik = 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()

Dönüşüm

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