トップOpenStreetMap > Osmosisにより海岸線データを抽出する

Osmosisにより海岸線データを抽出する

陸地ポリゴン

海岸線データ(natural=coastline)だけであれば、Overpass API[1]による抽出が一番簡単である。 ただし、座標データを得ようとした場合、多分、メモリ使用量が大きすぎるためであろうが、エラーになる。

後から海岸線データに含まれている node データだけを得ようとしても、やはり、 メモリ使用量が大きすぎるためであろうか、エラーになる。

世界地図を分割すれば、可能であろうが、その前に、Osmosis による抽出を試みる。 この場合、世界をヨーロッパ、アフリカ、アジア、北米など8分割したデータを使う。

陸地ポリゴンを得るためには、分割データから得た海岸線データをマージする必要がある。

osmosis でもマージできるが、全抽出データはメモリに読み込むことができる大きさであるから、マージは難しくない。

海岸線データの抽出

まず、ファイルサイズが小さい中米のデータで試した。

所要時間は 7.5分であった。出力ファイルのサイズは 289MB となった。 内容はサクラエディタで確認した。pbfファイルは 588MB であるから、サイズ的には、その半分位の大きさである。

pbf形式で出力すればファイルサイズは小さくなるが、いずれ解析では、テキストファイルが必要となる。

set JAVACMD_OPTIONS=-server -Xmx3G -Djava.io.tmpdir=d:/tmp

osmosis ^
  --rbf d:/downloads/central-america-latest.osm.pbf ^
  --tf reject-relations ^
  --tf accept-ways natural=coastline ^
  --used-node ^
  --wx c:/osm/central-america_coastline.osm

次に、ファイルサイズが最も大きい(26.2GB)ヨーロッパを試す。

osmosis ^
  --rbf d:/downloads/europe-latest.osm.pbf ^
  --tf reject-relations ^
  --tf accept-ways natural=coastline ^
  --used-node ^
  --wx c:/osm/europe_coastline.osm

osmosis ^
  --rbf d:/downloads/australia-oceania-latest.osm.pbf ^
  --tf reject-relations ^
  --tf accept-ways natural=coastline ^
  --used-node ^
  --wx c:/osm/australia-oceania_coastline.osm

osmosis ^
  --rbf d:/downloads/antarctica-latest.osm.pbf ^
  --tf reject-relations ^
  --tf accept-ways natural=coastline ^
  --used-node ^
  --wx c:/osm/antarctica_coastline.osm


osmosis ^
  --rbf d:/downloads/africa-latest.osm.pbf ^
  --tf reject-relations ^
  --tf accept-ways natural=coastline ^
  --used-node ^
  --wx c:/osm/africa_coastline.osm

osmosis ^
  --rbf d:/downloads/asia-latest.osm.pbf --buffer ^
  --tf reject-relations ^
  --tf accept-ways natural=coastline ^
  --used-node ^
  --wx c:/osm/asia_coastline.osm

実行結果

Osmosis単独で海岸線データを抽出することができるが、世界規模では、 現在使用中のパソコンでは 10数時間かかる。 最初に、全てのノード情報をパースして、一時ファイルにしまっているようで、ここに時間がかかる。

海岸線データは wayデータのごく一部である。必要となるノード情報はごく一部であるから 無駄な仕事をしている。

海岸線データの way データだけであれば、Overpass API で全世界のものが一括して取り出せる。 ここに含まれるノード数は膨大なため、Overpass API では一度では取り出せない。

海岸線データだけでなく、国境、地名など様々な情報を得る場合は、Overpass API では手間がかかる。 ダウンロードした europe.osm.pbfファイルなどを使う方がいいケースもあるだろう。

しかし、osmosis のフィルタ処理は時間がかかる。 osmosis では pbfファイルの解凍のみを行い、 パイプ接続で専用プログラムがこの xml をパースする方法が有効であろう。

リファレンス

[1] OSM Overpass API