Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Permit post-process merging in custommap schemas #626

Merged
merged 19 commits into from
Aug 7, 2023

Conversation

zhibek
Copy link
Contributor

@zhibek zhibek commented Jul 14, 2023

To overcome the limitations in #350, I've been using these modifications locally.

I'm not sure which direction @msbarry would like to take with this functionality, but I'm sharing this PR in case its useful.

@github-actions
Copy link

github-actions bot commented Jul 14, 2023

Base 68c2d7f This Branch e1f2c2c
0:01:50 DEB [archive] - Tile stats:
0:01:50 DEB [archive] - z0 avg:7.9k max:7.9k
0:01:50 DEB [archive] - z1 avg:4k max:4k
0:01:50 DEB [archive] - z2 avg:9.4k max:9.4k
0:01:50 DEB [archive] - z3 avg:4k max:6.4k
0:01:50 DEB [archive] - z4 avg:1.6k max:4.6k
0:01:50 DEB [archive] - z5 avg:1.4k max:7.1k
0:01:50 DEB [archive] - z6 avg:971 max:22k
0:01:50 DEB [archive] - z7 avg:766 max:58k
0:01:50 DEB [archive] - z8 avg:416 max:126k
0:01:50 DEB [archive] - z9 avg:280 max:297k
0:01:50 DEB [archive] - z10 avg:160 max:255k
0:01:50 DEB [archive] - z11 avg:106 max:136k
0:01:50 DEB [archive] - z12 avg:85 max:114k
0:01:50 DEB [archive] - z13 avg:72 max:128k
0:01:50 DEB [archive] - z14 avg:68 max:303k
0:01:50 DEB [archive] - all avg:70 max:303k
0:01:50 DEB [archive] -  # features: 5,435,037
0:01:50 DEB [archive] -     # tiles: 4,115,061
0:01:50 INF [archive] - Finished in 30s cpu:58s gc:1s avg:1.9
0:01:50 INF [archive] -   read    1x(2% 0.6s wait:28s)
0:01:50 INF [archive] -   encode  2x(64% 19s)
0:01:50 INF [archive] -   write   1x(13% 4s wait:24s)
0:01:50 INF - Finished in 1m50s cpu:3m20s gc:4s avg:1.8
0:01:50 INF - FINISHED!
0:01:50 INF - 
0:01:50 INF - ----------------------------------------
0:01:50 INF - data errors:
0:01:50 INF - 	render_snap_fix_input	16,459
0:01:50 INF - 	osm_boundary_missing_way	63
0:01:50 INF - 	osm_multipolygon_missing_way	57
0:01:50 INF - 	merge_snap_fix_input	14
0:01:50 INF - 	feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix	2
0:01:50 INF - 	feature_polygon_osm_invalid_multipolygon_empty_after_fix	2
0:01:50 INF - 	omt_park_area_osm_invalid_multipolygon_empty_after_fix	1
0:01:50 INF - ----------------------------------------
0:01:50 INF - 	overall          1m50s cpu:3m20s gc:4s avg:1.8
0:01:50 INF - 	lake_centerlines 3s cpu:6s avg:1.8
0:01:50 INF - 	  read     1x(49% 2s done:1s)
0:01:50 INF - 	  process  2x(8% 0.2s wait:2s done:1s)
0:01:50 INF - 	  write    1x(0% 0s wait:2s done:1s)
0:01:50 INF - 	water_polygons   30s cpu:49s gc:2s avg:1.7
0:01:50 INF - 	  read     1x(49% 15s wait:8s)
0:01:50 INF - 	  process  2x(30% 9s wait:12s)
0:01:50 INF - 	  write    1x(2% 0.6s wait:29s)
0:01:50 INF - 	natural_earth    8s cpu:12s avg:1.5
0:01:50 INF - 	  read     1x(89% 7s)
0:01:50 INF - 	  process  2x(15% 1s wait:7s)
0:01:50 INF - 	  write    1x(0% 0s wait:8s)
0:01:50 INF - 	osm_pass1        3s cpu:6s avg:1.8
0:01:50 INF - 	  read     1x(1% 0s wait:3s)
0:01:50 INF - 	  parse    1x(66% 2s)
0:01:50 INF - 	  process  1x(43% 1s wait:2s)
0:01:50 INF - 	osm_pass2        33s cpu:1m5s avg:2
0:01:50 INF - 	  read     1x(0% 0s wait:17s done:16s)
0:01:50 INF - 	  process  2x(77% 26s)
0:01:50 INF - 	  write    1x(1% 0.4s wait:33s)
0:01:50 INF - 	boundaries       0s cpu:0s avg:1.2
0:01:50 INF - 	sort             2s cpu:3s avg:1.6
0:01:50 INF - 	  worker  1x(94% 2s)
0:01:50 INF - 	archive          30s cpu:58s gc:1s avg:1.9
0:01:50 INF - 	  read    1x(2% 0.6s wait:28s)
0:01:50 INF - 	  encode  2x(64% 19s)
0:01:50 INF - 	  write   1x(13% 4s wait:24s)
0:01:50 INF - ----------------------------------------
0:01:50 INF - 	archive	108MB
0:01:50 INF - 	features	283MB
-rw-r--r-- 1 runner docker 65M Aug  5 20:00 run.jar
0:01:56 DEB [archive] - Tile stats:
0:01:56 DEB [archive] - z0 avg:7.9k max:7.9k
0:01:56 DEB [archive] - z1 avg:4k max:4k
0:01:56 DEB [archive] - z2 avg:9.4k max:9.4k
0:01:56 DEB [archive] - z3 avg:4k max:6.4k
0:01:56 DEB [archive] - z4 avg:1.6k max:4.6k
0:01:56 DEB [archive] - z5 avg:1.4k max:7.1k
0:01:56 DEB [archive] - z6 avg:971 max:22k
0:01:56 DEB [archive] - z7 avg:766 max:58k
0:01:56 DEB [archive] - z8 avg:416 max:126k
0:01:56 DEB [archive] - z9 avg:280 max:297k
0:01:56 DEB [archive] - z10 avg:160 max:255k
0:01:56 DEB [archive] - z11 avg:106 max:136k
0:01:56 DEB [archive] - z12 avg:85 max:114k
0:01:56 DEB [archive] - z13 avg:72 max:128k
0:01:56 DEB [archive] - z14 avg:68 max:303k
0:01:56 DEB [archive] - all avg:70 max:303k
0:01:56 DEB [archive] -  # features: 5,435,037
0:01:56 DEB [archive] -     # tiles: 4,115,061
0:01:56 INF [archive] - Finished in 29s cpu:57s gc:1s avg:1.9
0:01:56 INF [archive] -   read    1x(2% 0.6s wait:28s)
0:01:56 INF [archive] -   encode  2x(64% 19s)
0:01:56 INF [archive] -   write   1x(13% 4s wait:24s)
0:01:56 INF - Finished in 1m56s cpu:3m23s gc:4s avg:1.7
0:01:56 INF - FINISHED!
0:01:56 INF - 
0:01:56 INF - ----------------------------------------
0:01:56 INF - data errors:
0:01:56 INF - 	render_snap_fix_input	16,459
0:01:56 INF - 	osm_boundary_missing_way	63
0:01:56 INF - 	osm_multipolygon_missing_way	57
0:01:56 INF - 	merge_snap_fix_input	14
0:01:56 INF - 	feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix	2
0:01:56 INF - 	feature_polygon_osm_invalid_multipolygon_empty_after_fix	2
0:01:56 INF - 	omt_park_area_osm_invalid_multipolygon_empty_after_fix	1
0:01:56 INF - ----------------------------------------
0:01:56 INF - 	overall          1m56s cpu:3m23s gc:4s avg:1.7
0:01:56 INF - 	lake_centerlines 3s cpu:6s avg:1.9
0:01:56 INF - 	  read     1x(48% 1s done:1s)
0:01:56 INF - 	  process  2x(7% 0.2s wait:2s done:1s)
0:01:56 INF - 	  write    1x(0% 0s wait:2s done:1s)
0:01:56 INF - 	water_polygons   29s cpu:47s gc:3s avg:1.6
0:01:56 INF - 	  read     1x(50% 15s wait:7s)
0:01:56 INF - 	  process  2x(28% 8s wait:13s)
0:01:56 INF - 	  write    1x(2% 0.6s wait:28s)
0:01:56 INF - 	natural_earth    12s cpu:13s avg:1
0:01:56 INF - 	  read     1x(63% 8s sys:1s done:4s)
0:01:56 INF - 	  process  2x(10% 1s wait:8s done:4s)
0:01:56 INF - 	  write    1x(0% 0s wait:9s done:4s)
0:01:56 INF - 	osm_pass1        4s cpu:6s avg:1.7
0:01:56 INF - 	  read     1x(1% 0s wait:3s)
0:01:56 INF - 	  parse    1x(63% 2s)
0:01:56 INF - 	  process  1x(41% 2s wait:2s)
0:01:56 INF - 	osm_pass2        36s cpu:1m10s avg:2
0:01:56 INF - 	  read     1x(0% 0s wait:19s done:17s)
0:01:56 INF - 	  process  2x(74% 27s)
0:01:56 INF - 	  write    1x(1% 0.4s wait:35s)
0:01:56 INF - 	boundaries       0s cpu:0s avg:1.3
0:01:56 INF - 	sort             2s cpu:3s avg:1.1
0:01:56 INF - 	  worker  1x(68% 2s)
0:01:56 INF - 	archive          29s cpu:57s gc:1s avg:1.9
0:01:56 INF - 	  read    1x(2% 0.6s wait:28s)
0:01:56 INF - 	  encode  2x(64% 19s)
0:01:56 INF - 	  write   1x(13% 4s wait:24s)
0:01:56 INF - ----------------------------------------
0:01:56 INF - 	archive	108MB
0:01:56 INF - 	features	283MB
-rw-r--r-- 1 runner docker 65M Aug  5 19:58 run.jar

https://github.com/onthegomap/planetiler/actions/runs/5772505468

ℹ️ Base Logs 68c2d7f
0:00:00 DEB - argument: config=null (path to config file)
0:00:00 DEB - argument: area=rhode island (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 - argument: stats=use in-memory stats
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=mmap (default storage type for temporary data, one of [ram, mmap, direct])
0:00:00 DEB - argument: threads=2 (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=2 (number of threads to use when processing input features)
0:00:00 DEB - argument: bounds=Env[-74.07 : -17.84, 21.34 : 43.55] (bounds)
0:00:00 DEB - argument: polygon=null (a .poly file that limits output to tiles intersecting the shape)
0:00:00 DEB - argument: minzoom=0 (minimum zoom level)
0:00:00 DEB - argument: maxzoom=14 (maximum zoom level up to 15)
0:00:00 DEB - argument: render_maxzoom=14 (maximum rendering zoom level up to 15)
0:00:00 DEB - argument: feature_read_threads=1 (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: 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=sparsearray (type of node location map, one of [noop, sortedtable, sparsearray, array])
0:00:00 DEB - argument: nodemap_storage=mmap (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=mmap (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=100 (Size of file chunks to download in parallel in megabytes)
0:00:00 DEB - argument: download_threads=1 (Number of parallel threads to use when downloading each file)
0:00:00 DEB - argument: download_max_bandwidth= (Maximum bandwidth to consume when downloading files in units mb/s, mbps, kbps, etc.)
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=true (Read OSM blocks from disk in worker threads)
0:00:00 DEB - argument: skip_filled_tiles=false (Skip writing tiles containing only polygon fills to the output)
0:00:00 DEB - argument: tile_warning_size_mb=1.0 (Maximum size in megabytes of a tile to emit a warning about)
0:00:00 DEB - argument: color=null (Color the terminal output)
0:00:00 DEB - argument: keep_unzipped=true (keep unzipped sources by default after reading)
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=false (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: 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: 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_keep_unzipped=true (keep unzipped natural_earth after reading)
0:00:00 DEB - argument: osm_path=data/sources/rhode_island.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: output=data/out.mbtiles (output tile archive path)
0:00:00 DEB - argument: version=false (show version then exit)
0:00:00 INF - Planetiler build git hash: 68c2d7f417d7e8488252d42a9916b78b772e2f4c
0:00:00 INF - Planetiler build version: 0.6-SNAPSHOT
0:00:00 INF - Planetiler build timestamp: 2023-08-05T19:58:08.349Z
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: boundary_osm_only=false (boundary layer: only use OSM, even at low zoom levels)
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: help=false (show arguments then exit)
0:00:00 INF - Building OpenMapTilesProfile profile into file:///home/runner/work/planetiler/planetiler/data/out.mbtiles in these phases:
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 -   archive: Encode each tile and write to TileArchiveConfig[format=MBTILES, scheme=FILE, uri=file:///home/runner/work/planetiler/planetiler/data/out.mbtiles, options={}]
0:00:00 INF - no wikidata translations found, run with --fetch-wikidata to download
0:00:00 DEB - ✓ 196M storage on / (/dev/root) requested for read phase disk, 20G available
0:00:00 DEB -  - 44M used for temporary node location cache
0:00:00 DEB -  - 6.7M used for temporary multipolygon geometry cache
0:00:00 DEB -  - 145M used for temporary feature storage
0:00:00 DEB - ✓ 218M storage on / (/dev/root) requested for write phase disk, 20G available
0:00:00 DEB -  - 145M used for temporary feature storage
0:00:00 DEB -  - 72M used for archive output
0:00:00 DEB - ✓ 50M storage on / (/dev/root) requested for read phase, 20G available
0:00:00 DEB -  - 44M used for sparsearray node location cache
0:00:00 DEB -  - 6.7M used for multipolygon way geometries
0:00:00 DEB - ✓ 313M JVM heap requested for read phase, 4.2G available
0:00:00 DEB -  - 300M used for sparsearray node location in-memory index
0:00:00 DEB -  - 13M used for temporary profile storage
0:00:00 DEB - ✓ 50M temporary files and 2.9G of free memory for OS to cache them
0:00:00 DEB - argument: archive_name=OpenMapTiles ('name' attribute for tileset metadata)
0:00:00 DEB - argument: archive_description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org ('description' attribute for tileset metadata)
0:00:00 DEB - argument: archive_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 tileset metadata)
0:00:00 DEB - argument: archive_version=3.14.0 ('version' attribute for tileset metadata)
0:00:00 DEB - argument: archive_type=baselayer ('type' attribute for tileset metadata)
0:00:00 DEB - argument: archive_format=pbf ('format' attribute for tileset metadata)
0:00:00 DEB - argument: compact=true (mbtiles: reduce the DB size by separating and deduping the tile data)
0:00:00 DEB - argument: no_index=false (mbtiles: skip adding index to sqlite DB)
0:00:00 DEB - argument: vacuum_analyze=false (mbtiles: vacuum analyze sqlite DB after writing)
0:00:00 INF - Using merge sort feature map, chunk size=1431mb max workers=2
0:00:00 INF [lake_centerlines] - 
0:00:00 INF [lake_centerlines] - Starting...
0:00:04 INF [lake_centerlines] -  read: [  59k 100%  32k/s ] write: [    0    0/s ] 0    
    cpus: 1.9 gc:  4% heap: 175M/4.2G direct: 237k postGC: 77M
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:04 INF [lake_centerlines] - Finished in 3s cpu:6s avg:1.8
0:00:04 INF [lake_centerlines] -   read     1x(49% 2s done:1s)
0:00:04 INF [lake_centerlines] -   process  2x(8% 0.2s wait:2s done:1s)
0:00:04 INF [lake_centerlines] -   write    1x(0% 0s wait:2s done:1s)
0:00:04 INF [water_polygons] - 
0:00:04 INF [water_polygons] - Starting...
0:00:14 INF [water_polygons] -  read: [ 1.8k  13%  182/s ] write: [  40k 3.9k/s ] 1.4G 
    cpus: 1.6 gc: 12% heap: 693M/4.2G direct: 66M postGC: 735M
    ->     (0/3) -> read(62%) ->  (893/1k) -> process(19% 19%) -> (1.1k/53k) -> write( 0%)
0:00:24 INF [water_polygons] -  read: [ 3.8k  26%  199/s ] write: [ 360k  31k/s ] 1.4G 
    cpus: 1.9 gc:  7% heap: 1.5G/4.2G direct: 66M postGC: 1.2G
    ->     (0/3) -> read(27%) ->    (0/1k) -> process(49% 49%) -> (961/53k) -> write( 1%)
0:00:33 INF [water_polygons] -  read: [  14k 100% 1.1k/s ] write: [ 4.3M 408k/s ] 193M 
    cpus: 1.4 gc:  6% heap: 2.2G/4.2G direct: 66M postGC: 1.7G
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:33 INF [water_polygons] - Finished in 30s cpu:49s gc:2s avg:1.7
0:00:33 INF [water_polygons] -   read     1x(49% 15s wait:8s)
0:00:33 INF [water_polygons] -   process  2x(30% 9s wait:12s)
0:00:33 INF [water_polygons] -   write    1x(2% 0.6s wait:29s)
0:00:33 INF [natural_earth] - 
0:00:33 INF [natural_earth] - Starting...
0:00:42 INF [natural_earth] -  read: [ 349k 100%  43k/s ] write: [  181   22/s ] 193M 
    cpus: 1.5 gc:  0% heap: 3.5G/4.2G direct: 66M postGC: 1.7G
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:42 INF [natural_earth] - Finished in 8s cpu:12s avg:1.5
0:00:42 INF [natural_earth] -   read     1x(89% 7s)
0:00:42 INF [natural_earth] -   process  2x(15% 1s wait:7s)
0:00:42 INF [natural_earth] -   write    1x(0% 0s wait:8s)
0:00:42 INF [osm_pass1] - 
0:00:42 INF [osm_pass1] - Starting...
0:00:44 INF [osm_pass1:process] - Finished nodes: 4,625,001 (1.8M/s) in 3s cpu:4s avg:1.7
0:00:45 INF [osm_pass1:process] - Finished ways: 343,567 (471k/s) in 0.7s cpu:1s avg:1.9
0:00:45 INF [osm_pass1:process] - Finished relations: 8,094 (80k/s) in 0.1s cpu:0.2s avg:2
0:00:45 INF [osm_pass1] -  nodes: [ 4.6M 1.3M/s ] 477M  ways: [ 343k  99k/s ] rels: [   8k 2.3k/s ] blocks: [  624  180/s ]
    cpus: 1.8 gc:  3% heap: 1G/4.2G direct: 66M postGC: 934M hppc: 468k
    read( -%) ->     (0/4) -> parse( -%) ->     (0/4) -> process( -%)
0:00:45 DEB [osm_pass1] - Processed 624 blocks:
0:00:45 DEB [osm_pass1] -   nodes: 4,625,001 (1.8M/s) in 3s cpu:4s avg:1.7
0:00:45 DEB [osm_pass1] -   ways: 343,567 (471k/s) in 0.7s cpu:1s avg:1.9
0:00:45 DEB [osm_pass1] -   relations: 8,094 (80k/s) in 0.1s cpu:0.2s avg:2
0:00:45 INF [osm_pass1] - Finished in 3s cpu:6s avg:1.8
0:00:45 INF [osm_pass1] -   read     1x(1% 0s wait:3s)
0:00:45 INF [osm_pass1] -   parse    1x(66% 2s)
0:00:45 INF [osm_pass1] -   process  1x(43% 1s wait:2s)
0:00:45 INF [osm_pass2] - 
0:00:45 INF [osm_pass2] - Starting...
0:00:48 DEB [osm_pass2:process] - Sorting long long multimap...
0:00:48 INF [osm_pass2:process] - Finished nodes: 4,625,001 (1.7M/s) in 3s cpu:5s avg:2
0:00:48 DEB [osm_pass2:process] - Sorted long long multimap 0s cpu:0s avg:2.1
0:00:48 WAR [osm_pass2:process] - No GB polygon for inferring route network types
0:00:55 INF [osm_pass2] -  nodes: [ 4.6M 100% 461k/s ] 477M  ways: [ 183k  53%  18k/s ] rels: [    0   0%    0/s ] features: [ 4.9M  63k/s ] 1.6G  blocks: [  601  96%   60/s ]
    cpus: 2 gc:  1% heap: 1.3G/4.2G direct: 66M postGC: 942M relInfo: 427k mpGeoms: 474k 
    read( 0%) ->   (11/13) -> process(62% 62%) ->  (1k/53k) -> write( 2%)
0:01:05 INF [osm_pass2:process] - Finished ways: 343,567 (20k/s) in 17s cpu:33s avg:2
0:01:05 INF [osm_pass2] -  nodes: [ 4.6M 100%    0/s ] 477M  ways: [ 343k 100%  16k/s ] rels: [  857  11%   85/s ] features: [ 5.3M  44k/s ] 1.6G  blocks: [  623 100%    2/s ]
    cpus: 2 gc:  1% heap: 1.2G/4.2G direct: 66M postGC: 951M relInfo: 427k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process(82% 83%) -> (1.4k/53k) -> write( 2%)
0:01:15 INF [osm_pass2] -  nodes: [ 4.6M 100%    0/s ] 477M  ways: [ 343k 100%    0/s ] rels: [ 6.7k  84%  593/s ] features: [ 5.4M 2.8k/s ] 1.6G  blocks: [  623 100%    0/s ]
    cpus: 2 gc:  0% heap: 2.5G/4.2G direct: 66M postGC: 934M relInfo: 427k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process(86% 83%) ->  (1k/53k) -> write( 0%)
0:01:16 INF [osm_pass2:process] - Finished relations: 8,094 (739/s) in 11s cpu:22s avg:2
0:01:18 INF [osm_pass2] -  nodes: [ 4.6M 100%    0/s ] 477M  ways: [ 343k 100%    0/s ] rels: [   8k 100%  428/s ] features: [ 5.4M 2.9k/s ] 283M  blocks: [  624 100%   <1/s ]
    cpus: 2 gc:  0% heap: 900M/4.2G direct: 66M postGC: 918M relInfo: 427k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:01:18 DEB [osm_pass2] - Processed 624 blocks:
0:01:18 DEB [osm_pass2] -   nodes: 4,625,001 (1.7M/s) in 3s cpu:5s avg:2
0:01:18 DEB [osm_pass2] -   ways: 343,567 (20k/s) in 17s cpu:33s avg:2
0:01:18 DEB [osm_pass2] -   relations: 8,094 (739/s) in 11s cpu:22s avg:2
0:01:18 INF [osm_pass2] - Finished in 33s cpu:1m5s avg:2
0:01:18 INF [osm_pass2] -   read     1x(0% 0s wait:17s done:16s)
0:01:18 INF [osm_pass2] -   process  2x(77% 26s)
0:01:18 INF [osm_pass2] -   write    1x(1% 0.4s wait:33s)
0:01:18 INF [boundaries] - 
0:01:18 INF [boundaries] - Starting...
0:01:18 INF [boundaries] - Creating polygons for 1 boundaries
0:01:18 WAR [boundaries] - Unable to form closed polygon for OSM relation 148838 (likely missing edges)
0:01:18 INF [boundaries] - Finished creating 0 country polygons
0:01:18 INF [boundaries] - Finished in 0s cpu:0s avg:1.2
0:01:18 INF - Deleting node.db to make room for output file
0:01:18 INF [sort] - 
0:01:18 INF [sort] - Starting...
0:01:18 INF [sort] - Grouped 8 chunks into 1
0:01:20 INF [sort] -  chunks: [   1 /   1 100% ] 283M 
    cpus: 1.6 gc:  0% heap: 588M/4.2G direct: 66M postGC: 851M
    ->     (0/3) -> worker( -%)
0:01:20 INF [sort] - Finished in 2s cpu:3s avg:1.6
0:01:20 INF [sort] -   worker  1x(94% 2s)
0:01:20 INF - read:0s write:0s sort:0s
0:01:20 INF [archive] - 
0:01:20 INF [archive] - Starting...
0:01:20 DEB [archive:write] - Execute mbtiles: create table metadata (name text, value text);
0:01:20 DEB [archive:write] - Execute mbtiles: create unique index name on metadata (name);
0:01:20 DEB [archive:write] - Execute mbtiles: create table tiles_shallow (
  zoom_level integer,
  tile_column integer,
  tile_row integer,
  tile_data_id integer

  , primary key(zoom_level,tile_column,tile_row)

) without rowid

0:01:20 DEB [archive:write] - Execute mbtiles: create table tiles_data (
  tile_data_id integer primary key,
  tile_data blob
)

0:01:20 DEB [archive:write] - Execute mbtiles: create view tiles AS
select
  tiles_shallow.zoom_level as zoom_level,
  tiles_shallow.tile_column as tile_column,
  tiles_shallow.tile_row as tile_row,
  tiles_data.tile_data as tile_data
from tiles_shallow
join tiles_data on tiles_shallow.tile_data_id = tiles_data.tile_data_id

0:01:21 DEB [archive:write] - Set mbtiles metadata: format=pbf
0:01:21 DEB [archive:write] - Set mbtiles metadata: center=-45.955,32.445,3
0:01:21 DEB [archive:write] - Set mbtiles metadata: bounds=-74.07,21.34,-17.84,43.55
0:01:21 DEB [archive:write] - Set mbtiles metadata: json={"vector_layers":[{"id":"aerodrome_label","fields":{"name_int":"String","iata":"String","ele_ft":"Number","name_de":"String","name":"String","icao":"String","name:en":"String","class":"String","ele":"Number","name_en":"String","name:latin":"String"},"minzoom":10,"maxzoom":14},{"id":"aeroway","fields":{"ref":"String","class":"String"},"minzoom":10,"maxzoom":14},{"id":"boundary","fields":{"disputed":"Number","admin_level":"Number","maritime":"Number"},"minzoom":0,"maxzoom":14},{"id":"building","fields":{"colour":"String","render_height":"Number","render_min_height":"Number","hide_3d":"Boolean"},"minzoom":13,"maxzoom":14},{"id":"housenumber","fields":{"housenumber":"String"},"minzoom":14,"maxzoom":14},{"id":"landcover","fields":{"subclass":"String","class":"String","_numpoints":"Number"},"minzoom":7,"maxzoom":14},{"id":"landuse","fields":{"class":"String"},"minzoom":4,"maxzoom":14},{"id":"mountain_peak","fields":{"customary_ft":"Number","name_int":"String","ele_ft":"Number","name_de":"Str... 2339 more characters
0:01:21 DEB [archive:write] - Set mbtiles metadata: name=OpenMapTiles
0:01:21 DEB [archive:write] - Set mbtiles metadata: description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org
0:01:21 DEB [archive:write] - Set mbtiles metadata: 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>
0:01:21 DEB [archive:write] - Set mbtiles metadata: version=3.14.0
0:01:21 DEB [archive:write] - Set mbtiles metadata: type=baselayer
0:01:21 DEB [archive:write] - Set mbtiles metadata: minzoom=0
0:01:21 DEB [archive:write] - Set mbtiles metadata: maxzoom=14
0:01:21 DEB [archive:write] - Set mbtiles metadata: planetiler:version=0.6-SNAPSHOT
0:01:21 DEB [archive:write] - Set mbtiles metadata: planetiler:githash=68c2d7f417d7e8488252d42a9916b78b772e2f4c
0:01:21 DEB [archive:write] - Set mbtiles metadata: planetiler:buildtime=2023-08-05T19:58:08.349Z
0:01:21 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationtime=2023-08-04T20:21:45Z
0:01:21 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationseq=3781
0:01:21 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationurl=http://download.geofabrik.de/north-america/us/rhode-island-updates
0:01:23 INF [archive:write] - Starting z0
0:01:23 INF [archive:write] - Finished z0 in 0s cpu:0s avg:0, now starting z1
0:01:23 INF [archive:write] - Finished z1 in 0s cpu:0s avg:0, now starting z2
0:01:23 INF [archive:write] - Finished z2 in 0s cpu:0s avg:0, now starting z3
0:01:23 INF [archive:write] - Finished z3 in 0s cpu:0s avg:0, now starting z4
0:01:23 INF [archive:write] - Finished z4 in 0s cpu:0s avg:0, now starting z5
0:01:23 INF [archive:write] - Finished z5 in 0s cpu:0s avg:0, now starting z6
0:01:23 INF [archive:write] - Finished z6 in 0s cpu:0s avg:0, now starting z7
0:01:23 INF [archive:write] - Finished z7 in 0.7s cpu:1s avg:2, now starting z8
0:01:25 INF [archive:write] - Finished z8 in 2s cpu:4s avg:2, now starting z9
0:01:28 INF [archive:write] - Finished z9 in 3s cpu:6s avg:2, now starting z10
0:01:30 INF [archive:write] - Finished z10 in 1s cpu:3s avg:2, now starting z11
0:01:31 INF [archive] -  features: [ 173k   3%  16k/s ] 283M  tiles: [  18k 1.7k/s ] 2.5M 
    cpus: 2 gc:  6% heap: 2G/4.2G direct: 66M postGC: 770M
    read( 1%) -> (214/217) -> encode(60% 60%) -> (215/216) -> write( 1%)
    last tile: 11/616/762 (z11 4%) https://www.openstreetmap.org/#map=11/41.77131/-71.71875
0:01:32 INF [archive:write] - Finished z11 in 3s cpu:5s avg:2, now starting z12
0:01:36 INF [archive:write] - Finished z12 in 4s cpu:8s avg:2, now starting z13
0:01:41 INF [archive] -  features: [ 855k  16%  68k/s ] 283M  tiles: [ 291k  27k/s ] 13M  
    cpus: 2 gc:  2% heap: 2.9G/4.2G direct: 66M postGC: 845M
    read( 1%) -> (214/217) -> encode(68% 74%) -> (215/216) -> write( 3%)
    last tile: 13/2470/3047 (z13 5%) https://www.openstreetmap.org/#map=13/41.80408/-71.45508
0:01:44 INF [archive:write] - Finished z13 in 8s cpu:16s avg:2, now starting z14
0:01:50 DEB [archive:write] - Shallow tiles written: 4,115,061
0:01:50 DEB [archive:write] - Tile data written: 17,333 (100% omitted)
0:01:50 DEB [archive:write] - Unique tile hashes: 8,454
0:01:50 INF [archive:write] - Finished z14 in 5s cpu:10s avg:1.9
0:01:50 INF [archive] -  features: [ 5.4M 100% 504k/s ] 283M  tiles: [ 4.1M 421k/s ] 108M 
    cpus: 1.9 gc:  3% heap: 974M/4.2G direct: 66M postGC: 830M
    read( -%) ->   (0/217) -> encode( -%  -%) ->   (0/216) -> write( -%)
    last tile: 14/7380/5985 (z14 100%) https://www.openstreetmap.org/#map=14/43.56447/-17.84180
0:01:50 DEB [archive] - Tile stats:
0:01:50 DEB [archive] - z0 avg:7.9k max:7.9k
0:01:50 DEB [archive] - z1 avg:4k max:4k
0:01:50 DEB [archive] - z2 avg:9.4k max:9.4k
0:01:50 DEB [archive] - z3 avg:4k max:6.4k
0:01:50 DEB [archive] - z4 avg:1.6k max:4.6k
0:01:50 DEB [archive] - z5 avg:1.4k max:7.1k
0:01:50 DEB [archive] - z6 avg:971 max:22k
0:01:50 DEB [archive] - z7 avg:766 max:58k
0:01:50 DEB [archive] - z8 avg:416 max:126k
0:01:50 DEB [archive] - z9 avg:280 max:297k
0:01:50 DEB [archive] - z10 avg:160 max:255k
0:01:50 DEB [archive] - z11 avg:106 max:136k
0:01:50 DEB [archive] - z12 avg:85 max:114k
0:01:50 DEB [archive] - z13 avg:72 max:128k
0:01:50 DEB [archive] - z14 avg:68 max:303k
0:01:50 DEB [archive] - all avg:70 max:303k
0:01:50 DEB [archive] -  # features: 5,435,037
0:01:50 DEB [archive] -     # tiles: 4,115,061
0:01:50 INF [archive] - Finished in 30s cpu:58s gc:1s avg:1.9
0:01:50 INF [archive] -   read    1x(2% 0.6s wait:28s)
0:01:50 INF [archive] -   encode  2x(64% 19s)
0:01:50 INF [archive] -   write   1x(13% 4s wait:24s)
0:01:50 INF - Finished in 1m50s cpu:3m20s gc:4s avg:1.8
0:01:50 INF - FINISHED!
0:01:50 INF - 
0:01:50 INF - ----------------------------------------
0:01:50 INF - data errors:
0:01:50 INF - 	render_snap_fix_input	16,459
0:01:50 INF - 	osm_boundary_missing_way	63
0:01:50 INF - 	osm_multipolygon_missing_way	57
0:01:50 INF - 	merge_snap_fix_input	14
0:01:50 INF - 	feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix	2
0:01:50 INF - 	feature_polygon_osm_invalid_multipolygon_empty_after_fix	2
0:01:50 INF - 	omt_park_area_osm_invalid_multipolygon_empty_after_fix	1
0:01:50 INF - ----------------------------------------
0:01:50 INF - 	overall          1m50s cpu:3m20s gc:4s avg:1.8
0:01:50 INF - 	lake_centerlines 3s cpu:6s avg:1.8
0:01:50 INF - 	  read     1x(49% 2s done:1s)
0:01:50 INF - 	  process  2x(8% 0.2s wait:2s done:1s)
0:01:50 INF - 	  write    1x(0% 0s wait:2s done:1s)
0:01:50 INF - 	water_polygons   30s cpu:49s gc:2s avg:1.7
0:01:50 INF - 	  read     1x(49% 15s wait:8s)
0:01:50 INF - 	  process  2x(30% 9s wait:12s)
0:01:50 INF - 	  write    1x(2% 0.6s wait:29s)
0:01:50 INF - 	natural_earth    8s cpu:12s avg:1.5
0:01:50 INF - 	  read     1x(89% 7s)
0:01:50 INF - 	  process  2x(15% 1s wait:7s)
0:01:50 INF - 	  write    1x(0% 0s wait:8s)
0:01:50 INF - 	osm_pass1        3s cpu:6s avg:1.8
0:01:50 INF - 	  read     1x(1% 0s wait:3s)
0:01:50 INF - 	  parse    1x(66% 2s)
0:01:50 INF - 	  process  1x(43% 1s wait:2s)
0:01:50 INF - 	osm_pass2        33s cpu:1m5s avg:2
0:01:50 INF - 	  read     1x(0% 0s wait:17s done:16s)
0:01:50 INF - 	  process  2x(77% 26s)
0:01:50 INF - 	  write    1x(1% 0.4s wait:33s)
0:01:50 INF - 	boundaries       0s cpu:0s avg:1.2
0:01:50 INF - 	sort             2s cpu:3s avg:1.6
0:01:50 INF - 	  worker  1x(94% 2s)
0:01:50 INF - 	archive          30s cpu:58s gc:1s avg:1.9
0:01:50 INF - 	  read    1x(2% 0.6s wait:28s)
0:01:50 INF - 	  encode  2x(64% 19s)
0:01:50 INF - 	  write   1x(13% 4s wait:24s)
0:01:50 INF - ----------------------------------------
0:01:50 INF - 	archive	108MB
0:01:50 INF - 	features	283MB
-rw-r--r-- 1 runner docker 65M Aug  5 20:00 run.jar
ℹ️ This Branch Logs e1f2c2c
0:00:00 DEB - argument: config=null (path to config file)
0:00:00 DEB - argument: area=rhode island (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 - argument: stats=use in-memory stats
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=mmap (default storage type for temporary data, one of [ram, mmap, direct])
0:00:00 DEB - argument: threads=2 (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=2 (number of threads to use when processing input features)
0:00:00 DEB - argument: bounds=Env[-74.07 : -17.84, 21.34 : 43.55] (bounds)
0:00:00 DEB - argument: polygon=null (a .poly file that limits output to tiles intersecting the shape)
0:00:00 DEB - argument: minzoom=0 (minimum zoom level)
0:00:00 DEB - argument: maxzoom=14 (maximum zoom level up to 15)
0:00:00 DEB - argument: render_maxzoom=14 (maximum rendering zoom level up to 15)
0:00:00 DEB - argument: feature_read_threads=1 (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: 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=sparsearray (type of node location map, one of [noop, sortedtable, sparsearray, array])
0:00:00 DEB - argument: nodemap_storage=mmap (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=mmap (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=100 (Size of file chunks to download in parallel in megabytes)
0:00:00 DEB - argument: download_threads=1 (Number of parallel threads to use when downloading each file)
0:00:00 DEB - argument: download_max_bandwidth= (Maximum bandwidth to consume when downloading files in units mb/s, mbps, kbps, etc.)
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=true (Read OSM blocks from disk in worker threads)
0:00:00 DEB - argument: skip_filled_tiles=false (Skip writing tiles containing only polygon fills to the output)
0:00:00 DEB - argument: tile_warning_size_mb=1.0 (Maximum size in megabytes of a tile to emit a warning about)
0:00:00 DEB - argument: color=null (Color the terminal output)
0:00:00 DEB - argument: keep_unzipped=true (keep unzipped sources by default after reading)
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=false (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: 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: 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_keep_unzipped=true (keep unzipped natural_earth after reading)
0:00:00 DEB - argument: osm_path=data/sources/rhode_island.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: output=data/out.mbtiles (output tile archive path)
0:00:00 DEB - argument: version=false (show version then exit)
0:00:00 INF - Planetiler build git hash: e1f2c2c44b92166af58631a5cad6f49ff8dfd425
0:00:00 INF - Planetiler build version: 0.6-SNAPSHOT
0:00:00 INF - Planetiler build timestamp: 2023-08-05T19:57:36.136Z
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: boundary_osm_only=false (boundary layer: only use OSM, even at low zoom levels)
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: help=false (show arguments then exit)
0:00:00 INF - Building OpenMapTilesProfile profile into file:///home/runner/work/planetiler/planetiler/data/out.mbtiles in these phases:
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 -   archive: Encode each tile and write to TileArchiveConfig[format=MBTILES, scheme=FILE, uri=file:///home/runner/work/planetiler/planetiler/data/out.mbtiles, options={}]
0:00:00 INF - no wikidata translations found, run with --fetch-wikidata to download
0:00:00 DEB - ✓ 196M storage on / (/dev/root) requested for read phase disk, 20G available
0:00:00 DEB -  - 44M used for temporary node location cache
0:00:00 DEB -  - 6.7M used for temporary multipolygon geometry cache
0:00:00 DEB -  - 145M used for temporary feature storage
0:00:00 DEB - ✓ 218M storage on / (/dev/root) requested for write phase disk, 20G available
0:00:00 DEB -  - 145M used for temporary feature storage
0:00:00 DEB -  - 72M used for archive output
0:00:00 DEB - ✓ 50M storage on / (/dev/root) requested for read phase, 20G available
0:00:00 DEB -  - 44M used for sparsearray node location cache
0:00:00 DEB -  - 6.7M used for multipolygon way geometries
0:00:00 DEB - ✓ 313M JVM heap requested for read phase, 4.2G available
0:00:00 DEB -  - 300M used for sparsearray node location in-memory index
0:00:00 DEB -  - 13M used for temporary profile storage
0:00:00 DEB - ✓ 50M temporary files and 2.9G of free memory for OS to cache them
0:00:00 DEB - argument: archive_name=OpenMapTiles ('name' attribute for tileset metadata)
0:00:00 DEB - argument: archive_description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org ('description' attribute for tileset metadata)
0:00:00 DEB - argument: archive_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 tileset metadata)
0:00:00 DEB - argument: archive_version=3.14.0 ('version' attribute for tileset metadata)
0:00:00 DEB - argument: archive_type=baselayer ('type' attribute for tileset metadata)
0:00:00 DEB - argument: archive_format=pbf ('format' attribute for tileset metadata)
0:00:00 DEB - argument: compact=true (mbtiles: reduce the DB size by separating and deduping the tile data)
0:00:00 DEB - argument: no_index=false (mbtiles: skip adding index to sqlite DB)
0:00:00 DEB - argument: vacuum_analyze=false (mbtiles: vacuum analyze sqlite DB after writing)
0:00:00 INF - Using merge sort feature map, chunk size=1431mb max workers=2
0:00:00 INF [lake_centerlines] - 
0:00:00 INF [lake_centerlines] - Starting...
0:00:03 INF [lake_centerlines] -  read: [  59k 100%  32k/s ] write: [    0    0/s ] 0    
    cpus: 1.8 gc:  4% heap: 178M/4.2G direct: 237k postGC: 78M
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:03 INF [lake_centerlines] - Finished in 3s cpu:6s avg:1.9
0:00:03 INF [lake_centerlines] -   read     1x(48% 1s done:1s)
0:00:03 INF [lake_centerlines] -   process  2x(7% 0.2s wait:2s done:1s)
0:00:03 INF [lake_centerlines] -   write    1x(0% 0s wait:2s done:1s)
0:00:03 INF [water_polygons] - 
0:00:03 INF [water_polygons] - Starting...
0:00:13 INF [water_polygons] -  read: [ 1.8k  13%  183/s ] write: [  41k   4k/s ] 1.4G 
    cpus: 1.6 gc: 13% heap: 770M/4.2G direct: 66M postGC: 701M
    ->     (0/3) -> read(62%) ->  (979/1k) -> process(19% 20%) -> (367/53k) -> write( 0%)
0:00:23 INF [water_polygons] -  read: [ 3.8k  26%  199/s ] write: [ 360k  31k/s ] 1.4G 
    cpus: 1.9 gc:  8% heap: 1.2G/4.2G direct: 66M postGC: 1.1G
    ->     (0/3) -> read(28%) ->    (0/1k) -> process(44% 48%) -> (961/53k) -> write( 1%)
0:00:32 INF [water_polygons] -  read: [  14k 100% 1.1k/s ] write: [ 4.3M 434k/s ] 193M 
    cpus: 1.3 gc:  6% heap: 2G/4.2G direct: 66M postGC: 1.5G
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:32 INF [water_polygons] - Finished in 29s cpu:47s gc:3s avg:1.6
0:00:32 INF [water_polygons] -   read     1x(50% 15s wait:7s)
0:00:32 INF [water_polygons] -   process  2x(28% 8s wait:13s)
0:00:32 INF [water_polygons] -   write    1x(2% 0.6s wait:28s)
0:00:32 INF [natural_earth] - 
0:00:32 INF [natural_earth] - Starting...
0:00:45 INF [natural_earth] -  read: [ 349k 100%  40k/s ] write: [  181   21/s ] 193M 
    cpus: 1.4 gc:  0% heap: 3.3G/4.2G direct: 66M postGC: 1.5G
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:00:45 INF [natural_earth] - Finished in 12s cpu:13s avg:1
0:00:45 INF [natural_earth] -   read     1x(63% 8s sys:1s done:4s)
0:00:45 INF [natural_earth] -   process  2x(10% 1s wait:8s done:4s)
0:00:45 INF [natural_earth] -   write    1x(0% 0s wait:9s done:4s)
0:00:45 INF [osm_pass1] - 
0:00:45 INF [osm_pass1] - Starting...
0:00:47 INF [osm_pass1:process] - Finished nodes: 4,625,001 (1.7M/s) in 3s cpu:4s avg:1.6
0:00:48 INF [osm_pass1:process] - Finished ways: 343,567 (421k/s) in 0.8s cpu:2s avg:1.9
0:00:48 INF [osm_pass1:process] - Finished relations: 8,094 (92k/s) in 0.1s cpu:0.2s avg:1.9
0:00:48 INF [osm_pass1] -  nodes: [ 4.6M 1.2M/s ] 477M  ways: [ 343k  94k/s ] rels: [   8k 2.2k/s ] blocks: [  624  172/s ]
    cpus: 1.7 gc:  2% heap: 996M/4.2G direct: 66M postGC: 934M hppc: 468k
    read( -%) ->     (0/4) -> parse( -%) ->     (0/4) -> process( -%)
0:00:48 DEB [osm_pass1] - Processed 624 blocks:
0:00:48 DEB [osm_pass1] -   nodes: 4,625,001 (1.7M/s) in 3s cpu:4s avg:1.6
0:00:48 DEB [osm_pass1] -   ways: 343,567 (421k/s) in 0.8s cpu:2s avg:1.9
0:00:48 DEB [osm_pass1] -   relations: 8,094 (92k/s) in 0.1s cpu:0.2s avg:1.9
0:00:48 INF [osm_pass1] - Finished in 4s cpu:6s avg:1.7
0:00:48 INF [osm_pass1] -   read     1x(1% 0s wait:3s)
0:00:48 INF [osm_pass1] -   parse    1x(63% 2s)
0:00:48 INF [osm_pass1] -   process  1x(41% 2s wait:2s)
0:00:48 INF [osm_pass2] - 
0:00:48 INF [osm_pass2] - Starting...
0:00:51 DEB [osm_pass2:process] - Sorting long long multimap...
0:00:51 INF [osm_pass2:process] - Finished nodes: 4,625,001 (1.6M/s) in 3s cpu:5s avg:2
0:00:51 DEB [osm_pass2:process] - Sorted long long multimap 0s cpu:0s avg:2.1
0:00:51 WAR [osm_pass2:process] - No GB polygon for inferring route network types
0:00:58 INF [osm_pass2] -  nodes: [ 4.6M 100% 462k/s ] 477M  ways: [ 154k  45%  15k/s ] rels: [    0   0%    0/s ] features: [ 4.8M  57k/s ] 1.6G  blocks: [  597  96%   59/s ]
    cpus: 2 gc:  1% heap: 2.5G/4.2G direct: 66M postGC: 939M relInfo: 427k mpGeoms: 474k 
    read( 0%) ->   (11/13) -> process(63% 61%) ->  (1k/53k) -> write( 2%)
0:01:08 INF [osm_pass2] -  nodes: [ 4.6M 100%    0/s ] 477M  ways: [ 293k  85%  13k/s ] rels: [    0   0%    0/s ] features: [ 5.2M  37k/s ] 1.6G  blocks: [  615  99%    1/s ]
    cpus: 2 gc:  1% heap: 1.6G/4.2G direct: 66M postGC: 937M relInfo: 427k mpGeoms: 18M  
    read( -%) ->    (7/13) -> process(79% 79%) -> (226/53k) -> write( 1%)
0:01:10 INF [osm_pass2:process] - Finished ways: 343,567 (18k/s) in 19s cpu:36s avg:2
0:01:18 INF [osm_pass2] -  nodes: [ 4.6M 100%    0/s ] 477M  ways: [ 343k 100% 4.9k/s ] rels: [   5k  63%  507/s ] features: [ 5.4M  14k/s ] 1.6G  blocks: [  623 100%   <1/s ]
    cpus: 2 gc:  0% heap: 2G/4.2G direct: 66M postGC: 923M relInfo: 427k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process(76% 76%) -> (1.2k/53k) -> write( 1%)
0:01:21 INF [osm_pass2:process] - Finished relations: 8,094 (696/s) in 12s cpu:23s avg:2
0:01:24 INF [osm_pass2] -  nodes: [ 4.6M 100%    0/s ] 477M  ways: [ 343k 100%    0/s ] rels: [   8k 100%  527/s ] features: [ 5.4M 2.7k/s ] 283M  blocks: [  624 100%   <1/s ]
    cpus: 1.9 gc:  0% heap: 1G/4.2G direct: 66M postGC: 915M relInfo: 427k mpGeoms: 19M  
    read( -%) ->    (0/13) -> process( -%  -%) ->   (0/53k) -> write( -%)
0:01:24 DEB [osm_pass2] - Processed 624 blocks:
0:01:24 DEB [osm_pass2] -   nodes: 4,625,001 (1.6M/s) in 3s cpu:5s avg:2
0:01:24 DEB [osm_pass2] -   ways: 343,567 (18k/s) in 19s cpu:36s avg:2
0:01:24 DEB [osm_pass2] -   relations: 8,094 (696/s) in 12s cpu:23s avg:2
0:01:24 INF [osm_pass2] - Finished in 36s cpu:1m10s avg:2
0:01:24 INF [osm_pass2] -   read     1x(0% 0s wait:19s done:17s)
0:01:24 INF [osm_pass2] -   process  2x(74% 27s)
0:01:24 INF [osm_pass2] -   write    1x(1% 0.4s wait:35s)
0:01:24 INF [boundaries] - 
0:01:24 INF [boundaries] - Starting...
0:01:24 INF [boundaries] - Creating polygons for 1 boundaries
0:01:24 WAR [boundaries] - Unable to form closed polygon for OSM relation 148838 (likely missing edges)
0:01:24 INF [boundaries] - Finished creating 0 country polygons
0:01:24 INF [boundaries] - Finished in 0s cpu:0s avg:1.3
0:01:24 INF - Deleting node.db to make room for output file
0:01:24 INF [sort] - 
0:01:24 INF [sort] - Starting...
0:01:24 INF [sort] - Grouped 8 chunks into 1
0:01:27 INF [sort] -  chunks: [   1 /   1 100% ] 283M 
    cpus: 1.1 gc:  0% heap: 1.5G/4.2G direct: 66M postGC: 915M
    ->     (0/3) -> worker( -%)
0:01:27 INF [sort] - Finished in 2s cpu:3s avg:1.1
0:01:27 INF [sort] -   worker  1x(68% 2s)
0:01:27 INF - read:0s write:0s sort:0s
0:01:27 INF [archive] - 
0:01:27 INF [archive] - Starting...
0:01:27 DEB [archive:write] - Execute mbtiles: create table metadata (name text, value text);
0:01:27 DEB [archive:write] - Execute mbtiles: create unique index name on metadata (name);
0:01:27 DEB [archive:write] - Execute mbtiles: create table tiles_shallow (
  zoom_level integer,
  tile_column integer,
  tile_row integer,
  tile_data_id integer

  , primary key(zoom_level,tile_column,tile_row)

) without rowid

0:01:27 DEB [archive:write] - Execute mbtiles: create table tiles_data (
  tile_data_id integer primary key,
  tile_data blob
)

0:01:27 DEB [archive:write] - Execute mbtiles: create view tiles AS
select
  tiles_shallow.zoom_level as zoom_level,
  tiles_shallow.tile_column as tile_column,
  tiles_shallow.tile_row as tile_row,
  tiles_data.tile_data as tile_data
from tiles_shallow
join tiles_data on tiles_shallow.tile_data_id = tiles_data.tile_data_id

0:01:27 DEB [archive:write] - Set mbtiles metadata: format=pbf
0:01:27 DEB [archive:write] - Set mbtiles metadata: center=-45.955,32.445,3
0:01:27 DEB [archive:write] - Set mbtiles metadata: bounds=-74.07,21.34,-17.84,43.55
0:01:27 DEB [archive:write] - Set mbtiles metadata: json={"vector_layers":[{"id":"aerodrome_label","fields":{"name_int":"String","iata":"String","ele_ft":"Number","name_de":"String","name":"String","icao":"String","name:en":"String","class":"String","ele":"Number","name_en":"String","name:latin":"String"},"minzoom":10,"maxzoom":14},{"id":"aeroway","fields":{"ref":"String","class":"String"},"minzoom":10,"maxzoom":14},{"id":"boundary","fields":{"disputed":"Number","admin_level":"Number","maritime":"Number"},"minzoom":0,"maxzoom":14},{"id":"building","fields":{"colour":"String","render_height":"Number","render_min_height":"Number","hide_3d":"Boolean"},"minzoom":13,"maxzoom":14},{"id":"housenumber","fields":{"housenumber":"String"},"minzoom":14,"maxzoom":14},{"id":"landcover","fields":{"subclass":"String","class":"String","_numpoints":"Number"},"minzoom":7,"maxzoom":14},{"id":"landuse","fields":{"class":"String"},"minzoom":4,"maxzoom":14},{"id":"mountain_peak","fields":{"name_int":"String","customary_ft":"Number","ele_ft":"Number","name_de":"Str... 2339 more characters
0:01:27 DEB [archive:write] - Set mbtiles metadata: name=OpenMapTiles
0:01:27 DEB [archive:write] - Set mbtiles metadata: description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org
0:01:27 DEB [archive:write] - Set mbtiles metadata: 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>
0:01:27 DEB [archive:write] - Set mbtiles metadata: version=3.14.0
0:01:27 DEB [archive:write] - Set mbtiles metadata: type=baselayer
0:01:27 DEB [archive:write] - Set mbtiles metadata: minzoom=0
0:01:27 DEB [archive:write] - Set mbtiles metadata: maxzoom=14
0:01:27 DEB [archive:write] - Set mbtiles metadata: planetiler:version=0.6-SNAPSHOT
0:01:27 DEB [archive:write] - Set mbtiles metadata: planetiler:githash=e1f2c2c44b92166af58631a5cad6f49ff8dfd425
0:01:27 DEB [archive:write] - Set mbtiles metadata: planetiler:buildtime=2023-08-05T19:57:36.136Z
0:01:27 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationtime=2023-08-04T20:21:45Z
0:01:27 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationseq=3781
0:01:27 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationurl=http://download.geofabrik.de/north-america/us/rhode-island-updates
0:01:29 INF [archive:write] - Starting z0
0:01:29 INF [archive:write] - Finished z0 in 0s cpu:0s avg:0, now starting z1
0:01:29 INF [archive:write] - Finished z1 in 0s cpu:0s avg:0, now starting z2
0:01:29 INF [archive:write] - Finished z2 in 0s cpu:0s avg:0, now starting z3
0:01:29 INF [archive:write] - Finished z3 in 0s cpu:0s avg:0, now starting z4
0:01:29 INF [archive:write] - Finished z4 in 0s cpu:0s avg:0, now starting z5
0:01:29 INF [archive:write] - Finished z5 in 0s cpu:0s avg:0, now starting z6
0:01:29 INF [archive:write] - Finished z6 in 0s cpu:0s avg:0, now starting z7
0:01:30 INF [archive:write] - Finished z7 in 0.9s cpu:2s avg:2, now starting z8
0:01:32 INF [archive:write] - Finished z8 in 2s cpu:4s avg:1.9, now starting z9
0:01:35 INF [archive:write] - Finished z9 in 3s cpu:6s avg:2, now starting z10
0:01:36 INF [archive:write] - Finished z10 in 1s cpu:2s avg:2, now starting z11
0:01:37 INF [archive] -  features: [ 177k   3%  17k/s ] 283M  tiles: [  18k 1.8k/s ] 2.5M 
    cpus: 2 gc:  2% heap: 1.8G/4.2G direct: 66M postGC: 294M
    read( 1%) -> (214/217) -> encode(59% 61%) -> (215/216) -> write( 1%)
    last tile: 11/616/762 (z11 4%) https://www.openstreetmap.org/#map=11/41.77131/-71.71875
0:01:39 INF [archive:write] - Finished z11 in 3s cpu:6s avg:2, now starting z12
0:01:43 INF [archive:write] - Finished z12 in 4s cpu:7s avg:1.9, now starting z13
0:01:47 INF [archive] -  features: [ 855k  16%  67k/s ] 283M  tiles: [ 291k  27k/s ] 13M  
    cpus: 2 gc:  2% heap: 2.5G/4.2G direct: 66M postGC: 364M
    read( 1%) -> (214/217) -> encode(69% 73%) -> (215/216) -> write( 3%)
    last tile: 13/2470/3047 (z13 5%) https://www.openstreetmap.org/#map=13/41.80408/-71.45508
0:01:51 INF [archive:write] - Finished z13 in 8s cpu:16s avg:2, now starting z14
0:01:56 DEB [archive:write] - Shallow tiles written: 4,115,061
0:01:56 DEB [archive:write] - Tile data written: 17,242 (100% omitted)
0:01:56 DEB [archive:write] - Unique tile hashes: 8,363
0:01:56 INF [archive:write] - Finished z14 in 5s cpu:10s avg:1.9
0:01:56 INF [archive] -  features: [ 5.4M 100% 507k/s ] 283M  tiles: [ 4.1M 423k/s ] 108M 
    cpus: 1.9 gc:  3% heap: 573M/4.2G direct: 66M postGC: 350M
    read( -%) ->   (0/217) -> encode( -%  -%) ->   (0/216) -> write( -%)
    last tile: 14/7380/5985 (z14 100%) https://www.openstreetmap.org/#map=14/43.56447/-17.84180
0:01:56 DEB [archive] - Tile stats:
0:01:56 DEB [archive] - z0 avg:7.9k max:7.9k
0:01:56 DEB [archive] - z1 avg:4k max:4k
0:01:56 DEB [archive] - z2 avg:9.4k max:9.4k
0:01:56 DEB [archive] - z3 avg:4k max:6.4k
0:01:56 DEB [archive] - z4 avg:1.6k max:4.6k
0:01:56 DEB [archive] - z5 avg:1.4k max:7.1k
0:01:56 DEB [archive] - z6 avg:971 max:22k
0:01:56 DEB [archive] - z7 avg:766 max:58k
0:01:56 DEB [archive] - z8 avg:416 max:126k
0:01:56 DEB [archive] - z9 avg:280 max:297k
0:01:56 DEB [archive] - z10 avg:160 max:255k
0:01:56 DEB [archive] - z11 avg:106 max:136k
0:01:56 DEB [archive] - z12 avg:85 max:114k
0:01:56 DEB [archive] - z13 avg:72 max:128k
0:01:56 DEB [archive] - z14 avg:68 max:303k
0:01:56 DEB [archive] - all avg:70 max:303k
0:01:56 DEB [archive] -  # features: 5,435,037
0:01:56 DEB [archive] -     # tiles: 4,115,061
0:01:56 INF [archive] - Finished in 29s cpu:57s gc:1s avg:1.9
0:01:56 INF [archive] -   read    1x(2% 0.6s wait:28s)
0:01:56 INF [archive] -   encode  2x(64% 19s)
0:01:56 INF [archive] -   write   1x(13% 4s wait:24s)
0:01:56 INF - Finished in 1m56s cpu:3m23s gc:4s avg:1.7
0:01:56 INF - FINISHED!
0:01:56 INF - 
0:01:56 INF - ----------------------------------------
0:01:56 INF - data errors:
0:01:56 INF - 	render_snap_fix_input	16,459
0:01:56 INF - 	osm_boundary_missing_way	63
0:01:56 INF - 	osm_multipolygon_missing_way	57
0:01:56 INF - 	merge_snap_fix_input	14
0:01:56 INF - 	feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix	2
0:01:56 INF - 	feature_polygon_osm_invalid_multipolygon_empty_after_fix	2
0:01:56 INF - 	omt_park_area_osm_invalid_multipolygon_empty_after_fix	1
0:01:56 INF - ----------------------------------------
0:01:56 INF - 	overall          1m56s cpu:3m23s gc:4s avg:1.7
0:01:56 INF - 	lake_centerlines 3s cpu:6s avg:1.9
0:01:56 INF - 	  read     1x(48% 1s done:1s)
0:01:56 INF - 	  process  2x(7% 0.2s wait:2s done:1s)
0:01:56 INF - 	  write    1x(0% 0s wait:2s done:1s)
0:01:56 INF - 	water_polygons   29s cpu:47s gc:3s avg:1.6
0:01:56 INF - 	  read     1x(50% 15s wait:7s)
0:01:56 INF - 	  process  2x(28% 8s wait:13s)
0:01:56 INF - 	  write    1x(2% 0.6s wait:28s)
0:01:56 INF - 	natural_earth    12s cpu:13s avg:1
0:01:56 INF - 	  read     1x(63% 8s sys:1s done:4s)
0:01:56 INF - 	  process  2x(10% 1s wait:8s done:4s)
0:01:56 INF - 	  write    1x(0% 0s wait:9s done:4s)
0:01:56 INF - 	osm_pass1        4s cpu:6s avg:1.7
0:01:56 INF - 	  read     1x(1% 0s wait:3s)
0:01:56 INF - 	  parse    1x(63% 2s)
0:01:56 INF - 	  process  1x(41% 2s wait:2s)
0:01:56 INF - 	osm_pass2        36s cpu:1m10s avg:2
0:01:56 INF - 	  read     1x(0% 0s wait:19s done:17s)
0:01:56 INF - 	  process  2x(74% 27s)
0:01:56 INF - 	  write    1x(1% 0.4s wait:35s)
0:01:56 INF - 	boundaries       0s cpu:0s avg:1.3
0:01:56 INF - 	sort             2s cpu:3s avg:1.1
0:01:56 INF - 	  worker  1x(68% 2s)
0:01:56 INF - 	archive          29s cpu:57s gc:1s avg:1.9
0:01:56 INF - 	  read    1x(2% 0.6s wait:28s)
0:01:56 INF - 	  encode  2x(64% 19s)
0:01:56 INF - 	  write   1x(13% 4s wait:24s)
0:01:56 INF - ----------------------------------------
0:01:56 INF - 	archive	108MB
0:01:56 INF - 	features	283MB
-rw-r--r-- 1 runner docker 65M Aug  5 19:58 run.jar

Copy link
Contributor

@msbarry msbarry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great! Thanks for adding!! Can you also update planetiler.schema.json so this shows up in IDEs and planetiler-custommap/README.md to mention the new fields?

Also to make full use of this, we'll need support for min_size otherwise we'll drop features that are too short so there won't be anything to merge. @wipfli started this in #421 - I'll ping him about if we can merge that soon too.

geometry: point
""";
this.planetilerConfig = PlanetilerConfig.from(Arguments.of(Map.of()));
assertEquals(null, loadConfig(config).findFeatureLayer("testLayer").postProcess());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minor: use assertNull instead of assertEquals(null, ...)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change pushed previously.

@msbarry
Copy link
Contributor

msbarry commented Jul 16, 2023

I'm not sure which direction @msbarry would like to take with this functionality, but I'm sharing this PR in case its useful.

In the future I want to make the post processing more flexible (#298), so you can limit the fields features get grouped by, and tell planetiler how to combine the rest (for example bridges) and also make line merging more flexible so it can maintain direction (ie. for oneway roads). Also, I want to move every fixed number to support being an expression so it can vary by zoom/feature attributes.

That being said, this is a good first step and we can add those later without breaking compatibility since they will just add extra keys, or allow changing a numeric value to a complex object or expression.

@msbarry msbarry linked an issue Jul 16, 2023 that may be closed by this pull request
@msbarry
Copy link
Contributor

msbarry commented Jul 18, 2023

I just merged #421 so you can set min_size: 0 on features now

@zhibek
Copy link
Contributor Author

zhibek commented Jul 19, 2023

Thanks for reviewing this @msbarry!

I have quite a lot of paid work to get through at the moment, but I hope to return to this and implement the points you raised.

Comment on lines 102 to 118
if (featureLayer.postProcess().mergeLineStrings() != null) {
var merge = featureLayer.postProcess().mergeLineStrings();

return FeatureMerge.mergeLineStrings(items,
merge.minLength(), // after merging, remove lines that are still less than {minLength}px long
merge.tolerance(), // simplify output linestrings using a {tolerance}px tolerance
merge.buffer() // remove any detail more than {buffer}px outside the tile boundary
);
}

if (featureLayer.postProcess().mergePolygons() != null) {
var merge = featureLayer.postProcess().mergePolygons();

return FeatureMerge.mergeOverlappingPolygons(items,
merge.minArea() // after merging, remove polygons that are still less than {minArea} in square tile pixels
);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a chance that there are lines and polygons in the same layer and we want to apply merge to both of them. mergeLineStrings will ignore polygons and mergeOverlappingPolygons will ignore linestrings, so let's change this so that if both are set it applies them sequentially to items and returns the result.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change pushed.

import java.util.Collection;

public record FeatureLayer(
String id,
Collection<FeatureItem> features
Collection<FeatureItem> features,
@JsonProperty("tile_post_process") PostProcess postProcess
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change looks good! Only thing left is to mention these features in planetiler.schema.json and planetiler-custommap/README.md

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change pushed.

@msbarry
Copy link
Contributor

msbarry commented Aug 4, 2023

Hey @zhibek just checking do you think you'd have a chance to add this to the json schema and planetiler-custommap/README.md? Or do you want me to add those in? Would be great to get this merged!

@zhibek
Copy link
Contributor Author

zhibek commented Aug 5, 2023

Thanks for the nudge @msbarry. I'm aiming to implement the final points this weekend. But feel free to adjust if I miss anything.

@sonarcloud
Copy link

sonarcloud bot commented Aug 5, 2023

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 1 Code Smell

100.0% 100.0% Coverage
0.0% 0.0% Duplication

@zhibek
Copy link
Contributor Author

zhibek commented Aug 5, 2023

OK @msbarry - I think that's everything. But feel free to modify if I missed something.

@msbarry msbarry merged commit ed707e6 into onthegomap:main Aug 7, 2023
14 checks passed
@zhibek zhibek deleted the custommap-postprocess-merging branch August 7, 2023 10:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Expose tile post-processing to schema configs
2 participants