データを移すだけでは、 GISの移行は終わらない。
GISデータの移行作業では、 CSVなどに格納されたデータを そのまま移行すればよいとは 限りません。
特にGISデータでは、 緯度・経度などの 位置情報 が含まれています。
今回の移行では、 CSVのカラムに緯度・経度が存在しており、 その値を取得して 移行先で利用できる座標系へ 変換する必要がありました。
CSVを読む。
↓
緯度・経度を取得する。
↓
座標系を変換する。
↓
変換後のデータを移行する。
ここで問題になったのが、 旧日本測地系と世界測地系の違い でした。
そもそも、 「座標系が違う」とはどういうことか
緯度・経度は、 数字だけを見ると 単純な位置情報に見えます。
しかし、 その数字が どの測地系を基準にしているのか によって、 表している位置が変わります。
今回扱ったデータでは、 旧日本測地系の座標を 世界測地系へ変換する必要がありました。
緯度・経度の数字だけを見て 「そのまま使える」と判断するのではなく、 どの座標系・測地系の値なのかを 確認することが重要です。
まずCSVの中身を確認する
座標変換を行う前に、 まず移行元のCSVが どのような構造になっているのかを 確認します。
今回は、 CSVの中に 緯度と経度を格納したカラムが 存在していました。
id,latitude,longitude,name
001,35.xxxxx,139.xxxxx,・・・
002,35.xxxxx,139.xxxxx,・・・
003,35.xxxxx,139.xxxxx,・・・
重要なのは、 座標だけを別のデータとして 扱うのではなく、 元のレコードの中に存在する 緯度・経度カラム として扱うことです。
そのため、 CSVの各レコードを読み込みながら 緯度・経度の値を取得し、 必要な変換を行ってから 移行処理へ渡す構成にしました。
旧日本測地系から 世界測地系へ変換する
今回の移行で必要だったのが、 旧日本測地系から 世界測地系への座標変換です。
ここで重要なのは、 単純に緯度・経度の数値を 加算・減算するような処理ではなく、 座標変換のための仕組みを利用する ことです。
Pythonから座標変換を行う場合、 座標系を指定したうえで 変換処理を実行できるライブラリなどを 利用できます。
移行元CSV
│
├─ 緯度
└─ 経度
│
↓
座標系を指定
│
↓
座標変換処理
│
↓
変換後の緯度・経度
│
↓
移行処理
このとき大切なのは、 「緯度」と「経度」を それぞれ単独の数字として 変換するのではなく、 座標の組み合わせとして扱う ことです。
変換した座標を そのまま移行処理へ渡す
座標変換を行った後は、 変換後の緯度・経度を 移行対象のデータとして扱います。
イメージとしては、 次のような流れです。
CSV
↓
レコード読み込み
↓
緯度・経度取得
↓
座標変換
↓
変換後の値を設定
↓
APIなどによる移行処理
↓
移行先へ登録
つまり、 座標変換だけを独立した作業として 行ったわけではありません。
データを読み込む → 変換する → 移行する という 一連の処理の中に 座標変換を組み込みました。
座標だけ変換しても、 データの対応関係を壊してはいけない
GISデータの移行で もう一つ重要だったのが、 元のレコードとの対応関係 です。
CSVには、 緯度・経度だけではなく、 IDや名称など、 その他の情報も含まれています。
そのため、
座標だけを抜き出して変換し、
後から別のデータとして
結合するのではなく、
元のレコードを維持したまま
緯度・経度だけを変換して
移行処理へ渡すことが重要になります。
元データ
ID 緯度 経度 その他
001 旧緯度 旧経度 データA
002 旧緯度 旧経度 データB
003 旧緯度 旧経度 データC
↓ 座標変換
移行データ
ID 緯度 経度 その他
001 新緯度 新経度 データA
002 新緯度 新経度 データB
003 新緯度 新経度 データC
こうすることで、 「どのレコードの座標なのか」 が分からなくなることを防ぎます。
変換したから終わり、 ではない
座標変換処理を組み込んだら、 次に確認する必要があるのが 変換結果が正しいか ということです。
特にデータ移行では、 処理が正常終了しただけでは 十分ではありません。
変換前と変換後のデータを確認し、 想定した座標系になっているか、 緯度・経度の値がおかしくなっていないか、 レコード数や対応関係に問題がないかを 確認します。
CSVに格納された 移行元の緯度・経度。
座標変換後の 移行先で利用する緯度・経度。
「変換処理がエラーなく終わった」 ことと、 「正しい座標に変換できた」 ことは別です。
GISデータ移行で 座標変換を経験して分かったこと
この経験を通して、 GISデータでは 「数字を移すだけ」 ではなく、 その数字が何を意味しているのか を理解する必要があると 実感しました。
CSVのカラムを見る。
↓
緯度・経度を確認する。
↓
座標系を確認する。
↓
必要な座標変換を行う。
↓
元のレコードとの対応を維持する。
↓
移行先へ登録する。
↓
変換結果を確認する。
一見すると 「CSVの緯度・経度を変換する」 だけの処理に見えます。
しかし実際には、 座標系、 データ構造、 CSV、 Python、 移行処理など、 複数の要素を 正しく組み合わせる必要がありました。
FIELD NOTE
座標変換は、 「数字を変える処理」ではない。
GISデータ移行で重要だったのは、 緯度・経度の数字そのものではなく、 その数字がどの座標系を基準としているのか を理解することでした。
CSVから緯度・経度を読み取り、 座標系を確認する。
そして、 必要な座標変換を行い、 元のレコードとの対応を維持したまま 移行処理へ渡す。
データ移行では、
「ファイルを移したから完了」
ではありません。
移行先で正しい意味を持つデータに
なっているか。
そこまで確認して、
初めて移行が完了したと考えられます。