Planetiler - Flexible tool to build planet-scale vector tilesets from OpenStreetMap data in a few hours

Overview

Planetiler

Planetiler (pla·nuh·tai·lr, formerly named "Flatmap") is a tool that generates Mapbox Vector Tiles from geographic data sources like OpenStreetMap. Planetiler aims to be fast and memory-efficient so that you can build a map of the world in a few hours on a single machine without any external tools or database.

Vector tiles contain raw point, line, and polygon geometries that clients like MapLibre can use to render custom maps in the browser, native apps, or on a server. Planetiler packages tiles into an MBTiles (sqlite) file that can be served using tools like TileServer GL or even queried directly from the browser. See awesome-vector-tiles for more projects that work with data in this format.

Planetiler works by mapping input elements to rendered tile features, flattening them into a big list, then sorting by tile ID to group into tiles. See ARCHITECTURE.md for more details or this blog post for more of the backstory.

Demo

See the live demo of vector tiles created by Planetiler.

Planetiler Demo Screenshot Style © OpenMapTiles · Data © OpenStreetMap contributors

Usage

To generate a map of an area using the basemap profile, you will need:

  • Java 16+ or Docker
  • at least 1GB of free disk space plus 5-10x the size of the .osm.pbf file
  • at least 1.5x as much free RAM as the input .osm.pbf file size

To build the map:

Using Java, download planetiler.jar from the latest release and run it:

wget https://github.com/onthegomap/planetiler/releases/latest/download/planetiler.jar
java -Xmx1g -jar planetiler.jar --download --area=monaco

Or using Docker:

docker run -e JAVA_TOOL_OPTIONS="-Xmx1g" -v "$(pwd)/data":/data ghcr.io/onthegomap/planetiler:latest --download --area=monaco

⚠️ This starts off by downloading about 1GB of data sources required by the basemap profile including ~750MB for ocean polygons and ~240MB for Natural Earth Data.

To download smaller extracts just for Monaco:

Java:

java -Xmx1g -jar planetiler.jar --download --area=monaco \
  --water-polygons-url=https://github.com/onthegomap/planetiler/raw/main/planetiler-core/src/test/resources/water-polygons-split-3857.zip \
  --natural-earth-url=https://github.com/onthegomap/planetiler/raw/main/planetiler-core/src/test/resources/natural_earth_vector.sqlite.zip

Docker:

docker run -e JAVA_TOOL_OPTIONS="-Xmx1g" -v "$(pwd)/data":/data ghcr.io/onthegomap/planetiler:latest --download --area=monaco \
  --water-polygons-url=https://github.com/onthegomap/planetiler/raw/main/planetiler-core/src/test/resources/water-polygons-split-3857.zip \
  --natural-earth-url=https://github.com/onthegomap/planetiler/raw/main/planetiler-core/src/test/resources/natural_earth_vector.sqlite.zip

You will need the full data sources to run anywhere besides Monaco.

To view tiles locally:

Using Node.js:

npm install -g tileserver-gl-light
tileserver-gl-light --mbtiles data/output.mbtiles

Or using Docker:

docker run --rm -it -v "$(pwd)/data":/data -p 8080:8080 maptiler/tileserver-gl -p 8080

Then open http://localhost:8080 to view tiles.

Some common arguments:

  • --download downloads input sources automatically and --only-download exits after downloading
  • --area=monaco downloads a .osm.pbf extract from Geofabrik
  • --osm-path=path/to/file.osm.pbf points Planetiler at an existing OSM extract on disk
  • -Xmx1g controls how much RAM to give the JVM (recommended: 0.5x the input .osm.pbf file size to leave room for memory-mapped files)
  • --force overwrites the output file
  • --help shows all of the options and exits

Generating a Map of the World

See PLANET.md.

Creating a Custom Map

See the planetiler-examples project.

Benchmarks

Some example runtimes (excluding downloading resources):

Input Profile Machine Time mbtiles size Logs
s3://osm-pds/2021/planet-211011.osm.pbf (65GB) Basemap DO 16cpu 128GB 3h9m cpu:42h1m avg:13.3 99GB logs, VisualVM Profile
Daylight Distribution v1.6 with ML buildings and admin boundaries (67GB) Basemap DO 16cpu 128GB 3h13m cpu:43h40m avg:13.5 101GB logs
s3://osm-pds/2021/planet-211011.osm.pbf (65GB) Basemap (without z13 building merge) Linode 50cpu 128GB 1h9m cpu:24h36m avg:21.2 97GB logs, VisualVM Profile
s3://osm-pds/2021/planet-211011.osm.pbf (65GB) Basemap (without z13 building merge) c5ad.16xlarge (64cpu/128GB) 59m cpu:27h6m avg:27.4 97GB logs

Alternatives

Some other tools that generate vector tiles from OpenStreetMap data:

  • OpenMapTiles is the reference implementation of the OpenMapTiles schema that the basemap profile is based on. It uses an intermediate postgres database and operates in two modes:
    1. Import data into database (~1 day) then serve vector tiles directly from the database. Tile serving is slower and requires bigger machines, but lets you easily incorporate realtime updates
    2. Import data into database (~1 day) then prerender every tile for the planet into an mbtiles file which takes over 100 days or a cluster of machines, but then tiles can be served faster on smaller machines
  • Tilemaker uses a similar approach to Planetiler (no intermediate database), is more mature, and has a convenient lua API for building custom profiles without recompiling the tool, but takes about a day to generate a map of the world

Some companies that generate and host tiles for you:

If you want to host tiles yourself but have someone else generate them for you, those companies also offer plans to download regularly-updated tilesets.

Features

  • Supports Natural Earth, OpenStreetMap .osm.pbf, and Esri Shapefiles data sources
  • Java-based Profile API to customize how source elements map to vector tile features, and post-process generated tiles using JTS geometry utilities
  • Merge nearby lines or polygons with the same tags before emitting vector tiles
  • Automatically fixes self-intersecting polygons
  • Built-in basemap profile based on OpenMapTiles v3.12.2
  • Optionally download additional name translations for elements from Wikidata
  • Export real-time stats to a prometheus push gateway using --pushgateway=http://user:password@ip argument (and a grafana dashboard for viewing)
  • Automatically downloads region extracts from Geofabrik using geofabrik:australia shortcut as a source URL
  • Unit-test profiles to verify mapping logic, or integration-test to verify the actual contents of a generated mbtiles file (example)

Limitations

  • It is harder to join and group data than when using database. Planetiler automatically groups features into tiles, so you can easily post-process nearby features in the same tile before emitting, but if you want to group or join across features in different tiles, then you must explicitly store data when processing a feature to use with later features or store features and defer processing until an input source is finished (boundary layer example)
  • Planetiler only does full imports from .osm.pbf snapshots, there is no way to incorporate real-time updates.

Roadmap

  • Enough planetiler-core functionality to support basemap profile based on OpenMapTiles
  • Basemap profile based on OpenMapTiles v3.12.2
    • Port all layers
    • Download name translations from wikidata
    • Merge buildings at z13
    • adm0_l/adm0_r boundary labels
    • Abbreviate road names to improve visibility
    • Poi layer agg_stop tag
  • Get planetiler-core into Maven Central
  • Remove geotools dependency for reading shapefiles (not in Maven Central)
  • Remove graphhopper dependency for reading OSM files, and use LocationsOnWays to skip node location storage when present and reduce memory requirement by 70%.
  • "Sparse mode" to only store node and relation data for elements used by a profile
  • Support zoom levels higher than 14
  • Handle nodes and relations in relations (only ways handled now)
  • Lake centerline support in planetiler-core
  • Improve line merging to combine nearby parallel roads
  • Basemap schema improvements for onthegomap.com
  • Accept other kinds of data sources
  • Extract reusable utilities for complex schemas from planetiler-basemap to planetiler-core
  • Other schemas

Contributing

Pull requests are welcome! See CONTRIBUTING.md for details.

Support

Have a question or want to share something you've built? Start a GitHub discussion.

Found a bug or have a feature request? Open a GitHub issue to report.

This is a side project, so support is limited. If you have the time and ability, feel free to open a pull request to fix issues or implement new features.

Acknowledgement

Planetiler is made possible by these awesome open source projects:

See NOTICE.md for a full list and license details.

Author

Planetiler was created by Michael Barry for future use generating custom basemaps or overlays for On The Go Map.

License and Attribution

Planetiler source code is licensed under the Apache 2.0 License, so it can be used and modified in commercial or other open source projects according to the license guidelines.

Maps built using planetiler do not require any special attribution, but the data or schema used might. Any maps generated from OpenStreetMap data must visibly credit OpenStreetMap contributors. Any map generated with the profile based on OpenMapTiles or a derivative must visibly credit OpenMapTiles as well.

Comments
  • Declarative schema from configuration file

    Declarative schema from configuration file

    Fixes #18

    This PR provides the ability for a user to specify an arbitrary vector schema via a configuration file. Configuration is via a YML file which specifies the contents of the configured layers. Documentation for the schema definition format is provided in planetiler-custommap/README.md.

    The schema language allows for the following features:

    • Ability to define layers and features within layers based on tag filters
    • Ability to specify attributes as a function of tags
    • Ability to specify feature zoom levels as a function of tagging or feature area
    • Ability to specify data sources in a configuration file

    A collection of unit tests are provided, as well as a sample schema intended to support OWG vector tile exploration under openstreetmap/operations#565

    A typical invocation looks something like:

    (java/docker launch) generate-custom --schema=schema_file.yml --download --area=rhode-island
    

    This PR does not include handling for line merging, which needs a deeper investigation to deal with attributes that have minimum zooms greater than the overall feature minimum zoom, which would allow certain linestring features to merge only at certain lower zooms.

    opened by ZeLonewolf 27
  • add compact DB mode (--compact-db) to de-duplicate mbtiles output

    add compact DB mode (--compact-db) to de-duplicate mbtiles output

    Context

    this addresses point 2 of https://github.com/onthegomap/planetiler/issues/167#issuecomment-1115483329

    Overview

    the compact DB mode splits the tiles table into tiles_shallow and tiles_data

    • tiles_shallow contains the coordinates plus a reference on the data ID
    • tiles_data contains the data ID plus the actual tile data

    this allows to de-duplicate content since multiple tiles can reference the same data

    in this mode, tiles is realized as a view that joins the two tables tiles_shallow and tiles_data

    Impact

    • it can significantly de-crease the mbtiles file size iff there's many duplicates (ocean tiles) - in case of Australia: 3.1GB -> 1.7GB
    • it has little to no impact on writing mbtiles (if no dupes it's slower, and the more dupes the faster but not significantly)
    • reading from the mbtiles is 10-15% slower because of the indirection over the view

    some more insights can be found here: PR-impact.txt

    Concept

    The main idea to realize this is to create a hash over the tile data, and build a map between that hash and a data ID.

    Failed Approaches

    I was a bit surprised that the impact on writing the mbtiles is little to none. The only explanation I have is that we have to do more inserts than before (tiles_shallow, tiles_data). I tried to offload this "dual insert" from code to the DB. So in planetiler I produced just one insert but the insert was into a view - which then either just inserted into tiles_shallow or both tiles_shallow and tiles_data. This, however, increased the overall mbtiles generation time by almost 20%.

    Next

    I'd like to address point 1 in https://github.com/onthegomap/planetiler/issues/167#issuecomment-1115483329 either in this or a follow-up PR

    opened by bbilger 26
  • TileCoord supports up to zoom 15 using alternate ordering

    TileCoord supports up to zoom 15 using alternate ordering

    This is a rough idea right now (don't merge yet) to explore alternate TileCoord encodings. it deserves some better tests for edge cases as right now it's blindly ported from C++ to java

    The current TileCoord uses a fixed 14 bits for X and Y and the remaining bits for Z. This instead defines a mapping from a 32-bit unsigned encoded integer to X,Y,Z like this:

    Tile 0 is (0,0) on z0 Tile 1-4 are positions on the z1 Hilbert curve; each side of the curve is length 2, so tile 1 is (0,0), tile 2 is (0,1), tile 3 is (1,1) and tile 4 is (1,0) Tile 5-20 are positions on the z2 Hilbert curve etc...

    Drawbacks:

    • decoding/encoding might more expensive
    • does not correspond to index insertion order in MBTiles, but there may be other ways to mitigate this

    Potential benefits of doing it this way:

    • support z15 without widening the TileCoord encoding to 64 bits
    • If features are ordered this way and memory-mapped on disk, reads should have better locality for 2D queries vs. striped Z/X/Y ordering
    • for some other tools I'm developing this would aid interoperability, such as a bitmap format for sparse ocean representation or a future ordering requirement for PMTiles
    opened by bdon 17
  • feat: added `maxzoomForRendering` and `minzoomForRendering`

    feat: added `maxzoomForRendering` and `minzoomForRendering`

    This will allow rendering with —maxzoom=6 while having zoom 6 rendered the same way as if —maxzoom=14.

    maxzoomForRendering will be used for simplifly algorithms. The default is MAX_ZOOM(14) so by default whatever maxzoom is used you will get the same render as if maxzoom=14

    opened by farfromrefug 15
  • Add shapefile directory source

    Add shapefile directory source

    This PR adds Planetiler.addShapefileDirectorySource, which can be used to add all Shapefiles matching a glob pattern in a directory to a single named source. Other than grouping related shapefiles together, the main benefit here is that the files can then be processed concurrently.

    Was mentioned in Slack a couple weeks back: https://osmus.slack.com/archives/C031V9E9RMG/p1668717797875339

    opened by erik 13
  • Different name?

    Different name?

    The main feedback on https://news.ycombinator.com/item?id=28986762 was that "flatmap" is ambiguous and not unique. Before publishing to maven central, package managers, etc should decide whether or not to keep "flatmap" or use something different.

    Pros:

    • easier to find through search.
    • It's still early so there are too many inbound links yet

    Cons:

    • there are still some links, forks, and stars so need to be careful to preserve those

    Any suggestions?

    opened by msbarry 13
  • Adding building names to basemap profile

    Adding building names to basemap profile

    Describe the bug The names of POI/buildings are missing using the default basemap profile.

    Expected behavior The output mbtiles should include the name tags of buildings and POIs but they are dropped.

    To Reproduce

    1. Download Malaysia, Singapore, and Brunei from geofabrik
    2. Run java -Xmx1g -jar planetiler.jar --download --osm_path="malaysia-singapore-brunei-old.osm.pbf"
    3. Inspect location lat: 1.29788, lon: 103.77677

    Long description I am generating vector tiles for Singapore and have been using tilemaker prior to planetiler. Using Way 427077072 as an example, the building name in OSM is 'Ridge View Tower' and I would expect the output mbtiles to contain the same information.

    In the planetiler mbtiles, however, this name field is missing. Inspecting the planetiler mbtiles using QGIS reveals that planetiler only saves housenumbers and does not save POI/building names.

    Here are some screenshots describing the problem:

    OSM groundtruth: osm1 Planetiler output: planetiler1 Tilemaker output: tilemaker1

    Is there a way I can edit the planetiler profile to match the detailed output of tilemaker/OSM ?

    Environment (please complete the following information):

    • OS: Windows 10
    • Java version and distribution: [e.g. Eclipse Temurin 17.0.2]
    opened by lokkelvin2 11
  • Generating a Map of the World Problems occur

    Generating a Map of the World Problems occur

    The osm pbf data comes from daylightmap. Problems occur when executing to natural earth. Here are the logs:

    0:00:00 DEB - argument: config=null (path to config file)
    0:00:00 DEB - argument: area=planet (name of the extract to download if osm_url/osm_path not specified (i.e. 'monaco' 'rhode island' 'australia' or 'planet'))
    0:00:00 INF - Using in-memory stats
    0:00:00 INF [overall] - 
    0:00:00 INF [overall] - Starting...
    0:00:00 DEB - argument: madvise=true (default value for whether to use linux madvise(random) to improve memory-mapped read performance for temporary storage)
    0:00:00 DEB - argument: storage=ram (default storage type for temporary data, one of [ram, mmap, direct])
    0:00:00 DEB - argument: threads=36 (num threads)
    0:00:00 DEB - argument: write_threads=1 (number of threads to use when writing temp features)
    0:00:00 DEB - argument: process_threads=35 (number of threads to use when processing input features)
    0:00:00 DEB - argument: bounds=Env[-180.0 : 180.0, -85.0511287798066 : 85.0511287798066] (bounds)
    0:00:00 DEB - argument: feature_read_threads=2 (number of threads to use when reading features at tile write time)
    0:00:00 DEB - argument: loginterval=10 seconds (time between logs)
    0:00:00 DEB - argument: minzoom=0 (minimum zoom level)
    0:00:00 DEB - argument: maxzoom=14 (maximum zoom level (limit 14))
    0:00:00 DEB - argument: skip_mbtiles_index_creation=false (skip adding index to mbtiles file)
    0:00:00 DEB - argument: optimize_db=false (optimize mbtiles after writing)
    0:00:00 DEB - argument: emit_tiles_in_order=true (emit tiles in index order)
    0:00:00 DEB - argument: force=false (overwriting output file and ignore disk/RAM warnings)
    0:00:00 DEB - argument: gzip_temp=false (gzip temporary feature storage (uses more CPU, but less disk space))
    0:00:00 DEB - argument: mmap_temp=true (use memory-mapped IO for temp feature files)
    0:00:00 DEB - argument: sort_max_readers=6 (maximum number of concurrent read threads to use when sorting chunks)
    0:00:00 DEB - argument: sort_max_writers=6 (maximum number of concurrent write threads to use when sorting chunks)
    0:00:00 DEB - argument: nodemap_type=array (type of node location map, one of [noop, sortedtable, sparsearray, array])
    0:00:00 DEB - argument: nodemap_storage=ram (storage for node location map, one of [ram, mmap, direct])
    0:00:00 DEB - argument: nodemap_madvise=true (use linux madvise(random) for node locations)
    0:00:00 DEB - argument: multipolygon_geometry_storage=ram (storage for multipolygon geometries, one of [ram, mmap, direct])
    0:00:00 DEB - argument: multipolygon_geometry_madvise=true (use linux madvise(random) for temporary multipolygon geometry storage)
    0:00:00 DEB - argument: http_user_agent=Planetiler downloader (https://github.com/onthegomap/planetiler) (User-Agent header to set when downloading files over HTTP)
    0:00:00 DEB - argument: http_timeout=30 seconds (Timeout to use when downloading files over HTTP)
    0:00:00 DEB - argument: http_retries=1 (Retries to use when downloading files over HTTP)
    0:00:00 DEB - argument: download_chunk_size_mb=1000 (Size of file chunks to download in parallel in megabytes)
    0:00:00 DEB - argument: download_threads=10 (Number of parallel threads to use when downloading each file)
    0:00:00 DEB - argument: min_feature_size_at_max_zoom=0.0625 (Default value for the minimum size in tile pixels of features to emit at the maximum zoom level to allow for overzooming)
    0:00:00 DEB - argument: min_feature_size=1.0 (Default value for the minimum size in tile pixels of features to emit below the maximum zoom level)
    0:00:00 DEB - argument: simplify_tolerance_at_max_zoom=0.0625 (Default value for the tile pixel tolerance to use when simplifying features at the maximum zoom level to allow for overzooming)
    0:00:00 DEB - argument: simplify_tolerance=0.1 (Default value for the tile pixel tolerance to use when simplifying features below the maximum zoom level)
    0:00:00 DEB - argument: osm_lazy_reads=false (Read OSM blocks from disk in worker threads)
    0:00:00 DEB - argument: compact_db=true (Reduce the DB size by separating and deduping the tile data)
    0:00:00 DEB - argument: skip_filled_tiles=false (Skip writing tiles containing only polygon fills to the output)
    0:00:00 DEB - argument: tmpdir=data/tmp (temp directory)
    0:00:00 DEB - argument: only_download=false (download source data then exit)
    0:00:00 DEB - argument: download=true (download sources)
    0:00:00 DEB - argument: temp_nodes=data/tmp/node.db (temp node db location)
    0:00:00 DEB - argument: temp_multipolygons=data/tmp/multipolygon.db (temp multipolygon db location)
    0:00:00 DEB - argument: temp_features=data/tmp/feature.db (temp feature db location)
    0:00:00 DEB - argument: osm_parse_node_bounds=false (parse bounds from OSM nodes instead of header)
    0:00:00 DEB - argument: only_fetch_wikidata=false (fetch wikidata translations then quit)
    0:00:00 DEB - argument: fetch_wikidata=false (fetch wikidata translations then continue)
    0:00:00 DEB - argument: use_wikidata=true (use wikidata translations)
    0:00:00 DEB - argument: wikidata_cache=data/sources/wikidata_names.json (wikidata cache file)
    0:00:00 DEB - argument: lake_centerlines_path=data/sources/lake_centerline.shp.zip (lake_centerlines shapefile path)
    0:00:00 DEB - argument: free_lake_centerlines_after_read=false (delete lake_centerlines input file after reading to make space for output (reduces peak disk usage))
    0:00:00 DEB - argument: lake_centerlines_url=https://github.com/acalcutt/osm-lakelines/releases/download/latest/lake_centerline.shp.zip (lake_centerlines shapefile url)
    0:00:00 DEB - argument: water_polygons_path=data/sources/water-polygons-split-3857.zip (water_polygons shapefile path)
    0:00:00 DEB - argument: free_water_polygons_after_read=false (delete water_polygons input file after reading to make space for output (reduces peak disk usage))
    0:00:00 DEB - argument: water_polygons_url=https://osmdata.openstreetmap.de/download/water-polygons-split-3857.zip (water_polygons shapefile url)
    0:00:00 DEB - argument: natural_earth_path=data/sources/natural_earth_vector.sqlite.zip (natural_earth sqlite db path)
    0:00:00 DEB - argument: free_natural_earth_after_read=false (delete natural_earth input file after reading to make space for output (reduces peak disk usage))
    0:00:00 DEB - argument: natural_earth_url=https://naciscdn.org/naturalearth/packages/natural_earth_vector.sqlite.zip (natural_earth sqlite db url)
    0:00:00 DEB - argument: osm_path=data/sources/planet.osm.pbf (osm OSM input file path)
    0:00:00 DEB - argument: free_osm_after_read=false (delete osm input file after reading to make space for output (reduces peak disk usage))
    0:00:00 DEB - argument: osm_url=aws:latest (osm OSM input file url)
    0:00:00 DEB - argument: mbtiles=output20221110.mbtiles (mbtiles output file)
    0:00:00 DEB - argument: transliterate=true (attempt to transliterate latin names)
    0:00:00 DEB - argument: languages=am,ar,az,be,bg,br,bs,ca,co,cs,cy,da,de,el,en,eo,es,et,eu,fi,fr,fy,ga,gd,he,hi,hr,hu,hy,id,is,it,ja,ja_kana,ja_rm,ja-Latn,ja-Hira,ka,kk,kn,ko,ko-Latn,ku,la,lb,lt,lv,mk,mt,ml,nl,no,oc,pl,pt,rm,ro,ru,sk,sl,sq,sr,sr-Latn,sv,ta,te,th,tr,uk,zh (languages to use)
    0:00:00 DEB - argument: only_layers= (Include only certain layers)
    0:00:00 DEB - argument: exclude_layers= (Exclude certain layers)
    0:00:00 DEB - argument: boundary_country_names=true (boundary layer: add left/right codes of neighboring countries)
    0:00:00 DEB - argument: transportation_z13_paths=false (transportation(_name) layer: show all paths on z13)
    0:00:00 DEB - argument: building_merge_z13=true (building layer: merge nearby buildings at z13)
    0:00:00 DEB - argument: transportation_name_brunnel=false (transportation_name layer: set to false to omit brunnel and help merge long highways)
    0:00:00 DEB - argument: transportation_name_size_for_shield=false (transportation_name layer: allow road names on shorter segments (ie. they will have a shield))
    0:00:00 DEB - argument: transportation_name_limit_merge=false (transportation_name layer: limit merge so we don't combine different relations to help merge long highways)
    0:00:00 DEB - argument: transportation_name_minor_refs=false (transportation_name layer: include name and refs from minor road networks if not present on a way)
    0:00:00 DEB - argument: mbtiles_name=OpenMapTiles ('name' attribute for mbtiles metadata)
    0:00:00 DEB - argument: mbtiles_description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org ('description' attribute for mbtiles metadata)
    0:00:00 DEB - argument: mbtiles_attribution=<a href="https://www.openmaptiles.org/" target="_blank">&copy; OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a> ('attribution' attribute for mbtiles metadata)
    0:00:00 DEB - argument: mbtiles_version=3.13.1 ('version' attribute for mbtiles metadata)
    0:00:00 DEB - argument: mbtiles_type=baselayer ('type' attribute for mbtiles metadata)
    0:00:00 DEB - argument: help=false (show arguments then exit)
    0:00:00 INF - Building BasemapProfile profile into output20221110.mbtiles in these phases:
    0:00:00 INF -   download: Download sources [natural_earth]
    0:00:00 INF -   lake_centerlines: Process features in data/sources/lake_centerline.shp.zip
    0:00:00 INF -   water_polygons: Process features in data/sources/water-polygons-split-3857.zip
    0:00:00 INF -   natural_earth: Process features in data/sources/natural_earth_vector.sqlite.zip
    0:00:00 INF -   osm_pass1: Pre-process OpenStreetMap input (store node locations then relation members)
    0:00:00 INF -   osm_pass2: Process OpenStreetMap nodes, ways, then relations
    0:00:00 INF -   sort: Sort rendered features by tile ID
    0:00:00 INF -   mbtiles: Encode each tile and write to output20221110.mbtiles
    0:00:00 INF [download] - 
    0:00:00 INF [download] - Starting...
    0:00:02 INF [download] - Downloading https://naciscdn.org/naturalearth/packages/natural_earth_vector.sqlite.zip to data/sources/natural_earth_vector.sqlite.zip
    0:00:12 INF [download] -  natural_earth: [  80M  18%   8M/s ]  cpus: 0.4 gc:  0% heap: 35M/118G direct: 41k postGC: 46M
    0:00:22 INF [download] -  natural_earth: [ 189M  44%  10M/s ]  cpus: 0.2 gc:  0% heap: 45M/118G direct: 41k postGC: 46M
    0:00:32 INF [download] -  natural_earth: [ 291M  67%  10M/s ]  cpus: 0.2 gc:  0% heap: 24M/118G direct: 41k postGC: 52M
    0:00:42 INF [download] -  natural_earth: [ 373M  86% 8.2M/s ]  cpus: 0.1 gc:  0% heap: 32M/118G direct: 41k postGC: 52M
    0:00:47 INF [download] - Finished downloading https://naciscdn.org/naturalearth/packages/natural_earth_vector.sqlite.zip to data/sources/natural_earth_vector.sqlite.zip
    0:00:47 INF [download] -  natural_earth: [ 434M 100%  10M/s ]  cpus: 0.1 gc:  0% heap: 38M/118G direct: 25k postGC: 52M
    0:00:47 INF [download] - Finished in 48s cpu:10s avg:0.2
    0:00:47 INF [download] -   download-natural_earth_chunk-downloader  1x(14% 7s sys:3s done:2s)
    0:00:47 INF - no wikidata translations found, run with --fetch-wikidata to download
    0:00:47 DEB - ✓ 242G storage on / (/dev/sda2) requested for read phase disk, 1.5T available
    0:00:47 DEB -  - 242G used for temporary feature storage
    0:00:47 DEB - ✓ 364G storage on / (/dev/sda2) requested for write phase disk, 1.5T available
    0:00:47 DEB -  - 242G used for temporary feature storage
    0:00:47 DEB -  - 121G used for mbtiles output
    0:00:47 INF - ⚠️️ 115G JVM heap requested for read phase, 118G available (increase JVM -Xmx setting)
    0:00:47 INF -    - 82G used for array node location cache (switch to sparsearray to reduce size)
    0:00:47 INF -    - 11G used for multipolygon way geometries
    0:00:47 INF -    - 21G used for temporary profile storage
    0:00:47 DEB - ✓ 0 temporary files and 16G of free memory for OS to cache them
    0:00:47 INF - Using merge sort feature map, chunk size=2000mb max workers=36
    0:00:48 INF - dataFileCache open start
    0:00:48 INF [lake_centerlines] - 
    0:00:48 INF [lake_centerlines] - Starting...
    0:00:50 INF [lake_centerlines] -  read: [  59k 100%  33k/s ] write: [    0    0/s ] 0    
        cpus: 4.8 gc:  4% heap: 406M/118G direct: 254k postGC: 182M
        read( -%) ->    (0/1k) -> process( -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%) ->   (0/86k) -> write( -%)
    0:00:50 INF [lake_centerlines] - Finished in 2s cpu:9s avg:4.8
    0:00:50 INF [lake_centerlines] -   read     1x(79% 1s)
    0:00:50 INF [lake_centerlines] -   process 35x(5% 0.1s wait:2s)
    0:00:50 INF [lake_centerlines] -   write    1x(0% 0s wait:2s)
    0:00:50 INF [water_polygons] - 
    0:00:50 INF [water_polygons] - Starting...
    0:01:00 INF [water_polygons] -  read: [ 2.1k  15%  211/s ] write: [  11M 1.1M/s ] 2G   
        cpus: 34.6 gc:  8% heap: 2.9G/118G direct: 66M postGC: 2.7G
        read(86%) ->  (747/1k) -> process(84% 80% 82% 85% 86% 85% 81% 83% 82% 85% 85% 84% 85% 85% 83% 86% 82% 87% 82% 85% 82% 82% 81% 82% 83% 83% 83% 85% 83% 86% 84% 79% 83% 83% 82%) -> (15k/86k) -> write(24%)
    0:01:10 INF [water_polygons] -  read: [ 3.9k  28%  183/s ] write: [  20M 899k/s ] 3G   
        cpus: 34.8 gc:  7% heap: 18G/118G direct: 66M postGC: 2.9G
        read(73%) ->  (988/1k) -> process(91% 92% 92% 93% 93% 91% 92% 92% 92% 93% 92% 91% 92% 92% 90% 91% 91% 92% 93% 93% 92% 90% 92% 91% 92% 91% 92% 92% 91% 92% 93% 91% 92% 92% 92%) -> (17k/86k) -> write(22%)
    0:01:20 INF [water_polygons] -  read: [   6k  42%  209/s ] write: [  34M 1.3M/s ] 3G   
        cpus: 34.9 gc:  6% heap: 18G/118G direct: 66M postGC: 2.1G
        read(41%) ->   (1k/1k) -> process(93% 93% 94% 94% 93% 94% 94% 94% 93% 93% 94% 94% 93% 93% 94% 93% 92% 92% 94% 92% 94% 91% 92% 93% 93% 94% 94% 93% 93% 94% 93% 94% 94% 94% 94%) -> (33k/86k) -> write(31%)
    0:01:30 INF [water_polygons] -  read: [ 9.9k  69%  386/s ] write: [ 118M 8.3M/s ] 6.8G 
        cpus: 16.3 gc:  0% heap: 22G/118G direct: 66M postGC: 1.2G
        read( 2%) ->   (1k/1k) -> process(42% 41% 42% 41% 41% 42% 42% 41% 42% 41% 41% 43% 41% 42% 53% 47% 43% 41% 41% 46% 41% 43% 43% 43% 42% 40% 41% 56% 45% 41% 42% 43% 41% 41% 47%) -> (82k/86k) -> write(98%)
    0:01:40 INF [water_polygons] -  read: [  13k  96%  392/s ] write: [ 208M 8.9M/s ] 11G  
        cpus: 13.5 gc:  0% heap: 14G/118G direct: 66M postGC: 1.2G
        read( -%) ->  (591/1k) -> process(36% 37% 35% 36% 36% 36% 36% 36% 36% 36% 35% 36% 36% 36% 36% 35% 36% 35% 36% 36% 36% 36% 35% 35% 36% 35% 35% 36% 36% 35% 36% 36% 36% 36% 35%) -> (78k/86k) -> write(100%)
    0:01:42 INF [water_polygons] -  read: [  14k 100%  369/s ] write: [ 222M 8.7M/s ] 10G  
        cpus: 13.4 gc:  0% heap: 2.5G/118G direct: 66M postGC: 1.2G
        read( -%) ->    (0/1k) -> process( -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%) ->   (0/86k) -> write( -%)
    0:01:42 INF [water_polygons] - Finished in 52s cpu:22m50s gc:2s avg:26.4
    0:01:42 INF [water_polygons] -   read     1x(39% 20s sys:1s wait:26s done:3s)
    0:01:42 INF [water_polygons] -   process 35x(68% 35s wait:13s)
    0:01:42 INF [water_polygons] -   write    1x(56% 29s sys:7s wait:22s)
    0:01:42 INF [natural_earth] - unzipping /home/cq/planetiler/data/sources/natural_earth_vector.sqlite.zip to data/tmp/natearth.sqlite
    0:01:46 INF [natural_earth] - 
    0:01:46 INF [natural_earth] - Starting...
    0:01:56 INF [natural_earth] -  read: [ 334k  96%  33k/s ] write: [   4k  399/s ] 12G  
        cpus: 3.5 gc:  0% heap: 8.1G/118G direct: 66M postGC: 1.2G
        read(70%) ->    (-/1k) -> process( 6%  6%  5%  6%  5%  6%  6%  6% 13%  5%  6%  6%  6%  5%  5%  5%  6%  6%  6%  5%  6%  6%  6%  6%  6%  6%  5%  6%  6%  6%  5%  5%  5%  6%  5%) -> (25k/86k) -> write( 0%)
    0:01:56 INF [natural_earth] -  read: [ 349k 100%  25k/s ] write: [  33k  49k/s ] 10G  
        cpus: 3.3 gc:  0% heap: 8.6G/118G direct: 66M postGC: 1.2G
        read( -%) ->    (0/1k) -> process( -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%  -%) ->   (0/86k) -> write( -%)
    0:01:56 INF [natural_earth] - Finished in 11s cpu:37s avg:3.4
    0:01:56 INF [natural_earth] -   read     1x(67% 7s wait:3s)
    0:01:56 INF [natural_earth] -   process 35x(6% 0.6s wait:10s)
    0:01:56 INF [natural_earth] -   write    1x(0% 0s wait:11s)
    0:01:57 INF [osm_pass1] - 
    0:01:57 INF [osm_pass1] - Starting...
    Worker osm_pass1_read-1 died
    java.io.UncheckedIOException: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: type, datasize
            at com.onthegomap.planetiler.reader.osm.OsmInputFile$EagerReader.forEachBlock(OsmInputFile.java:165)
            at com.onthegomap.planetiler.worker.WorkerPipeline$Empty.lambda$fromGenerator$0(WorkerPipeline.java:170)
            at com.onthegomap.planetiler.worker.Worker.lambda$new$0(Worker.java:41)
            at com.onthegomap.planetiler.worker.Worker.lambda$new$1(Worker.java:68)
            at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
            at java.base/java.lang.Thread.run(Thread.java:833)
    Caused by: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: type, datasize
            at com.google.protobuf.UninitializedMessageException.asInvalidProtocolBufferException(UninitializedMessageException.java:79)
            at com.google.protobuf.AbstractParser.checkMessageInitialized(AbstractParser.java:68)
            at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:191)
            at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:203)
            at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:208)
            at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
            at org.openstreetmap.osmosis.osmbinary.Fileformat$BlobHeader.parseFrom(Fileformat.java:1471)
            at com.onthegomap.planetiler.reader.osm.OsmInputFile.readBlobHeader(OsmInputFile.java:96)
            at com.onthegomap.planetiler.reader.osm.OsmInputFile$EagerReader.forEachBlock(OsmInputFile.java:153)
            ... 7 more
    Exception in thread "main" com.onthegomap.planetiler.util.Exceptions$FatalPlanetilerException: java.util.concurrent.ExecutionException: java.io.UncheckedIOException: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: type, datasize
            at com.onthegomap.planetiler.util.Exceptions.throwFatalException(Exceptions.java:29)
            at com.onthegomap.planetiler.stats.ProgressLoggers.await(ProgressLoggers.java:389)
            at com.onthegomap.planetiler.stats.ProgressLoggers.awaitAndLog(ProgressLoggers.java:374)
            at com.onthegomap.planetiler.reader.osm.OsmReader.pass1(OsmReader.java:221)
            at com.onthegomap.planetiler.Planetiler.lambda$addOsmSource$0(Planetiler.java:192)
            at com.onthegomap.planetiler.Planetiler.lambda$ifSourceUsed$6(Planetiler.java:652)
            at com.onthegomap.planetiler.Planetiler.run(Planetiler.java:535)
            at com.onthegomap.planetiler.basemap.BasemapMain.run(BasemapMain.java:51)
            at com.onthegomap.planetiler.basemap.BasemapMain.main(BasemapMain.java:14)
            at com.onthegomap.planetiler.Main.main(Main.java:50)
    Caused by: java.util.concurrent.ExecutionException: java.io.UncheckedIOException: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: type, datasize
            at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396)
            at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2096)
            at com.onthegomap.planetiler.stats.ProgressLoggers.await(ProgressLoggers.java:383)
            ... 8 more
    Caused by: java.io.UncheckedIOException: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: type, datasize
            at com.onthegomap.planetiler.reader.osm.OsmInputFile$EagerReader.forEachBlock(OsmInputFile.java:165)
            at com.onthegomap.planetiler.worker.WorkerPipeline$Empty.lambda$fromGenerator$0(WorkerPipeline.java:170)
            at com.onthegomap.planetiler.worker.Worker.lambda$new$0(Worker.java:41)
            at com.onthegomap.planetiler.worker.Worker.lambda$new$1(Worker.java:68)
            at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
            at java.base/java.lang.Thread.run(Thread.java:833)
    Caused by: com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: type, datasize
            at com.google.protobuf.UninitializedMessageException.asInvalidProtocolBufferException(UninitializedMessageException.java:79)
            at com.google.protobuf.AbstractParser.checkMessageInitialized(AbstractParser.java:68)
            at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:191)
            at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:203)
            at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:208)
            at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
            at org.openstreetmap.osmosis.osmbinary.Fileformat$BlobHeader.parseFrom(Fileformat.java:1471)
            at com.onthegomap.planetiler.reader.osm.OsmInputFile.readBlobHeader(OsmInputFile.java:96)
            at com.onthegomap.planetiler.reader.osm.OsmInputFile$EagerReader.forEachBlock(OsmInputFile.java:153)
            ... 7 more
    
    bug 
    opened by dongliangde 10
  • [BUG] TransportationName: calculate rank doesn't handle major roads that are not part of a preconfigured network

    [BUG] TransportationName: calculate rank doesn't handle major roads that are not part of a preconfigured network

    Describe the bug

    In Germany Planetiler is generating only few refs for major roads like motorways or trunks. The reason seems to be that Planetiler calculates the rank of a relation based on if it's part of a set of preconfigured networks (like US:). If these are not set, Planetiler uses other tags for hiking networks etc to figure out the rank. See the code here.

    Here are two examples from Germany where this approach does not work properly which leaves major roads without road signs. Motorway: https://www.openstreetmap.org/relation/2166961 Trunk: https://www.openstreetmap.org/relation/1506786

    Expected behavior As these are important roads, it would be good to have road signs for these roads.

    Screenshots

    Here is a comparison on z11 between OMT (has road signs) and Planetiler (no road signs): Screenshot 2022-03-26 at 12 30 56 Screenshot 2022-03-26 at 12 31 19

    Potential fix

    The transportation_name_minor could be only used for minor roads. This would invalidate the fix for #145.

    So how about we apply a low rank for relations with network=e-road and when getting the relations of a road, we order them by rank? So right now, the default rank is 3, so maybe e-roads could be rank 4?

    bug 
    opened by boldtrn 10
  • Read shapefiles in UTF-8 mode

    Read shapefiles in UTF-8 mode

    Currently, if a shapefile has attributes with letters like ä, ö, ü, etc, the resulting tiles show some strange letters. This pull requests fixes this issue by hard-coding the shapefile mode to UTF-8.

    

    opened by wipfli 10
  • Add newlines to OpenMapTiles table

    Add newlines to OpenMapTiles table

    Adds newlines to the OpenMapTiles table file. My motivation for this is to simplify customization of the basemap profile. For example, with the hot-air balloon I often land in places where it matters if the highway=track has tracktype=grade1 or tracktype=grade5. The tracktype tag is not part of OMT, so I added it manually to the basemap profile. It is super fun to customize the tiles like this. After this pull request, adding new tags will only insert a new line and result in a simpler git diff. Merging upstream changes will also be easier.

    opened by wipfli 10
  • Extract ZIP file walker out of ShapefileReader.

    Extract ZIP file walker out of ShapefileReader.

    This PR pulls ZIP file handling out of ShapefileReader so that it can be reused for different readers. The changes here can be applied to other reader types as we add them.

    Added:

    • support for reading multiple .shp files from a single .zip
    • support glob matching within a .zip file

    There's a breaking change in naming: addShapefileDirectorySource becomes addShapefileGlobSource. I figured addShapefileDirectorySource was new enough that the more accurate name was worth the churn, as the pattern can now be applied both to ZIP archives and directories.

    Another change in behavior: previously, if you had a .zip with two .shp files, only one would be read. Now (unless a glob pattern filters one out), both will be read.

    opened by erik 2
  • Add a custommap standalone pom file

    Add a custommap standalone pom file

    My workflow is usually to code in visual studio code without much java support. Then I go to the terminal, compile and run the application.

    Maybe this is a bit strange if you are used to working with intelij or another good ide, but this is how I usually code...

    So for me it is super helpful if I can run the configurable schema standalone, like I can run the things in the examples folder standalone...

    Let me know if this is the right approach.

    opened by wipfli 2
  • Expose `min_pixel_size` in configurable schema

    Expose `min_pixel_size` in configurable schema

    Exposes the Feature::setMinPixelSize function in the configurable schema as min_pixel_size.

    This follows the implementation of min_zoom.

    Related to https://github.com/onthegomap/planetiler/issues/349

    opened by wipfli 2
  • [BUG] name:xx missing in transportation_name

    [BUG] name:xx missing in transportation_name

    Unblocks ZeLonewolf/openstreetmap-americana#618 CC @zstadler

    Internationalized name:xx names are missing from roads in the transportation_name layer.

    The following object show internationalized names in omt-tools: image

    Same location in my planetiler server (link) image

    bug 
    opened by ZeLonewolf 0
  • Run shortbread configurable schema on planet

    Run shortbread configurable schema on planet

    How can I run the shortbread.yml configurable schema on the full planet?

    When I do something like --area planet, I get an error that geofabrik does now know this area.

    Is hardcoding the planet download url like this the best solution?

       osm:
         type: osm
    -    url: '${ args.osm_url }'
    +    url: https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
    
    opened by wipfli 0
Releases(v0.5.0)
  • v0.5.0(Jun 6, 2022)

    What's Changed

    This release improves performance on high-end machines by 20% (from 47 to 38 minutes with 64 cpus/128GB ram) by addressing several single-threaded bottlenecks, reduces mbtiles output size by 25% (from 104 to 78GB) by deduplicating repeated ocean tiles, and upgrades the basemap profile to OpenMapTiles 3.13.1.

    To run this release from Java, download the attached planetiler.jar, or from docker use ghcr.io/onthegomap/planetiler:0.5.0.

    There is ongoing discussion about the project in the #planetiler channel on OSM-US slack. If you are interested in joining, get an invite here!

    Performance Improvements

    • Reduce synchronized work in transportation_name layer by @msbarry in https://github.com/onthegomap/planetiler/pull/180
    • Minimize number of temp feature chunk files by @msbarry in https://github.com/onthegomap/planetiler/pull/199
    • Add --mmap-temp option to use memory-mapped IO for temp feature files by @msbarry in https://github.com/onthegomap/planetiler/pull/209
    • Enable --mmap-temp by default by @msbarry in https://github.com/onthegomap/planetiler/pull/236
    • Parallel temp feature writes using --write-threads argument by @msbarry in https://github.com/onthegomap/planetiler/pull/213
    • Use custom min-heap to improve k-way merge by 30-50% by @msbarry in https://github.com/onthegomap/planetiler/pull/217
    • add compact DB mode (--compact-db) to de-duplicate mbtiles output by @bbilger in https://github.com/onthegomap/planetiler/pull/219
    • Improve DB Indexes and Fix Deferred Index Logging in Compact DB Mode by @bbilger in https://github.com/onthegomap/planetiler/pull/245
    • Use fnv1a64 for tile hash by @msbarry in https://github.com/onthegomap/planetiler/pull/253
    • Add --feature-read-threads option to read features in parallel when writing tiles by @msbarry in https://github.com/onthegomap/planetiler/pull/225
    • Unsynchronize ICU4j transliterate by @msbarry in https://github.com/onthegomap/planetiler/pull/246
    • Cheap isFill check and add --skip-filled-tiles option by @msbarry in https://github.com/onthegomap/planetiler/pull/234
    • Gather v0.5.0 benchmarks by @msbarry in https://github.com/onthegomap/planetiler/pull/256

    Improvements and Bug Fixes

    • Upgrade basemap profile to OpenMapTiles v3.13.1 by @msbarry in https://github.com/onthegomap/planetiler/pull/227
    • Reduce forest/wood landcover min zoom to 7 by @msbarry in https://github.com/onthegomap/planetiler/pull/176
    • Handle elevations in units besides meters by @msbarry in https://github.com/onthegomap/planetiler/pull/226
    • Merge overlapping water polygons by @msbarry in https://github.com/onthegomap/planetiler/pull/235
    • Data type support for Expression / MultiExpression by @ZeLonewolf in https://github.com/onthegomap/planetiler/pull/190
    • Implement matchField testing for Expression.not by @ZeLonewolf in https://github.com/onthegomap/planetiler/pull/201
    • More robust multiexpression filtering by @msbarry in https://github.com/onthegomap/planetiler/pull/206
    • Change terminology around "rendering" to be consistent with MapLibre vision by @ZeLonewolf in https://github.com/onthegomap/planetiler/pull/238
    • Fix is convex negated by @msbarry in https://github.com/onthegomap/planetiler/pull/241
    • Fall back to parsing bounds from all nodes by @msbarry in https://github.com/onthegomap/planetiler/pull/251

    Contributor Improvements

    • Run spotless:check before verify actions in CI by @msbarry in https://github.com/onthegomap/planetiler/pull/169
    • Add sonar for static analysis by @msbarry in https://github.com/onthegomap/planetiler/pull/177
    • Inline sonar token by @msbarry in https://github.com/onthegomap/planetiler/pull/186
    • Fix sonar warnings by @msbarry in https://github.com/onthegomap/planetiler/pull/181
    • Fix sonar warnings in tests by @msbarry in https://github.com/onthegomap/planetiler/pull/191
    • Fix sonar issues with unclosed resources by @msbarry in https://github.com/onthegomap/planetiler/pull/195
    • Review thread local warnings by @msbarry in https://github.com/onthegomap/planetiler/pull/196
    • Ignore generated code from sonar analysis by @msbarry in https://github.com/onthegomap/planetiler/pull/197
    • Run nested tests by @msbarry in https://github.com/onthegomap/planetiler/pull/218
    • Upload artifact during build by @msbarry in https://github.com/onthegomap/planetiler/pull/222
    • Also run java 18 in CI by @msbarry in https://github.com/onthegomap/planetiler/pull/249

    Dependencies

    Once again, @dependabot has been busy keeping dependencies up-to-date.

    Dependency upgrades in this release
    • Bump jnr-ffi from 2.2.11 to 2.2.12 by @dependabot in https://github.com/onthegomap/planetiler/pull/154
    • Bump maven-surefire-plugin from 3.0.0-M5 to 3.0.0-M6 by @dependabot in https://github.com/onthegomap/planetiler/pull/155
    • Bump maven-surefire-plugin from 3.0.0-M5 to 3.0.0-M6 in /.github/planetiler-examples-dependabot by @dependabot in https://github.com/onthegomap/planetiler/pull/156
    • Bump maven-failsafe-plugin from 3.0.0-M5 to 3.0.0-M6 in /.github/planetiler-examples-dependabot by @dependabot in https://github.com/onthegomap/planetiler/pull/158
    • Bump maven-failsafe-plugin from 3.0.0-M5 to 3.0.0-M6 by @dependabot in https://github.com/onthegomap/planetiler/pull/157
    • Bump spotless-maven-plugin from 2.22.0 to 2.22.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/159
    • Bump icu4j from 70.1 to 71.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/161
    • Bump actions/upload-artifact from 2 to 3 by @dependabot in https://github.com/onthegomap/planetiler/pull/170
    • Bump geotools.version from 26.3 to 26.4 by @dependabot in https://github.com/onthegomap/planetiler/pull/172
    • Bump actions/setup-java from 2 to 3 by @dependabot in https://github.com/onthegomap/planetiler/pull/171
    • Bump actions/cache from 2 to 3 by @dependabot in https://github.com/onthegomap/planetiler/pull/182
    • Bump mockito-core from 4.4.0 to 4.5.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/183
    • Bump maven-javadoc-plugin from 3.3.2 to 3.4.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/188
    • Bump mockito-core from 4.5.0 to 4.5.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/189
    • Bump spotless-maven-plugin from 2.22.1 to 2.22.2 by @dependabot in https://github.com/onthegomap/planetiler/pull/194
    • Bump spotless-maven-plugin from 2.22.2 to 2.22.3 by @dependabot in https://github.com/onthegomap/planetiler/pull/198
    • Bump spotless-maven-plugin from 2.22.3 to 2.22.4 by @dependabot in https://github.com/onthegomap/planetiler/pull/210
    • Bump spotless-maven-plugin from 2.22.4 to 2.22.5 by @dependabot in https://github.com/onthegomap/planetiler/pull/221
    • Bump jackson.version from 2.13.2 to 2.13.3 by @dependabot in https://github.com/onthegomap/planetiler/pull/223
    • Bump geotools.version from 26.4 to 27.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/230
    • Bump mockito-core from 4.5.1 to 4.6.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/239
    • Bump commonmark from 0.18.2 to 0.19.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/248
    • Bump mockito-core from 4.6.0 to 4.6.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/252

    New Contributors

    • @bbilger made their first contribution in https://github.com/onthegomap/planetiler/pull/219

    What's Next?

    After this release, we'll merge #160 which is the first step to defining custom profiles through a config file, stay tuned!

    Full Changelog: https://github.com/onthegomap/planetiler/compare/v0.4.0...v0.5.0

    Source code(tar.gz)
    Source code(zip)
    planetiler.jar(54.68 MB)
    planetiler.jar.md5(49 bytes)
    planetiler.jar.sha256(81 bytes)
  • v0.4.0(Mar 31, 2022)

    What's Changed

    This release improves performance and reduces memory requirements:

    • Generating a map of the world on a high-end machine (64 cpu/128GB RAM) now takes as little as 47 minutes instead of an hour
    • You can now run with as little as 32GB of RAM instead of 128 using --storage=mmap to store temporary data in memory-mapped files

    To run this release from Java, download the attached planetiler.jar, or from docker use ghcr.io/onthegomap/planetiler:0.4.0.

    There is ongoing discussion about the project in the #planetiler channel on OSM-US slack. If you are interested in joining, get an invite here!

    Performance Improvements

    • Custom PBF parsing by @msbarry in https://github.com/onthegomap/planetiler/pull/82
    • Memory-mapped file improvements by @msbarry in https://github.com/onthegomap/planetiler/pull/103
    • Node location cache: off-heap storage and “array” implementation that supports parallel inserts by @msbarry in https://github.com/onthegomap/planetiler/pull/131
    • Offload multipolygon storage to disk (reduce memory usage by 10-15gb) by @msbarry in https://github.com/onthegomap/planetiler/pull/141

    Improvements and Bug Fixes

    • Log thread stats by @msbarry in https://github.com/onthegomap/planetiler/pull/85
    • Download automatically from quickstart by @msbarry in https://github.com/onthegomap/planetiler/pull/93
    • Warn when running with insufficient memory or disk space by @msbarry in https://github.com/onthegomap/planetiler/pull/73
    • Log direct memory usage by @msbarry in https://github.com/onthegomap/planetiler/pull/108
    • Retry wikidata requests by @msbarry in https://github.com/onthegomap/planetiler/pull/115
    • Use newer lake centerlines from @acalcutt by @msbarry in https://github.com/onthegomap/planetiler/pull/116
    • Check disk space and memory only with OSM input file by @wipfli in https://github.com/onthegomap/planetiler/pull/138
    • Read shapefiles in UTF-8 mode by @wipfli in https://github.com/onthegomap/planetiler/pull/137
    • Handle more than one centerline for a lake by @msbarry in https://github.com/onthegomap/planetiler/pull/139
    • Update README.md by @SomeoneElseOSM in https://github.com/onthegomap/planetiler/pull/140
    • Allow changing Basemap Base-Url by @boldtrn in https://github.com/onthegomap/planetiler/pull/143
    • Improve name:latin logic by @msbarry in https://github.com/onthegomap/planetiler/pull/147
    • Don't get transportation_name ref values from minor networks by @msbarry in https://github.com/onthegomap/planetiler/pull/148
    • Linting - spelling, tiny cleanups by @nyurik in https://github.com/onthegomap/planetiler/pull/150
    • 0.4.0 tweaks by @msbarry in https://github.com/onthegomap/planetiler/pull/153

    Contributor Improvements

    • Support for each loop in workers by @msbarry in https://github.com/onthegomap/planetiler/pull/83
    • Add intellij file settings instructions on Linux by @wipfli in https://github.com/onthegomap/planetiler/pull/89
    • Update adoptium links by @wipfli in https://github.com/onthegomap/planetiler/pull/94
    • Remove graphhopper dependency by @msbarry in https://github.com/onthegomap/planetiler/pull/101
    • Test for --free-osm-after-read by @msbarry in https://github.com/onthegomap/planetiler/pull/107
    • Migrate to eclipse formatter to support multiple IDEs by @msbarry in https://github.com/onthegomap/planetiler/pull/122

    Dependencies

    Once again, @dependabot has been busy keeping dependencies up-to-date.

    Dependency upgrades in this release
    • Bump geotools.version from 26.2 to 26.3 by @dependabot in https://github.com/onthegomap/planetiler/pull/84
    • Bump commonmark from 0.18.1 to 0.18.2 by @dependabot in https://github.com/onthegomap/planetiler/pull/96
    • Bump actions/setup-node from 2 to 3 by @dependabot in https://github.com/onthegomap/planetiler/pull/95
    • Bump log4j.version from 2.17.1 to 2.17.2 by @dependabot in https://github.com/onthegomap/planetiler/pull/100
    • Bump guava from 31.0.1-jre to 31.1-jre by @dependabot in https://github.com/onthegomap/planetiler/pull/102
    • Bump actions/checkout from 2 to 3 by @dependabot in https://github.com/onthegomap/planetiler/pull/106
    • Bump jackson.version from 2.13.1 to 2.13.2 by @dependabot in https://github.com/onthegomap/planetiler/pull/121
    • Bump msgpack-core from 0.9.0 to 0.9.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/123
    • Bump mockito-core from 4.3.1 to 4.4.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/130
    • Bump spotless-maven-plugin from 2.21.0 to 2.22.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/151
    • Bump jib-maven-plugin from 3.2.0 to 3.2.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/152

    New Contributors

    • @wipfli made their first contribution in https://github.com/onthegomap/planetiler/pull/89
    • @SomeoneElseOSM made their first contribution in https://github.com/onthegomap/planetiler/pull/140
    • @boldtrn made their first contribution in https://github.com/onthegomap/planetiler/pull/143
    • @nyurik made their first contribution in https://github.com/onthegomap/planetiler/pull/150

    Full Changelog: https://github.com/onthegomap/planetiler/compare/v0.3.0...v0.4.0

    Source code(tar.gz)
    Source code(zip)
    planetiler.jar(54.23 MB)
    planetiler.jar.md5(49 bytes)
    planetiler.jar.sha256(81 bytes)
    v0.4.0-planet-c6gd-128gb-no-z13-building-merge.txt(189.91 KB)
    v0.4.0-planet-c6gd-128gb.txt(236.02 KB)
    v0.4.0-planet-c6gd-32gb.txt(395.14 KB)
    v0.4.0-planet-c6gd-64gb.txt(267.34 KB)
  • v0.3.0(Feb 17, 2022)

    What's Changed

    This release upgrades the basemap profile to be compatible with OpenMapTiles v3.13 (#49). People also started using the project a bit and discovered a few bugs that are fixed in this release. Keep 'em coming!

    To run this release from Java, download the attached planetiler.jar, or from docker use ghcr.io/onthegomap/planetiler:0.3.0.

    Also there is ongoing discussion about the project in the #planetiler channel on OSM-US slack. If you are interested in joining, get an invite here!

    Improvements and Bug Fixes

    • Upgrade planetiler-basemap to be compatible with OpenMapTiles 3.13 by @msbarry in https://github.com/onthegomap/planetiler/pull/49
    • Add hooks for preprocessing nodes and ways by @msbarry in https://github.com/onthegomap/planetiler/pull/56 (needed for highway junctions in basemap profile)
    • Include route relations without a network type by @msbarry in https://github.com/onthegomap/planetiler/pull/68
    • Treat boundary and land_area relation types as multipolygons by @msbarry in https://github.com/onthegomap/planetiler/pull/50
    • Fix pedestrian area polygons by @msbarry in https://github.com/onthegomap/planetiler/pull/63
    • Fix unit tests in other locales by @msbarry in https://github.com/onthegomap/planetiler/pull/64
    • Gracefully handle exceptions from profiles by @msbarry in https://github.com/onthegomap/planetiler/pull/65
    • Handle highways with man_made=bridge by @msbarry in https://github.com/onthegomap/planetiler/pull/66
    • Fix service/man_made npe by @msbarry in https://github.com/onthegomap/planetiler/pull/72

    Dependencies

    Once again, @dependabot has been busy keeping dependencies up-to-date.

    Dependency upgrades in this release
    • Bump log4j.version from 2.17.0 to 2.17.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/44
    • Bump reproducible-build-maven-plugin from 0.14 to 0.15 by @dependabot in https://github.com/onthegomap/planetiler/pull/45
    • Bump maven-deploy-plugin from 3.0.0-M1 to 3.0.0-M2 by @dependabot in https://github.com/onthegomap/planetiler/pull/48
    • Bump maven-jar-plugin from 3.2.0 to 3.2.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/52
    • Bump maven-jar-plugin from 3.2.1 to 3.2.2 by @dependabot in https://github.com/onthegomap/planetiler/pull/53
    • Bump slf4j-api from 1.7.32 to 1.7.33 by @dependabot in https://github.com/onthegomap/planetiler/pull/55
    • Bump jib-maven-plugin from 3.1.4 to 3.2.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/57
    • Bump geotools.version from 26.1 to 26.2 by @dependabot in https://github.com/onthegomap/planetiler/pull/58
    • Bump mockito-core from 4.2.0 to 4.3.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/59
    • Bump mockito-core from 4.3.0 to 4.3.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/60
    • Bump slf4j-api from 1.7.33 to 1.7.35 by @dependabot in https://github.com/onthegomap/planetiler/pull/62
    • Bump prometheus.version from 0.14.1 to 0.15.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/71
    • Bump slf4j-api from 1.7.35 to 1.7.36 by @dependabot in https://github.com/onthegomap/planetiler/pull/75
    • Bump maven-javadoc-plugin from 3.3.1 to 3.3.2 by @dependabot in https://github.com/onthegomap/planetiler/pull/76
    • Bump actions/github-script from 5 to 6 by @dependabot in https://github.com/onthegomap/planetiler/pull/79

    Full Changelog: https://github.com/onthegomap/planetiler/compare/v0.2.0...v0.3.0

    Source code(tar.gz)
    Source code(zip)
    planetiler.jar(52.60 MB)
    planetiler.jar.md5(49 bytes)
    planetiler.jar.sha256(81 bytes)
  • v0.2.0(Dec 23, 2021)

    What's Changed

    Flatmap has been renamed to "Planetiler" (#40) to better convey what the project does, and to be more unique and easy to find. Thanks to @danlarkin for the name suggestion!

    Starting with version 0.2.0, planetiler releases are available from maven central. To use as a library (see the example project) add this dependency to your java project:

    <dependency>
      <groupId>com.onthegomap.planetiler</groupId>
      <artifactId>planetiler-core</artifactId>
      <version>0.2.0</version>
    </dependency>
    

    Other User-Facing Improvements

    • Smaller Monaco extract snippets by @msbarry in https://github.com/onthegomap/planetiler/pull/5
    • Follow redirects from downloader by @msbarry in https://github.com/onthegomap/planetiler/pull/23
    • Switch from temurin jdk to jre by @msbarry in https://github.com/onthegomap/planetiler/pull/41
    • Build arm64 container by @msbarry in https://github.com/onthegomap/planetiler/pull/17

    Internal Improvements

    • Run generate test from CI by @msbarry in https://github.com/onthegomap/planetiler/pull/37
    • Change example run from CI by @msbarry in https://github.com/onthegomap/planetiler/pull/28
    • Use maven cache for regenerate CI by @msbarry in https://github.com/onthegomap/planetiler/pull/42
    • Switch from github maven packages to maven central by @msbarry in https://github.com/onthegomap/planetiler/pull/7

    Dependencies

    @dependabot has been busy keeping dependencies on their latest versions. Notably, log4j has been upgraded to version 2.17.0 to mitigate Log4Shell vulnerability (CVE-2021-44228).

    Other dependency upgrades
    • Bump icu4j from 69.1 to 70.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/10
    • Bump geotools.version from 26.0 to 26.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/19
    • Bump mockito-core from 4.0.0 to 4.1.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/20
    • Bump junit.version from 5.8.1 to 5.8.2 by @dependabot in https://github.com/onthegomap/planetiler/pull/22
    • Bump commonmark from 0.18.0 to 0.18.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/24
    • Bump log4j.version from 2.14.1 to 2.15.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/27
    • Bump prometheus.version from 0.12.0 to 0.13.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/29
    • Bump log4j-api from 2.15.0 to 2.16.0 in /flatmap-core by @dependabot in https://github.com/onthegomap/planetiler/pull/30
    • Bump junit-jupiter-api from 5.8.1 to 5.8.2 in /flatmap-examples by @dependabot in https://github.com/onthegomap/planetiler/pull/32
    • Bump snakeyaml from 1.29 to 1.30 by @dependabot in https://github.com/onthegomap/planetiler/pull/33
    • Bump mockito-core from 4.1.0 to 4.2.0 by @dependabot in https://github.com/onthegomap/planetiler/pull/34
    • Bump log4j-api from 2.16.0 to 2.17.0 in /flatmap-core by @dependabot in https://github.com/onthegomap/planetiler/pull/35
    • Bump jackson.version from 2.13.0 to 2.13.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/38
    • Bump prometheus.version from 0.13.0 to 0.14.1 by @dependabot in https://github.com/onthegomap/planetiler/pull/39

    Full Changelog: https://github.com/onthegomap/planetiler/compare/v0.1.0...v0.2.0

    Source code(tar.gz)
    Source code(zip)
    planetiler.jar(52.58 MB)
    planetiler.jar.md5(49 bytes)
    planetiler.jar.sha256(81 bytes)
  • v0.1.0(Oct 25, 2021)

    Initial flatmap release, see the README for more details.

    To run using Java 16 or later:

    wget https://github.com/onthegomap/flatmap/releases/download/v0.1.0/flatmap.jar
    java -Xmx1g -jar flatmap.jar --download --area=monaco
    

    Or using docker:

    docker run -e JAVA_TOOL_OPTIONS="-Xmx1g" -v "$(pwd)/data":/data ghcr.io/onthegomap/flatmap:0.1.0 --download --area=monaco
    

    Attached are logs and VisualVM profile from running flatmap over the planet-211011.osm.pbf snapshot from the AWS Registry of Open Data on a Digital Ocean memory-optimized droplet with 16 vCPUs and 128GB RAM in 3h21m.

    Source code(tar.gz)
    Source code(zip)
    flatmap.jar(52.29 MB)
    flatmap.jar.md5(46 bytes)
    flatmap.jar.sha256(78 bytes)
    planet-logs-do-16cpu-128gb.txt(460.72 KB)
    planet-visualvm-profile-do-16cpu-128gb.nps(2.03 MB)
  • v0.1.0-pre2(Oct 24, 2021)

  • v0.1.0-pre1(Oct 20, 2021)

Owner
On The Go Map
On The Go Map
an open source geocoder for openstreetmap data

photon photon is an open source geocoder built for OpenStreetMap data. It is based on elasticsearch - an efficient, powerful and highly scalable searc

komoot 1.5k Dec 29, 2022
Open source routing engine for OpenStreetMap. Use it as Java library or server.

GraphHopper Routing Engine GraphHopper is a fast and memory efficient Java routing engine, released under Apache License 2.0. By default it uses OpenS

GraphHopper 4k Jan 3, 2023
Vector map library and writer - running on Android and Desktop.

Mapsforge See the integration guide and changelog. And read through how to contribute guidelines. If you have any questions or problems, don't hesitat

mapsforge 1k Dec 30, 2022
The JTS Topology Suite is a Java library for creating and manipulating vector geometry.

JTS Topology Suite The JTS Topology Suite is a Java library for creating and manipulating vector geometry. It also provides a comprehensive set of geo

LocationTech 1.5k Jan 6, 2023
Vector map library and writer - running on Android and Desktop.

Mapsforge See the integration guide and changelog. And read through how to contribute guidelines. If you have any questions or problems, don't hesitat

mapsforge 1k Jan 7, 2023
OpenMap is an Open Source JavaBeans-based programmer's toolkit. Using OpenMap, you can quickly build applications and applets that access data from legacy databases and applications.

$Source: /cvs/distapps/openmap/README,v $ $RCSfile: README,v $ $Revision: 1.11 $ $Date: 2002/11/06 19:11:02 $ $Author: bmackiew $ OpenMap(tm) What

OpenMap 65 Nov 12, 2022
GeoServer is an open source software server written in Java that allows users to share and edit geospatial data

GeoServer is an open source software server written in Java that allows users to share and edit geospatial data. Designed for interoperability, it publishes data from any major spatial data source using open standards.

GeoServer 3k Jan 1, 2023
Flexible tool to build planet-scale vector tilesets from OpenStreetMap data in a few hours

Planetiler Planetiler (pla·nuh·tai·lr, formerly named "Flatmap") is a tool that generates Vector Tiles from geographic data sources like OpenStreetMap

On The Go Map 748 Dec 27, 2022
A scientific charting library focused on performance optimised real-time data visualisation at 25 Hz update rates for data sets with a few 10 thousand up to 5 million data points.

ChartFx ChartFx is a scientific charting library developed at GSI for FAIR with focus on performance optimised real-time data visualisation at 25 Hz u

GSI CS-CO/ACO 386 Jan 2, 2023
A scientific charting library focused on performance optimised real-time data visualisation at 25 Hz update rates for data sets with a few 10 thousand up to 5 million data points.

ChartFx ChartFx is a scientific charting library developed at GSI for FAIR with focus on performance optimised real-time data visualisation at 25 Hz u

GSI CS-CO/ACO 385 Dec 30, 2022
an open source geocoder for openstreetmap data

photon photon is an open source geocoder built for OpenStreetMap data. It is based on elasticsearch - an efficient, powerful and highly scalable searc

komoot 1.5k Dec 29, 2022
A fork of Cliff Click's High Scale Library. Improved with bug fixes and a real build system.

High Scale Lib This is Boundary's fork of Cliff Click's high scale lib. We will be maintaining this fork with bug fixes, improvements and versioned bu

BMC TrueSight Pulse (formerly Boundary) 402 Jan 2, 2023
Open source routing engine for OpenStreetMap. Use it as Java library or server.

GraphHopper Routing Engine GraphHopper is a fast and memory efficient Java routing engine, released under Apache License 2.0. By default it uses OpenS

GraphHopper 4k Jan 3, 2023
APM, (Application Performance Management) tool for large-scale distributed systems.

Visit our official web site for more information and Latest updates on Pinpoint. Latest Release (2020/01/21) We're happy to announce the release of Pi

null 12.6k Jan 4, 2023
APM, (Application Performance Management) tool for large-scale distributed systems.

Visit our official web site for more information and Latest updates on Pinpoint. Latest Release (2020/01/21) We're happy to announce the release of Pi

null 12.5k Dec 29, 2022
APM, (Application Performance Management) tool for large-scale distributed systems.

Visit our official web site for more information and Latest updates on Pinpoint. Latest Release (2020/01/21) We're happy to announce the release of Pi

null 12.6k Jan 6, 2023
Vector map library and writer - running on Android and Desktop.

Mapsforge See the integration guide and changelog. And read through how to contribute guidelines. If you have any questions or problems, don't hesitat

mapsforge 1k Dec 30, 2022
The JTS Topology Suite is a Java library for creating and manipulating vector geometry.

JTS Topology Suite The JTS Topology Suite is a Java library for creating and manipulating vector geometry. It also provides a comprehensive set of geo

LocationTech 1.5k Jan 6, 2023