やべべのべ(雑用系リーマンの独り言)

ポイ活、投資、プログラミングなど。

csvを読み込んで座標変換してグラフ化(3次元)

ちょっとマニアックだが…ecef座標系をENU(EAST-NORTH-UP)座標に変換するpythonプログラムを使って
移動経路などを3次元プロットするプログラム。

例えばGPSから得たECEF座標から基準点を原点として飛行経路を描くときに使えます。
5行目に出てくるecef_enuというプログラムは別の記事を参照。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D #3次元でプロットする機能
import ecef_enu as e2e #作成プログラムからimport ecef→enuに座標変換

df1 = pd.read_csv('***.csv') #csvをreadする
xyz1 = df1[['ecef_x[m]','ecef_y[m]','ecef_z[m]']].values

arr1 = np.empty((0,3)) #配列用のメモリを確保する。
orign = np.array([-3957314.622,3310254.134,3737540.044]) #基準位置

#ecef座標をenuに変換して、for文で変換結果を行追加していく
for i1 in range(df1.shape[0]):
    enu1 = e2e.ecef2enu(xyz1[i1],orign)
    enu_xyz1 = enu1.reshape(1,3)
    arr1 = np.append(arr1,enu_xyz1,axis=0)

enux1 = arr1[:,0]
enuy1 = arr1[:,1]
enuz1 = arr1[:,2]

#結果を3次元でプロット
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(enux1,enuy1,enuz1,color='b',alpha=1,label="****",s=5)
plt.legend()
plt.show()