Tọa độ kỳ lạ sau khi chuyển đổi mảng numpy thành raster
Tôi có mảng NumPy và tọa độ hộp giới hạn của nó. Tôi đã cố gắng chuyển đổi nó thành raster bằng cách sử dụng rasterio, dựa trên câu trả lời này và nó đã lưu nó dưới dạng raster, nhưng khi tôi sử dụng rasterio. Hiển thị tọa độ rất sai.
Đây là tập lệnh tôi đã sử dụng:
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)
![](https://post.nghiatu.com/assets/images/s/TQ2Yb.png)
Như bạn có thể thấy, những con số hoàn toàn không phải là tọa độ chính xác.
Mục tiêu cuối cùng của tôi: có thể chiếu lại mảng NumPy vào WGS84 một cách chính xác.
* Bài đăng này cũng liên quan đến bài đăng này
Trả lời
Bạn không báo cáo rằng đây là một bộ Reproject một mảng NumPy với biến đổi affine nơi bạn sử dụngrasterio.transform.from_bounds
Từ mô-đun rasterio.transform
rasterio.transform.from_bounds (tây, nam, đông, bắc, chiều rộng, chiều cao)
Trả về biến đổi Affine các giới hạn, chiều rộng và chiều cao đã cho.
Trả lại phép biến đổi Affine cho một đường raster tham chiếu địa lý dựa trên các giới hạn phía tây, nam, đông, bắc và chiều rộng và chiều cao của nó theo số pixel.
Và
rasterio.transform.from_origin (tây, bắc, xsize, ysize)
Trả về một phép biến đổi Affine được cung cấp cho kích thước pixel phía trên bên trái và.
Trả về một phép biến đổi Affine cho một đường raster tham chiếu địa lý với tọa độ của góc trên bên trái phía tây, phía bắc và kích thước pixel xsize, ysize.
Nó không giống nhau và kết quả khác nhau
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)
Mới
Bốn góc của đường raster từ giới hạn (chiều rộng = 1103, chiều cao = 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()
![](https://post.nghiatu.com/assets/images/s/GTDob.png)
Sự biến đổi
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()
![](https://post.nghiatu.com/assets/images/s/yVPqL.png)