Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

地図XMLの仕様書における測地系記載変更に対するメモ #26

Open
koswatana opened this issue Jul 9, 2024 · 6 comments

Comments

@koswatana
Copy link
Collaborator

koswatana commented Jul 9, 2024

地図XML(2024/07/09時点)の仕様書において、「測地系は日本測地系2000 (JGD2000) 又は日本測地系2011 (JGD2011)」と追記があり、データ上はこれらの区別がつかないことが判明。

image

現状、mojxml2geojsonでは、
(1) 平面直角座標系 (JGD2000) →緯度経度 (JGD2000)
(2) 緯度経度 (JGD2000) → 緯度経度 (JGD2011)


方針

  • (検証中)調査の結果、現状の実装はJGD2010の平面直角座標を、JGD2011の緯度経度に変換することを想定していたが、pyprojでパラメータファイル(touhokutaiheiyouoki2011.gsb)を指定していないため、適用範囲内であってもJGD2000の緯度経度が返っている
  • 地図XMLの仕様上、入力がJGD2000かJGD2011かは判定できない
    • JGD2011が入力された場合、パラメータファイルを適用してしまうと二重で2011の変換処理をかけてしまうことになる
  • そのため地図XMLで判別できるようになるまでは、mojxml2geojsonでは入力の測地系に関わらず平面直角座標から緯度経度への変換のみを行うものとする
    • 現状の実装には影響がない
      • 入力がどちらかわからない以上fromは変更のしようがない
      • toのEPSGが6668(JGD2011)になってしまっているので、修正するか?
  • ドキュメントは修正する

地籍調査

参考資料1

参考資料2


def xy2bl(coordinates, from_epsg, to_epsg):

def GetCrs(crsText: str):

@koswatana
Copy link
Collaborator Author

koswatana commented Jul 12, 2024

pyprojが2011のパラメータファイルを使っているかどうか
使っている場合inputが2011に対して再度2011の処理をかけて、存在しない測地系になってしまう

@koswatana
Copy link
Collaborator Author

koswatana commented Jul 12, 2024

  • pyprojはEPSGを指定するだけではパッチが提供されていなさそう
    石巻市役所
    JGD2000 10系 EPSG:2452
    y, x | 40978.932, -173713.629
root@68ea51e6c429:/# python
Python 3.10.14 (main, Jul  2 2024, 22:12:36) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyproj import Transformer

① 平面直角座標(JGD2000)→ 緯度経度(JGD2000)
>>> Transformer.from_proj(2452, 4612).transform(-173713.629, 40978.932) # JGD2000
(38.434192786760825, 141.3027177136399)

② 平面直角座標(JGD2000)→ 緯度経度(JGD2011)
>>> Transformer.from_proj(2452, 6668).transform(-173713.629, 40978.932) #JGD2011
(38.434192786760825, 141.3027177136399)

③ 平面直角座標(JGD2000)→ 緯度経度(JGD2000)→ 緯度経度(JGD2011)
>>> Transformer.from_proj(4612, 6668).transform(38.434192786760825, 141.3027177136399)
(38.434192786760825, 141.3027177136399)

参考

https://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/xy2blf.html
image

https://vldb.gsi.go.jp/sokuchi/surveycalc/patchjgd/index.html
image

@koswatana
Copy link
Collaborator Author

koswatana commented Jul 12, 2024

>>> Transformer.from_proj(6668, 6678).transform(38.434192786760825, 141.3027177136399)
(-173713.62900000004, 40978.93200000026)
>>> Transformer.from_proj(6678,2452).transform(-173713.62900000004, 40978.93200000026)
(-173713.62900000004, 40978.93200000026)

@koswatana
Copy link
Collaborator Author

@koswatana
Copy link
Collaborator Author

koswatana commented Jul 12, 2024

https://github.com/tohka/JapanGridShift/blob/master/README.ja.md

wget https://github.com/tohka/JapanGridShift/raw/master/gsb_files/touhokutaiheiyouoki2011.gsb

NTv2 (*.gsb) の仕様について
https://qiita.com/tohka383/items/e73c7235efc15efe2c1b#ntv2-gsb-%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

EPSG の towgs84 問題について
https://qiita.com/tohka383/items/43434990e30ad76f6651

@koswatana
Copy link
Collaborator Author

koswatana commented Jul 13, 2024

pyprojでtouhokutaiheiyouoki2011を適用する方法

root@68ea51e6c429:/# wget https://github.com/tohka/JapanGridShift/raw/master/gsb_files/touhokutaiheiyouoki2011.gsb
root@68ea51e6c429:/# python
Python 3.10.14 (main, Jul  2 2024, 22:12:36) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

from pyproj import CRS, Transformer

jgd2000 = CRS.from_epsg(4612)  # EPSGコードでJGD2000を定義
jgd2011 = CRS.from_epsg(6668)  # EPSGコードでJGD2011を定義

grid_shift_file = "/touhokutaiheiyouoki2011.gsb"

transformer = Transformer.from_pipeline(
    f"+proj=pipeline "
    f"+step +proj=latlong +ellps=GRS80 "
    f"+step +proj=hgridshift +grids={grid_shift_file} "
)

longitude = 141.302717714
latitude = 38.434192787
jgd2011_longitude, jgd2011_latitude = transformer.transform(longitude, latitude)

jgd2011_longitude_formatted = f"{jgd2011_longitude:.9f}"
jgd2011_latitude_formatted = f"{jgd2011_latitude:.9f}"

print(f"JGD2011座標: 緯度 = {jgd2011_latitude_formatted}, 経度 = {jgd2011_longitude_formatted}")

> JGD2011座標: 緯度 = 38.434178585, 経度 = 141.302768728

参考:パラメータファイルを指定しないでEPSGのみ指定した場合

from pyproj import CRS, Transformer

# JGD2000とJGD2011のCRSを定義
jgd2000 = CRS.from_epsg(4612)  # EPSGコードでJGD2000を指定
jgd2011 = CRS.from_epsg(6668)  # EPSGコードでJGD2011を指定
transformer = Transformer.from_crs(jgd2000, jgd2011)
longitude = 141.302717714
latitude = 38.434192787

# 座標変換
jgd2011_x, jgd2011_y = transformer.transform(longitude, latitude)

print(f"JGD2011座標: X = {jgd2011_x}, Y = {jgd2011_y}")

> JGD2011座標: X = 141.302717714, Y = 38.434192787
  • EPSGを指定しているが入力値と変化がないことを確認

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant