26.9.07(月)
一つ前の記事に、登記所備付地図から抽出した電子筆データの並べ替えを書いたが、並べ替えてもデータの形式は当然ながら GeoJSON のままである。グーグルマイマップで表示するには、これを KML 形式に変換しなければならない。GeoJSON から KML に変換するマクロも数日前に作ったが、その前にいったん GeoJSON 形式のまま、プロパティや経度・緯度1組毎に改行を入れるなど、見やすい形に整形することを前提としている。そうしないと見づらくて、どんな筆データかわからないし、なによりマクロで扱いにくい。その見やすい形に整形するマクロも数日前に作った。
今回も、そのマクロで整形をしたら、途中でエラーが出た。なんでだろう? ここ数日、正常に動いていたのだが・・ 調べたら、[経度,緯度]],[[経度,緯度],の並びをエラーとしていた。あれまあ、内側の境界線でエラーか。
GeoJSON 形式でも KML 形式でも、ポリゴン(多角形)は外側の境界線だけではなく、内側に境界線がある場合にも対応できるようになっている。作成した整形用のマクロでは GeoJSON 形式ファイルの中の [経度,緯度],[経度,緯度],・・の ],[ 部分に改行を入れ、
[経度,緯度],
[経度,緯度],
:
と整形しているのだが、マクロがエラーと判定した ]],[[ は境界線と次の境界線との区切りで、1つ目は外側の境界線、2つ目以降は内側の境界線となる。土地の筆データは、ほとんどが外側の境界線だけだが、内側に境界線がある筆があるんだな。ちょうど、サンマリノ共和国を囲むイタリアや、レソト王国を囲む南アフリカ共和国みたいなものだ。
"coordinates":[[
[経度,緯度],
:
[経度,緯度],
]]
と整形してきたが、境界線と境界線の区切り ]],[[ を見つけたら、
"coordinates":[[
[経度,緯度],/*外側の境界線*/
:
[経度,緯度],
],[
[経度,緯度],/*内側の境界線*/
:
[経度,緯度],
]]
のように整形しなければならないのだな。ここ数日正常に動いていたマクロなのだが、このパターンには対応していなかった。でもまあ、見逃さずにエラーと判定してくれたおかげでこの機能不足に気付いた訳だから、良しとしよう。また、日本国の土地の筆データには、外側の境界線だけではなく、内側にも境界線がある場合があると初めて知った。これも収穫である。
そんな訳で、マクロにこの機能を追加することにした。1つの筆データに内側境界が2つ以上存在する場合もあり得るだろう。見たら、エラーとして検出した筆データにも、内側境界が2つあった。これも意識して機能追加しなければならない。そういえばイタリアの中にもサンマリノ共和国だけでなく、ヴァティカン市国もあるなあ。
機能追加作業をしていたら、G空間情報センターへの問い合わせにメールで回答が来た。前の記事に書いた、某字の電子データに 89番地の3がなく、88番地の次が90番地の1となっている件である。
> FAQにてご紹介しておりますが、登記所備付地図データは
> すべてのデータが地図に展開可能な公共座標が付与されているとは限りません。
> 公共座標が付与されていない任意座標については、シェープファイルは
> GeoJSONには変換しておりませんので、欠落するような場合もございます。
26.9.08(火)
内側にも境界線がある筆データに対応できるよう、マクロに機能追加する作業を前日から始め、思ったより手こずったが、何とかできた。
ところで、登記所備付地図の GeoJSON 形式電子データでは、筆データのジオメトリ型に上記のような Polygon を使っているが、まさか MultiPolygon はないよね? つまり、一つの筆に飛び地があって、外側境界線が複数というようなことだが、そんな筆はないだろなあ。市町村や県の境界線なら、飛び地のため複数の外側境界線があるだろうが、筆でそれはないよな。もしあったら、またマクロに機能追加・・ いや、手作業でエディットして、個々の Polygon に分割することで対応しよう。
地図上に筆を表示するためのデータを作るのが目的なので、それを実現できるなら手段は何でも構わない。GeoJSON の構文規則上、内側境界線への対応はマクロに機能追加せざるを得なかったが、万が一 MultiPolygon があっても手作業での分割で十分だろう。こういう作業では、いつの間にか手段が目的化してしまう。しばしばそういう状態に陥るが、それは時間の無駄である。過ぎたるは及ばざるが如し。