緯度経度をXY座標に変換する
このテーマ自体は調べたら下記二つ分かりやすい記事がありました。
しかし以下のStack Exchangeを試して混乱の時間が始まったのです...
Convert GPS coordinates to Web Mercator EPSG: 3857 using python/pyproj
(メルカトル法で計算した値とpyprojで出てくる値が違うぞ...)
ただ結論から言うと、違ってOKのようですね。
まずはメルカトル法から見ていきます。
Spherical Pseudo-Mercator projection (長い)
Open Street Mapのwikiにpythonコード載ってました。すばらし。
ただこれだと不完全で、上記のStack ExchangeやBokehブログでは地球の半径を基にスケーリングしてます。
何をやっているかというと、
地球を完全な球と仮定して、地球を風呂敷のように広げてX, Yに変換しているイメージです。
これで世界中どこでもX, Yが得られますが、とても簡単で大雑把な仮定なので精度がイマイチというウワサ。
EPSG-based projection
一方最初の記事のEPSGコードに基づく変換は、地球を細かく区切ってエリアごとに風呂敷を広げるイメージ。
そのため、
- 精度は前のやつより良い
- エリアごとにEPSGコードが違う
- 始点(X=Y=0)の位置もエリアごとに違う
というわけでした。そりゃ値違うわ。
さいごに
pythonのコードはGithubで公開してます。
(わざわざレポジトリ作るまでもなかったか。。。)
おしまい。