QGISで測地系によるズレを実験する

この記事は1年以上前に書かれました。
内容が古くなっている可能性がありますのでご注意下さい。


地球上の同じ地点であっても、その座標を表すために用いられた測地系によって、緯度経度の値が異なる場合があります。
最近では、WGS84(世界測地系1984)が用いられることが多いですが、日本の場合、2002年4月1日に世界測地系を導入するまでは、日本測地系(旧日本測地系、Tokyo Datum)と呼ばれる測地系を用いていました。ややこしいことに、2002年に導入された測地系は日本測地系2000(JGD2000)とも呼ばれています。
そこで、

  • 世界測地系1984(WGS84)
  • 旧日本測地系(Tokyo)
  • 日本測地系2000(JGD2000)

の3種類において、どのようなズレが生じるのか、簡単なプログラムによってQGIS上で実験してみました。結果は以下のようになり、旧日本測地系(Tokyo)は大きくズレていたものの、世界測地系1984(WGS84)と日本測地系2000(JGD2000)はポイントが重なって目視ではズレを確認できませんでした。

実験に用いたのは以下のPythonスクリプトです。

dictCrs = {'JGD2000':'4612',
           'WGS84':'4326',
           'TOKYO':'4301'}
dictPoint = {'Hokkaido':'141.34694,43.06417',
             'Tokyo':'139.69167,35.68944',
             'Fukuoka':'130.41806,33.60639',
             'Okinawa':'127.68111,26.2125'}
for crs, epsg in dictCrs.items():
    newLayer = QgsVectorLayer('Point?crs=epsg:' + epsg, crs, 'memory')
    QgsProject.instance().addMapLayer(newLayer)
    newLayer.startEditing()
    newLayer.addAttribute(QgsField('Ken', QVariant.String))
    for ken, lonlat in dictPoint.items():
        lon, lat = lonlat.split(',', 1)
        newFeature = QgsFeature(newLayer.fields())
        newFeature.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(float(lon), float(lat))))
        newFeature.setAttribute('Ken', ken)
        newLayer.addFeature(newFeature)
    newLayer.commitChanges()
    newLayer.updateExtents()

3種類の測地系と4県(北海道、東京、福岡、沖縄)の県庁所在地をディクショナリで定義しています。県庁所在地の緯度経度はこちらのサイトを参考にし、測地系はWGS84とのことです。

測地系のディクショナリを列挙してレイヤを作成し、さらにその中に県庁所在地のポイントを作成しています。

プログラムの実行には、QGISのPythonコンソールを使用します。
「プラグイン」メニューから「Pythonコンソール」を選択すると、Pythonコンソールが表示されます。
「エディタの表示」ボタンをクリックします。

上記のプログラムを読み込み、「スクリプト実行」ボタンをクリックします。

3つのレイヤが作成され、マップキャンバスにはポイントが4つ(に見える)表示されます。

背景地図を表示させると、北海道、東京、福岡、沖縄にポイントがあることが分かります。

東京のポイントにズームすると、旧日本測地系(Tokyo)は他の2つ(WGS84、JGD2000)とズレていることが分かります。

線の長さを測ると、450m以上ズレていることが分かります。