【pyproj】Pythonで緯度・経度から平面直角座標へ変換する方法

Python

cover image from Unsplash

Photo by Annie Spratt on Unsplash

本記事について

pyproj を用いて、緯度・経度(WGS84)から平面直角座標系へ変換する方法を紹介する。

実装環境

pyproj 3.4.0

pyproj を用いた座標変換 について

座標変換には、Transformerクラスを使用する。

入力値はスカラー値もしくは配列で、ndarray や pandas.Series も使用可能。

Accepted numeric scalar or array:
 
- :class:`int`
- :class:`float`
- :class:`numpy.floating`
- :class:`numpy.integer`
- :class:`list`
- :class:`tuple`
- :class:`array.array`
- :class:`numpy.ndarray`
- :class:`xarray.DataArray`
- :class:`pandas.Series`

実装例

以下が、スカラー値での座標変換の例である。

from pyproj import Transformer
 
# 緯度経度は、十進法度単位で指定する
latitude = 36.0
longitude = 139.5
 
transformer = Transformer.from_crs(
    crs_from="EPSG:4326", # WGS84
    crs_to="EPSG:6677",   # JGD2011 / Japan Plane Rectangular CS IX
    always_xy=True        # True だと、入出力は経度(よこ)、緯度(たて)の順になる
    )
 
# 座標系の指定は、以下のような表記でも可能
# transformer = Transformer.from_crs(
#     crs_from="WGS84",
#     crs_to="JGD2011 / Japan Plane Rectangular CS IX",
#     always_xy=True
#     )
 
# 経度(よこ)、緯度(たて)の順に指定
y, x = transformer.transform(xx=longitude, yy=latitude)
 
print(f"(x, y) = ({x: .4f}, {y: .4f})")
(x, y) = ( 51.3825, -30051.6100)

計算結果が正しいかどうか、確認する方法

国土地理院、測量計算サイトの「平面直角座標への変換」を利用して、平面直角座標への変換を用いて変換結果が正しいかどうか確認する。

「平面直角座標への変換」の画面と、計算の実行結果は以下の通り。

Image from Gyazo計算実行結果。(https://www.gsi.go.jp/LAW/heimencho.html#9 )

先ほどの pyproj での計算結果は、(x, y) = ( 51.3825, -30051.6100)であったので、 正しく計算できていることがわかる。