標高+1m

Don't be rational

緯度経度おさらい

メモ。

北緯,南緯,東経,西経ってやるのはめんどくさいから南緯、西経にはそれぞれ頭に-を付ける

latitude - 緯度 - y軸
longitude - 経度 - x軸
経線 - 縦線
緯線 - 横線

緯度は赤道が0° で北極が90°、南極は-90°
緯度が上がると北 、下がると南
経度はイギリスを通る経線上が0°で太平洋の日付変更線のあたりが180°で-180°.
180°の線をまたがない限り経度が上がると東、下がると西

20.15 < 日本の緯度 < 45.33
122.56 < 日本の経度 < 153.59
東京はだいたい緯度35.7、経度139.7のあたり。

緯度,経度とメートルの変換
ここから http://d.hatena.ne.jp/Kiske/20090324/1237894846

地球の円周は40054782m (2*π*地球の半径(6378150))
てことはこれを360°で割った値、すなわち(すなわち!)111263.83mが1度
これじゃ使いづらいから秒まで落とす
1秒は 1度/(60*60) だから だいたい31m

経度はフクザツ。地球の円周の代わりに、各地点で地球を横にスライスした断面の円周を使わなきゃいけない。
cosに緯度を適用して地球の円周に掛けてやるとその緯度での断面の円周が出るから、これを360で割れば1度だし、360*60*60で割れば1秒が出る。東京だとだいたい25m

ハマったところ:

  1. 秒を取ってからそれを度に足したりするときに度に直し忘れるのが何回かあった。扱う桁数増えるけど全部度でやった方がミス減るかも
  2. javascriptでコサイン取るときに、Math.cosに度のまま渡しちゃってめちゃくちゃな値が帰ってきちゃった。一旦ラジアンに直さないと行けない。1° = 0.0174532925ラジアン (おさらい: 1ラジアンは円の中心と半径と同じ長さの弧がなす角度。つまり半径が1の円なら(円周/360) = (2*π*1)/360 = 0.017…)
### 定数 ###
PI = Math.PI
radian =  (2*PI)/360 #0.017...
earthRadius = 6378150 #地球の半径
earthCircumference = (2*PI*earthRadius) #地球の円周 = 40054782
latSecPmetre = (360*60*60)/earthCircumference #1m相当の緯度秒

cos = Math.cos

#メートル -> 緯度秒
metreToLatitudeSecond = (metre) ->
  metre * latSecPmetre

#メートル,緯度 -> 経度秒
metreToLongitudeSecond = (metre, lat) ->
  metre * ((360*60*60)/(earthCircumference*cos(lat*radian)))