参考までに、Pythonコードに基づく3Dマップの視覚化。具体的な内容は次のとおりです。
前書き
Pythonを使用して、マップを3Dで視覚化します。マップをマップとして使用すると、3次元空間の軌跡とポイントを視覚化することができます。
図書館
複数のライブラリを使用しています。
1. gdal;
主に地図情報の読み取りに使用されます。このライブラリはGISで非常に一般的に使用されています。C++コードで記述されています。インストールできない場合は、pypiで対応するリソースを見つける必要があります。
2. opencv;
非常に一般的に使用される画像処理ライブラリ。
3. matplotlib;
一般的に使用される視覚化ライブラリ
結果
結果について直接、ナンセンスな話をしないでください。
コード
コードに直接移動します。コードは非常に単純です。
from osgeo import gdal
import cv2
gdal.UseExceptions()
ds = gdal.Open('E:/Pythoncode/地理情報を読む/無題.tif')
bandg = ds.GetRasterBand(1)
elevationg = bandg.ReadAsArray()
bandr = ds.GetRasterBand(2)
elevationr = bandr.ReadAsArray()
bandb = ds.GetRasterBand(3)
elevationb = bandb.ReadAsArray()import matplotlib.pyplot as plt
nrows, ncols = elevationr.shape
elevation= cv2.merge([elevationg,elevationr,elevationb])#
# I'm making the assumption that the image isn't rotated/skewed/etc.
# This is not the correct method in general, but let's ignore that for now
# If dxdy or dydx aren't 0, then this will be incorrect
x0, dx, dxdy, y0, dydx, dy = ds.GetGeoTransform()
x1 = x0 + dx * ncols
y1 = y0 + dy * nrows
plt.imshow(elevation, cmap='gist_earth', extent=[x0, x1, y1, y0])
plt.show()from PIL import Image
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
ax =Axes3D(fig)
img = Image.open('E:/Pythoncode/地理情報を読む/無題.tif')
xx=[]
yy=[]
colall=[]
x = img.size[0]
y = img.size[1]for i inrange(x):for j inrange(y):
r =hex(img.getpixel((i, j))[0])[2:]
b =hex(img.getpixel((i, j))[1])[2:]
g =hex(img.getpixel((i, j))[2])[2:]iflen(r)==1:
r ='0'+ r
iflen(b)==1:
b ='0'+ b
iflen(g)==1:
g ='0'+ g
col ='#'+ r + b + g
colall.append(col)
xx.append(x0 + dx * i)
yy.append(y0 + dy * j)
# col ='#FF00FF'
ax.scatter(xx, yy,5, c=colall, alpha=0.5)
plt.show()
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts