座標変換・投影法変換・測地系変換・地図数理計算スキル。EPSG コード間の座標変換、WGS84/JGD2000/JGD2011/UTM/平面直角座標系の変換、旧測地系(Tokyo Datum)と新測地系の変換(pyproj 標準変換および TKY2JGD/PatchJGD パラメータファイルによる高精度変換)を行う。また bbox 計算(中心座標+縮尺+ピクセル数→緯度経度範囲)にも対応。ユーザーが座標変換、投影変換、EPSG、測地系、平面直角座標系、UTMゾーン、WGS84、JGD2011、旧測地系、新測地系、TKY2JGD、PatchJGD、bbox、縮尺計算、緯度経度、度分秒、DMS、座標系について言及した場合にこのスキルを使用する。
${CLAUDE_SKILL_DIR}/references/common-epsg-codes.md を参照${CLAUDE_SKILL_DIR}/references/japanese-plane-rect.md で系番号と EPSG を確認${CLAUDE_SKILL_DIR}/scripts/list_systems.py で座標系を検索することも可能from pyproj import Transformer
# always_xy=True で (経度, 緯度) の順序を強制
transformer = Transformer.from_crs("EPSG:4326", "EPSG:6677", always_xy=True)
x, y = transformer.transform(lon, lat)
バッチ変換は scripts/transform_coords.py を使用:
python3 ${CLAUDE_SKILL_DIR}/scripts/transform_coords.py --from-epsg 4326 --to-epsg 6677 --input coords.csv --output result.csv
変換方式の選択は ${CLAUDE_SKILL_DIR}/references/datum-transform.md を参照。
pyproj 標準変換(概算、パラメータファイル不要):
transformer = Transformer.from_crs("EPSG:4301", "EPSG:6668", always_xy=True)
TKY2JGD パラメータ変換(高精度、.par ファイル必要):
python3 ${CLAUDE_SKILL_DIR}/scripts/datum_transform.py --method tky2jgd --par-file TKY2JGD.par --input coords.csv
PatchJGD 変換(JGD2000 → JGD2011):
python3 ${CLAUDE_SKILL_DIR}/scripts/datum_transform.py --method patchjgd --par-file touhokuchihou2011.par --input coords.csv
詳細は ${CLAUDE_SKILL_DIR}/references/datum-transform.md を参照。
中心座標、縮尺、ピクセルサイズから bbox を計算:
python3 ${CLAUDE_SKILL_DIR}/scripts/bbox_calc.py --lat 34.7024 --lon 135.4959 --scale 2000 --width 1000 --height 1000
計算ロジックの詳細は ${CLAUDE_SKILL_DIR}/references/map-math.md を参照。
座標変換と密接に関連するため、距離・面積計算のガイドラインをここに記載する。
地理座標系 (EPSG:4326) の度数で距離を計算してはいけない。pyproj.Geod を使う:
from pyproj import Geod
geod = Geod(ellps="GRS80") # JGD2011 準拠楕円体
az12, az21, dist_m = geod.inv(lon1, lat1, lon2, lat2)
# dist_m: メートル単位の測地線距離
# az12: 順方位角(度)
平面直角座標系や UTM に投影すれば、ユークリッド距離として計算可能。ただし原点から離れるほど歪みが大きくなる:
import math
from pyproj import Transformer
t = Transformer.from_crs("EPSG:4326", "EPSG:6677", always_xy=True)
x1, y1 = t.transform(lon1, lat1)
x2, y2 = t.transform(lon2, lat2)
dist = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
Geod.inv() が最も正確(投影歪みなし)gdf.area。地理座標系のまま計算してはいけないbuffer() し、WGS84 に戻す${CLAUDE_SKILL_DIR}/references/japanese-plane-rect.md — 日本の平面直角座標系19系の定義と EPSG コード${CLAUDE_SKILL_DIR}/references/common-epsg-codes.md — よく使う EPSG コード一覧と測地系の関係${CLAUDE_SKILL_DIR}/references/datum-transform.md — 測地系変換ガイド(TKY2JGD/PatchJGD の詳細)${CLAUDE_SKILL_DIR}/references/map-math.md — 地図数理計算リファレンス(bbox、タイル座標)Transformer は always_xy=True を指定して (経度, 緯度) の順序を統一する