Python 3.6で緯度経度座標から平面直角座標へ変換
Table of Contents
Windows 10 ProのAnacondaで構築したPython環境において,pyprojを使って緯度経度から平面直角座標に変換する方法を調べました.
pyprojのインストール
pyprojのインストールpipで行いますが,以下のエラーとなりました.
distutils.errors.DistutilsPlatformError: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
そこで,こちらの記事を参考にし,Unofficial Windows Binaries for Python Extension Packagesからpyprojのバイナリ(私の環境では,pyproj‑1.9.5.1‑cp36‑cp36m‑win_amd64.whl)をダウンロードします.通常は以下のフォルダにダウンロードされるようです.
C:\Users\ユーザー名\Downloads
次に以下のようにしてインストールします.
C:\Users\ユーザー名\Downloads> python -m pip install pyproj-1.9.5.1-cp36-cp36m-win_amd64.whl
以下のようになりました
Processing c:\users\ユーザー名\downloads\pyproj-1.9.5.1-cp36-cp36m-win_amd64.whl
Installing collected packages: pyproj
Successfully installed pyproj-1.9.5.1
Jupyter notebookを立ち上げ,pyprojをimportします.なお,numpyもimportにしておきます.
In [1]: import pyproj
import numpy as np
測地系等について
こちらの記事が大変参考になります.世界測地系平面直角座標は東京湾あたりですと,9系EPSG2451,世界測地系JGD2000(緯度経度座標)はEPSG4612とのことです.平面直角座標についてはこちらが参考になります.
緯度経度座標から平面直角座標へ変換
準備が整いましたので,こちらの記事を参考にし,いよいよ緯度経度座標から平面直角座標へ変換します.南北がX座標,東西がY座標であることに注意しましょう.
In [2]: lat = 35.679933
lon = 139.714465
EPSG4612 = pyproj.Proj("+init=EPSG:4612")
EPSG2451 = pyproj.Proj("+init=EPSG:2451")
y,x = pyproj.transform(EPSG4612, EPSG2451, lon,lat)
print("x = ", x)
print("y = ", y)
latやlonにはリストやnumpyのarrayを渡すこともできます.
In [3]: lata = np.array([35.6, 35.6])
lona = np.array([139.7, 139.7])
ya, xa = pyproj.transform(EPSG4612, EPSG2451, lona,lata)
結果はこちらのサイトで検証できます.
the module 'utm' can also be used to transform lon lat into cartesian coordinates or inverse, and it can tell the UTM zone number.
pip install utm
Thank you Liu for your comment. However, my intention was converting to the Japan's plane rectangular coordinate system, in which accuracy is higher than in UTM in Tokyo Bay or narrow domains. pyproj (proj) is the most common and generalized tool to convert among wide variety of coordinates, including UTM, and I recommend you to use it.