pyprojのインストール
pipで簡単に入ります。
pip install pyproj
今回の動作確認はpython3.7, pyproj=3.0.0.post1で行っています。
この記事で解説していないpyprojの情報は公式ドキュメントを参照してください。
pyproj4.github.io
座標系について
現在の日本では19種類の平面直角座標系が使われています。以下の表のように変換したい地域から座標系を選びます。
系 | EPSG (JGD2011) | 区域 |
---|---|---|
1 | 6669 | 長崎県、鹿児島県の一部 |
2 | 6670 | 福岡県、佐賀県、熊本県、大分県、宮崎県、鹿児島県の一部 |
3 | 6671 | 山口県、島根県、広島県 |
4 | 6672 | 香川県、愛媛県、徳島県、高知県 |
5 | 6673 | 兵庫県、鳥取県、岡山県 |
6 | 6674 | 京都府、大阪府、福井県、滋賀県、三重県、奈良県、和歌山県 |
7 | 6675 | 石川県、富山県、岐阜県、愛知県 |
8 | 6676 | 新潟県、長野県、山梨県、静岡県 |
9 | 6677 | 東京都の一部、福島県、栃木県、茨城県、埼玉県、千葉県、群馬県、神祭川県 |
10 | 6678 | 青森県、秋田県、山形県、岩手県、宮城県 |
11 | 6679 | 北海道の一部 |
12 | 6680 | 北海道の一部 |
13 | 6681 | 北海道の一部 |
14 | 6682 | 東京都の一部 |
15 | 6683 | 沖縄県の一部 |
16 | 6684 | 沖縄県の一部 |
17 | 6685 | 沖縄県の一部 |
18 | 6686 | 東京都の一部 |
19 | 6687 | 東京都の一部 |
詳しい分類方法は国土地理院のわかりやすい解説(https://www.gsi.go.jp/sokuchikijun/jpc.html)
を参考にしてください。
緯度経度から変換
from pyproj import Transformer epsg4326_to_epsg6677 = Transformer.from_crs("epsg:4326", "epsg:6677") latitude, longitude = 35.6802117, 139.7576692 x, y = epsg4326_to_epsg6677.transform(latitude, longitude) print(x, y) #-35476.257587129105 -6848.909311035857
例として皇居の緯度経度情報を変換しました。
変換するWebアプリでも同じ結果が返ってくることが確認できます。
平面直角座標から変換
epsg6677_to_epsg4326 = Transformer.from_crs("epsg:6677", "epsg:4326") x, y = -35476.257587129105, -6848.909311035857 lat, lon = epsg6677_to_epsg4326.transform(x, y) print(lat, lon) #35.68021170000001 139.75766920000004
元の緯度経度に戻せました。
実行速度について
pyprojは遅いといった意見を目にしたことがあるので、実行速度についても検証してみました。
検証してみた結果、
epsg4326_to_epsg6677 = Transformer.from_crs("epsg:4326", "epsg:6677")
というインスタンス作成のところが遅いことがわかりました。何度も座標変換を行う場合でも一度インスタンスを作成してしまえばいいのでさほど問題ではない気がします。numpyを使って自前で座標変換を実装してみましたが変換だけで比較するとpyprojの変換のほうが高速でした。
コメント