Vẽ bản đồ raster trong python?


8

Tôi đang cố gắng vẽ sơ đồ raster bằng Pyhton. Hình ảnh không được lưu, mặc dù nó xuất hiện. Hơn nữa, pixel không xuất hiện ở vị trí chính xác. Tôi đang nhận được hình ảnh như hình bên dưới (đó là SAI, tuy nhiên, ghi nhãn lat-lon là chính xác.)

nhập mô tả hình ảnh ở đây

Dưới đây là định hướng chính xác, mà tôi đã xuất từ ​​ArcGIS. nhập mô tả hình ảnh ở đây

Có một số sai lầm trong việc đặt pixel vào đúng vị trí, nhưng tôi không nhận được nó. Làm thế nào để sửa nó?

Đây là kịch bản của tôi.

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from osgeo import gdal
from numpy import linspace
from numpy import meshgrid
import numpy as 

#################################################################################

ds = gdal.Open('Path\\To\\Raster.tif')
data = ds.ReadAsArray()

gt = ds.GetGeoTransform()   
proj = ds.GetProjection()

#################################################################################

xres = gt[1]
yres = gt[5]

xmin = gt[0] + xres * 0.5
xmax = gt[0] + (xres * ds.RasterXSize) - xres * 0.5
ymin = gt[3] + (yres * ds.RasterYSize) + yres * 0.5
ymax = gt[3] - yres * 0.5

x_center=(xmin+xmax)/2
y_center=(ymin+ymax)/2    
#################################################################################

fig = plt.figure(figsize=(18, 10))
ax = fig.add_subplot(111, axisbg='w', frame_on=True)

m = Basemap(llcrnrlon=xmin,llcrnrlat=ymin,urcrnrlon=xmax,urcrnrlat=ymax,
             projection='tmerc', lat_0 = y_center, lon_0 = x_center)

parallels = np.arange(15.,30.,0.25)
m.drawparallels(parallels,labels=[1,0,0,0],fontsize=12, linewidth=0.4) 

meridians = np.arange(70.,90.,0.25)
m.drawmeridians(meridians,labels=[0,0,0,1],fontsize=12, linewidth=0.4)

x = linspace(0, m.urcrnrx, data.shape[1])
y = linspace(0, m.urcrnry, data.shape[0])

xx, yy = meshgrid(x, y)

m.pcolormesh(xx, yy, data, cmap=plt.cm.jet)

plt.show()
plt.savefig('Path\\To\\Save_Image.png', bbox_inches='tight', pad_inches=.2, dpi=600)    

Bạn đã thử imshowthay vì pcolormesh? Nó lấy một góc khác làm nguồn gốc hình ảnh theo mặc định.
người đồng hương

Khi tôi thay thế pcolormeshbằng tên imshowđó là NameError: tên 'imshow' không được xác định Làm thế nào để sử dụng 'imshow' ở đây? @countryman
Mario

Dưới đây là một số ví dụ thực sự hay: matplotlib.org/basemap/users/examples.html
người đồng hương

1
nó được lật xuống nếu bạn lật nguồn gốc của raster có thể ở dưới cùng bên trái hoặc trên cùng bên trái trong một số ứng dụng

@DanPatterson Tôi không có ý kiến ​​gì, xin vui lòng xem kịch bản của tôi để tìm nơi tôi đang làm hỏng nó.
Mario

Câu trả lời:


6

Tôi đã giải quyết vấn đề này.

Tôi đã đọc các tập tin raster hàng từ trên xuống dưới, và vẽ nó theo hàng từ trên xuống dưới.

Vì, tôi không thể làm bất cứ điều gì với âm mưu tôi đã lật mảng và nó đã hoạt động.

Dưới đây là sửa đổi mà tôi đã thực hiện,

ds = gdal.Open('Path\\To\\Raster.tif')
data = ds.ReadAsArray()
data = np.flipud(data)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.