緯度経度からutm座標への変換
はじめに
WebODMでGCPファイル使用際に緯度経度からutm座標に変換したほうが効率よかったのでAIさんに相談した。
UTM座標って?
Wikipediaさんを見てください。
日本で使用する際には、ゾーンが51から54となるのでゾーンの境目に注意する必要がありそう。
実装
AIさんに聞いたのでアルゴリズムとかはよくわかんないです。 個人的には54の帯でしか使用しないので以下で十分。
- 緯度経度を与えてutm座標をカンマ区切りで出力するもの
mkdir utm_converter cd utm_converter python3 -m venv venv source venv/bin/activate pip install pyproj vi utm_converter.py
import argparse from pyproj import Proj def convert_to_utm(lon, lat): # Compute UTM zone e2u_zone = int(divmod(lon, 6)[0]) + 31 # Define EQA2UTM converter e2u_conv = Proj(proj='utm', zone=e2u_zone, ellps='WGS84') # Apply the converter utmx, utmy = e2u_conv(lon, lat) # Add offset if the point is in the southern hemisphere if lat < 0: utmy = utmy + 10000000 return utmx, utmy def main(): parser = argparse.ArgumentParser(description='Convert longitude and latitude to UTM coordinates.') parser.add_argument('lon', type=float, help='Longitude in degrees') parser.add_argument('lat', type=float, help='Latitude in degrees') args = parser.parse_args() utmx, utmy = convert_to_utm(args.lon, args.lat) print(f"{utmx},{utmy}") if __name__ == "__main__": main()
- 念の為、緯度経度を与えてutm座標をカンマ区切りで出力し、zoneを3つめに出力するのも作った。
cat utm_converter_addzone.py
import argparse from pyproj import Proj def convert_to_utm(lon, lat): # Compute UTM zone e2u_zone = int(divmod(lon, 6)[0]) + 31 # Define EQA2UTM converter e2u_conv = Proj(proj='utm', zone=e2u_zone, ellps='WGS84') # Apply the converter utmx, utmy = e2u_conv(lon, lat) # Add offset if the point is in the southern hemisphere if lat < 0: utmy = utmy + 10000000 return utmx, utmy, e2u_zone def main(): parser = argparse.ArgumentParser(description='Convert longitude and latitude to UTM coordinates.') parser.add_argument('lon', type=float, help='Longitude in degrees') parser.add_argument('lat', type=float, help='Latitude in degrees') args = parser.parse_args() utmx, utmy, zone = convert_to_utm(args.lon, args.lat) print(f"{utmx},{utmy},{zone}") if __name__ == "__main__": main()
使用例
$ python utm_converter.py 140.710349472 36.66216925 474114.43463469925,4057435.8432025937
$ python utm_converter_addzone.py 140.710349472 36.66216925 474114.43463469925,4057435.8432025937,54