Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
84 lines (63 sloc) 3.09 KB

osm-tag-stats - filter OSM features, find stats and export GeoJSON using OSM QA Tiles

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
  • cd osm-tag-stats
  • npm install
  • npm link


  1. To write GeoJSON to a file: osm-tag-stats --mbtiles=<path-to-mbtiles> [options] --geojson=<output-geojson-file>
  2. 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(
--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 and amenity=parking could look like

	["==", "building", "yes"],
	["==", "parking", "amenity"],
	[">", "building:levels", 1]
  • A filter for a building with building:levels<=1 and no amenity=parking could look like
	["==", "building", "yes"],
		["==", "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.