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

Add experimental support for lua profiles #736

Open
wants to merge 22 commits into
base: main
Choose a base branch
from
Open

Add experimental support for lua profiles #736

wants to merge 22 commits into from

Conversation

msbarry
Copy link
Contributor

@msbarry msbarry commented Nov 30, 2023

Add experimental support for lua profiles. To use it, run java -jar planetiler.jar profile.lua with a script like this:

-- profile.lua
-- run with: java -jar planetiler.jar profile.lua --download
planetiler.output.path = 'powerlines.pmtiles'
planetiler.add_source('osm', {
  type = 'osm',
  url = 'geofabrik:rhode-island'
})

-- called by planetiler for each input feature
function planetiler.process_feature(source, features)
  if source:can_be_line() and source:has_tag("power", "line") then
    features
        :line("powerline") -- output layer name
        :set_min_zoom(7)
        :inherit_attr_from_source("voltage")
  end
end

See planetiler-experimental/src/test/resources for more examples, and LuaEnvironment for the full set of java utilities exported to lua. Lua has access to the full java API through reflection so anything should be possible, but we can write more convenient utilities when people discover useful patterns that we want to make easier to use.

IDE Support

VS Code has good lua support with the lua extension. Run java -jar planetiler.jar lua-types > types.lua to generate a type definition file in the same directory as your profile to provide autocomplete and validation as you write profiles:

image

Testing Lua Profiles

You can write a yaml file like this to test that your profile produces the expected output vector tile features for a given input source (ie. OSM) feature:

# powerline.spec.yaml
# test with: java -jar planetiler.jar validate --script=powerlines.lua --spec=powerline.spec.yaml
# add  --watch to watch the files and re-run the tests on every change
examples:
- name: power line
  input: # feature from osm
    geometry: line
    tags:
      power: line
      voltage: 100
  output: # vector tile feature
    layer: powerline
    geometry: line
    min_zoom: 7
    tags:
      voltage: 100

This is the same format used for yaml schema tests, so this PR promotes that code to planetiler-core and defines a lua implementation you can use as well.

Please give feedback!

To set up a local workspace to try this out with VS Code:

git clone https://github.com/msbarry/planetiler-profiles

Lua profiles are an alternative to single-file java profiles that you can run without any build tools with java -cp planetiler.jar Profile.java. We should only merge lua profile support if people think that lua profiles provide enough usability benefit over single-file java profiles to warrant the extra maintenance.

If we end up merging this, followups listed in #738. Please let me know what you think!

Copy link

github-actions bot commented Nov 30, 2023

Base ed4c320 This Branch c4b18d2
0:01:03 DEB [archive] - Tile stats:
0:01:03 DEB [archive] - Biggest tiles (gzipped)
1. 9/154/190 (154k) https://onthegomap.github.io/planetiler-demo/#9.5/41.77078/-71.36719 (landcover:85k)
2. 14/4942/6092 (147k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.40015 (building:69k)
3. 10/308/380 (140k) https://onthegomap.github.io/planetiler-demo/#10.5/41.90214/-71.54297 (landcover:66k)
4. 10/308/381 (138k) https://onthegomap.github.io/planetiler-demo/#10.5/41.63994/-71.54297 (landcover:72k)
5. 14/4941/6092 (107k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.42212 (poi:51k)
6. 14/4941/6093 (104k) https://onthegomap.github.io/planetiler-demo/#14.5/41.81227/-71.42212 (building:62k)
7. 11/616/762 (99k) https://onthegomap.github.io/planetiler-demo/#11.5/41.7057/-71.63086 (landcover:71k)
8. 11/616/761 (96k) https://onthegomap.github.io/planetiler-demo/#11.5/41.83679/-71.63086 (landcover:72k)
9. 14/4940/6092 (96k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.44409 (building:92k)
10. 11/616/760 (94k) https://onthegomap.github.io/planetiler-demo/#11.5/41.96763/-71.63086 (landcover:73k)
0:01:03 DEB [archive] - Max tile sizes
                      z0    z1    z2    z3    z4    z5    z6    z7    z8    z9   z10   z11   z12   z13   z14   all
           boundary  154   374   443   583   935   336   430   545   545  1.6k  2.1k  7.2k  6.4k  5.8k  4.5k  7.2k
              water 7.7k  3.7k  8.6k  5.5k  2.6k  5.1k   15k   18k   16k   26k   15k   13k   17k   15k   12k   26k
              place    0     0   377   377   377   586   675    1k  1.6k  3.3k  5.8k  3.2k  1.7k   797   947  5.8k
            landuse    0     0     0     0   548   619  1.3k  5.9k   17k   44k   59k   50k   38k   19k   12k   59k
     transportation    0     0     0     0  1.1k  1.9k  2.9k  9.4k   12k   32k   22k   23k   64k   47k   33k   64k
           waterway    0     0     0     0   111   118     0     0     0  3.3k  2.1k  2.1k  2.1k  4.9k  2.4k  4.9k
               park    0     0     0     0     0     0    1k  3.6k  9.4k   18k   12k  7.4k  4.3k  3.4k  4.4k   18k
transportation_name    0     0     0     0     0     0   359   454  1.2k  1.7k  4.9k  3.9k  3.8k  3.4k   18k   18k
          landcover    0     0     0     0     0     0     0  9.5k   29k   85k   72k   81k   53k   30k   24k   85k
      mountain_peak    0     0     0     0     0     0     0  1.1k  1.8k  3.4k  4.3k  2.8k  1.4k  1.4k   869  4.3k
         water_name    0     0     0     0     0     0     0     0     0   487   462   434   445   549    1k    1k
    aerodrome_label    0     0     0     0     0     0     0     0     0     0   674   327   273   220   220   674
            aeroway    0     0     0     0     0     0     0     0     0     0  1.6k  2.1k    3k  3.4k  2.7k  3.4k
                poi    0     0     0     0     0     0     0     0     0     0     0     0   501   498   68k   68k
           building    0     0     0     0     0     0     0     0     0     0     0     0     0   59k   92k   92k
        housenumber    0     0     0     0     0     0     0     0     0     0     0     0     0     0   35k   35k
          full tile 7.9k    4k  9.4k  6.4k  4.4k    7k   21k   44k   88k  210k  188k  135k  113k  127k  227k  227k
            gzipped 6.2k  3.5k  7.1k  5.2k  3.5k  5.4k   14k   31k   63k  154k  140k   99k   83k   92k  147k  154k
0:01:03 DEB [archive] -    Max tile: 227k (gzipped: 154k)
0:01:03 DEB [archive] -    Avg tile: 5.5k (gzipped: 4.1k) using weighted average based on OSM traffic
0:01:03 DEB [archive] -     # tiles: 4,115,021
0:01:03 DEB [archive] -  # features: 5,459,404
0:01:03 INF [archive] - Finished in 18s cpu:1m5s avg:3.7
0:01:03 INF [archive] -   read    1x(3% 0.5s wait:16s)
0:01:03 INF [archive] -   encode  4x(57% 10s wait:2s)
0:01:03 INF [archive] -   write   1x(22% 4s wait:12s)
0:01:03 INF - Finished in 1m3s cpu:3m19s gc:2s avg:3.2
0:01:03 INF - FINISHED!
0:01:03 INF - 
0:01:03 INF - ----------------------------------------
0:01:03 INF - data errors:
0:01:03 INF - 	render_snap_fix_input	16,628
0:01:03 INF - 	osm_multipolygon_missing_way	74
0:01:03 INF - 	osm_boundary_missing_way	70
0:01:03 INF - 	merge_snap_fix_input	14
0:01:03 INF - 	feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix	2
0:01:03 INF - 	feature_polygon_osm_invalid_multipolygon_empty_after_fix	2
0:01:03 INF - 	omt_park_area_osm_invalid_multipolygon_empty_after_fix	1
0:01:03 INF - ----------------------------------------
0:01:03 INF - 	overall          1m3s cpu:3m19s gc:2s avg:3.2
0:01:03 INF - 	lake_centerlines 2s cpu:7s avg:2.7
0:01:03 INF - 	  read     1x(48% 1s done:1s)
0:01:03 INF - 	  process  3x(6% 0.1s wait:1s done:1s)
0:01:03 INF - 	  write    1x(0% 0s wait:1s done:1s)
0:01:03 INF - 	water_polygons   15s cpu:43s gc:1s avg:2.9
0:01:03 INF - 	  read     1x(66% 10s wait:2s)
0:01:03 INF - 	  process  3x(35% 5s wait:7s)
0:01:03 INF - 	  write    1x(4% 0.6s wait:14s)
0:01:03 INF - 	natural_earth    6s cpu:12s avg:1.9
0:01:03 INF - 	  read     1x(96% 6s)
0:01:03 INF - 	  process  3x(17% 1s wait:6s)
0:01:03 INF - 	  write    1x(0% 0s wait:6s)
0:01:03 INF - 	osm_pass1        2s cpu:5s avg:3.1
0:01:03 INF - 	  read     1x(2% 0s wait:2s)
0:01:03 INF - 	  parse    2x(60% 1s)
0:01:03 INF - 	  process  1x(68% 1s)
0:01:03 INF - 	osm_pass2        18s cpu:1m3s avg:3.5
0:01:03 INF - 	  read     1x(0% 0s wait:10s done:8s)
0:01:03 INF - 	  process  3x(89% 16s)
0:01:03 INF - 	  write    1x(2% 0.4s wait:17s)
0:01:03 INF - 	boundaries       0s cpu:0s avg:1.1
0:01:03 INF - 	sort             1s cpu:3s avg:2.7
0:01:03 INF - 	  worker  1x(51% 0.7s)
0:01:03 INF - 	archive          18s cpu:1m5s avg:3.7
0:01:03 INF - 	  read    1x(3% 0.5s wait:16s)
0:01:03 INF - 	  encode  4x(57% 10s wait:2s)
0:01:03 INF - 	  write   1x(22% 4s wait:12s)
0:01:03 INF - ----------------------------------------
0:01:03 INF - 	archive	107MB
0:01:03 INF - 	features	284MB
-rw-r--r-- 1 runner docker 66M Dec  8 12:25 run.jar
0:01:05 DEB [archive] - Tile stats:
0:01:05 DEB [archive] - Biggest tiles (gzipped)
1. 9/154/190 (154k) https://onthegomap.github.io/planetiler-demo/#9.5/41.77078/-71.36719 (landcover:85k)
2. 14/4942/6092 (147k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.40015 (building:69k)
3. 10/308/380 (140k) https://onthegomap.github.io/planetiler-demo/#10.5/41.90214/-71.54297 (landcover:66k)
4. 10/308/381 (138k) https://onthegomap.github.io/planetiler-demo/#10.5/41.63994/-71.54297 (landcover:72k)
5. 14/4941/6092 (107k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.42212 (poi:51k)
6. 14/4941/6093 (104k) https://onthegomap.github.io/planetiler-demo/#14.5/41.81227/-71.42212 (building:62k)
7. 11/616/762 (99k) https://onthegomap.github.io/planetiler-demo/#11.5/41.7057/-71.63086 (landcover:71k)
8. 11/616/761 (96k) https://onthegomap.github.io/planetiler-demo/#11.5/41.83679/-71.63086 (landcover:72k)
9. 14/4940/6092 (96k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.44409 (building:92k)
10. 11/616/760 (94k) https://onthegomap.github.io/planetiler-demo/#11.5/41.96763/-71.63086 (landcover:73k)
0:01:05 DEB [archive] - Max tile sizes
                      z0    z1    z2    z3    z4    z5    z6    z7    z8    z9   z10   z11   z12   z13   z14   all
           boundary  154   374   443   583   935   336   430   545   545  1.6k  2.1k  7.2k  6.4k  5.8k  4.5k  7.2k
              water 7.7k  3.7k  8.6k  5.5k  2.6k  5.1k   15k   18k   16k   26k   15k   13k   17k   15k   12k   26k
              place    0     0   377   377   377   586   675    1k  1.6k  3.3k  5.8k  3.2k  1.7k   797   947  5.8k
            landuse    0     0     0     0   548   619  1.3k  5.9k   17k   44k   59k   50k   38k   19k   12k   59k
     transportation    0     0     0     0  1.1k  1.9k  2.9k  9.4k   12k   32k   22k   23k   64k   47k   33k   64k
           waterway    0     0     0     0   111   118     0     0     0  3.3k  2.1k  2.1k  2.1k  4.9k  2.4k  4.9k
               park    0     0     0     0     0     0    1k  3.6k  9.4k   18k   12k  7.4k  4.3k  3.4k  4.4k   18k
transportation_name    0     0     0     0     0     0   359   454  1.2k  1.7k  4.9k  3.9k  3.8k  3.4k   18k   18k
          landcover    0     0     0     0     0     0     0  9.5k   29k   85k   72k   81k   53k   30k   24k   85k
      mountain_peak    0     0     0     0     0     0     0  1.1k  1.8k  3.4k  4.3k  2.8k  1.4k  1.4k   869  4.3k
         water_name    0     0     0     0     0     0     0     0     0   487   462   434   445   549    1k    1k
    aerodrome_label    0     0     0     0     0     0     0     0     0     0   674   327   273   220   220   674
            aeroway    0     0     0     0     0     0     0     0     0     0  1.6k  2.1k    3k  3.4k  2.7k  3.4k
                poi    0     0     0     0     0     0     0     0     0     0     0     0   501   498   68k   68k
           building    0     0     0     0     0     0     0     0     0     0     0     0     0   59k   92k   92k
        housenumber    0     0     0     0     0     0     0     0     0     0     0     0     0     0   35k   35k
          full tile 7.9k    4k  9.4k  6.4k  4.4k    7k   21k   44k   88k  210k  188k  135k  113k  127k  227k  227k
            gzipped 6.2k  3.6k  7.1k  5.2k  3.5k  5.4k   14k   31k   63k  154k  140k   99k   83k   92k  147k  154k
0:01:05 DEB [archive] -    Max tile: 227k (gzipped: 154k)
0:01:05 DEB [archive] -    Avg tile: 5.5k (gzipped: 4.1k) using weighted average based on OSM traffic
0:01:05 DEB [archive] -     # tiles: 4,115,021
0:01:05 DEB [archive] -  # features: 5,459,404
0:01:05 INF [archive] - Finished in 17s cpu:1m4s avg:3.7
0:01:05 INF [archive] -   read    1x(3% 0.5s wait:16s)
0:01:05 INF [archive] -   encode  4x(56% 10s wait:2s)
0:01:05 INF [archive] -   write   1x(22% 4s wait:12s)
0:01:05 INF - Finished in 1m5s cpu:3m18s gc:2s avg:3
0:01:05 INF - FINISHED!
0:01:05 INF - 
0:01:05 INF - ----------------------------------------
0:01:05 INF - data errors:
0:01:05 INF - 	render_snap_fix_input	16,628
0:01:05 INF - 	osm_multipolygon_missing_way	74
0:01:05 INF - 	osm_boundary_missing_way	70
0:01:05 INF - 	merge_snap_fix_input	14
0:01:05 INF - 	feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix	2
0:01:05 INF - 	feature_polygon_osm_invalid_multipolygon_empty_after_fix	2
0:01:05 INF - 	omt_park_area_osm_invalid_multipolygon_empty_after_fix	1
0:01:05 INF - ----------------------------------------
0:01:05 INF - 	overall          1m5s cpu:3m18s gc:2s avg:3
0:01:05 INF - 	lake_centerlines 5s cpu:8s avg:1.5
0:01:05 INF - 	  read     1x(22% 1s done:4s)
0:01:05 INF - 	  process  3x(3% 0.1s wait:1s done:4s)
0:01:05 INF - 	  write    1x(0% 0s wait:1s done:4s)
0:01:05 INF - 	water_polygons   15s cpu:42s avg:2.8
0:01:05 INF - 	  read     1x(66% 10s wait:3s)
0:01:05 INF - 	  process  3x(34% 5s wait:7s)
0:01:05 INF - 	  write    1x(4% 0.5s wait:14s)
0:01:05 INF - 	natural_earth    6s cpu:12s avg:1.9
0:01:05 INF - 	  read     1x(96% 6s)
0:01:05 INF - 	  process  3x(16% 1s wait:6s)
0:01:05 INF - 	  write    1x(0% 0s wait:6s)
0:01:05 INF - 	osm_pass1        2s cpu:5s avg:3
0:01:05 INF - 	  read     1x(2% 0s wait:2s)
0:01:05 INF - 	  parse    2x(62% 1s)
0:01:05 INF - 	  process  1x(63% 1s)
0:01:05 INF - 	osm_pass2        18s cpu:1m2s avg:3.5
0:01:05 INF - 	  read     1x(0% 0s wait:10s done:8s)
0:01:05 INF - 	  process  3x(88% 15s)
0:01:05 INF - 	  write    1x(2% 0.4s wait:17s)
0:01:05 INF - 	boundaries       0s cpu:0s avg:1.4
0:01:05 INF - 	sort             1s cpu:4s avg:2.8
0:01:05 INF - 	  worker  1x(50% 0.7s)
0:01:05 INF - 	archive          17s cpu:1m4s avg:3.7
0:01:05 INF - 	  read    1x(3% 0.5s wait:16s)
0:01:05 INF - 	  encode  4x(56% 10s wait:2s)
0:01:05 INF - 	  write   1x(22% 4s wait:12s)
0:01:05 INF - ----------------------------------------
0:01:05 INF - 	archive	107MB
0:01:05 INF - 	features	284MB
-rw-r--r-- 1 runner docker 67M Dec  8 12:24 run.jar

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

ℹ️ Base Logs ed4c320
0:00:00 DEB - argument: config=null (path to config file)
0:00:00 DEB - argument: download_dir=data/sources (download directory)
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=4 (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=3 (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: tmpdir=data/tmp (temp directory)
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: tile_write_threads=1 (number of threads used to write tiles - only supported by [csv, tsv, proto, pbf, json])
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: append=false (append to the output file - only supported by [csv, tsv, proto, pbf, json])
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: tile_compression=gzip (the tile compression, one of [gzip, none])
0:00:00 DEB - argument: output_layerstats=false (output a tsv.gz file for each tile/layer size)
0:00:00 DEB - argument: debug_url=https://onthegomap.github.io/planetiler-demo/#{z}/{lat}/{lon} (debug url to use for displaying tiles with {z} {lat} {lon} placeholders)
0:00:00 DEB - argument: tile_weights=data/tile_weights.tsv.gz (tsv.gz file with columns z,x,y,loads to generate weighted average tile size stat)
0:00:00 DEB - argument: max_point_buffer=Infinity (Max tile pixels to include points outside tile bounds. Set to a lower value to reduce tile size for clients that handle label collisions across tiles (most web and native clients). NOTE: Do not reduce if you need to support raster tile rendering)
0:00:00 DEB - argument: log_jts_exceptions=false (Emit verbose details to debug JTS geometry errors)
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: download_osm_tile_weights=false (download OSM tile weights file)
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: ed4c320e49429f6f99934861931030ccde0598ab
0:00:00 INF - Planetiler build version: 0.7-SNAPSHOT
0:00:00 INF - Planetiler build timestamp: 2023-12-08T12:24:14.524Z
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 DEB - argument: layer_stats=/home/runner/work/planetiler/planetiler/data/out.mbtiles.layerstats.tsv.gz (layer stats output path)
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 - ✓ 200M storage on / (/dev/root) requested for read phase disk, 23G available
0:00:00 DEB -  - 45M used for temporary node location cache
0:00:00 DEB -  - 6.8M used for temporary multipolygon geometry cache
0:00:00 DEB -  - 148M used for temporary feature storage
0:00:00 DEB - ✓ 222M storage on / (/dev/root) requested for write phase disk, 23G available
0:00:00 DEB -  - 148M used for temporary feature storage
0:00:00 DEB -  - 74M used for archive output
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 - ✓ 51M storage on / (/dev/root) requested for read phase, 23G available
0:00:00 DEB -  - 45M used for sparsearray node location cache
0:00:00 DEB -  - 6.8M used for multipolygon way geometries
0:00:00 DEB - ✓ 51M temporary files and 12G 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=4
0:00:00 INF [lake_centerlines] - 
0:00:00 INF [lake_centerlines] - Starting...
0:00:03 INF [lake_centerlines] -  read: [  59k 100%  45k/s ] write: [    0    0/s ] 0    
    cpus: 2.4 gc:  1% heap: 245M/4.2G direct: 262k postGC: 81M
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%  -%) ->   (0/54k) -> write( -%)
0:00:03 INF [lake_centerlines] - Finished in 2s cpu:7s avg:2.7
0:00:03 INF [lake_centerlines] -   read     1x(48% 1s done:1s)
0:00:03 INF [lake_centerlines] -   process  3x(6% 0.1s wait:1s done:1s)
0:00:03 INF [lake_centerlines] -   write    1x(0% 0s wait:1s done:1s)
0:00:03 INF [water_polygons] - 
0:00:03 INF [water_polygons] - Starting...
0:00:13 INF [water_polygons] -  read: [ 3.9k  27%  390/s ] write: [ 359k  35k/s ] 1.4G 
    cpus: 3.3 gc: 10% heap: 2G/4.2G direct: 66M postGC: 1.8G
    ->     (0/3) -> read(67%) ->    (0/1k) -> process(40% 38% 39%) -> (1.9k/54k) -> write( 1%)
0:00:18 INF [water_polygons] -  read: [  14k 100% 2.1k/s ] write: [ 4.3M 803k/s ] 193M 
    cpus: 2 gc:  4% heap: 1.9G/4.2G direct: 66M postGC: 213M
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%  -%) ->   (0/54k) -> write( -%)
0:00:18 INF [water_polygons] - Finished in 15s cpu:43s gc:1s avg:2.9
0:00:18 INF [water_polygons] -   read     1x(66% 10s wait:2s)
0:00:18 INF [water_polygons] -   process  3x(35% 5s wait:7s)
0:00:18 INF [water_polygons] -   write    1x(4% 0.6s wait:14s)
0:00:18 INF [natural_earth] - 
0:00:18 INF [natural_earth] - Starting...
0:00:24 INF [natural_earth] -  read: [ 349k 100%  57k/s ] write: [  181   30/s ] 193M 
    cpus: 1.9 gc:  0% heap: 2.6G/4.2G direct: 66M postGC: 219M
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%  -%) ->   (0/54k) -> write( -%)
0:00:24 INF [natural_earth] - Finished in 6s cpu:12s avg:1.9
0:00:24 INF [natural_earth] -   read     1x(96% 6s)
0:00:24 INF [natural_earth] -   process  3x(17% 1s wait:6s)
0:00:24 INF [natural_earth] -   write    1x(0% 0s wait:6s)
0:00:24 INF [osm_pass1] - 
0:00:24 INF [osm_pass1] - Starting...
0:00:25 INF [osm_pass1:process] - Finished nodes: 4,753,337 (3.7M/s) in 1s cpu:4s avg:2.8
0:00:26 INF [osm_pass1:process] - Finished ways: 356,729 (897k/s) in 0.4s cpu:1s avg:3.6
0:00:26 INF [osm_pass1:process] - Finished relations: 6,085 (77k/s) in 0.1s cpu:0.3s avg:4
0:00:26 INF [osm_pass1] -  nodes: [ 4.7M 2.6M/s ] 487M  ways: [ 356k 200k/s ] rels: [   6k 3.4k/s ] blocks: [  641  360/s ]
    cpus: 3 gc:  0% heap: 3.4G/4.2G direct: 66M postGC: 259M hppc: 466k
    read( -%) ->     (0/7) -> parse( -%  -%) ->     (0/6) -> process( -%)
0:00:26 DEB [osm_pass1] - Processed 641 blocks:
0:00:26 DEB [osm_pass1] -   nodes: 4,753,337 (3.7M/s) in 1s cpu:4s avg:2.8
0:00:26 DEB [osm_pass1] -   ways: 356,729 (897k/s) in 0.4s cpu:1s avg:3.6
0:00:26 DEB [osm_pass1] -   relations: 6,085 (77k/s) in 0.1s cpu:0.3s avg:4
0:00:26 INF [osm_pass1] - Finished in 2s cpu:5s avg:3.1
0:00:26 INF [osm_pass1] -   read     1x(2% 0s wait:2s)
0:00:26 INF [osm_pass1] -   parse    2x(60% 1s)
0:00:26 INF [osm_pass1] -   process  1x(68% 1s)
0:00:26 INF [osm_pass2] - 
0:00:26 INF [osm_pass2] - Starting...
0:00:27 DEB [osm_pass2:process] - Sorting long long multimap...
0:00:27 INF [osm_pass2:process] - Finished nodes: 4,753,337 (3.8M/s) in 1s cpu:5s avg:3.9
0:00:27 DEB [osm_pass2:process] - Sorted long long multimap 0s cpu:0.1s avg:3.7
0:00:27 WAR [osm_pass2:process] - No GB polygon for inferring route network types
0:00:36 INF [osm_pass2] -  nodes: [ 4.7M 100% 475k/s ] 487M  ways: [ 273k  77%  27k/s ] rels: [    0   0%    0/s ] features: [ 5.2M  91k/s ] 1.6G  blocks: [  627  98%   62/s ]
    cpus: 3.6 gc:  1% heap: 2.3G/4.2G direct: 67M postGC: 1G relInfo: 439k mpGeoms: 15M  
    read( 0%) ->   (11/14) -> process(83% 84% 87%) -> (1.8k/54k) -> write( 3%)
0:00:37 INF [osm_pass2:process] - Finished ways: 356,729 (35k/s) in 10s cpu:36s avg:3.6
0:00:42 INF [osm_pass2:process] - Finished relations: 6,085 (1.1k/s) in 5s cpu:18s avg:3.5
0:00:43 INF [osm_pass2] -  nodes: [ 4.7M 100%    0/s ] 487M  ways: [ 356k 100%  10k/s ] rels: [   6k 100%  776/s ] features: [ 5.4M  28k/s ] 284M  blocks: [  641 100%    1/s ]
    cpus: 3.4 gc:  1% heap: 2.1G/4.2G direct: 66M postGC: 1G relInfo: 439k mpGeoms: 18M  
    read( -%) ->    (0/14) -> process( -%  -%  -%) ->   (0/54k) -> write( -%)
0:00:43 DEB [osm_pass2] - Processed 641 blocks:
0:00:43 DEB [osm_pass2] -   nodes: 4,753,337 (3.8M/s) in 1s cpu:5s avg:3.9
0:00:43 DEB [osm_pass2] -   ways: 356,729 (35k/s) in 10s cpu:36s avg:3.6
0:00:43 DEB [osm_pass2] -   relations: 6,085 (1.1k/s) in 5s cpu:18s avg:3.5
0:00:43 INF [osm_pass2] - Finished in 18s cpu:1m3s avg:3.5
0:00:43 INF [osm_pass2] -   read     1x(0% 0s wait:10s done:8s)
0:00:43 INF [osm_pass2] -   process  3x(89% 16s)
0:00:43 INF [osm_pass2] -   write    1x(2% 0.4s wait:17s)
0:00:43 INF [boundaries] - 
0:00:43 INF [boundaries] - Starting...
0:00:43 INF [boundaries] - Creating polygons for 1 boundaries
0:00:44 WAR [boundaries] - Unable to form closed polygon for OSM relation 148838 (likely missing edges)
0:00:44 INF [boundaries] - Finished creating 0 country polygons
0:00:44 INF [boundaries] - Finished in 0s cpu:0s avg:1.1
0:00:44 INF - Deleting node.db to make room for output file
0:00:44 INF [sort] - 
0:00:44 INF [sort] - Starting...
0:00:44 INF [sort] - Grouped 8 chunks into 1
0:00:45 INF [sort] -  chunks: [   1 /   1 100% ] 284M 
    cpus: 2.7 gc:  0% heap: 2.6G/4.2G direct: 66M postGC: 1G
    ->     (0/3) -> worker( -%)
0:00:45 INF [sort] - Finished in 1s cpu:3s avg:2.7
0:00:45 INF [sort] -   worker  1x(51% 0.7s)
0:00:45 INF - read:0s write:0s sort:0s
0:00:45 INF [archive] - 
0:00:45 INF [archive] - Starting...
0:00:46 DEB [archive:write] - Execute mbtiles: create table metadata (name text, value text);
0:00:46 DEB [archive:write] - Execute mbtiles: create unique index name on metadata (name);
0:00:46 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:00:46 DEB [archive:write] - Execute mbtiles: create table tiles_data (
  tile_data_id integer primary key,
  tile_data blob
)

0:00:46 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:00:46 DEB [archive:write] - Set mbtiles metadata: format=pbf
0:00:46 DEB [archive:write] - Set mbtiles metadata: center=-45.955,32.445,3
0:00:46 DEB [archive:write] - Set mbtiles metadata: bounds=-74.07,21.34,-17.84,43.55
0:00:46 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... 2377 more characters
0:00:46 DEB [archive:write] - Set mbtiles metadata: name=OpenMapTiles
0:00:46 DEB [archive:write] - Set mbtiles metadata: description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org
0:00:46 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:00:46 DEB [archive:write] - Set mbtiles metadata: version=3.14.0
0:00:46 DEB [archive:write] - Set mbtiles metadata: type=baselayer
0:00:46 DEB [archive:write] - Set mbtiles metadata: minzoom=0
0:00:46 DEB [archive:write] - Set mbtiles metadata: maxzoom=14
0:00:46 DEB [archive:write] - Set mbtiles metadata: compression=gzip
0:00:46 DEB [archive:write] - Set mbtiles metadata: planetiler:version=0.7-SNAPSHOT
0:00:46 DEB [archive:write] - Set mbtiles metadata: planetiler:githash=ed4c320e49429f6f99934861931030ccde0598ab
0:00:46 DEB [archive:write] - Set mbtiles metadata: planetiler:buildtime=2023-12-08T12:24:14.524Z
0:00:46 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationtime=2023-12-07T21:21:32Z
0:00:46 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationseq=3904
0:00:46 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationurl=http://download.geofabrik.de/north-america/us/rhode-island-updates
0:00:48 INF [archive:write] - Starting z0
0:00:48 INF [archive:write] - Finished z0 in 0s cpu:0s avg:0, now starting z1
0:00:48 INF [archive:write] - Finished z1 in 0s cpu:0s avg:0, now starting z2
0:00:48 INF [archive:write] - Finished z2 in 0s cpu:0s avg:0, now starting z3
0:00:48 INF [archive:write] - Finished z3 in 0s cpu:0s avg:0, now starting z4
0:00:48 INF [archive:write] - Finished z4 in 0s cpu:0s avg:0, now starting z5
0:00:48 INF [archive:write] - Finished z5 in 0s cpu:0s avg:0, now starting z6
0:00:48 INF [archive:write] - Finished z6 in 0s cpu:0s avg:0, now starting z7
0:00:48 INF [archive:write] - Finished z7 in 0s cpu:0s avg:5.1, now starting z8
0:00:49 INF [archive:write] - Finished z8 in 0.8s cpu:3s avg:4, now starting z9
0:00:50 INF [archive:write] - Finished z9 in 1s cpu:4s avg:4, now starting z10
0:00:51 INF [archive:write] - Finished z10 in 0.3s cpu:1s avg:4, now starting z11
0:00:52 INF [archive:write] - Finished z11 in 1s cpu:6s avg:4, now starting z12
0:00:54 INF [archive:write] - Finished z12 in 2s cpu:8s avg:4, now starting z13
0:00:56 INF [archive] -  features: [ 779k  14%  77k/s ] 284M  tiles: [ 290k  29k/s ] 15M  
    cpus: 4 gc:  4% heap: 3.2G/4.2G direct: 66M postGC: 1.7G
    read( 1%) -> (212/219) -> encode(63% 58% 60% 61%) -> (215/216) -> write( 5%)
    last tile: 13/2469/3048 (z13 5%) https://onthegomap.github.io/planetiler-demo/#13.5/41.75492/-71.47705
0:00:59 INF [archive:write] - Finished z13 in 5s cpu:20s avg:3.9, now starting z14
0:01:03 DEB [archive:write] - Shallow tiles written: 4,115,021
0:01:03 DEB [archive:write] - Tile data written: 17,071 (100% omitted)
0:01:03 DEB [archive:write] - Unique tile hashes: 8,238
0:01:03 INF [archive:write] - Finished z14 in 3s cpu:10s avg:2.8
0:01:03 INF [archive] -  features: [ 5.4M 100% 671k/s ] 284M  tiles: [ 4.1M 548k/s ] 107M 
    cpus: 3.4 gc:  3% heap: 2.2G/4.2G direct: 66M postGC: 1.7G
    read( -%) ->   (0/219) -> encode( -%  -%  -%  -%) ->   (0/216) -> write( -%)
    last tile: 14/7380/5985 (z14 100%) https://onthegomap.github.io/planetiler-demo/#14.5/43.55651/-17.83081
0:01:03 DEB [archive] - Tile stats:
0:01:03 DEB [archive] - Biggest tiles (gzipped)
1. 9/154/190 (154k) https://onthegomap.github.io/planetiler-demo/#9.5/41.77078/-71.36719 (landcover:85k)
2. 14/4942/6092 (147k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.40015 (building:69k)
3. 10/308/380 (140k) https://onthegomap.github.io/planetiler-demo/#10.5/41.90214/-71.54297 (landcover:66k)
4. 10/308/381 (138k) https://onthegomap.github.io/planetiler-demo/#10.5/41.63994/-71.54297 (landcover:72k)
5. 14/4941/6092 (107k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.42212 (poi:51k)
6. 14/4941/6093 (104k) https://onthegomap.github.io/planetiler-demo/#14.5/41.81227/-71.42212 (building:62k)
7. 11/616/762 (99k) https://onthegomap.github.io/planetiler-demo/#11.5/41.7057/-71.63086 (landcover:71k)
8. 11/616/761 (96k) https://onthegomap.github.io/planetiler-demo/#11.5/41.83679/-71.63086 (landcover:72k)
9. 14/4940/6092 (96k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.44409 (building:92k)
10. 11/616/760 (94k) https://onthegomap.github.io/planetiler-demo/#11.5/41.96763/-71.63086 (landcover:73k)
0:01:03 DEB [archive] - Max tile sizes
                      z0    z1    z2    z3    z4    z5    z6    z7    z8    z9   z10   z11   z12   z13   z14   all
           boundary  154   374   443   583   935   336   430   545   545  1.6k  2.1k  7.2k  6.4k  5.8k  4.5k  7.2k
              water 7.7k  3.7k  8.6k  5.5k  2.6k  5.1k   15k   18k   16k   26k   15k   13k   17k   15k   12k   26k
              place    0     0   377   377   377   586   675    1k  1.6k  3.3k  5.8k  3.2k  1.7k   797   947  5.8k
            landuse    0     0     0     0   548   619  1.3k  5.9k   17k   44k   59k   50k   38k   19k   12k   59k
     transportation    0     0     0     0  1.1k  1.9k  2.9k  9.4k   12k   32k   22k   23k   64k   47k   33k   64k
           waterway    0     0     0     0   111   118     0     0     0  3.3k  2.1k  2.1k  2.1k  4.9k  2.4k  4.9k
               park    0     0     0     0     0     0    1k  3.6k  9.4k   18k   12k  7.4k  4.3k  3.4k  4.4k   18k
transportation_name    0     0     0     0     0     0   359   454  1.2k  1.7k  4.9k  3.9k  3.8k  3.4k   18k   18k
          landcover    0     0     0     0     0     0     0  9.5k   29k   85k   72k   81k   53k   30k   24k   85k
      mountain_peak    0     0     0     0     0     0     0  1.1k  1.8k  3.4k  4.3k  2.8k  1.4k  1.4k   869  4.3k
         water_name    0     0     0     0     0     0     0     0     0   487   462   434   445   549    1k    1k
    aerodrome_label    0     0     0     0     0     0     0     0     0     0   674   327   273   220   220   674
            aeroway    0     0     0     0     0     0     0     0     0     0  1.6k  2.1k    3k  3.4k  2.7k  3.4k
                poi    0     0     0     0     0     0     0     0     0     0     0     0   501   498   68k   68k
           building    0     0     0     0     0     0     0     0     0     0     0     0     0   59k   92k   92k
        housenumber    0     0     0     0     0     0     0     0     0     0     0     0     0     0   35k   35k
          full tile 7.9k    4k  9.4k  6.4k  4.4k    7k   21k   44k   88k  210k  188k  135k  113k  127k  227k  227k
            gzipped 6.2k  3.5k  7.1k  5.2k  3.5k  5.4k   14k   31k   63k  154k  140k   99k   83k   92k  147k  154k
0:01:03 DEB [archive] -    Max tile: 227k (gzipped: 154k)
0:01:03 DEB [archive] -    Avg tile: 5.5k (gzipped: 4.1k) using weighted average based on OSM traffic
0:01:03 DEB [archive] -     # tiles: 4,115,021
0:01:03 DEB [archive] -  # features: 5,459,404
0:01:03 INF [archive] - Finished in 18s cpu:1m5s avg:3.7
0:01:03 INF [archive] -   read    1x(3% 0.5s wait:16s)
0:01:03 INF [archive] -   encode  4x(57% 10s wait:2s)
0:01:03 INF [archive] -   write   1x(22% 4s wait:12s)
0:01:03 INF - Finished in 1m3s cpu:3m19s gc:2s avg:3.2
0:01:03 INF - FINISHED!
0:01:03 INF - 
0:01:03 INF - ----------------------------------------
0:01:03 INF - data errors:
0:01:03 INF - 	render_snap_fix_input	16,628
0:01:03 INF - 	osm_multipolygon_missing_way	74
0:01:03 INF - 	osm_boundary_missing_way	70
0:01:03 INF - 	merge_snap_fix_input	14
0:01:03 INF - 	feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix	2
0:01:03 INF - 	feature_polygon_osm_invalid_multipolygon_empty_after_fix	2
0:01:03 INF - 	omt_park_area_osm_invalid_multipolygon_empty_after_fix	1
0:01:03 INF - ----------------------------------------
0:01:03 INF - 	overall          1m3s cpu:3m19s gc:2s avg:3.2
0:01:03 INF - 	lake_centerlines 2s cpu:7s avg:2.7
0:01:03 INF - 	  read     1x(48% 1s done:1s)
0:01:03 INF - 	  process  3x(6% 0.1s wait:1s done:1s)
0:01:03 INF - 	  write    1x(0% 0s wait:1s done:1s)
0:01:03 INF - 	water_polygons   15s cpu:43s gc:1s avg:2.9
0:01:03 INF - 	  read     1x(66% 10s wait:2s)
0:01:03 INF - 	  process  3x(35% 5s wait:7s)
0:01:03 INF - 	  write    1x(4% 0.6s wait:14s)
0:01:03 INF - 	natural_earth    6s cpu:12s avg:1.9
0:01:03 INF - 	  read     1x(96% 6s)
0:01:03 INF - 	  process  3x(17% 1s wait:6s)
0:01:03 INF - 	  write    1x(0% 0s wait:6s)
0:01:03 INF - 	osm_pass1        2s cpu:5s avg:3.1
0:01:03 INF - 	  read     1x(2% 0s wait:2s)
0:01:03 INF - 	  parse    2x(60% 1s)
0:01:03 INF - 	  process  1x(68% 1s)
0:01:03 INF - 	osm_pass2        18s cpu:1m3s avg:3.5
0:01:03 INF - 	  read     1x(0% 0s wait:10s done:8s)
0:01:03 INF - 	  process  3x(89% 16s)
0:01:03 INF - 	  write    1x(2% 0.4s wait:17s)
0:01:03 INF - 	boundaries       0s cpu:0s avg:1.1
0:01:03 INF - 	sort             1s cpu:3s avg:2.7
0:01:03 INF - 	  worker  1x(51% 0.7s)
0:01:03 INF - 	archive          18s cpu:1m5s avg:3.7
0:01:03 INF - 	  read    1x(3% 0.5s wait:16s)
0:01:03 INF - 	  encode  4x(57% 10s wait:2s)
0:01:03 INF - 	  write   1x(22% 4s wait:12s)
0:01:03 INF - ----------------------------------------
0:01:03 INF - 	archive	107MB
0:01:03 INF - 	features	284MB
-rw-r--r-- 1 runner docker 66M Dec  8 12:25 run.jar
ℹ️ This Branch Logs c4b18d2
0:00:00 DEB - argument: config=null (path to config file)
0:00:00 DEB - argument: download_dir=data/sources (download directory)
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=4 (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=3 (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: tmpdir=data/tmp (temp directory)
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: tile_write_threads=1 (number of threads used to write tiles - only supported by [csv, tsv, proto, pbf, json])
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: append=false (append to the output file - only supported by [csv, tsv, proto, pbf, json])
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: tile_compression=gzip (the tile compression, one of [gzip, none])
0:00:00 DEB - argument: output_layerstats=false (output a tsv.gz file for each tile/layer size)
0:00:00 DEB - argument: debug_url=https://onthegomap.github.io/planetiler-demo/#{z}/{lat}/{lon} (debug url to use for displaying tiles with {z} {lat} {lon} placeholders)
0:00:00 DEB - argument: tile_weights=data/tile_weights.tsv.gz (tsv.gz file with columns z,x,y,loads to generate weighted average tile size stat)
0:00:00 DEB - argument: max_point_buffer=Infinity (Max tile pixels to include points outside tile bounds. Set to a lower value to reduce tile size for clients that handle label collisions across tiles (most web and native clients). NOTE: Do not reduce if you need to support raster tile rendering)
0:00:00 DEB - argument: log_jts_exceptions=false (Emit verbose details to debug JTS geometry errors)
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: download_osm_tile_weights=false (download OSM tile weights file)
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: c4b18d2775dbc9993a6ad108c73c78ec8b800fcb
0:00:00 INF - Planetiler build version: 0.7-SNAPSHOT
0:00:00 INF - Planetiler build timestamp: 2023-12-08T12:23:36.166Z
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 DEB - argument: layer_stats=/home/runner/work/planetiler/planetiler/data/out.mbtiles.layerstats.tsv.gz (layer stats output path)
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 - ✓ 200M storage on / (/dev/root) requested for read phase disk, 23G available
0:00:00 DEB -  - 45M used for temporary node location cache
0:00:00 DEB -  - 6.8M used for temporary multipolygon geometry cache
0:00:00 DEB -  - 148M used for temporary feature storage
0:00:00 DEB - ✓ 222M storage on / (/dev/root) requested for write phase disk, 23G available
0:00:00 DEB -  - 148M used for temporary feature storage
0:00:00 DEB -  - 74M used for archive output
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 - ✓ 51M storage on / (/dev/root) requested for read phase, 23G available
0:00:00 DEB -  - 45M used for sparsearray node location cache
0:00:00 DEB -  - 6.8M used for multipolygon way geometries
0:00:00 DEB - ✓ 51M temporary files and 12G 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=4
0:00:00 INF [lake_centerlines] - 
0:00:00 INF [lake_centerlines] - Starting...
0:00:05 INF [lake_centerlines] -  read: [  59k 100%  45k/s ] write: [    0    0/s ] 0    
    cpus: 2.3 gc:  1% heap: 460M/4.2G direct: 262k postGC: 82M
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%  -%) ->   (0/54k) -> write( -%)
0:00:05 INF [lake_centerlines] - Finished in 5s cpu:8s avg:1.5
0:00:05 INF [lake_centerlines] -   read     1x(22% 1s done:4s)
0:00:05 INF [lake_centerlines] -   process  3x(3% 0.1s wait:1s done:4s)
0:00:05 INF [lake_centerlines] -   write    1x(0% 0s wait:1s done:4s)
0:00:05 INF [water_polygons] - 
0:00:05 INF [water_polygons] - Starting...
0:00:15 INF [water_polygons] -  read: [ 3.9k  27%  398/s ] write: [ 360k  35k/s ] 1.4G 
    cpus: 3.2 gc:  7% heap: 3.2G/4.2G direct: 66M postGC: 1.5G
    ->     (0/3) -> read(69%) ->    (0/1k) -> process(37% 40% 39%) -> (952/54k) -> write( 1%)
0:00:20 INF [water_polygons] -  read: [  14k 100% 2.1k/s ] write: [ 4.3M 815k/s ] 193M 
    cpus: 2 gc:  6% heap: 1.6G/4.2G direct: 66M postGC: 233M
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%  -%) ->   (0/54k) -> write( -%)
0:00:20 INF [water_polygons] - Finished in 15s cpu:42s avg:2.8
0:00:20 INF [water_polygons] -   read     1x(66% 10s wait:3s)
0:00:20 INF [water_polygons] -   process  3x(34% 5s wait:7s)
0:00:20 INF [water_polygons] -   write    1x(4% 0.5s wait:14s)
0:00:20 INF [natural_earth] - 
0:00:20 INF [natural_earth] - Starting...
0:00:27 INF [natural_earth] -  read: [ 349k 100%  56k/s ] write: [  181   29/s ] 193M 
    cpus: 1.9 gc:  0% heap: 2.2G/4.2G direct: 66M postGC: 237M
    ->     (0/3) -> read( -%) ->    (0/1k) -> process( -%  -%  -%) ->   (0/54k) -> write( -%)
0:00:27 INF [natural_earth] - Finished in 6s cpu:12s avg:1.9
0:00:27 INF [natural_earth] -   read     1x(96% 6s)
0:00:27 INF [natural_earth] -   process  3x(16% 1s wait:6s)
0:00:27 INF [natural_earth] -   write    1x(0% 0s wait:6s)
0:00:27 INF [osm_pass1] - 
0:00:27 INF [osm_pass1] - Starting...
0:00:28 INF [osm_pass1:process] - Finished nodes: 4,753,337 (3.9M/s) in 1s cpu:3s avg:2.8
0:00:28 INF [osm_pass1:process] - Finished ways: 356,729 (886k/s) in 0.4s cpu:1s avg:3.6
0:00:28 INF [osm_pass1:process] - Finished relations: 6,085 (74k/s) in 0.1s cpu:0.3s avg:3.7
0:00:28 INF [osm_pass1] -  nodes: [ 4.7M 2.7M/s ] 487M  ways: [ 356k 204k/s ] rels: [   6k 3.4k/s ] blocks: [  641  368/s ]
    cpus: 3 gc:  1% heap: 3.1G/4.2G direct: 66M postGC: 724M hppc: 466k
    read( -%) ->     (0/7) -> parse( -%  -%) ->     (0/6) -> process( -%)
0:00:28 DEB [osm_pass1] - Processed 641 blocks:
0:00:28 DEB [osm_pass1] -   nodes: 4,753,337 (3.9M/s) in 1s cpu:3s avg:2.8
0:00:28 DEB [osm_pass1] -   ways: 356,729 (886k/s) in 0.4s cpu:1s avg:3.6
0:00:28 DEB [osm_pass1] -   relations: 6,085 (74k/s) in 0.1s cpu:0.3s avg:3.7
0:00:28 INF [osm_pass1] - Finished in 2s cpu:5s avg:3
0:00:28 INF [osm_pass1] -   read     1x(2% 0s wait:2s)
0:00:28 INF [osm_pass1] -   parse    2x(62% 1s)
0:00:28 INF [osm_pass1] -   process  1x(63% 1s)
0:00:28 INF [osm_pass2] - 
0:00:28 INF [osm_pass2] - Starting...
0:00:30 DEB [osm_pass2:process] - Sorting long long multimap...
0:00:30 INF [osm_pass2:process] - Finished nodes: 4,753,337 (3.7M/s) in 1s cpu:5s avg:3.9
0:00:30 DEB [osm_pass2:process] - Sorted long long multimap 0s cpu:0.1s avg:3.5
0:00:30 WAR [osm_pass2:process] - No GB polygon for inferring route network types
0:00:38 INF [osm_pass2] -  nodes: [ 4.7M 100% 474k/s ] 487M  ways: [ 282k  79%  28k/s ] rels: [    0   0%    0/s ] features: [ 5.2M  93k/s ] 1.6G  blocks: [  629  98%   62/s ]
    cpus: 3.6 gc:  1% heap: 2.4G/4.2G direct: 67M postGC: 1G relInfo: 439k mpGeoms: 16M  
    read( -%) ->    (9/14) -> process(86% 85% 83%) -> (1.2k/54k) -> write( 3%)
0:00:40 INF [osm_pass2:process] - Finished ways: 356,729 (36k/s) in 10s cpu:35s avg:3.6
0:00:44 INF [osm_pass2:process] - Finished relations: 6,085 (1.2k/s) in 5s cpu:17s avg:3.5
0:00:46 INF [osm_pass2] -  nodes: [ 4.7M 100%    0/s ] 487M  ways: [ 356k 100% 9.8k/s ] rels: [   6k 100%  813/s ] features: [ 5.4M  26k/s ] 284M  blocks: [  641 100%    1/s ]
    cpus: 3.4 gc:  1% heap: 963M/4.2G direct: 66M postGC: 1G relInfo: 439k mpGeoms: 18M  
    read( -%) ->    (0/14) -> process( -%  -%  -%) ->   (0/54k) -> write( -%)
0:00:46 DEB [osm_pass2] - Processed 641 blocks:
0:00:46 DEB [osm_pass2] -   nodes: 4,753,337 (3.7M/s) in 1s cpu:5s avg:3.9
0:00:46 DEB [osm_pass2] -   ways: 356,729 (36k/s) in 10s cpu:35s avg:3.6
0:00:46 DEB [osm_pass2] -   relations: 6,085 (1.2k/s) in 5s cpu:17s avg:3.5
0:00:46 INF [osm_pass2] - Finished in 18s cpu:1m2s avg:3.5
0:00:46 INF [osm_pass2] -   read     1x(0% 0s wait:10s done:8s)
0:00:46 INF [osm_pass2] -   process  3x(88% 15s)
0:00:46 INF [osm_pass2] -   write    1x(2% 0.4s wait:17s)
0:00:46 INF [boundaries] - 
0:00:46 INF [boundaries] - Starting...
0:00:46 INF [boundaries] - Creating polygons for 1 boundaries
0:00:46 WAR [boundaries] - Unable to form closed polygon for OSM relation 148838 (likely missing edges)
0:00:46 INF [boundaries] - Finished creating 0 country polygons
0:00:46 INF [boundaries] - Finished in 0s cpu:0s avg:1.4
0:00:46 INF - Deleting node.db to make room for output file
0:00:46 INF [sort] - 
0:00:46 INF [sort] - Starting...
0:00:46 INF [sort] - Grouped 8 chunks into 1
0:00:47 INF [sort] -  chunks: [   1 /   1 100% ] 284M 
    cpus: 2.8 gc:  0% heap: 1.4G/4.2G direct: 66M postGC: 1G
    ->     (0/3) -> worker( -%)
0:00:47 INF [sort] - Finished in 1s cpu:4s avg:2.8
0:00:47 INF [sort] -   worker  1x(50% 0.7s)
0:00:47 INF - read:0s write:0s sort:0s
0:00:47 INF [archive] - 
0:00:47 INF [archive] - Starting...
0:00:48 DEB [archive:write] - Execute mbtiles: create table metadata (name text, value text);
0:00:48 DEB [archive:write] - Execute mbtiles: create unique index name on metadata (name);
0:00:48 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:00:48 DEB [archive:write] - Execute mbtiles: create table tiles_data (
  tile_data_id integer primary key,
  tile_data blob
)

0:00:48 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:00:48 DEB [archive:write] - Set mbtiles metadata: format=pbf
0:00:48 DEB [archive:write] - Set mbtiles metadata: center=-45.955,32.445,3
0:00:48 DEB [archive:write] - Set mbtiles metadata: bounds=-74.07,21.34,-17.84,43.55
0:00:48 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","name:latin":"String","name_en":"String","ele":"Number"},"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... 2377 more characters
0:00:48 DEB [archive:write] - Set mbtiles metadata: name=OpenMapTiles
0:00:48 DEB [archive:write] - Set mbtiles metadata: description=A tileset showcasing all layers in OpenMapTiles. https://openmaptiles.org
0:00:48 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:00:48 DEB [archive:write] - Set mbtiles metadata: version=3.14.0
0:00:48 DEB [archive:write] - Set mbtiles metadata: type=baselayer
0:00:48 DEB [archive:write] - Set mbtiles metadata: minzoom=0
0:00:48 DEB [archive:write] - Set mbtiles metadata: maxzoom=14
0:00:48 DEB [archive:write] - Set mbtiles metadata: compression=gzip
0:00:48 DEB [archive:write] - Set mbtiles metadata: planetiler:version=0.7-SNAPSHOT
0:00:48 DEB [archive:write] - Set mbtiles metadata: planetiler:githash=c4b18d2775dbc9993a6ad108c73c78ec8b800fcb
0:00:48 DEB [archive:write] - Set mbtiles metadata: planetiler:buildtime=2023-12-08T12:23:36.166Z
0:00:48 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationtime=2023-12-07T21:21:32Z
0:00:48 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationseq=3904
0:00:48 DEB [archive:write] - Set mbtiles metadata: planetiler:osm:osmosisreplicationurl=http://download.geofabrik.de/north-america/us/rhode-island-updates
0:00:50 INF [archive:write] - Starting z0
0:00:50 INF [archive:write] - Finished z0 in 0s cpu:0s avg:0, now starting z1
0:00:50 INF [archive:write] - Finished z1 in 0s cpu:0s avg:0, now starting z2
0:00:50 INF [archive:write] - Finished z2 in 0s cpu:0s avg:90.5, now starting z3
0:00:50 INF [archive:write] - Finished z3 in 0s cpu:0s avg:0, now starting z4
0:00:50 INF [archive:write] - Finished z4 in 0s cpu:0s avg:0, now starting z5
0:00:50 INF [archive:write] - Finished z5 in 0s cpu:0s avg:0, now starting z6
0:00:50 INF [archive:write] - Finished z6 in 0s cpu:0s avg:0, now starting z7
0:00:50 INF [archive:write] - Finished z7 in 0s cpu:0s avg:0, now starting z8
0:00:51 INF [archive:write] - Finished z8 in 0.9s cpu:4s avg:4, now starting z9
0:00:53 INF [archive:write] - Finished z9 in 2s cpu:7s avg:4, now starting z10
0:00:53 INF [archive:write] - Finished z10 in 0.1s cpu:0.3s avg:4, now starting z11
0:00:54 INF [archive:write] - Finished z11 in 1s cpu:5s avg:4, now starting z12
0:00:56 INF [archive:write] - Finished z12 in 2s cpu:8s avg:4, now starting z13
0:00:58 INF [archive] -  features: [ 845k  15%  84k/s ] 284M  tiles: [ 290k  29k/s ] 14M  
    cpus: 4 gc:  4% heap: 2G/4.2G direct: 66M postGC: 1.7G
    read( 1%) -> (208/219) -> encode(60% 58% 60% 64%) -> (215/216) -> write( 4%)
    last tile: 13/2469/3048 (z13 5%) https://onthegomap.github.io/planetiler-demo/#13.5/41.75492/-71.47705
0:01:01 INF [archive:write] - Finished z13 in 5s cpu:20s avg:3.9, now starting z14
0:01:05 DEB [archive:write] - Shallow tiles written: 4,115,021
0:01:05 DEB [archive:write] - Tile data written: 17,213 (100% omitted)
0:01:05 DEB [archive:write] - Unique tile hashes: 8,380
0:01:05 INF [archive:write] - Finished z14 in 3s cpu:10s avg:2.9
0:01:05 INF [archive] -  features: [ 5.4M 100% 689k/s ] 284M  tiles: [ 4.1M 571k/s ] 107M 
    cpus: 3.4 gc:  3% heap: 2.3G/4.2G direct: 66M postGC: 1.7G
    read( -%) ->   (0/219) -> encode( -%  -%  -%  -%) ->   (0/216) -> write( -%)
    last tile: 14/7380/5985 (z14 100%) https://onthegomap.github.io/planetiler-demo/#14.5/43.55651/-17.83081
0:01:05 DEB [archive] - Tile stats:
0:01:05 DEB [archive] - Biggest tiles (gzipped)
1. 9/154/190 (154k) https://onthegomap.github.io/planetiler-demo/#9.5/41.77078/-71.36719 (landcover:85k)
2. 14/4942/6092 (147k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.40015 (building:69k)
3. 10/308/380 (140k) https://onthegomap.github.io/planetiler-demo/#10.5/41.90214/-71.54297 (landcover:66k)
4. 10/308/381 (138k) https://onthegomap.github.io/planetiler-demo/#10.5/41.63994/-71.54297 (landcover:72k)
5. 14/4941/6092 (107k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.42212 (poi:51k)
6. 14/4941/6093 (104k) https://onthegomap.github.io/planetiler-demo/#14.5/41.81227/-71.42212 (building:62k)
7. 11/616/762 (99k) https://onthegomap.github.io/planetiler-demo/#11.5/41.7057/-71.63086 (landcover:71k)
8. 11/616/761 (96k) https://onthegomap.github.io/planetiler-demo/#11.5/41.83679/-71.63086 (landcover:72k)
9. 14/4940/6092 (96k) https://onthegomap.github.io/planetiler-demo/#14.5/41.82864/-71.44409 (building:92k)
10. 11/616/760 (94k) https://onthegomap.github.io/planetiler-demo/#11.5/41.96763/-71.63086 (landcover:73k)
0:01:05 DEB [archive] - Max tile sizes
                      z0    z1    z2    z3    z4    z5    z6    z7    z8    z9   z10   z11   z12   z13   z14   all
           boundary  154   374   443   583   935   336   430   545   545  1.6k  2.1k  7.2k  6.4k  5.8k  4.5k  7.2k
              water 7.7k  3.7k  8.6k  5.5k  2.6k  5.1k   15k   18k   16k   26k   15k   13k   17k   15k   12k   26k
              place    0     0   377   377   377   586   675    1k  1.6k  3.3k  5.8k  3.2k  1.7k   797   947  5.8k
            landuse    0     0     0     0   548   619  1.3k  5.9k   17k   44k   59k   50k   38k   19k   12k   59k
     transportation    0     0     0     0  1.1k  1.9k  2.9k  9.4k   12k   32k   22k   23k   64k   47k   33k   64k
           waterway    0     0     0     0   111   118     0     0     0  3.3k  2.1k  2.1k  2.1k  4.9k  2.4k  4.9k
               park    0     0     0     0     0     0    1k  3.6k  9.4k   18k   12k  7.4k  4.3k  3.4k  4.4k   18k
transportation_name    0     0     0     0     0     0   359   454  1.2k  1.7k  4.9k  3.9k  3.8k  3.4k   18k   18k
          landcover    0     0     0     0     0     0     0  9.5k   29k   85k   72k   81k   53k   30k   24k   85k
      mountain_peak    0     0     0     0     0     0     0  1.1k  1.8k  3.4k  4.3k  2.8k  1.4k  1.4k   869  4.3k
         water_name    0     0     0     0     0     0     0     0     0   487   462   434   445   549    1k    1k
    aerodrome_label    0     0     0     0     0     0     0     0     0     0   674   327   273   220   220   674
            aeroway    0     0     0     0     0     0     0     0     0     0  1.6k  2.1k    3k  3.4k  2.7k  3.4k
                poi    0     0     0     0     0     0     0     0     0     0     0     0   501   498   68k   68k
           building    0     0     0     0     0     0     0     0     0     0     0     0     0   59k   92k   92k
        housenumber    0     0     0     0     0     0     0     0     0     0     0     0     0     0   35k   35k
          full tile 7.9k    4k  9.4k  6.4k  4.4k    7k   21k   44k   88k  210k  188k  135k  113k  127k  227k  227k
            gzipped 6.2k  3.6k  7.1k  5.2k  3.5k  5.4k   14k   31k   63k  154k  140k   99k   83k   92k  147k  154k
0:01:05 DEB [archive] -    Max tile: 227k (gzipped: 154k)
0:01:05 DEB [archive] -    Avg tile: 5.5k (gzipped: 4.1k) using weighted average based on OSM traffic
0:01:05 DEB [archive] -     # tiles: 4,115,021
0:01:05 DEB [archive] -  # features: 5,459,404
0:01:05 INF [archive] - Finished in 17s cpu:1m4s avg:3.7
0:01:05 INF [archive] -   read    1x(3% 0.5s wait:16s)
0:01:05 INF [archive] -   encode  4x(56% 10s wait:2s)
0:01:05 INF [archive] -   write   1x(22% 4s wait:12s)
0:01:05 INF - Finished in 1m5s cpu:3m18s gc:2s avg:3
0:01:05 INF - FINISHED!
0:01:05 INF - 
0:01:05 INF - ----------------------------------------
0:01:05 INF - data errors:
0:01:05 INF - 	render_snap_fix_input	16,628
0:01:05 INF - 	osm_multipolygon_missing_way	74
0:01:05 INF - 	osm_boundary_missing_way	70
0:01:05 INF - 	merge_snap_fix_input	14
0:01:05 INF - 	feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix	2
0:01:05 INF - 	feature_polygon_osm_invalid_multipolygon_empty_after_fix	2
0:01:05 INF - 	omt_park_area_osm_invalid_multipolygon_empty_after_fix	1
0:01:05 INF - ----------------------------------------
0:01:05 INF - 	overall          1m5s cpu:3m18s gc:2s avg:3
0:01:05 INF - 	lake_centerlines 5s cpu:8s avg:1.5
0:01:05 INF - 	  read     1x(22% 1s done:4s)
0:01:05 INF - 	  process  3x(3% 0.1s wait:1s done:4s)
0:01:05 INF - 	  write    1x(0% 0s wait:1s done:4s)
0:01:05 INF - 	water_polygons   15s cpu:42s avg:2.8
0:01:05 INF - 	  read     1x(66% 10s wait:3s)
0:01:05 INF - 	  process  3x(34% 5s wait:7s)
0:01:05 INF - 	  write    1x(4% 0.5s wait:14s)
0:01:05 INF - 	natural_earth    6s cpu:12s avg:1.9
0:01:05 INF - 	  read     1x(96% 6s)
0:01:05 INF - 	  process  3x(16% 1s wait:6s)
0:01:05 INF - 	  write    1x(0% 0s wait:6s)
0:01:05 INF - 	osm_pass1        2s cpu:5s avg:3
0:01:05 INF - 	  read     1x(2% 0s wait:2s)
0:01:05 INF - 	  parse    2x(62% 1s)
0:01:05 INF - 	  process  1x(63% 1s)
0:01:05 INF - 	osm_pass2        18s cpu:1m2s avg:3.5
0:01:05 INF - 	  read     1x(0% 0s wait:10s done:8s)
0:01:05 INF - 	  process  3x(88% 15s)
0:01:05 INF - 	  write    1x(2% 0.4s wait:17s)
0:01:05 INF - 	boundaries       0s cpu:0s avg:1.4
0:01:05 INF - 	sort             1s cpu:4s avg:2.8
0:01:05 INF - 	  worker  1x(50% 0.7s)
0:01:05 INF - 	archive          17s cpu:1m4s avg:3.7
0:01:05 INF - 	  read    1x(3% 0.5s wait:16s)
0:01:05 INF - 	  encode  4x(56% 10s wait:2s)
0:01:05 INF - 	  write   1x(22% 4s wait:12s)
0:01:05 INF - ----------------------------------------
0:01:05 INF - 	archive	107MB
0:01:05 INF - 	features	284MB
-rw-r--r-- 1 runner docker 67M Dec  8 12:24 run.jar

@msbarry
Copy link
Contributor Author

msbarry commented Dec 1, 2023

I ran a performance test of a lua profile vs. equivalent 1-file java profile:

Lua: 10m6s total, OSM pass 2: 6m29s (2h50m CPU time), nodes took 4m25s cpu:2h13m
Java: 8m26s total, OSM pass 2: 4m50s (1h54m CPU time), nodes took 2m8s cpu:58m

Lua

-- java -Xmx30g -jar planetiler.jar power.lua --area=planet --bounds=planet --storage=mmap --nodemap-type=array --output=power-lua.pmtiles --osm-path=planet-latest.osm.pbf
planetiler.output.name = "Power"
planetiler.output.path = { "data", "power.pmtiles" }

local area = planetiler.args:get_string("area", "geofabrik area to download", "massachusetts")

planetiler.add_source('osm', {
  type = 'osm',
  url = 'geofabrik:' .. area,
  -- any java method or field that takes a Path can be called with a list of path parts from lua
  path = { 'data', 'sources', area .. '.osm.pbf' }
})

function planetiler.process_feature(source, features)
  if source:can_be_line() and source:has_tag("power", "line") then
    features
        :line("power")
        :set_min_zoom(7)
        :inherit_attr_from_source("power")
        :inherit_attr_from_source("voltage")
        :inherit_attr_from_source("cables")
        :inherit_attr_from_source("operator")
  elseif source:isPoint() and source:has_tag("power", "pole") then
    features
        :point("power")
        :set_min_zoom(13)
        :inherit_attr_from_source("power")
        :inherit_attr_from_source("ref")
        :inherit_attr_from_source("height")
        :inherit_attr_from_source("operator")
  end
end

Java

// java -Xmx30g -cp planetiler.jar Power.java --area=planet --bounds=planet --storage=mmap --nodemap-type=array --output=power-java.pmtiles --osm-path=planet-latest.osm.pbf
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.Planetiler;
import com.onthegomap.planetiler.Profile;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.reader.SourceFeature;
import java.nio.file.Path;

class Power implements Profile {
  public void processFeature(SourceFeature source, FeatureCollector features) {
    if (source.canBeLine() && source.hasTag("power", "line")) {
      features
        .line("power")
        .setMinZoom(7)
        .inheritAttrFromSource("power")
        .inheritAttrFromSource("voltage")
        .inheritAttrFromSource("cables")
        .inheritAttrFromSource("operator");
    } else if (source.isPoint() && source.hasTag("power", "pole")) {
      features
        .point("power")
        .setMinZoom(13)
        .inheritAttrFromSource("power")
        .inheritAttrFromSource("ref")
        .inheritAttrFromSource("height")
        .inheritAttrFromSource("operator");
    }

  }

  public String name() {
    return "power";
  }

  public static void main(String[] argv) throws Exception {
    Arguments args = Arguments.fromArgsOrConfigFile(argv);
    var area = args.getString("area", "geofabrik area to download", "massachusetts");
    Planetiler.create(args)
      .setProfile(new Power())
      .addOsmSource("osm", Path.of("data/sources/" + area + ".osm.pbf"), "geofabrik:" + area)
      .overwriteOutput(Path.of("data/buildings.pmtiles"))
      .run();
  }
}

@msbarry
Copy link
Contributor Author

msbarry commented Dec 1, 2023

Here's a comparison of tradeoffs between different ways to write a profile: https://gist.github.com/msbarry/284eff36489ca736c7dab836ace39d24

1-file java lua yaml java project (maven/gradle)
no build tools
can split logic into multiple files not yet
performance ⚠️ ✅✅ fastest
full access to java API
IDE support ✅ vscode no-build-tool mode, with planetiler.jar on classpath ✅ vscode with type definitions ✅ vscode with planetiler.schema.json ✅ vscode, intellij, etc.

@msbarry msbarry mentioned this pull request Dec 1, 2023
8 tasks
@msbarry
Copy link
Contributor Author

msbarry commented Dec 6, 2023

Added lua type definition generator you can run with java -jar planetiler.jar lua-types > types.lua. Here's a comparison of writing a simple planetiler profile in VS Code in lua using these type definitions compared to a 1-file java profile with no build tools:

Lua with lua extension with type definitons

lua-profile-h264.mp4

1-file Java with Java extension pack but no other build tools:

java-profile-h264.mp4

@msbarry
Copy link
Contributor Author

msbarry commented Dec 8, 2023

I made an example vscode project you can clone if you want to try this out: https://github.com/msbarry/planetiler-profiles

Copy link

sonarcloud bot commented Dec 8, 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 3 Code Smells

73.1% 73.1% Coverage
0.0% 0.0% Duplication

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.

None yet

1 participant