OpenStreetMapのデータをosmiumを使用して指定した範囲で抽出する方法
OpenStreetMapからダウンロードした大きなデータを、市区町村の行政区域の範囲や、自分で決めた任意の範囲で切り出したい場合があります。Osmiumを使用すると、GeoJSONで指定した範囲でOpenStreetMapのデータを抽出して新しいosm.pbfデータを作成することができます。
例えば、geofabrikの関東地方のーデータのページから最新のOpenStreetMapのデータをkanto-latest.osm.pbfとしてダウンロードし、東京中心部の範囲を抽出してみます。
ここでは、東京中心部を、次のようなGeoJSONで定義し、tokyo.geojsonというファイルに保存します。
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
139.757080078125,
35.79553849799263
],
[
139.6739959716797,
35.776043045943254
],
[
139.65682983398438,
35.73648044300146
],
[
139.65133666992188,
35.651158980402315
],
[
139.67193603515625,
35.60818490437746
],
[
139.67262268066406,
35.569656046317796
],
[
139.6739959716797,
35.54060755592023
],
[
139.72412109375,
35.509871738383964
],
[
139.7625732421875,
35.50204619633058
],
[
139.84909057617188,
35.504282143299655
],
[
139.88067626953125,
35.553457224935244
],
[
139.93972778320312,
35.610417892730496
],
[
139.94247436523438,
35.6517169333161
],
[
139.9321746826172,
35.71920046208453
],
[
139.90745544433594,
35.77102915686019
],
[
139.90264892578125,
35.80500599209946
],
[
139.757080078125,
35.79553849799263
]
]
]
}
}
]
}
kanto-latest.osm.pbfから上のGeoJSONの範囲でOpenStreetMapのデータを抽出するには、次のようにosmium
コマンドを実行します。
osmium extract \
--strategy complete_ways \
--set-bounds --polygon tokyo.geojson \
-o tokyo.osm.pbf \
kanto-latest.osm.pbf
pbfファイルをパースする際に、ツールによっては"Can’t read shapefiles unless a bounding box is provided.“などと警告されることがあります。これは作成したpbfのヘッダーにbounding boxが書かれていないためです。
ヘッダーにbboxを追加するために、osmium
コマンドに--set-bounds
オプションを追加することを忘れないようにします。
抽出後のtokyo.osm.pbfからベクトルタイルを作成し、maplibre-glで表示すると図1のようになり、期待した範囲でOpenStreetMapのデータを抽出できていることが確認できました。
より複雑なGeoJSONを使用して抽出範囲を指定することもできます。
例えば、Geoshapeリポジトリ - 地理形状データ共有サイトで公開されている東京都品川区 (13109A1968) | 歴史的行政区域データセットβ版から品川区の行政区域のGeoJSONをダウンロードし、GeoJSONのMultiPolygonのジオメトリとして指定されている範囲でOpenStreetMapのデータを抽出することなどができます。
OpenStreetMapのjapan-latest.osm.pbfのデータに対して、ダウンロードした品川区の行政区域をshinagawa.geojsonとして指定し、次のようにosmiumコマンドを実行します。
osmium extract \
--strategy complete_ways \
--set-bounds --polygon shinagawa.geojson \
-o shinagawa.osm.pbf \
japan-latest.osm.pbf
抽出結果のshinagawa.osm.pbfをQGISを使用して表示すると、図2のようになります。