2017/05/14

【FSX/Plan-G・Python】データにないSIDのWaypointを含むフライトプランをPlan-Gで楽々作成するためのスクリプト

以前話した通り,FSXのフライトプラン作成はPlan-Gを使っているのだが,特にSID中のWaypointのデータがなく,手動で緯度と経度を入力しなければいけないものがあった.

Plan-Gをよくよく見てみると,データベースにユーザーがウェイポイントをインポートできる機能があった.
これはいい,ということでCSVファイルを作ってインポートしてみたのだが,思ったのと違う場所にウェイポイントが作成される.

何度やってもうまくいかないので色々調べた結果,AIS JAPAN等で見ることのできるデータはxx度y分z秒の形式なのに対し,Plan-Gで扱うのはxx.q度の形式になるらしい.
どういうことかというと,例えば東経132度30分という地点は,132.5度と入力しなければならないということ.

計算としては分の部分を60で割ってやればいいわけだが(秒まで考えると計算が面倒),手計算でいちいちやるのは面倒ということでCSVファイルをPythonで一括変換することに.

import csv
from math import modf
import os.path

def inputFilepath():
    path = raw_input("Where is the csv file?")
    return path

def convert(path):
    f1 = open(path, 'rb')
    dataReader = csv.reader(f1)
    result = []
    #convert
    for r in dataReader:
        lat = float(r[3]) #latitude int.min.sec
        lon = float(r[4]) #longitude int.min.sec
        #緯度
        lat_minsec, lat_int=modf(lat)
        lat_dec = lat_minsec / 0.6
        new_lat = lat_int + lat_dec
        #経度
        lon_minsec, lon_int = modf(lon)
        lon_dec = lon_minsec / 0.6
        new_lon = lon_int + lon_dec
        r[3] = new_lat
        r[4] = new_lon
        result.append(r)
    f1.close()
    #write
    filename, ext = os.path.splitext(path)
    new_path = filename + '_converted.csv'
    f2 = open(new_path, 'w')
    writer = csv.writer(f2, lineterminator='\n')
    writer.writerows(result)
    f2.close()


path = inputFilepath()
convert(path)

本当は分と秒のところを分けてそれぞれ割って…としなければならないのだが,だいたいの場所が分かればいいということでとりあえず分だけで.
Plan-Gのインポートフォーマットに合ったCSVデータを突っ込むと緯度と経度のところをPlan-Gで正しく読み込める形式に変換してくれる.

0 件のコメント:

コメントを投稿