Pythonでラスターマップをプロットしますか?


8

Pyhtonを使用してラスターマップをプロットしようとしています。画像は表示されますが、保存されていません。また、ピクセルが正確な場所に表示されていません。以下のような画像が表示されます(これは間違っていますが、緯度経度のラベルは正しいです)。

ここに画像の説明を入力してください

以下は、ArcGISからエクスポートした正しい向きです。 ここに画像の説明を入力してください

ピクセルを正しい場所に配置するのにいくつかの間違いがありますが、私はそれを取得できません。それを修正するには?

これが私のスクリプトです。

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)    

imshow代わりに試しましたpcolormeshか?デフォルトでは、画像の原点として別のコーナーを取ります。
同胞

置き換えるpcolormeshimshowNameError:name 'imshow' is not defined is hereと表示されます。@countryman
マリオ

ここにいくつかの本当に良い例があります:matplotlib.org/basemap/users/examples.html
カントリーマン

1
一部のアプリケーションでは左下または左上であるラスターの原点を反転させた場合、上下に反転します

@DanPattersonわからないので、スクリプトを調べて、どこで混乱しているかを見つけてください。
マリオ

回答:


6

私はこの問題を解決しました。

私はラスターファイルを行方向に上から下に読み取り、行方向に下から上にプロットしていました。

それで、私はプロットで何もできないので、配列をひっくり返しました、そしてそれはうまくいきました。

以下は私が行った変更です、

ds = gdal.Open('Path\\To\\Raster.tif')
data = ds.ReadAsArray()
data = np.flipud(data)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.