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 https://github.com/arunasank/osm-tag-statscd osm-tag-statsnpm installnpm 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=yescould look like["==", "building", "yes"] -
A filter for
building=yes,building:levels>1andamenity=parkingcould look like
[
"all",
["==", "building", "yes"],
["==", "parking", "amenity"],
[">", "building:levels", 1]
]
- A filter for a building with
building:levels<=1and noamenity=parkingcould 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.