Last updated: 2024/01/23
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年夏は岐阜に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関連資料