TVニュースでも地震の話題(東海地震の予測など)が時折紹介されています。
僕も、自宅から海岸までのGoogle mapsを使って距離を調べてみたことがありますが、これを数千件調べろと言われたら途方に暮れてしまいます。
そんな貴方?に最適な日本の海岸線データが国土地理院で無償で公開されています。
しかも満潮時の海岸線とのことなので、最悪条件での計算にも最適です。
http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-C23.html
ファイルフォーマットは県別のxmlなのですが、やたら海岸線が入り組んでいたり、島が多い件ではデータ量が膨大になります。
最初はRubyのREXMLでちまちま緯度経度データをテキスト変換していたのですが、毎回同じファイルでRubyごと落ちてしまいました。
『これはメモリが足りないんだな..』とおもい、緯度経度データのみ正規表現で抽出するプログラムを作成してこっちで処理しました。単機能なゆえにメモリ消費も少なく処理も数段速かったので、最初からこっちにしとけばよかったと軽く後悔しました。
tab区切りのテキストファイルをExcelに読み込ませてみましたが、あまりのデータ量に絶句..。
北海道と東北だけで約60万地点ありました。
『Excelって100万行くらいしかつかえないんじゃ?』と思って調べてみると、やはりその通り。
まさかExcelの100万行の壁を意識する日が来るとは思ってもみませんでした。
仕方がないのでAccessにデータを読み込ませました。(SQLiteなどは諸事情により使えませんでした)
データ総数は401万件。Accessもいままで検索速度を気にしたことはなかったのですが、さすがに400万件ともなると意外と時間がかかります。
最終的には
- 大まかな海岸線判定用にAccess側で緯度経度0.01(約1km)程度のメッシュのテーブルを作成
- RubyからODBCでAccessに接続し、1kmメッシュの5×5、10×10などのエリアで順次検索範囲を拡大し海岸線が現れるまで検索。
- 2.のメッシュから海岸線にヒットしたエリアを計算し、海岸線の実データテーブルに対してクエリを投げて結果を入手。各地点と対象の住所間の距離を計算。
みたいなながれで海岸線からの距離計算プログラムを作りました。
住所⇒緯度経度変換は gmapsに頼っています(デベロッパー登録しないと制限厳しいですが)
こんなので1件あたりの検索時間は約10秒。もう少し早くならないかとは思うのですが、Accessで自分でテーブルやクエリを作成したのは初めてなので、高速化スキルも乏しく無理そうです。一番手っ取り早い方法としてPC10台くらいで動かして理論処理速度10倍とかのほうが僕のスキル的には現実的です。
■ データの解像度?(2018/05/23)
400万ポイントというのは、何mおきのデータなのか?という疑問があったので簡単に調べてみました。
日本の海岸線の総延長は約35000km、それに対し海岸線の地点データは401万ポイントなので、
35000(km) / 4010000 = 0.008728...(km) = 8.728(m) ということになります。
結構細かいですね。
一例として、沖ノ鳥島の一つの島について、Google earthの写真と地点データをグラフ化したものを載せておきます。
護岸部含めて直径50mほどの島に16ポイントあります。
8.7m間隔で地点データがあるならば、本来は50(m) × 3.14 / 8.728(m) = 17.98(point) で、約18ポイントのデータがあるべきなんですが、少し少ないですね。
でも海岸線からの距離を計測するには十分な精度が得られると思います。
無料で入手できるとは..
データ数が多すぎて手に負えない感満載ですが、データが足りないよりは全然ましです。
このようなデータを無償で公開されている国土地理院の方々に感謝です。
-
購入金額
0円
-
購入日
2018年05月22日
-
購入場所
ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。