海岸線データ(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 をパースする方法が有効であろう。