これは、ベースマップを使用してGeogtiffファイルからデータをプロットするスクリプトです。データはカテゴリに分類され、このドメインには13のカテゴリがあります。問題は、一部のカテゴリが1つの色にまとめられているため、一部の解像度が失われることです。
残念ながら、私はこれを修正する方法がわかりません。私はplt.cm.get_cmp
がディスクリートデータセットのほうが優れていると読んでいますが、残念ながらそれを働かせることはできませんでした。ここでColormapがデータを正しく分類していません
gtif = 'some_dir'
ds = gdal.Open(gtif)
data = ds.ReadAsArray()
gt = ds.GetGeoTransform()
proj = ds.GetProjection()
xres = gt[1]
yres = gt[5]
xmin = gt[0] + xres
xmax = gt[0] + (xres * ds.RasterXSize) - xres
ymin = gt[3] + (yres * ds.RasterYSize) + yres
ymax = gt[3] - yres
xy_source = np.mgrid[xmin:xmax+xres:xres, ymax+yres:ymin:yres]
ds = None
fig2 = plt.figure(figsize=[12, 11])
ax2 = fig2.add_subplot(111)
ax2.set_title("Land use plot")
bm2 = Basemap(ax=ax2,projection='cyl',llcrnrlat=ymin,urcrnrlat=ymax,llcrnrlon=xmin,urcrnrlon=xmax,resolution='l')
bm2.drawcoastlines(linewidth=0.2)
bm2.drawcountries(linewidth=0.2)
data_new=np.copy(data)
data_new[data_new==255] = 0
nbins = np.unique(data_new).size
cb =plt.cm.get_cmap('jet', nbins+1)
img2 =bm2.imshow(np.flipud(data_new), cmap=cb)
ax2.set_xlim(3, 6)
ax2.set_ylim(50,53)
plt.show()
labels = [str(i) for i in np.unique(data_new)]
cb2=bm2.colorbar(img2, "right", size="5%", pad='3%', label='NOAH Land Use Category')
cb2.set_ticklabels(labels)
cb2.set_ticks(np.unique(data_new))
ドメイン内で発見されたカテゴリ(番号クラス)は次のとおりです。ここでは任意の助け
np.unique(data_new)
array([ 0, 1, 4, 5, 7, 10, 11, 12, 13, 14, 15, 16, 17], dtype=uint8)
本当にありがとうございましたが。
ミスマッチを示す出力イメージも添付しました。
(動作していません)
ありがとうを!これは動作しますが、唯一の問題は、入れ子にされたforループが、私が持っている非常に大きなデータセット(数千ポイント)が遅いことです。非常に大きなデータセットに対してこれを最適化する方法はありますか? – user2013373
私はループを使用するより効率的なバージョンの答えを編集しました。 – ImportanceOfBeingErnest
ありがとう!私はループを避けるために働くと思っていたようなものです。よい一週間を! – user2013373