FALMA座標(x, y)と緯度経度の変換コード

Last updated: 2024/01/23

2018年以降の観測

2018年から現在まで、FALMAのXY座標の原点の緯度経度は(36.76, 136.76)です。以下のコードを利用してFALMAのXY座標と緯度経度の変換ができます。

import numpy as np

R = 6370.519
flmLati = 36.76/180*np.pi #Latitude and longtitude of the center of FALMA
flmLongi = 136.76/180*np.pi

#緯度経度をx,yに変換
def convertLoc(longiVal, latiVal):
    longiVal = longiVal/180.0*np.pi
    latiVal = latiVal/180.0*np.pi
    x = np.arcsin(np.sin((longiVal-flmLongi)/2.0)*np.cos(flmLati))*R*2
    y = (latiVal-flmLati)*R
    return [x, y]

#x,yを緯度経度に変換
def convertXY(x, y):
    #x in longitude direction, y in latitude direction
    latiVal = flmLati+y/R
    longiVal = 2*np.arcsin(np.sin(x/2.0/R)/np.cos(flmLati))+flmLongi
    return [latiVal/np.pi*180, longiVal/np.pi*180]
import numpy as np

R = 6370.519
flmLati = 36.76/180*np.pi #Latitude and longtitude of the center of FALMA
flmLongi = 136.76/180*np.pi

#緯度経度をx,yに変換
def convertLoc(longiVal, latiVal):
    longiVal = longiVal/180.0*np.pi
    latiVal = latiVal/180.0*np.pi
    x = np.arcsin(np.sin((longiVal-flmLongi)/2.0)*np.cos(flmLati))*R*2
    y = (latiVal-flmLati)*R
    return [x, y]

#x,yを緯度経度に変換
def convertXY(x, y):
    #x in longitude direction, y in latitude direction
    latiVal = flmLati+y/R
    longiVal = 2*np.arcsin(np.sin(x/2.0/R)/np.cos(flmLati))+flmLongi
    return [latiVal/np.pi*180, longiVal/np.pi*180]

例えば、緯度36.663827、経度136.649749(風車付近)をx,yに変換します。

print(convertLoc(136.649749, 36.663827))
Out:
[-9.820830000618585, -10.693142304610348]
print(convertLoc(136.649749, 36.663827))
Out:
[-9.820830000618585, -10.693142304610348]

結果の単位はkmです。

x = -2 km, y = -143 km (岐阜大学辺り)を緯度経度に変換します。

print(convertXY(-2, -144))
Out:
[35.46487910798415, 136.73754752008668]
print(convertXY(-2, -144))
Out:
[35.46487910798415, 136.73754752008668]

2017年夏観測

2017年夏は岐阜にFALMAの観測を行いました。その時のFALMAのXY座標の緯度経度は(35.475361, 136.960311)でした。

import numpy as np

R = 6370.519
flmLati = 35.475361/180*np.pi #Latitude and longtitude of the center of FALMA
flmLongi = 136.960311/180*np.pi

#緯度経度をx,yに変換
def convertLoc(longiVal, latiVal):
    longiVal = longiVal/180.0*np.pi
    latiVal = latiVal/180.0*np.pi
    x = np.arcsin(np.sin((longiVal-flmLongi)/2.0)*np.cos(flmLati))*R*2
    y = (latiVal-flmLati)*R
    return [x, y]

#x,yを緯度経度に変換
def convertXY(x, y):
    #x in longitude direction, y in latitude direction
    latiVal = flmLati+y/R
    longiVal = 2*np.arcsin(np.sin(x/2.0/R)/np.cos(flmLati))+flmLongi
    return [latiVal/np.pi*180, longiVal/np.pi*180]
import numpy as np

R = 6370.519
flmLati = 35.475361/180*np.pi #Latitude and longtitude of the center of FALMA
flmLongi = 136.960311/180*np.pi

#緯度経度をx,yに変換
def convertLoc(longiVal, latiVal):
    longiVal = longiVal/180.0*np.pi
    latiVal = latiVal/180.0*np.pi
    x = np.arcsin(np.sin((longiVal-flmLongi)/2.0)*np.cos(flmLati))*R*2
    y = (latiVal-flmLati)*R
    return [x, y]

#x,yを緯度経度に変換
def convertXY(x, y):
    #x in longitude direction, y in latitude direction
    latiVal = flmLati+y/R
    longiVal = 2*np.arcsin(np.sin(x/2.0/R)/np.cos(flmLati))+flmLongi
    return [latiVal/np.pi*180, longiVal/np.pi*180]

厳密に言うと、違う地域に地球の半径は少し違うので、この計算方法には誤差があります。でも、北陸と岐阜とは地球の半径の差は大きくないはずです。まったく違う緯度の地域の計算には違う地球半径の設定が必要かもしれません。


緯度経度から距離の計算

似たような方法で2点の緯度経度から距離(km)を簡単に計算できます。以下の関数を利用します。(地球の半径は北陸地方の半径に設定しています)

import numpy as np

R = 6370.519
def dis(lati1, longi1, lati2, longi2):
    lati1 = lati1/180*np.pi
    longi1 = longi1/180*np.pi
    lati2 = lati2/180*np.pi
    longi2 = longi2/180*np.pi
    return R*np.arccos(np.sin(lati1)*np.sin(lati2)+np.cos(lati1)*np.cos(lati2)*np.cos(longi1-longi2))
import numpy as np

R = 6370.519
def dis(lati1, longi1, lati2, longi2):
    lati1 = lati1/180*np.pi
    longi1 = longi1/180*np.pi
    lati2 = lati2/180*np.pi
    longi2 = longi2/180*np.pi
    return R*np.arccos(np.sin(lati1)*np.sin(lati2)+np.cos(lati1)*np.cos(lati2)*np.cos(longi1-longi2))

例えば、風車(36.663827, 136.649749)とFALMA冬観測の中心点(36.76, 136.76)の距離を計算します。

print(dis(36.663827, 136.649749, 36.76, 136.76))
Out:
14.522838518141185
print(dis(36.663827, 136.649749, 36.76, 136.76))
Out:
14.522838518141185

距離の単位はkmです。


Back to Python関連資料