osm-tag-stats uses OSM QA Tiles and TileReduce to filter OSM features and export them to GeoJSON. You can download planet tiles or use country extracts.
If you are using your own vector tiles, osm-tag-stats currently assumes osm
as the tile layer.
git clone [email protected]:mapbox/osm-tag-stats.git
cd osm-tag-stats
npm install
npm link
- To write GeoJSON to a file:
osm-tag-stats --mbtiles=<path-to-mbtiles> [options] --geojson=<output-geojson-file>
- To print the count of features to stdout:
osm-tag-stats --mbtiles=<path-to-mbtiles> [options] --count
Path to --mbtiles
and either of --geojson
or --count
is required.
Option | Description |
---|---|
--mbtiles | path to mbtiles file |
--users | comma separated list of OSM usernames. You can pass mapbox for usernames of @mapbox/team-data. |
--filter | path to file containing tag filters. Filters are based on [Mapbox GL Style Filters]( Filters are written as specified in the Mapbox GL JS Filter Specification(https://www.mapbox.com/mapbox-gl-style-spec/#types-filter). |
--dates | comma separated UTC format start and end dates. If end date is not supplied, filters start date + 24 hours. |
--count | prints count of filtered features to stdout. |
--geojson | path to write geojson, overwrites existing file. |
--help | print usage instructions. |
osm-tag-stats --geojson=highway_primary.geojson --mbtiles='../latest.planet.mbtiles' --filter='filter/highway_primary.json' --users='Mapbox'
The filtered geojson has been written to highway_primary.geojson
osm-tag-stats --geojson=highway_primary.geojson --count --mbtiles='../latest.planet.mbtiles' --filter='filter/highway_primary.json' --users='Mapbox'
Features total: 89186
The filtered geojson has been written to highway_primary.geojson
You can specify filters of varying levels of complexity using the Mapbox GL Style Filter Specification
-
A simple filter for
building=yes
could look like["==", "building", "yes"]
-
A filter for
building=yes
,building:levels>1
andamenity=parking
could look like
[
"all",
["==", "building", "yes"],
["==", "parking", "amenity"],
[">", "building:levels", 1]
]
- A filter for a building with
building:levels<=1
and noamenity=parking
could look like
[
"all",
["==", "building", "yes"],
[
"none",
["==", "parking", "amenity"],
[">", "building:levels", 1]
]
]
- A filter for all highways -
highway=*
can look like
["has", "highway"]
Create a file with your filter specification and pass the path of this file to the --filter
argument. There are some presets in the filter
folder that you can use.