พิกัดแปลก ๆ หลังจากแปลงอาร์เรย์จำนวนนับเป็นแรสเตอร์
ฉันมีอาร์เรย์ NumPy และพิกัดกล่องขอบเขต ฉันได้พยายามแปลงเป็นแรสเตอร์โดยใช้แรสเตอริโอตามคำตอบนี้และบันทึกเป็นแรสเตอร์ แต่เมื่อฉันใช้ราสเตอริโอแสดงว่าพิกัดผิดมาก
นี่คือสคริปต์ที่ฉันใช้:
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)
อย่างที่คุณเห็นตัวเลขไม่ใช่พิกัดที่ถูกต้องอย่างแน่นอน
เป้าหมายสุดท้ายของฉัน: เพื่อให้สามารถฉายอาร์เรย์ NumPy ใหม่เป็น WGS84 ได้อย่างถูกต้อง
* โพสต์นี้เกี่ยวข้องกับโพสต์นี้ด้วย
คำตอบ
คุณไม่ได้รายงานว่านี่เป็นชุดของReproject a NumPy array ที่มีการแปลง Affineที่คุณใช้rasterio.transform.from_bounds
จากโมดูล rasterio.transform
rasterio.transform.from_bounds (ตะวันตก, ใต้, ตะวันออก, เหนือ, ความกว้าง, ความสูง)
ส่งกลับการแปลง Affine ที่กำหนดขอบเขตความกว้างและความสูง
ส่งคืนการแปลง Affine สำหรับแรสเตอร์อ้างอิงทางภูมิศาสตร์โดยกำหนดขอบเขตทางทิศตะวันตกทิศใต้ทิศตะวันออกทิศเหนือและความกว้างและความสูงเป็นจำนวนพิกเซล
และ
rasterio.transform.from_origin (ตะวันตก, เหนือ, xsize, ysize)
ส่งคืนการแปลง Affine ตามขนาดด้านซ้ายบนและพิกเซล
ส่งคืนการแปลง Affine สำหรับแรสเตอร์อ้างอิงทางภูมิศาสตร์โดยให้พิกัดของมุมบนซ้ายด้านตะวันตกทิศเหนือและขนาดพิกเซล xsize, ysize
ไม่ใช่สิ่งเดียวกันและผลลัพธ์ก็แตกต่างกัน
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)
ใหม่
มุมทั้งสี่ของแรสเตอร์จากขอบเขต (กว้าง = 1103, สูง = 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()
การเปลี่ยนแปลง
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()