Porównaj commity

...

633 Commity
v0.2.0 ... main

Autor SHA1 Wiadomość Data
Michael Barry 8f9b750789
Log more details on feature processing errors (#884) 2024-05-07 06:53:50 -04:00
dependabot[bot] e6e2f467d5
Bump com.google.guava:guava from 33.1.0-jre to 33.2.0-jre (#883) 2024-05-07 05:24:40 -04:00
Mike Barry eea8455156 tweak diff message 2024-05-06 06:11:18 -04:00
dependabot[bot] ff024a098a
Bump org.roaringbitmap:RoaringBitmap from 1.0.5 to 1.0.6 (#881)
Bumps [org.roaringbitmap:RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap) from 1.0.5 to 1.0.6.
- [Release notes](https://github.com/RoaringBitmap/RoaringBitmap/releases)
- [Commits](https://github.com/RoaringBitmap/RoaringBitmap/compare/1.0.5...1.0.6)

---
updated-dependencies:
- dependency-name: org.roaringbitmap:RoaringBitmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-06 05:35:56 -04:00
Peter Hanecak a5f3cf46d7
Update to openmaptiles 3.15 (#880) 2024-05-06 05:35:20 -04:00
Michael Barry 1cb3050f39
Expose osm element type to yaml configs (#879) 2024-05-05 14:39:53 -04:00
dependabot[bot] a169dcf021
Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.0 to 3.4.1 (#877)
Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/apache/maven-jar-plugin/releases)
- [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.4.0...maven-jar-plugin-3.4.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-jar-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-03 05:48:57 -04:00
dependabot[bot] d68e83135d
Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.1 to 3.1.2 (#875)
Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.1 to 3.1.2.
- [Release notes](https://github.com/apache/maven-deploy-plugin/releases)
- [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.1...maven-deploy-plugin-3.1.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-deploy-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 20:11:56 -04:00
Michael Barry ef1702ec73
ignore duplicate relation members (#876) 2024-05-02 06:21:01 -04:00
Peter Hanecak 85324e7f65
exclude slf4j-nop from geopackage to avoid SLF4J warning (#874) 2024-04-28 05:54:24 -04:00
dependabot[bot] 12558b99a8
Bump com.ibm.icu:icu4j from 74.2 to 75.1 (#872)
Bumps [com.ibm.icu:icu4j](https://github.com/unicode-org/icu) from 74.2 to 75.1.
- [Release notes](https://github.com/unicode-org/icu/releases)
- [Commits](https://github.com/unicode-org/icu/commits)

---
updated-dependencies:
- dependency-name: com.ibm.icu:icu4j
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-26 05:37:04 -04:00
dependabot[bot] b41e1f2f3b
Bump org.xerial:sqlite-jdbc from 3.45.2.0 to 3.45.3.0 (#871)
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.45.2.0 to 3.45.3.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.45.2.0...3.45.3.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-22 05:29:31 -04:00
dependabot[bot] bbd197b525
Bump org.apache.maven.plugins:maven-jar-plugin from 3.3.0 to 3.4.0 (#869)
Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/apache/maven-jar-plugin/releases)
- [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.3.0...maven-jar-plugin-3.4.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-jar-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-21 06:09:51 -04:00
dependabot[bot] ade89c0739
Bump org.slf4j:slf4j-api from 2.0.12 to 2.0.13 (#868) 2024-04-15 07:38:33 -04:00
dependabot[bot] 6f6a4dd6ed
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.2 to 3.2.3 (#867)
Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/apache/maven-gpg-plugin/releases)
- [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.2...maven-gpg-plugin-3.2.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-gpg-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-11 06:11:07 -04:00
dependabot[bot] 6b9c996df9
Bump org.apache.maven.plugins:maven-source-plugin from 3.3.0 to 3.3.1 (#865)
Bumps [org.apache.maven.plugins:maven-source-plugin](https://github.com/apache/maven-source-plugin) from 3.3.0 to 3.3.1.
- [Commits](https://github.com/apache/maven-source-plugin/compare/maven-source-plugin-3.3.0...maven-source-plugin-3.3.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-source-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-10 07:13:03 -04:00
Michael Barry 978c64f0c6
Add polygon index intersection utility (#866) 2024-04-10 07:12:29 -04:00
dependabot[bot] ed373ff3d3
Bump mil.nga.geopackage:geopackage from 6.6.4 to 6.6.5 (#864) 2024-04-05 05:09:54 -04:00
dependabot[bot] 32f941f1b1
Bump org.jacoco:jacoco-maven-plugin from 0.8.11 to 0.8.12 (#863)
Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.11 to 0.8.12.
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.11...v0.8.12)

---
updated-dependencies:
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-04 05:16:39 -04:00
dependabot[bot] ef6fc85691
Bump com.google.cloud.tools:jib-maven-plugin from 3.4.1 to 3.4.2 (#862) 2024-04-03 21:22:21 -04:00
Michael Barry f69882addb
Fix tile size stats memory leak (#861) 2024-04-02 20:34:42 -04:00
dependabot[bot] 6c41c388f4
Bump org.apache.maven.plugins:maven-assembly-plugin from 3.6.0 to 3.7.1 (#860) 2024-04-02 07:49:22 -04:00
dependabot[bot] 689abb5ad7
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.1 to 3.2.2 (#858)
Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/apache/maven-gpg-plugin/releases)
- [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.1...maven-gpg-plugin-3.2.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-gpg-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-01 05:49:09 -04:00
dependabot[bot] da9d03c85d
Bump geotools.version from 30.1 to 31.0 (#856) 2024-03-29 05:04:50 -04:00
dependabot[bot] 1871e230ac
Bump org.sonarsource.scanner.maven:sonar-maven-plugin (#855) 2024-03-28 05:16:13 -04:00
dependabot[bot] f1a9be3192
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.1.0 to 3.2.1 (#852) 2024-03-25 05:39:35 -04:00
dependabot[bot] 01786f553a
Bump org.apache.maven.plugins:maven-compiler-plugin (#851) 2024-03-23 16:29:03 -04:00
dependabot[bot] 568092dc32
Bump org.xerial:sqlite-jdbc from 3.45.0.0 to 3.45.2.0 (#849) 2024-03-21 05:41:00 -04:00
zstadler 696f63671c
Remove quoting side-bars from planetiler-custommap/README.md (#844) 2024-03-20 08:45:30 -04:00
dependabot[bot] 2cb1a99025
Bump jackson.version from 2.16.1 to 2.17.0 (#847) 2024-03-20 07:59:09 -04:00
dependabot[bot] 4920b34447
Bump org.commonmark:commonmark from 0.21.0 to 0.22.0 (#845) 2024-03-19 06:05:49 -04:00
dependabot[bot] 3a8e7c4420
Bump org.apache.maven.plugins:maven-assembly-plugin (#846) 2024-03-19 06:05:30 -04:00
dependabot[bot] d1eec2f4a3
Bump com.github.jnr:jnr-ffi from 2.2.15 to 2.2.16 (#843) 2024-03-18 05:46:28 -04:00
dependabot[bot] 99b848f1de
Bump com.google.guava:guava from 33.0.0-jre to 33.1.0-jre (#842)
Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.0.0-jre to 33.1.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-15 06:00:52 -04:00
dependabot[bot] 7c01366b01
Bump com.google.cloud.tools:jib-maven-plugin from 3.4.0 to 3.4.1 (#841)
Bumps [com.google.cloud.tools:jib-maven-plugin](https://github.com/GoogleContainerTools/jib) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/GoogleContainerTools/jib/releases)
- [Commits](https://github.com/GoogleContainerTools/jib/commits)

---
updated-dependencies:
- dependency-name: com.google.cloud.tools:jib-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-14 20:36:05 -04:00
dependabot[bot] 641f0e01a4
Bump log4j.version from 2.22.1 to 2.23.1 (#840) 2024-03-13 21:27:45 -04:00
dependabot[bot] 2303334124
Bump org.roaringbitmap:RoaringBitmap from 1.0.1 to 1.0.5 (#839)
Bumps [org.roaringbitmap:RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap) from 1.0.1 to 1.0.5.
- [Release notes](https://github.com/RoaringBitmap/RoaringBitmap/releases)
- [Commits](https://github.com/RoaringBitmap/RoaringBitmap/compare/1.0.1...1.0.5)

---
updated-dependencies:
- dependency-name: org.roaringbitmap:RoaringBitmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-11 05:46:30 -04:00
dependabot[bot] 96202644ac
Bump softprops/action-gh-release from 1 to 2 (#837)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 1 to 2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v1...v2)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-11 05:45:03 -04:00
dependabot[bot] 6c6ee791e3
Bump org.apache.maven.plugins:maven-assembly-plugin (#838)
Bumps [org.apache.maven.plugins:maven-assembly-plugin](https://github.com/apache/maven-assembly-plugin) from 3.6.0 to 3.7.0.
- [Commits](https://github.com/apache/maven-assembly-plugin/compare/maven-assembly-plugin-3.6.0...maven-assembly-plugin-3.7.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-assembly-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-11 05:44:49 -04:00
dependabot[bot] 7dd0f85bb1
Bump org.slf4j:slf4j-api from 2.0.11 to 2.0.12 (#836) 2024-03-08 19:02:56 -05:00
Michael Barry c0fef5b6b4
update openmaptiles snapshot (#835) 2024-03-07 07:41:57 -05:00
dependabot[bot] c4682500eb
Bump junit.version from 5.10.1 to 5.10.2 (#834)
Bumps `junit.version` from 5.10.1 to 5.10.2.

Updates `org.junit.jupiter:junit-jupiter-api` from 5.10.1 to 5.10.2
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2)

Updates `org.junit.jupiter:junit-jupiter-params` from 5.10.1 to 5.10.2
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2)

Updates `org.junit.jupiter:junit-jupiter-engine` from 5.10.1 to 5.10.2
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter-params
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-07 06:01:45 -05:00
dependabot[bot] e7c7e08f9e
Bump org.mockito:mockito-core from 5.10.0 to 5.11.0 (#833)
Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.10.0 to 5.11.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.10.0...v5.11.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-06 05:18:17 -05:00
dependabot[bot] fe5526026b
Bump com.google.protobuf:protobuf-java from 3.25.2 to 3.25.3 (#832)
Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.25.2 to 3.25.3.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.25.2...v3.25.3)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-05 06:48:53 -05:00
dependabot[bot] fa34992d53
Bump org.yaml:snakeyaml from 1.33 to 2.2 (#829)
Bumps [org.yaml:snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) from 1.33 to 2.2.
- [Commits](https://bitbucket.org/snakeyaml/snakeyaml/branches/compare/snakeyaml-2.2..snakeyaml-1.33)

---
updated-dependencies:
- dependency-name: org.yaml:snakeyaml
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-04 06:09:52 -05:00
Michael Barry 8396991fda
Fix dependabot (#828) 2024-03-04 05:58:58 -05:00
Michael Barry 9f0f513dd7
Safer natural earth unzip (#825) 2024-03-03 18:47:44 -05:00
Peter Hanecak 40e64a2fd3
filter out null entries, allowing skipping of OSM read when no profile needs OSM data (#822) 2024-02-28 20:58:22 -05:00
Peter Hanecak d703b626ad
Attempt to fix IOException/GOAWAY happening within parseResults() (#818) 2024-02-16 07:46:17 -05:00
dependabot[bot] e9a2bcc647
Bump org.junit.jupiter:junit-jupiter-api (#815) 2024-02-10 12:56:14 -05:00
Michael Barry f7a3b62170
Add `firstCoordinate` vector tile feature helper (#814) 2024-02-03 09:35:20 -05:00
Michael Barry 7c03592358
Add tile post-process hook to forwarding profile (#813) 2024-02-03 06:14:08 -05:00
dependabot[bot] f97b5f9cb9
Bump com.diffplug.spotless:spotless-maven-plugin from 2.42.0 to 2.43.0 (#811) 2024-02-02 04:51:58 -05:00
Michael Barry 384f84f51a
omit() feature collector api and --refresh-sources arg (#810) 2024-01-30 07:40:02 -05:00
dependabot[bot] 54394aa01d
Bump org.msgpack:msgpack-core from 0.9.7 to 0.9.8 (#809) 2024-01-30 07:30:54 -05:00
Oliver Wipfli 389a14462b
Add note about java update process (#807) 2024-01-30 07:30:28 -05:00
dependabot[bot] 07680f4199
Bump org.mockito:mockito-core from 5.9.0 to 5.10.0 (#808) 2024-01-29 19:17:19 -05:00
dependabot[bot] a6fee0ce6c
Bump styfle/cancel-workflow-action from 0.12.0 to 0.12.1 (#806) 2024-01-27 12:48:44 -05:00
dependabot[bot] 4d52507baa
Bump org.xerial:sqlite-jdbc from 3.44.1.0 to 3.45.0.0 (#805) 2024-01-26 05:25:39 -05:00
Michael Barry fa7bffb04f
Add whole-tile postprocess hook (#802) 2024-01-23 07:08:18 -05:00
dependabot[bot] 6331934d6f
Bump org.codehaus.mojo:flatten-maven-plugin from 1.5.0 to 1.6.0 (#804) 2024-01-23 04:44:48 -05:00
Michael Barry 92fa59ef20
Update GCP benchmarks (#803) 2024-01-21 10:42:32 -05:00
Michael Barry 328e1b4d53
Small benchmarks (#801) 2024-01-20 09:10:38 -05:00
dependabot[bot] 08990007a9
Bump actions/cache from 3 to 4 (#799)
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-19 05:37:21 -05:00
dependabot[bot] 85f644d380
Bump org.apache.maven.plugins:maven-surefire-plugin from 3.2.3 to 3.2.5 (#800)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.3 to 3.2.5.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.3...surefire-3.2.5)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-19 05:37:13 -05:00
Michael Barry 31ae80d047
Updated benchmarks including determinism improvements (#798) 2024-01-17 20:05:14 -05:00
Brandon Liu 67d530a526
add extraMetadata to profile interface [#794] (#795) 2024-01-17 06:03:17 -05:00
dependabot[bot] fdb9ea6e02
Bump com.google.protobuf:protobuf-java from 3.25.1 to 3.25.2 (#797) 2024-01-17 05:32:04 -05:00
Brandon Liu 0cb2645639
Fix comparison of multipolygons bounds check [#780] (#793) 2024-01-16 08:11:03 -05:00
dependabot[bot] 7492f6982b
Bump com.diffplug.spotless:spotless-maven-plugin from 2.41.1 to 2.42.0 (#796)
Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.41.1 to 2.42.0.
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/maven/2.41.1...lib/2.42.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-16 05:47:30 -05:00
Michael Barry bf24ef3961
Check for deterministic output in CI (#792) 2024-01-15 14:14:17 -05:00
Michael Barry 5a7757435d
Deterministic IDs on SimpleFeatures (#791) 2024-01-15 06:22:30 -05:00
dependabot[bot] 902651fda8
Bump org.mockito:mockito-core from 5.8.0 to 5.9.0 (#790)
Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.8.0 to 5.9.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.8.0...v5.9.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-15 06:17:25 -05:00
Michael Barry 14b217d6f6
Fix feature merge consistent ordering (#789) 2024-01-14 12:08:20 -05:00
Michael Barry 062528b1ee
Make OSM polygon construction deterministic (#788) 2024-01-12 09:01:09 -05:00
dependabot[bot] 36977d5388
Bump org.projectnessie.cel:cel-bom from 0.4.3 to 0.4.4 (#787)
Bumps [org.projectnessie.cel:cel-bom](https://github.com/projectnessie/cel-java) from 0.4.3 to 0.4.4.
- [Release notes](https://github.com/projectnessie/cel-java/releases)
- [Commits](https://github.com/projectnessie/cel-java/compare/v0.4.3...v0.4.4)

---
updated-dependencies:
- dependency-name: org.projectnessie.cel:cel-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-12 06:59:25 -05:00
dependabot[bot] 8cb42bd435
Bump org.apache.maven.plugins:maven-failsafe-plugin (#783)
Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.2.3 to 3.2.5.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.3...surefire-3.2.5)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-11 08:42:58 -05:00
dependabot[bot] 43e39ef1ea
Bump org.msgpack:msgpack-core from 0.9.6 to 0.9.7 (#784)
Bumps [org.msgpack:msgpack-core](https://github.com/msgpack/msgpack-java) from 0.9.6 to 0.9.7.
- [Release notes](https://github.com/msgpack/msgpack-java/releases)
- [Changelog](https://github.com/msgpack/msgpack-java/blob/main/RELEASE_NOTES.md)
- [Commits](https://github.com/msgpack/msgpack-java/compare/v0.9.6...v0.9.7)

---
updated-dependencies:
- dependency-name: org.msgpack:msgpack-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-11 08:42:39 -05:00
Michael Barry 0dc2ee82e1
Deterministic merging (#785) 2024-01-11 08:42:16 -05:00
Michael Barry 96eae6110b
Archive compare (#780) 2024-01-10 05:21:03 -05:00
dependabot[bot] 076d2acbee
Bump org.apache.maven.plugins:maven-surefire-plugin (#782) 2024-01-10 05:17:30 -05:00
dependabot[bot] 8e1eae8804
Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.2.3 to 3.2.5 (#781) 2024-01-10 05:17:18 -05:00
Björn Bilger df804879ef
remove log4j-CloseShieldOutputStream usage (#779) 2024-01-09 18:14:28 -05:00
dependabot[bot] d2b267aa2e
Bump org.slf4j:slf4j-api from 2.0.10 to 2.0.11 (#778) 2024-01-09 05:05:09 -05:00
cmahnke f692124168
Remove log4j usage (#776) 2024-01-09 05:04:44 -05:00
Björn Bilger c480b35f1c
Add support for "files"-archive (#761)
* Add support for "files"-archive

i.e. write individual pbf-files to disk in the format <base>/z/x/y.pbf

in order to use that format it must be passed as "--ouput=/path/to/tiles?format=files"

Fixes #536

* default to files format

...if no explict format query param given, path ends with a slash, or no extension given

* output metadata.json in files-archive

and refactor TileArchiveMetadata
1. put zoom into center (CoordinateXY->Coordinate) - in sync with mbtiles-format
2. add (De-)Serializer for Coordinate+Envelop => avoid duplication and cleaner
3. change the json and proto output for TileArchiveMetadata to be (more) in sync with mbtiles-format

* add support for custom tile scheme in files-archive

{z}/{x}/{y}.pbf is the default and can be configured as needed - e.g.:
- different order: {x}/{y}/{z}.pbf
- with intermediate dirs: {x}/a/{y}/b/{z}.pbf
- with different extension: {z}/{y}/{y}.pbf.gz

instead of {x} and {y}, {xs} and {xy} can be used which breaks up
x and y into 2 directories each and ensures that each directory has <1000 children

* fix issues with multiple writers

1. call finish archive only once after all writers are finished
   ...and not every time a writer finishes
2. log "zoom-progress" for the first tile write only
   (Finished z11 ... now starting z12)
3. remove file/dir-size progress logger bottleneck for files archive
   => each archive now reports the bytes written, which also fixes
   the issues of stream-archives reporting the size incorrectly
4. introduce printStats-hook on archive-level

* add async file write support to files archive

...allow to use virtual threads ExecturService (bound only!) for tile writing

also add some benchmark for writing tiles to disk: fixed, bound virtual, async, unbound virtual

* Revert "add async file write support to files archive"

This reverts commit b8cfa56977d98520aa8b62252c3a2726d440afe0.

* few improvements

- extract TileSchemeEncoding
- use Counter.MultithreadCounter rather than LongAdder to count bytes written
- add some JavaDoc

* simplify files archive usage

1. allow to pass tile scheme directly via output: --output=tiles/{x}/{y}/{z}.pbf
2. auto-encode { (%7B) and } (%7D) => no need to encode it the URI on CLI

* few more adjustments according to PR feeback

1. use WriteableTileArchive#bytesWritten in summmary as well
2. call WriteableTileArchive#init in a safer manner

..and a few more adjustments

* more PR feedback
2024-01-02 20:37:49 -05:00
dependabot[bot] 389ccab8e1
Bump org.slf4j:slf4j-api from 2.0.9 to 2.0.10 (#770) 2023-12-29 06:34:38 -05:00
Brandon Liu a233e683bd
fix center coordinates of pmtiles writer (#769) 2023-12-28 06:43:00 -05:00
dependabot[bot] 3dea746ff0
Bump log4j.version from 2.22.0 to 2.22.1 (#768) 2023-12-27 07:07:43 -05:00
dependabot[bot] 8affe1e3e8
Bump org.apache.maven.plugins:maven-compiler-plugin (#767) 2023-12-26 05:30:19 -05:00
dependabot[bot] 8fcc6139e6
Bump jackson.version from 2.16.0 to 2.16.1 (#766) 2023-12-25 15:17:44 -05:00
Michael Barry 3b48682f69
Upgrade to OMT 3.15 (#764) 2023-12-22 05:45:35 -05:00
dependabot[bot] e2aacfe75e
Bump com.google.guava:guava from 32.1.3-jre to 33.0.0-jre (#762)
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.1.3-jre to 33.0.0-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-21 06:18:23 -05:00
dependabot[bot] d59251deff
Bump org.apache.maven.plugins:maven-compiler-plugin (#758)
Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.11.0 to 3.12.0.
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.11.0...maven-compiler-plugin-3.12.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-compiler-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-20 06:09:11 -05:00
dependabot[bot] 401adf45ef
Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.2.2 to 3.2.3 (#756) 2023-12-18 07:45:35 -05:00
Michael Barry a78e6284a8
Use push-down bbox filter for shapefiles (#757) 2023-12-18 07:06:00 -05:00
dependabot[bot] 289bbc6b1f
Bump actions/upload-artifact from 3 to 4 (#753)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-15 05:14:00 -05:00
dependabot[bot] d3d5ed8f0f
Bump org.roaringbitmap:RoaringBitmap from 1.0.0 to 1.0.1 (#754)
Bumps [org.roaringbitmap:RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/RoaringBitmap/RoaringBitmap/releases)
- [Commits](https://github.com/RoaringBitmap/RoaringBitmap/compare/1.0.0...1.0.1)

---
updated-dependencies:
- dependency-name: org.roaringbitmap:RoaringBitmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-15 05:13:50 -05:00
dependabot[bot] 1963bf1451
Bump org.apache.maven.plugins:maven-failsafe-plugin (#755)
Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.2...surefire-3.2.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-15 05:13:30 -05:00
Michael Barry cbb092a1f7
Compute layer attr stats from actual vector tile features (#752) 2023-12-14 19:26:27 -05:00
dependabot[bot] 3d10501558
Bump org.apache.maven.plugins:maven-surefire-plugin from 3.2.2 to 3.2.3 (#750)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.2...surefire-3.2.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-14 07:11:51 -05:00
dependabot[bot] 1b6b3d6380
Bump org.apache.maven.plugins:maven-surefire-plugin (#751)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.2...surefire-3.2.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-14 07:11:39 -05:00
dependabot[bot] d98d5d6ae1
Bump dawidd6/action-download-artifact from 2 to 3 (#747)
Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 2 to 3.
- [Release notes](https://github.com/dawidd6/action-download-artifact/releases)
- [Commits](https://github.com/dawidd6/action-download-artifact/compare/v2...v3)

---
updated-dependencies:
- dependency-name: dawidd6/action-download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-13 05:40:47 -05:00
dependabot[bot] c53fdea788
Bump com.ibm.icu:icu4j from 74.1 to 74.2 (#748)
Bumps [com.ibm.icu:icu4j](https://github.com/unicode-org/icu) from 74.1 to 74.2.
- [Release notes](https://github.com/unicode-org/icu/releases)
- [Commits](https://github.com/unicode-org/icu/commits)

---
updated-dependencies:
- dependency-name: com.ibm.icu:icu4j
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-13 05:38:08 -05:00
dependabot[bot] 1c45474bbb
Bump org.mockito:mockito-core from 5.7.0 to 5.8.0 (#745) 2023-12-08 07:15:44 -05:00
Michael Barry fc53c36439
use maven build time for docker image (#744) 2023-12-07 07:51:32 -05:00
dependabot[bot] 1ac5b69b92
Bump mil.nga.geopackage:geopackage from 6.6.3 to 6.6.4 (#743) 2023-12-07 05:42:01 -05:00
dependabot[bot] 1326edf560
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.2 to 3.6.3 (#741) 2023-12-06 04:34:31 -05:00
dependabot[bot] f68351c377
Bump com.diffplug.spotless:spotless-maven-plugin from 2.41.0 to 2.41.1 (#740) 2023-12-04 19:23:53 -05:00
Michael Barry 40bf33e887
Access OSM metadata in yaml profiles (#739) 2023-12-02 15:34:35 -05:00
dependabot[bot] 4efc2bbd41
Bump com.diffplug.spotless:spotless-maven-plugin from 2.40.0 to 2.41.0 (#737)
Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.40.0 to 2.41.0.
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.40.0...lib/2.41.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-01 05:59:50 -05:00
dependabot[bot] ed4c320e49
Bump org.xerial:sqlite-jdbc from 3.44.0.0 to 3.44.1.0 (#735) 2023-11-30 04:54:29 -05:00
dependabot[bot] 20c4a6f890
Bump actions/setup-java from 3 to 4 (#734) 2023-11-30 04:54:05 -05:00
dependabot[bot] dc04a62d81
Bump geotools.version from 30.0 to 30.1 (#733) 2023-11-29 19:05:44 -05:00
dependabot[bot] 05011ee15d
Bump org.projectnessie.cel:cel-bom from 0.3.21 to 0.4.3 (#732) 2023-11-27 07:54:53 -05:00
dependabot[bot] 34f29eeda7
Bump com.google.protobuf:protobuf-java from 3.25.0 to 3.25.1 (#730) 2023-11-21 20:40:03 -05:00
Mike Barry 699277b17f clearStage at start 2023-11-20 08:53:01 -05:00
dependabot[bot] 6209f4d36e
Bump log4j.version from 2.21.1 to 2.22.0 (#727)
Bumps `log4j.version` from 2.21.1 to 2.22.0.

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.21.1 to 2.22.0

Updates `org.apache.logging.log4j:log4j-api` from 2.21.1 to 2.22.0

Updates `org.apache.logging.log4j:log4j-core` from 2.21.1 to 2.22.0

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-20 08:15:26 -05:00
Michael Barry 1df1bf04e4
Add `setAttrWithMinSize` to feature API (#725) 2023-11-20 06:15:52 -05:00
dependabot[bot] c22d379734
Bump jackson.version from 2.15.3 to 2.16.0 (#726) 2023-11-17 04:47:38 -05:00
dependabot[bot] c9f61df4cb
Bump org.xerial:sqlite-jdbc from 3.43.2.2 to 3.44.0.0 (#724) 2023-11-15 19:31:27 -05:00
dependabot[bot] fdee80d395
Bump org.apache.maven.plugins:maven-surefire-plugin from 3.2.1 to 3.2.2 (#722)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.1...surefire-3.2.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-14 07:45:28 -05:00
dependabot[bot] 9995df9a3a
Bump actions/github-script from 6 to 7 (#721)
Bumps [actions/github-script](https://github.com/actions/github-script) from 6 to 7.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-14 07:45:08 -05:00
Michael Barry ae7261246f
Add API for maximum inscribed circle/pole of inaccessibility centerpoint of a polygon (#723) 2023-11-14 07:44:47 -05:00
dependabot[bot] a2083eb2f0
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.0 to 3.6.2 (#719)
Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.6.0 to 3.6.2.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.6.0...maven-javadoc-plugin-3.6.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-13 07:17:18 -05:00
Michael Barry ec6430dc49
Min polygon area centroid (#720) 2023-11-13 07:16:55 -05:00
dependabot[bot] c4036f317a
Bump org.jacoco:jacoco-maven-plugin from 0.8.10 to 0.8.11 (#717) 2023-11-10 06:31:45 -05:00
dependabot[bot] 58c26f5e4e
Bump org.apache.maven.plugins:maven-surefire-plugin (#718) 2023-11-10 06:31:30 -05:00
dependabot[bot] d9dd9d5daf
Bump org.apache.maven.plugins:maven-failsafe-plugin (#712) 2023-11-09 18:57:36 -05:00
dependabot[bot] 67757075cc
Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.2.1 to 3.2.2 (#711) 2023-11-09 18:57:25 -05:00
Michael Barry 517851435d
Fix buffer union unbuffer exceptions (#713) 2023-11-07 07:28:00 -05:00
dependabot[bot] 65935461e3
Bump org.junit.jupiter:junit-jupiter-api (#709)
Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.10.0 to 5.10.1.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-06 05:44:51 -05:00
dependabot[bot] c19419808d
Bump junit.version from 5.10.0 to 5.10.1 (#710)
Bumps `junit.version` from 5.10.0 to 5.10.1.

Updates `org.junit.jupiter:junit-jupiter-api` from 5.10.0 to 5.10.1
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1)

Updates `org.junit.jupiter:junit-jupiter-params` from 5.10.0 to 5.10.1
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1)

Updates `org.junit.jupiter:junit-jupiter-engine` from 5.10.0 to 5.10.1
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter-params
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-06 05:44:39 -05:00
dependabot[bot] 2eb4dd2955
Bump org.mockito:mockito-core from 5.6.0 to 5.7.0 (#707) 2023-11-03 07:27:46 -04:00
dependabot[bot] 48050ed495
Bump com.google.protobuf:protobuf-java from 3.24.4 to 3.25.0 (#706) 2023-11-02 04:45:35 -04:00
Michael Barry 44f22b27c5
Rewrite downloader using virtual threads (#702) 2023-11-01 19:30:28 -04:00
dependabot[bot] bf7294970e
Bump com.ibm.icu:icu4j from 73.2 to 74.1 (#705)
Bumps [com.ibm.icu:icu4j](https://github.com/unicode-org/icu) from 73.2 to 74.1.
- [Release notes](https://github.com/unicode-org/icu/releases)
- [Commits](https://github.com/unicode-org/icu/commits)

---
updated-dependencies:
- dependency-name: com.ibm.icu:icu4j
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-01 05:19:57 -04:00
dependabot[bot] 8b5af48e43
Bump org.apache.maven.plugins:maven-surefire-plugin from 3.1.2 to 3.2.1 (#704) 2023-10-31 05:01:51 -04:00
Michael Barry a94ac0ddd8
Add detailed jts debugging info (#703) 2023-10-30 22:14:46 -04:00
dependabot[bot] 834d4587f1
Bump org.xerial:sqlite-jdbc from 3.43.2.1 to 3.43.2.2 (#701)
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.43.2.1 to 3.43.2.2.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.43.2.1...3.43.2.2)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-30 06:27:41 -04:00
Michael Barry 9f960022b8
Logging fix (#699) 2023-10-27 20:40:45 -04:00
Michael Barry 1be2fca45f
Use some new Java 21 features (#695) 2023-10-27 20:29:26 -04:00
dependabot[bot] 01114cb12c
Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.1.2 to 3.2.1 (#698)
Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.1.2 to 3.2.1.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.2...surefire-3.2.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-27 08:01:48 -04:00
Michael Barry 2bb05a0797
fix log4j log format (#697) 2023-10-26 07:30:56 -04:00
Michael Barry a0cd4fa864
Upgrade eclipse formatter (#696) 2023-10-26 07:07:34 -04:00
Michael Barry b108f88453
Upgrade to Java 21 (#693) 2023-10-26 06:30:45 -04:00
dependabot[bot] b23d7ea7f5
Bump log4j.version from 2.20.0 to 2.21.1 (#694)
Bumps `log4j.version` from 2.20.0 to 2.21.1.

Updates `org.apache.logging.log4j:log4j-slf4j2-impl` from 2.20.0 to 2.21.1

Updates `org.apache.logging.log4j:log4j-api` from 2.20.0 to 2.21.1

Updates `org.apache.logging.log4j:log4j-core` from 2.20.0 to 2.21.1

---
updated-dependencies:
- dependency-name: org.apache.logging.log4j:log4j-slf4j2-impl
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.apache.logging.log4j:log4j-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-26 06:27:11 -04:00
dependabot[bot] b800cb6836
Bump org.apache.maven.plugins:maven-surefire-plugin (#691)
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.1.2 to 3.2.1.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.2...surefire-3.2.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-25 20:49:14 -04:00
dependabot[bot] a50b06a38b
Bump org.xerial:sqlite-jdbc from 3.43.0.0 to 3.43.2.1 (#692)
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.43.0.0 to 3.43.2.1.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.43.0.0...3.43.2.1)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-25 20:49:03 -04:00
dependabot[bot] d53f7fc485
Bump jackson.version from 2.15.2 to 2.15.3 (#687)
Bumps `jackson.version` from 2.15.2 to 2.15.3.

Updates `com.fasterxml.jackson.core:jackson-core` from 2.15.2 to 2.15.3
- [Release notes](https://github.com/FasterXML/jackson-core/releases)
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.15.2...jackson-core-2.15.3)

Updates `com.fasterxml.jackson.core:jackson-databind` from 2.15.2 to 2.15.3
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `com.fasterxml.jackson.datatype:jackson-datatype-jdk8` from 2.15.2 to 2.15.3

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-xml` from 2.15.2 to 2.15.3
- [Commits](https://github.com/FasterXML/jackson-dataformat-xml/compare/jackson-dataformat-xml-2.15.2...jackson-dataformat-xml-2.15.3)

Updates `com.fasterxml.jackson.dataformat:jackson-dataformat-csv` from 2.15.2 to 2.15.3
- [Commits](https://github.com/FasterXML/jackson-dataformats-text/compare/jackson-dataformats-text-2.15.2...jackson-dataformats-text-2.15.3)

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-databind
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-xml
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-csv
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-24 06:20:06 -04:00
dependabot[bot] 46f67a7c06
Bump actions/setup-node from 3 to 4 (#688)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 4.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-24 06:19:52 -04:00
dependabot[bot] ebd90722a8
Bump org.apache.maven.plugins:maven-failsafe-plugin (#689)
Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.1.2 to 3.2.1.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.2...surefire-3.2.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-24 06:19:42 -04:00
dependabot[bot] 015f418405
Bump geotools.version from 29.2 to 30.0 (#685)
* Bump geotools.version from 29.2 to 30.0

Bumps `geotools.version` from 29.2 to 30.0.

Updates `org.geotools:gt-shapefile` from 29.2 to 30.0

Updates `org.geotools:gt-epsg-hsql` from 29.2 to 30.0

---
updated-dependencies:
- dependency-name: org.geotools:gt-shapefile
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: org.geotools:gt-epsg-hsql
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix geotools breaking changes

* fix tests

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mike Barry <msb5014@gmail.com>
2023-10-20 06:59:28 -04:00
dependabot[bot] f858a462d1
Bump com.google.guava:guava from 32.1.2-jre to 32.1.3-jre (#684) 2023-10-13 05:54:14 -07:00
dependabot[bot] b5df50d995
Bump org.mockito:mockito-core from 5.5.0 to 5.6.0 (#683) 2023-10-11 05:03:31 -07:00
dependabot[bot] aa6a3a94eb
Bump com.google.protobuf:protobuf-java from 3.24.3 to 3.24.4 (#682) 2023-10-05 20:48:13 -04:00
dependabot[bot] 076ac3e2f1
Bump mil.nga.geopackage:geopackage from 6.6.2 to 6.6.3 (#681)
Bumps [mil.nga.geopackage:geopackage](https://github.com/ngageoint/geopackage-java) from 6.6.2 to 6.6.3.
- [Release notes](https://github.com/ngageoint/geopackage-java/releases)
- [Changelog](https://github.com/ngageoint/geopackage-java/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ngageoint/geopackage-java/compare/6.6.2...6.6.3)

---
updated-dependencies:
- dependency-name: mil.nga.geopackage:geopackage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-04 05:18:04 -04:00
dependabot[bot] 0f488c0712
Bump styfle/cancel-workflow-action from 0.11.0 to 0.12.0 (#680)
Bumps [styfle/cancel-workflow-action](https://github.com/styfle/cancel-workflow-action) from 0.11.0 to 0.12.0.
- [Release notes](https://github.com/styfle/cancel-workflow-action/releases)
- [Commits](https://github.com/styfle/cancel-workflow-action/compare/0.11.0...0.12.0)

---
updated-dependencies:
- dependency-name: styfle/cancel-workflow-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-04 05:17:50 -04:00
dependabot[bot] 19c883c651
Bump com.diffplug.spotless:spotless-maven-plugin from 2.39.0 to 2.40.0 (#678) 2023-10-03 04:54:03 -04:00
Michael Barry 79ba9d925f
bump version to version 0.7.0 (#677) 2023-10-01 12:32:41 -04:00
Michael Barry 10fede8634
Upgrade openmaptiles snapshot (#676) 2023-10-01 07:18:11 -04:00
dependabot[bot] 2b18ab1f70
Bump org.msgpack:msgpack-core from 0.9.5 to 0.9.6 (#675)
Bumps [org.msgpack:msgpack-core](https://github.com/msgpack/msgpack-java) from 0.9.5 to 0.9.6.
- [Release notes](https://github.com/msgpack/msgpack-java/releases)
- [Changelog](https://github.com/msgpack/msgpack-java/blob/main/RELEASE_NOTES.md)
- [Commits](https://github.com/msgpack/msgpack-java/compare/v0.9.5...v0.9.6)

---
updated-dependencies:
- dependency-name: org.msgpack:msgpack-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-29 05:30:48 -04:00
dependabot[bot] a1ef17db5b
Bump org.roaringbitmap:RoaringBitmap from 0.9.49 to 1.0.0 (#674) 2023-09-28 06:56:41 -04:00
Michael Barry e7e18d5f17
Sort merged vector tile features by hilbert order (#673) 2023-09-26 20:56:04 -04:00
Michael Barry 1b53493ac7
Upgrade omt to pull in tile size optimizations (#672) 2023-09-25 06:04:53 -04:00
Michael Barry d43a9e9159
fix macro in readme (#671) 2023-09-25 06:04:25 -04:00
dependabot[bot] 6f84ef1096
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.5.0 to 3.6.0 (#670)
Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.5.0...maven-javadoc-plugin-3.6.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-25 05:37:18 -04:00
Michael Barry 2f86ea12ae
Utilities to reduce tile size (#669) 2023-09-24 08:10:47 -04:00
dependabot[bot] f556af241b
Bump com.google.cloud.tools:jib-maven-plugin from 3.3.2 to 3.4.0 (#667)
Bumps [com.google.cloud.tools:jib-maven-plugin](https://github.com/GoogleContainerTools/jib) from 3.3.2 to 3.4.0.
- [Release notes](https://github.com/GoogleContainerTools/jib/releases)
- [Commits](https://github.com/GoogleContainerTools/jib/commits)

---
updated-dependencies:
- dependency-name: com.google.cloud.tools:jib-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 06:47:57 -04:00
Michael Barry 0a241e17e1
Fix downloading tile weights in CI (#668) 2023-09-22 06:30:17 -04:00
Michael Barry 1f23b55274
Tile stats (#656) 2023-09-21 21:44:09 -04:00
dependabot[bot] 27dc73a7fe
Bump mil.nga.geopackage:geopackage from 6.6.1 to 6.6.2 (#665) 2023-09-21 08:07:12 -04:00
dependabot[bot] 2ead531cd1
Bump org.sonarsource.scanner.maven:sonar-maven-plugin (#664)
Bumps [org.sonarsource.scanner.maven:sonar-maven-plugin](https://github.com/SonarSource/sonar-scanner-maven) from 3.9.1.2184 to 3.10.0.2594.
- [Release notes](https://github.com/SonarSource/sonar-scanner-maven/releases)
- [Commits](https://github.com/SonarSource/sonar-scanner-maven/compare/3.9.1.2184...3.10.0.2594)

---
updated-dependencies:
- dependency-name: org.sonarsource.scanner.maven:sonar-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-20 21:43:00 -04:00
dependabot[bot] 4e5eac4a50
Bump org.roaringbitmap:RoaringBitmap from 0.9.48 to 0.9.49 (#662) 2023-09-17 11:09:30 -04:00
dependabot[bot] e473c429c4
Bump com.github.jnr:jnr-ffi from 2.2.14 to 2.2.15 (#661)
Bumps [com.github.jnr:jnr-ffi](https://github.com/jnr/jnr-ffi) from 2.2.14 to 2.2.15.
- [Commits](https://github.com/jnr/jnr-ffi/compare/jnr-ffi-2.2.14...jnr-ffi-2.2.15)

---
updated-dependencies:
- dependency-name: com.github.jnr:jnr-ffi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-13 05:12:19 -04:00
dependabot[bot] e37ea609bc
Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.4.0 to 3.4.1 (#660) 2023-09-12 19:14:53 -04:00
dependabot[bot] 8ca76428e9
Bump com.google.protobuf:protobuf-java from 3.24.2 to 3.24.3 (#659) 2023-09-08 05:12:37 -04:00
dependabot[bot] 4dbf6cc3b2
Bump org.slf4j:slf4j-api from 2.0.7 to 2.0.9 (#654)
Bumps org.slf4j:slf4j-api from 2.0.7 to 2.0.9.

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-07 20:49:39 -04:00
dependabot[bot] a38c4fb882
Bump actions/checkout from 3 to 4 (#655)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-07 05:20:41 -04:00
dependabot[bot] 9647de2ef9
Bump org.roaringbitmap:RoaringBitmap from 0.9.47 to 0.9.48 (#653)
Bumps [org.roaringbitmap:RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap) from 0.9.47 to 0.9.48.
- [Release notes](https://github.com/RoaringBitmap/RoaringBitmap/releases)
- [Commits](https://github.com/RoaringBitmap/RoaringBitmap/compare/0.9.47...0.9.48)

---
updated-dependencies:
- dependency-name: org.roaringbitmap:RoaringBitmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-04 05:27:13 -04:00
dependabot[bot] 3f302e3c7e
Bump org.xerial:sqlite-jdbc from 3.42.0.1 to 3.43.0.0 (#652) 2023-08-31 05:39:23 -04:00
dependabot[bot] 8e42bad77b
Bump com.diffplug.spotless:spotless-maven-plugin from 2.38.0 to 2.39.0 (#651) 2023-08-30 20:02:47 -04:00
dependabot[bot] 1ee801dfa7
Bump org.snakeyaml:snakeyaml-engine from 2.6 to 2.7 (#650)
Bumps [org.snakeyaml:snakeyaml-engine](https://bitbucket.org/snakeyaml/snakeyaml-engine) from 2.6 to 2.7.
- [Commits](https://bitbucket.org/snakeyaml/snakeyaml-engine/branches/compare/snakeyaml-engine-2.7..snakeyaml-engine-2.6)

---
updated-dependencies:
- dependency-name: org.snakeyaml:snakeyaml-engine
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-29 05:25:43 -04:00
dependabot[bot] ac820e8dd9
Bump com.google.protobuf:protobuf-java from 3.24.1 to 3.24.2 (#649)
Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.24.1 to 3.24.2.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.24.1...v3.24.2)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-28 06:29:45 -04:00
dependabot[bot] 9c6aab863f
Bump org.xerial:sqlite-jdbc from 3.42.0.0 to 3.42.0.1 (#648)
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.42.0.0 to 3.42.0.1.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.42.0.0...3.42.0.1)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 05:44:05 -04:00
Björn Bilger db796e1720
Add support for simple file output streams: CSV, JSON, protobuf (#639) 2023-08-23 20:24:27 -04:00
dependabot[bot] a8e432dfd1
Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.3.0 to 3.4.0 (#647)
Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.3.0...enforcer-3.4.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-23 05:28:27 -04:00
dependabot[bot] 0483183b0a
Bump org.mockito:mockito-core from 5.4.0 to 5.5.0 (#646) 2023-08-22 19:46:53 -04:00
dependabot[bot] 7e78292450
Bump com.google.protobuf:protobuf-java from 3.24.0 to 3.24.1 (#645) 2023-08-21 06:43:54 -04:00
dependabot[bot] ca2334ca02
Bump com.google.protobuf:protobuf-java from 3.23.4 to 3.24.0 (#643)
Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.23.4 to 3.24.0.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.23.4...v3.24.0)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-09 05:28:02 -04:00
John Levermore ed707e6979
Permit post-process merging in custommap schemas (#626) 2023-08-07 05:53:36 -04:00
Björn Bilger a1c33dc5d5
remove the old TileEncodingResult (#642)
* remove the old TileEncodingResult

...only to be merged once planetiler-openmaptile has been updated

* update pt-omt

---------

Co-authored-by: Mike Barry <msb5014@gmail.com>
2023-08-03 21:52:42 -04:00
dependabot[bot] 5ef73ac755
Bump com.google.guava:guava from 32.1.1-jre to 32.1.2-jre (#641)
Bumps [com.google.guava:guava](https://github.com/google/guava) from 32.1.1-jre to 32.1.2-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-03 21:35:47 -04:00
dependabot[bot] d1b8e9ef8d
Bump org.msgpack:msgpack-core from 0.9.4 to 0.9.5 (#640) 2023-08-01 19:44:31 -04:00
dependabot[bot] 04d350d2ca
Bump org.roaringbitmap:RoaringBitmap from 0.9.46 to 0.9.47 (#637)
Bumps [org.roaringbitmap:RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap) from 0.9.46 to 0.9.47.
- [Release notes](https://github.com/RoaringBitmap/RoaringBitmap/releases)
- [Commits](https://github.com/RoaringBitmap/RoaringBitmap/compare/0.9.46...0.9.47)

---
updated-dependencies:
- dependency-name: org.roaringbitmap:RoaringBitmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-28 07:54:39 -04:00
dependabot[bot] 5e7159da6d
Bump org.roaringbitmap:RoaringBitmap from 0.9.45 to 0.9.46 (#634) 2023-07-25 05:18:23 -04:00
dependabot[bot] a6dd61e87e
Bump junit.version from 5.9.3 to 5.10.0 (#633) 2023-07-24 05:30:36 -04:00
dependabot[bot] 7527a1fb85
Bump org.junit.jupiter:junit-jupiter-api (#632) 2023-07-24 05:29:59 -04:00
dependabot[bot] 0c6a90af56
Bump geotools.version from 29.1 to 29.2 (#631)
Bumps `geotools.version` from 29.1 to 29.2.

Updates `gt-shapefile` from 29.1 to 29.2

Updates `gt-epsg-hsql` from 29.1 to 29.2

---
updated-dependencies:
- dependency-name: org.geotools:gt-shapefile
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.geotools:gt-epsg-hsql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-20 05:10:12 -04:00
dependabot[bot] e3eb621510
Bump cel-bom from 0.3.20 to 0.3.21 (#630) 2023-07-19 05:33:56 -04:00
Oliver Wipfli 68c2d7f417
Expose `min_size` in configurable schema (#421)
Co-authored-by: Mike Barry <msb5014@gmail.com>
2023-07-18 06:09:46 -04:00
dependabot[bot] 4c1503e9f2
Bump spotless-maven-plugin from 2.37.0 to 2.38.0 (#629)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.37.0 to 2.38.0.
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.37.0...lib/2.38.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-18 05:19:14 -04:00
dependabot[bot] 1a14391d42
Bump cel-bom from 0.3.19 to 0.3.20 (#628)
Bumps [cel-bom](https://github.com/projectnessie/cel-java) from 0.3.19 to 0.3.20.
- [Release notes](https://github.com/projectnessie/cel-java/releases)
- [Commits](https://github.com/projectnessie/cel-java/compare/v0.3.19...v0.3.20)

---
updated-dependencies:
- dependency-name: org.projectnessie.cel:cel-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-17 05:08:17 -04:00
Mikael Gueck 04239ff564
Escape regex string (#627)
Escape the character once for the regex, and a second time for Java.
2023-07-16 07:18:19 -04:00
John Levermore a4ea44f182
Improve docs for generating custom vector tiles with a schema yaml (#622) 2023-07-13 07:54:24 -04:00
dependabot[bot] fe922cac53
Bump msgpack-core from 0.9.3 to 0.9.4 (#624) 2023-07-13 07:53:48 -04:00
dependabot[bot] c876ca9edd
Bump cel-bom from 0.3.18 to 0.3.19 (#623) 2023-07-12 05:42:26 -04:00
dependabot[bot] db6d175507
Bump protobuf-java from 3.23.2 to 3.23.4 (#620) 2023-07-07 05:46:57 -04:00
dependabot[bot] d42e20f938
Bump cel-bom from 0.3.17 to 0.3.18 (#619) 2023-07-06 05:08:09 -04:00
dependabot[bot] 3d2f165332
Bump guava from 32.1.0-jre to 32.1.1-jre (#618) 2023-07-03 05:06:00 -04:00
dependabot[bot] a398af094c
Bump guava from 32.0.1-jre to 32.1.0-jre (#617) 2023-06-30 05:58:23 -04:00
dependabot[bot] c8f98afadf
Bump protobuf-java from 3.23.1 to 3.23.2 (#615)
Bumps [protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.23.1 to 3.23.2.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.23.1...v3.23.2)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-29 06:18:40 -04:00
dependabot[bot] c7a31d6136
Bump RoaringBitmap from 0.9.44 to 0.9.45 (#614) 2023-06-28 09:10:46 -04:00
dependabot[bot] 814221e047
Bump icu4j from 73.1 to 73.2 (#613) 2023-06-27 05:27:30 -04:00
dependabot[bot] 957ad61fd9
Bump mockito-core from 5.3.1 to 5.4.0 (#612) 2023-06-26 07:51:33 -04:00
dependabot[bot] 38277d894b
Bump buildnumber-maven-plugin from 3.1.0 to 3.2.0 (#611)
Bumps [buildnumber-maven-plugin](https://github.com/mojohaus/buildnumber-maven-plugin) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/mojohaus/buildnumber-maven-plugin/releases)
- [Commits](https://github.com/mojohaus/buildnumber-maven-plugin/compare/3.1.0...3.2.0)

---
updated-dependencies:
- dependency-name: org.codehaus.mojo:buildnumber-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-23 06:06:59 -04:00
dependabot[bot] 1316e44105
DON'T Bump protobuf-java from 3.23.1 to 3.23.3 (#610)
* Skip bumping protobuf-java from 3.23.1 to 3.23.3

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mike Barry <msb5014@gmail.com>
2023-06-23 05:53:46 -04:00
dependabot[bot] 2d70c0754a
Bump guava from 32.0.0-jre to 32.0.1-jre (#609)
Bumps [guava](https://github.com/google/guava) from 32.0.0-jre to 32.0.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-22 05:11:57 -04:00
Michael Barry a48a9c8391
Page through S3 index (#608) 2023-06-21 20:43:37 -04:00
dependabot[bot] 6203387b59
Bump maven-failsafe-plugin from 3.1.0 to 3.1.2 (#607) 2023-06-21 19:14:15 -04:00
dependabot[bot] 9e70b30977
Bump maven-source-plugin from 3.2.1 to 3.3.0 (#606) 2023-06-19 07:32:16 -04:00
dependabot[bot] 7b792ce8b3
Bump jnr-ffi from 2.2.12 to 2.2.14 (#605)
Bumps [jnr-ffi](https://github.com/jnr/jnr-ffi) from 2.2.12 to 2.2.14.
- [Commits](https://github.com/jnr/jnr-ffi/compare/jnr-ffi-2.2.12...jnr-ffi-2.2.14)

---
updated-dependencies:
- dependency-name: com.github.jnr:jnr-ffi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-15 05:41:44 -04:00
dependabot[bot] ded3098d78
Bump spotless-maven-plugin from 2.36.0 to 2.37.0 (#604) 2023-06-13 05:15:51 -04:00
dependabot[bot] 90188fb971
Bump maven-surefire-plugin in /.github/planetiler-examples-dependabot (#603)
Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.0...surefire-3.1.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-11 11:51:35 -07:00
dependabot[bot] 20648a993c
Bump maven-surefire-plugin from 3.1.0 to 3.1.2 (#602)
Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.0...surefire-3.1.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-11 11:51:20 -07:00
Erik Price cced1920d4
Add support for Overture maps downloads. (#599) 2023-06-08 09:01:01 -07:00
dependabot[bot] 1afb8ed293
Bump maven-failsafe-plugin in /.github/planetiler-examples-dependabot (#600)
Bumps [maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.0...surefire-3.1.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-08 04:54:03 -07:00
dependabot[bot] 9d7da567c8
Bump jackson.version from 2.15.1 to 2.15.2 (#598)
Bumps `jackson.version` from 2.15.1 to 2.15.2.

Updates `jackson-core` from 2.15.1 to 2.15.2
- [Release notes](https://github.com/FasterXML/jackson-core/releases)
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.15.1...jackson-core-2.15.2)

Updates `jackson-databind` from 2.15.1 to 2.15.2
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `jackson-datatype-jdk8` from 2.15.1 to 2.15.2

Updates `jackson-dataformat-xml` from 2.15.1 to 2.15.2
- [Commits](https://github.com/FasterXML/jackson-dataformat-xml/compare/jackson-dataformat-xml-2.15.1...jackson-dataformat-xml-2.15.2)

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-databind
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-xml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-08 04:42:21 -07:00
dependabot[bot] f8c0d46c2d
Bump flatten-maven-plugin from 1.4.1 to 1.5.0 (#596) 2023-06-03 08:30:45 -04:00
dependabot[bot] 390bd3389f
Bump buildnumber-maven-plugin from 3.0.0 to 3.1.0 (#595) 2023-05-31 21:20:43 -04:00
dependabot[bot] d14ee9a33f
Bump guava from 31.1-jre to 32.0.0-jre (#594) 2023-05-30 21:27:17 -04:00
dependabot[bot] 7c36d1dcfa
Bump cel-bom from 0.3.16 to 0.3.17 (#593) 2023-05-29 12:47:48 -04:00
dependabot[bot] 59df133444
Bump sqlite-jdbc from 3.41.2.2 to 3.42.0.0 (#592) 2023-05-26 06:13:49 -04:00
dependabot[bot] 723969a4e7
Bump geotools.version from 29.0 to 29.1 (#591) 2023-05-25 20:02:22 -04:00
dependabot[bot] 049e566333
Bump sqlite-jdbc from 3.41.2.1 to 3.41.2.2 in /planetiler-core (#590) 2023-05-23 21:40:12 -04:00
dependabot[bot] 90f8a9a132
Bump protobuf-java from 3.23.0 to 3.23.1 (#589) 2023-05-23 21:03:39 -04:00
dependabot[bot] 12a4aff33a
Bump jib-maven-plugin from 3.3.1 to 3.3.2 (#588) 2023-05-20 16:48:09 -04:00
dependabot[bot] 3742eefac8
Bump jackson.version from 2.15.0 to 2.15.1 (#586) 2023-05-18 19:44:08 -04:00
dependabot[bot] 951cc3ff2b
Bump RoaringBitmap from 0.9.40 to 0.9.44 (#585) 2023-05-17 05:40:14 -04:00
dependabot[bot] 38522fec03
Bump maven-assembly-plugin in /.github/planetiler-examples-dependabot (#584) 2023-05-15 22:53:19 -04:00
dependabot[bot] ef6bfd558a
Bump maven-assembly-plugin from 3.5.0 to 3.6.0 (#583) 2023-05-15 22:53:08 -04:00
dependabot[bot] 3d0bf09afc
Bump protobuf-java from 3.22.4 to 3.23.0 (#582) 2023-05-13 16:31:01 -04:00
dependabot[bot] 2dfd8d8f6d
Bump maven-failsafe-plugin from 3.0.0 to 3.1.0 (#581)
Bumps [maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0...surefire-3.1.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-11 05:14:48 -04:00
dependabot[bot] e0f27c49c1
Bump maven-surefire-plugin from 3.0.0 to 3.1.0 (#580) 2023-05-11 04:55:19 -04:00
dependabot[bot] f9a63a35f5
Bump maven-gpg-plugin from 3.0.1 to 3.1.0 (#577) 2023-05-09 05:41:29 -04:00
dependabot[bot] a31a0e2cb5
Bump maven-surefire-plugin in /.github/planetiler-examples-dependabot (#578) 2023-05-09 05:41:07 -04:00
dependabot[bot] 8c1fc4cc7e
Bump cel-bom from 0.3.13 to 0.3.16 (#575) 2023-05-08 05:55:43 -04:00
dependabot[bot] 78bb0eb4dd
Bump maven-failsafe-plugin in /.github/planetiler-examples-dependabot (#576) 2023-05-08 05:54:04 -04:00
dependabot[bot] 72031645a0
Bump protobuf-java from 3.22.3 to 3.22.4 (#574) 2023-05-05 05:52:55 -04:00
dependabot[bot] a62d467c8f
Bump mockito-core from 5.3.0 to 5.3.1 (#572) 2023-05-01 05:18:17 -04:00
dependabot[bot] a59f291d94
Bump RoaringBitmap from 0.9.39 to 0.9.40 (#571)
Bumps [RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap) from 0.9.39 to 0.9.40.
- [Release notes](https://github.com/RoaringBitmap/RoaringBitmap/releases)
- [Commits](https://github.com/RoaringBitmap/RoaringBitmap/compare/0.9.39...0.9.40)

---
updated-dependencies:
- dependency-name: org.roaringbitmap:RoaringBitmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-28 07:00:59 -04:00
Michael Barry bf86516fab
Fallback to lenient shapefile parsing (#570) 2023-04-27 08:30:55 -04:00
Michael Barry 8d0e06c667
Fix invalid polygons before snapping to tile coordinates (#566) 2023-04-27 08:19:31 -04:00
dependabot[bot] e0285d2e1c
Bump junit.version from 5.9.2 to 5.9.3 (#569)
Bumps `junit.version` from 5.9.2 to 5.9.3.

Updates `junit-jupiter-api` from 5.9.2 to 5.9.3
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.9.3)

Updates `junit-jupiter-params` from 5.9.2 to 5.9.3
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.9.3)

Updates `junit-jupiter-engine` from 5.9.2 to 5.9.3
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.9.3)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter-params
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-27 08:17:22 -04:00
dependabot[bot] eba244bdb0
Bump jacoco-maven-plugin from 0.8.9 to 0.8.10 (#567)
Bumps [jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.9 to 0.8.10.
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.9...v0.8.10)

---
updated-dependencies:
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-26 06:11:19 -04:00
dependabot[bot] 6e6bee76a6
Bump junit-jupiter-api in /.github/planetiler-examples-dependabot (#568)
Bumps [junit-jupiter-api](https://github.com/junit-team/junit5) from 5.9.2 to 5.9.3.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.9.3)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-26 06:10:56 -04:00
Erik Price 2450c9d9f7
Exclude relations with invalid multipolygon geometry (#564) 2023-04-25 19:16:01 -04:00
dependabot[bot] 9b76c849e0
Bump jackson.version from 2.14.2 to 2.15.0 (#563)
* Bump jackson.version from 2.14.2 to 2.15.0

Bumps `jackson.version` from 2.14.2 to 2.15.0.

Updates `jackson-core` from 2.14.2 to 2.15.0
- [Release notes](https://github.com/FasterXML/jackson-core/releases)
- [Changelog](https://github.com/FasterXML/jackson-core/blob/jackson-core-2.15.0/release.properties)
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.14.2...jackson-core-2.15.0)

Updates `jackson-databind` from 2.14.2 to 2.15.0
- [Release notes](https://github.com/FasterXML/jackson/releases)
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `jackson-datatype-jdk8` from 2.14.2 to 2.15.0

Updates `jackson-dataformat-xml` from 2.14.2 to 2.15.0
- [Release notes](https://github.com/FasterXML/jackson-dataformat-xml/releases)
- [Commits](https://github.com/FasterXML/jackson-dataformat-xml/compare/jackson-dataformat-xml-2.14.2...jackson-dataformat-xml-2.15.0)

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.fasterxml.jackson.core:jackson-databind
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-xml
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix JsonAnySetter

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mike Barry <msb5014@gmail.com>
2023-04-25 06:05:09 -04:00
dependabot[bot] fce555f1e3
Bump cel-bom from 0.3.13 to 0.3.15 (#557) 2023-04-24 08:30:50 -04:00
Michael Barry 8fc2ad7b73
Bump oppenmaptiles to fix way NPE (#562) 2023-04-24 08:24:44 -04:00
Michael Barry 738e181657
handle empty geopackage geometries (#561) 2023-04-24 06:43:03 -04:00
dependabot[bot] fba875f968
Bump icu4j from 72.1 to 73.1 (#554) 2023-04-20 08:05:36 -04:00
dependabot[bot] 5be4640b04
Bump protobuf-java from 3.22.2 to 3.22.3 (#553) 2023-04-14 05:54:26 -04:00
dependabot[bot] db0ab02263
Bump mockito-core from 5.2.0 to 5.3.0 (#549) 2023-04-13 07:28:06 -04:00
dependabot[bot] c5609b121b
Bump spotless-maven-plugin from 2.35.0 to 2.36.0 (#548) 2023-04-07 19:31:44 -04:00
dependabot[bot] edf9326778
Bump maven-enforcer-plugin from 3.2.1 to 3.3.0 (#547)
Bumps [maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.2.1 to 3.3.0.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.2.1...enforcer-3.3.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-06 21:00:26 -04:00
dependabot[bot] b01975bd43
Bump jacoco-maven-plugin from 0.8.8 to 0.8.9 (#545)
Bumps [jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.8 to 0.8.9.
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.8...v0.8.9)

---
updated-dependencies:
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-03 05:16:58 -04:00
Michael Barry 72f86c8b63
update notice (#544) 2023-03-31 07:37:29 -04:00
Mike Barry 5b0a3ba636 update readme 2023-03-31 06:54:02 -04:00
Michael Barry 72ea82cd50
Fall back to slower transliterator (#543) 2023-03-31 06:33:12 -04:00
dependabot[bot] e77aaa2816
Bump geotools.version from 28.2 to 29.0 (#542) 2023-03-30 19:02:31 -04:00
dependabot[bot] 4f8f85e2dc
Bump flatten-maven-plugin from 1.4.0 to 1.4.1 (#541) 2023-03-29 06:10:14 -04:00
Michael Barry 0712fcda2c
test on java 20 (#539) 2023-03-28 06:11:35 -04:00
dependabot[bot] 0be891fb1b
Bump cel-bom from 0.3.12 to 0.3.13 (#538)
Bumps [cel-bom](https://github.com/projectnessie/cel-java) from 0.3.12 to 0.3.13.
- [Release notes](https://github.com/projectnessie/cel-java/releases)
- [Commits](https://github.com/projectnessie/cel-java/compare/v0.3.12...v0.3.13)

---
updated-dependencies:
- dependency-name: org.projectnessie.cel:cel-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-28 05:32:26 -04:00
dependabot[bot] 35f37ed757
Bump sqlite-jdbc from 3.41.2.0 to 3.41.2.1 (#535)
Bumps [sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.41.2.0 to 3.41.2.1.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/commits/3.41.2.1)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-27 06:00:56 -04:00
dependabot[bot] 15d0e4f37c
Bump maven-deploy-plugin from 3.1.0 to 3.1.1 (#532)
Bumps [maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/apache/maven-deploy-plugin/releases)
- [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.0...maven-deploy-plugin-3.1.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-deploy-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-24 13:31:04 -04:00
dependabot[bot] 5aa120095f
Bump sqlite-jdbc from 3.41.0.1 to 3.41.2.0 (#528) 2023-03-23 17:02:16 -04:00
Mike Barry 13f658fe1a link 2023-03-23 16:36:49 -04:00
dependabot[bot] ce19929aef
Bump sqlite-jdbc from 3.41.0.0 to 3.41.0.1 (#527) 2023-03-21 15:28:23 -04:00
Michael Barry 509795401e
Fix geometry errors (#526) 2023-03-20 16:41:18 -04:00
dependabot[bot] 65f620d663
Bump flatten-maven-plugin from 1.3.0 to 1.4.0 (#525) 2023-03-20 07:18:51 -04:00
dependabot[bot] dff0c077e5
Bump slf4j-api from 2.0.6 to 2.0.7 (#524) 2023-03-19 17:21:35 -04:00
Michael Barry b5d6aa7737
Fix madvise bug (#523) 2023-03-19 14:01:54 -04:00
Michael Barry 97231d18ef
Add --keep-unzipped option to avoid unzipping sources each time (#522) 2023-03-19 14:01:17 -04:00
Michael Barry 74db638dbc
Expose pmtiles writer (#520) 2023-03-18 14:38:04 -04:00
dependabot[bot] 9945ad406e
Bump maven-failsafe-plugin from 3.0.0-M9 to 3.0.0 (#518) 2023-03-16 05:49:04 -04:00
dependabot[bot] 86e84e66a9
Bump maven-surefire-plugin in /.github/planetiler-examples-dependabot (#519) 2023-03-16 05:48:46 -04:00
Michael Barry c5d6daf671
metadataTable alias (#517) 2023-03-15 13:15:57 -04:00
Brandon Liu 93af11bb26
Expose setId in FeatureCollector [#377] (#514) 2023-03-15 10:28:16 -04:00
dependabot[bot] 32954603cc
Bump maven-failsafe-plugin in /.github/planetiler-examples-dependabot (#516) 2023-03-15 05:20:31 -04:00
dependabot[bot] fcec07f11b
Bump maven-surefire-plugin from 3.0.0-M9 to 3.0.0 (#515) 2023-03-15 05:20:10 -04:00
dependabot[bot] db0af42b84
Bump spotless-maven-plugin from 2.34.0 to 2.35.0 (#513)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.34.0 to 2.35.0.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.34.0...lib/2.35.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-14 05:21:27 -04:00
Brandon Liu d5b404d8e2
Finish PMTiles write implementation and basic reader (#502) 2023-03-13 13:56:11 -04:00
dependabot[bot] 68b04f5295
Bump protobuf-java from 3.22.1 to 3.22.2 (#508)
Bumps [protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.22.1 to 3.22.2.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/generate_changelog.py)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.22.1...v3.22.2)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-13 06:43:39 -04:00
dependabot[bot] 322fdca70e
Bump mockito-core from 5.1.1 to 5.2.0 (#507) 2023-03-10 19:22:53 -05:00
dependabot[bot] aa362d9fd8
Bump protobuf-java from 3.22.0 to 3.22.1 (#504)
Bumps [protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.22.0 to 3.22.1.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/generate_changelog.py)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.22.0...v3.22.1)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-08 05:40:03 -05:00
dependabot[bot] 2a213df169
Bump spotless-maven-plugin from 2.33.0 to 2.34.0 (#503) 2023-02-28 05:58:03 -05:00
Michael Barry 1375ee7abb
Support disabling colors in terminal output (#501) 2023-02-25 07:45:45 -05:00
Michael Barry f4d07ea141
Detect certain kinds of invalid polygons when slicing into tiles (#499) 2023-02-24 13:14:50 -05:00
dependabot[bot] 5c8b8e1bb0
Bump maven-assembly-plugin from 3.4.2 to 3.5.0 (#500) 2023-02-24 06:49:34 -05:00
dependabot[bot] afc2470eb5
Bump sqlite-jdbc from 3.40.1.0 to 3.41.0.0 (#497) 2023-02-23 05:51:35 -05:00
dependabot[bot] 771b774672
Bump maven-assembly-plugin in /.github/planetiler-examples-dependabot (#498) 2023-02-23 05:50:48 -05:00
dependabot[bot] b872eb2bd8
Bump log4j.version from 2.19.0 to 2.20.0 (#494) 2023-02-21 05:57:55 -05:00
dependabot[bot] 08dc1e679b
Bump geotools.version from 28.1 to 28.2 (#493) 2023-02-21 04:55:54 -05:00
dependabot[bot] 756f17e45e
Bump protobuf-java from 3.21.12 to 3.22.0 (#491) 2023-02-17 18:20:30 -05:00
dependabot[bot] 6ba568158f
Bump maven-javadoc-plugin from 3.4.1 to 3.5.0 (#490) 2023-02-16 18:16:38 -05:00
dependabot[bot] c3d9eed898
Bump maven-failsafe-plugin from 3.0.0-M8 to 3.0.0-M9 (#488) 2023-02-15 05:24:34 -05:00
dependabot[bot] 8eb0f38467
Bump maven-surefire-plugin in /.github/planetiler-examples-dependabot (#489) 2023-02-15 05:24:16 -05:00
Michael Barry 9c318e45b0
Update ReadableTileArchive.java (#486) 2023-02-14 05:41:28 -05:00
dependabot[bot] af5cd7bfd8
Bump maven-surefire-plugin from 3.0.0-M8 to 3.0.0-M9 (#484)
Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M8 to 3.0.0-M9.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M8...surefire-3.0.0-M9)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-14 05:20:25 -05:00
dependabot[bot] f5b86345ea
Bump maven-failsafe-plugin in /.github/planetiler-examples-dependabot (#485)
Bumps [maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M8 to 3.0.0-M9.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M8...surefire-3.0.0-M9)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-02-14 05:20:12 -05:00
dependabot[bot] 2b121f175e
Bump spotless-maven-plugin from 2.32.0 to 2.33.0 (#483) 2023-02-13 07:41:10 -05:00
dependabot[bot] 61a93df374
Bump maven-deploy-plugin from 3.0.0 to 3.1.0 (#480) 2023-02-11 12:35:03 -05:00
Brandon Liu 9bf62d5644
Pmtiles package low level header and directory serialization/deserialization [#98] (#466) 2023-02-08 06:44:04 -05:00
dependabot[bot] 7cb9b5f670
Bump spotless-maven-plugin from 2.31.0 to 2.32.0 (#479) 2023-02-07 04:45:07 -05:00
Michael Barry d5336efcae
Require minimum java 17 (#477) 2023-02-06 06:38:16 -05:00
Michael Barry db3e8228ae
Upgrade pt-omt (#476) 2023-02-06 06:22:54 -05:00
dependabot[bot] 07b1f78034
Bump RoaringBitmap from 0.9.38 to 0.9.39 (#474) 2023-02-06 04:46:30 -05:00
Michael Barry 55fddca832
Remove snakeyaml dependency (#473) 2023-02-05 14:39:24 -05:00
Michael Barry 9a704e773e
Convert get all tile coords to iterator (#463) 2023-02-05 14:16:05 -05:00
dependabot[bot] 6ed0e3cc86
Bump sqlite-jdbc from 3.40.0.0 to 3.40.1.0 (#472) 2023-02-02 06:19:52 -05:00
dependabot[bot] 24fe16a174
Bump maven-enforcer-plugin from 3.1.0 to 3.2.1 (#471) 2023-02-01 06:48:57 -05:00
dependabot[bot] 7d2adb4ef3
Bump mockito-core from 5.1.0 to 5.1.1 (#469) 2023-01-31 14:17:25 -05:00
dependabot[bot] 7fb1ec8a63
Bump mockito-core in /.github/planetiler-examples-dependabot (#470)
Bumps [mockito-core](https://github.com/mockito/mockito) from 5.1.0 to 5.1.1.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.1.0...v5.1.1)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-31 05:59:27 -05:00
Michael Barry 78129905e5
Add `--download-max-bandwidth` option (#467) 2023-01-30 13:38:09 -05:00
dependabot[bot] 553fdd708c
Bump jackson.version from 2.14.1 to 2.14.2 (#464)
Bumps `jackson.version` from 2.14.1 to 2.14.2.

Updates `jackson-core` from 2.14.1 to 2.14.2
- [Release notes](https://github.com/FasterXML/jackson-core/releases)
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.14.1...jackson-core-2.14.2)

Updates `jackson-databind` from 2.14.1 to 2.14.2
- [Release notes](https://github.com/FasterXML/jackson/releases)
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `jackson-datatype-jdk8` from 2.14.1 to 2.14.2

Updates `jackson-dataformat-xml` from 2.14.1 to 2.14.2
- [Release notes](https://github.com/FasterXML/jackson-dataformat-xml/releases)
- [Commits](https://github.com/FasterXML/jackson-dataformat-xml/compare/jackson-dataformat-xml-2.14.1...jackson-dataformat-xml-2.14.2)

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-databind
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-xml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-30 06:29:20 -05:00
dependabot[bot] 8d1e94ab39
Bump mockito-core in /.github/planetiler-examples-dependabot (#465)
Bumps [mockito-core](https://github.com/mockito/mockito) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-30 06:28:40 -05:00
Brandon Liu 88daeb4d0b
Speed up VarInt encoding, remove emitTilesInOrder option [#98] (#460) 2023-01-27 08:12:54 -05:00
dependabot[bot] def8625d0a
Bump spotless-maven-plugin from 2.30.0 to 2.31.0 (#461)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.30.0 to 2.31.0.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.30.0...lib/2.31.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-27 05:39:24 -05:00
dependabot[bot] febd3e9c27
Bump spotless-maven-plugin in /.github/planetiler-examples-dependabot (#462)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.30.0 to 2.31.0.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.30.0...lib/2.31.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-27 05:39:00 -05:00
Brandon Liu 9ce9d1f5b2
FeatureGroup can emit in either TMS or Hilbert order. [#98] (#455) 2023-01-26 21:43:07 -05:00
Michael Barry 723f44e236
Improve is convex logic (#459) 2023-01-26 12:03:58 -05:00
Erik Price 4f43f1127a
Revert "fix is convex negated (#241)" (#458)
This reverts commit f93e5221f8.
2023-01-26 04:59:37 -05:00
Brandon Liu f772180fb7
refactor VectorLayers from mbtiles into util.LayerStats [#98] (#456) 2023-01-25 21:15:43 -05:00
Erik Price a0f8c67c78
Support unzipping GeoPackage sources at runtime (#430) 2023-01-25 20:56:30 -05:00
dependabot[bot] ae1317c341
Bump geopackage from 6.6.0 to 6.6.1 (#457)
Bumps [geopackage](https://github.com/ngageoint/geopackage-java) from 6.6.0 to 6.6.1.
- [Release notes](https://github.com/ngageoint/geopackage-java/releases)
- [Changelog](https://github.com/ngageoint/geopackage-java/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ngageoint/geopackage-java/compare/6.6.0...6.6.1)

---
updated-dependencies:
- dependency-name: mil.nga.geopackage:geopackage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-25 06:23:40 -05:00
Brandon Liu b97d9d0e79
fix CloseableConsumer class name (#454) 2023-01-23 06:06:57 -05:00
dependabot[bot] 4ea87224af
Bump cel-bom from 0.3.11 to 0.3.12 (#453)
Bumps [cel-bom](https://github.com/projectnessie/cel-java) from 0.3.11 to 0.3.12.
- [Release notes](https://github.com/projectnessie/cel-java/releases)
- [Commits](https://github.com/projectnessie/cel-java/compare/v0.3.11...v0.3.12)

---
updated-dependencies:
- dependency-name: org.projectnessie.cel:cel-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-23 06:05:36 -05:00
Brandon Liu 1afb5de820
add VarInt encoder for unsigned longs [#98] (#449) 2023-01-23 05:58:23 -05:00
dependabot[bot] 42e2e19390
Bump geotools.version from 28.0 to 28.1 (#452) 2023-01-20 05:56:01 -05:00
dependabot[bot] 7ea365e5b1
Bump mockito-core from 4.11.0 to 5.0.0 (#450) 2023-01-18 05:09:34 -05:00
Brandon Liu 09fd4ba2ba
Tile archive refactor (#443) 2023-01-17 07:05:45 -05:00
dependabot[bot] 0eb5a534a9
Bump snakeyaml-engine from 2.5 to 2.6 (#448) 2023-01-17 05:31:25 -05:00
dependabot[bot] 3df0e668fa
Bump spotless-maven-plugin from 2.29.0 to 2.30.0 (#447) 2023-01-16 19:27:13 -05:00
Peter Hanecak 4a622a8ef0
Tile hashing fix (#436) 2023-01-14 16:03:50 -05:00
Oliver Wipfli 9fbf952239
Add geopackage to supported data sources (#442) 2023-01-13 19:49:18 -05:00
dependabot[bot] f8ba1aa3fb
Bump maven-failsafe-plugin from 3.0.0-M7 to 3.0.0-M8 (#444) 2023-01-13 06:16:15 -05:00
dependabot[bot] 6284e35063
Bump maven-surefire-plugin in /.github/planetiler-examples-dependabot (#445) 2023-01-13 06:16:05 -05:00
dependabot[bot] 9e4af5b485
Bump maven-surefire-plugin from 3.0.0-M7 to 3.0.0-M8 (#440)
Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M7 to 3.0.0-M8.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M7...surefire-3.0.0-M8)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-12 06:09:34 -05:00
dependabot[bot] 5b4ac8076f
Bump maven-failsafe-plugin in /.github/planetiler-examples-dependabot (#441)
Bumps [maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M7 to 3.0.0-M8.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M7...surefire-3.0.0-M8)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-12 06:09:11 -05:00
dependabot[bot] 640ce50794
Bump junit-jupiter-api in /.github/planetiler-examples-dependabot (#438) 2023-01-11 04:20:27 -05:00
dependabot[bot] 67d5a4bed0
Bump junit.version from 5.9.1 to 5.9.2 (#437) 2023-01-11 04:16:05 -05:00
Michael Barry ea17fcd8b1
fix timeout issues (#435) 2023-01-09 09:51:02 -05:00
dependabot[bot] 867e447a10
Bump RoaringBitmap from 0.9.37 to 0.9.38 (#434) 2023-01-09 06:32:03 -05:00
dependabot[bot] aa69f509e2
Bump RoaringBitmap from 0.9.36 to 0.9.37 (#432) 2023-01-05 05:44:10 -05:00
Michael Barry 0125e1814a
Support --area=planet in shortbread schema (#431) 2023-01-04 15:24:03 -05:00
Erik Price ef24e91f0b
Add basic support for reading GeoPackage files. (#413) 2023-01-02 12:19:05 -05:00
Michael Barry aea309e094
add layer to shapefile (#429) 2023-01-02 11:41:12 -05:00
Michael Barry dad2073f61
Add planetiler-specific metadata (#428) 2023-01-02 11:26:00 -05:00
dependabot[bot] 89de82244e
Bump spotless-maven-plugin from 2.28.0 to 2.29.0 (#427) 2023-01-02 04:17:33 -05:00
Erik Price 184f950051
Extract ZIP file walker out of ShapefileReader. (#423) 2023-01-01 17:29:00 -05:00
Michael Barry 7adf46819a
upgrade to openmaptiles 3.14 (#426) 2023-01-01 16:43:11 -05:00
dependabot[bot] a1bc1f4fd5
Bump mockito-core from 4.10.0 to 4.11.0 (#425) 2022-12-29 05:56:08 -05:00
Oliver Wipfli 71d0450f03
Fix typo (#420) 2022-12-20 12:54:59 -05:00
dependabot[bot] 2ed6ac8630
Bump RoaringBitmap from 0.9.35 to 0.9.36 (#418) 2022-12-19 04:35:22 -05:00
dependabot[bot] cb082a0566
Bump mockito-core from 4.9.0 to 4.10.0 (#416)
Bumps [mockito-core](https://github.com/mockito/mockito) from 4.9.0 to 4.10.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v4.9.0...v4.10.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-16 06:18:22 -05:00
Erik Price ea8589bd6f
Add shapefile directory source (#406) 2022-12-15 14:19:22 -05:00
dependabot[bot] e9f78d6471
Bump protobuf-java from 3.21.11 to 3.21.12 (#415) 2022-12-15 06:06:08 -05:00
dependabot[bot] 29dc7993c5
Bump slf4j-api from 2.0.5 to 2.0.6 (#414)
Bumps [slf4j-api](https://github.com/qos-ch/slf4j) from 2.0.5 to 2.0.6.
- [Release notes](https://github.com/qos-ch/slf4j/releases)
- [Commits](https://github.com/qos-ch/slf4j/compare/v_2.0.5...v_2.0.6)

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-13 05:50:14 -05:00
dependabot[bot] 271e681b1a
Bump protobuf-java from 3.21.10 to 3.21.11 (#412) 2022-12-11 16:54:53 -05:00
dependabot[bot] 7d6fd66b9f
Bump spotless-maven-plugin from 2.27.2 to 2.28.0 (#410) 2022-12-08 07:27:50 -05:00
dependabot[bot] 440e5d10fc
Bump cel-bom from 0.3.10 to 0.3.11 (#409) 2022-12-07 04:20:51 -05:00
dependabot[bot] fe911e4b49
Bump mockito-core from 4.8.1 to 4.9.0 (#407) 2022-12-06 05:00:20 -05:00
dependabot[bot] 9f6167bfff
Bump slf4j-api from 2.0.3 to 2.0.5 (#405) 2022-12-05 04:50:31 -05:00
dependabot[bot] c08925fee1
Bump protobuf-java from 3.21.9 to 3.21.10 (#404) 2022-12-02 15:32:12 -05:00
Michael Barry 926bc9210b
Switch ordering of translation providers (#403) 2022-12-01 17:26:04 -05:00
Oliver Wipfli 2dc4bc660c
Link to pyosmium-up-to-date (#402) 2022-12-01 15:48:53 -05:00
dependabot[bot] 966ee898fd
Bump sqlite-jdbc from 3.39.4.1 to 3.40.0.0 (#401)
Bumps [sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.39.4.1 to 3.40.0.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.39.4.1...3.40.0.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-01 10:57:32 -05:00
Michael Barry b8506d9812
Update README.md (#400) 2022-11-30 20:29:17 -05:00
dependabot[bot] cd938d50ff
Bump jackson.version from 2.14.0 to 2.14.1 (#396)
Bumps `jackson.version` from 2.14.0 to 2.14.1.

Updates `jackson-core` from 2.14.0 to 2.14.1
- [Release notes](https://github.com/FasterXML/jackson-core/releases)
- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.14.0...jackson-core-2.14.1)

Updates `jackson-databind` from 2.14.0 to 2.14.1
- [Release notes](https://github.com/FasterXML/jackson/releases)
- [Commits](https://github.com/FasterXML/jackson/commits)

Updates `jackson-datatype-jdk8` from 2.14.0 to 2.14.1

Updates `jackson-dataformat-xml` from 2.14.0 to 2.14.1
- [Release notes](https://github.com/FasterXML/jackson-dataformat-xml/releases)
- [Commits](https://github.com/FasterXML/jackson-dataformat-xml/compare/jackson-dataformat-xml-2.14.0...jackson-dataformat-xml-2.14.1)

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson.core:jackson-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.core:jackson-databind
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jdk8
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.fasterxml.jackson.dataformat:jackson-dataformat-xml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-30 20:26:52 -05:00
Erik Price 9e4eb45baa
Fix max tile size in stats output. (#399) 2022-11-30 20:18:45 -05:00
Erik Price 762d052b10
Remove outdated reference to "relation_member" type (#397) 2022-11-29 18:15:35 -05:00
ttomasz 6a893a4787
Cli add version argument (#376) 2022-11-26 06:59:13 -05:00
Michael Barry 7a3db3dcf8
Fix linux install link (#395) 2022-11-26 06:46:21 -05:00
dependabot[bot] 2340516842
Bump jib-maven-plugin from 3.3.0 to 3.3.1 (#394) 2022-11-25 10:44:57 -05:00
dependabot[bot] c391a44512
Bump commonmark from 0.20.0 to 0.21.0 (#393) 2022-11-24 04:56:53 -05:00
dependabot[bot] 3a434a4cd7
Bump RoaringBitmap from 0.9.33 to 0.9.35 (#392) 2022-11-23 04:49:09 -05:00
dependabot[bot] 0d4396e0bf
Bump geotools.version from 27.2 to 28.0 (#390)
Bumps `geotools.version` from 27.2 to 28.0.

Updates `gt-shapefile` from 27.2 to 28.0

Updates `gt-epsg-hsql` from 27.2 to 28.0

---
updated-dependencies:
- dependency-name: org.geotools:gt-shapefile
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: org.geotools:gt-epsg-hsql
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-22 05:16:37 -05:00
Erik Price ccf098115e
Move NumberFormat to thread-local variable (#387)
* Move NumberFormat to thread-local variable

The NumberFormat class isn't thread safe, and sharing one instance
across threads allowed for races which resulted in otherwise valid OSM
tags not being parsed correctly.

* Add supression for ThreadLocal use

* Use ThreadLocal for NumberFormat objects in `Format`

* Wrap `NumberFormat` instances rather than hashmap
2022-11-21 20:34:28 -05:00
Erik Price 7f6032b641
Fix NPE for `OsmReader#estimateMemoryUsageBytes()` (#389)
A `NullPointerException` was thrown when this method was called after
calling `close()` (which happens when using the `PrometheusStats`
client).
2022-11-21 15:13:29 -05:00
dependabot[bot] 9ead458f7f
Bump os-maven-plugin from 1.7.0 to 1.7.1 (#388)
Bumps [os-maven-plugin](https://github.com/trustin/os-maven-plugin) from 1.7.0 to 1.7.1.
- [Release notes](https://github.com/trustin/os-maven-plugin/releases)
- [Commits](https://github.com/trustin/os-maven-plugin/compare/os-maven-plugin-1.7.0...os-maven-plugin-1.7.1)

---
updated-dependencies:
- dependency-name: kr.motd.maven:os-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-21 05:26:06 -05:00
dependabot[bot] c73c835533
Bump sqlite-jdbc from 3.39.4.0 to 3.39.4.1 (#386)
Bumps [sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.39.4.0 to 3.39.4.1.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.39.4.0...3.39.4.1)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-18 06:31:26 -05:00
dependabot[bot] 199faf72f2
Bump jnr-ffi from 2.2.12 to 2.2.13 (#385)
Bumps [jnr-ffi](https://github.com/jnr/jnr-ffi) from 2.2.12 to 2.2.13.
- [Release notes](https://github.com/jnr/jnr-ffi/releases)
- [Commits](https://github.com/jnr/jnr-ffi/compare/jnr-ffi-2.2.12...jnr-ffi-2.2.13)

---
updated-dependencies:
- dependency-name: com.github.jnr:jnr-ffi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-17 05:50:55 -05:00
dependabot[bot] 201fb96539
Bump jackson.version from 2.13.4 to 2.14.0 (#383) 2022-11-13 21:23:19 -05:00
dependabot[bot] 22c6fd1927
Bump sqlite-jdbc from 3.39.3.0 to 3.39.4.0 (#381) 2022-11-10 03:59:38 -05:00
Peter Hanecak 9b5eaf474d
Use current repo for update-pr/dawidd6/action-download-artifact (#380) 2022-11-08 07:36:00 -05:00
dependabot[bot] 87df84c318
Bump commonmark from 0.19.0 to 0.20.0 (#378) 2022-11-08 04:43:21 -05:00
dependabot[bot] 0489a290f5
Bump protobuf-java from 3.21.8 to 3.21.9 (#375)
Bumps [protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.21.8 to 3.21.9.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/generate_changelog.py)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.21.8...v3.21.9)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-28 06:12:43 -04:00
dependabot[bot] 4bc532c31e
Bump mockito-core from 4.8.0 to 4.8.1 (#373) 2022-10-26 21:41:52 -04:00
dependabot[bot] 0c4d0d2817
Bump reproducible-build-maven-plugin from 0.15 to 0.16 (#372) 2022-10-25 05:36:43 -04:00
dependabot[bot] f02120e7b0
Bump geotools.version from 27.1 to 27.2 (#371) 2022-10-24 05:12:41 -04:00
dependabot[bot] 6b9175eaa1
Bump icu4j from 71.1 to 72.1 (#370) 2022-10-21 06:50:06 -04:00
dependabot[bot] d71a1c4d85
Bump protobuf-java from 3.21.7 to 3.21.8 (#369) 2022-10-19 07:50:08 -04:00
dependabot[bot] 4a82c66f8c
Bump RoaringBitmap from 0.9.32 to 0.9.33 (#368) 2022-10-18 05:46:07 -04:00
dependabot[bot] f81c059eaf
Bump styfle/cancel-workflow-action from 0.10.1 to 0.11.0 (#365) 2022-10-13 04:53:44 -04:00
dependabot[bot] 05c3420694
Bump spotless-maven-plugin from 2.27.1 to 2.27.2 (#364)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.27.1 to 2.27.2.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/maven/2.27.1...maven/2.27.2)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 05:07:13 -04:00
Michael Barry 0eb148ee3c
Expose arguments via config (#363) 2022-10-04 19:57:59 -04:00
dependabot[bot] 83148052b0
Bump snakeyaml-engine from 2.4 to 2.5 (#362) 2022-10-04 04:56:43 -04:00
dependabot[bot] cb376ef95a
Bump styfle/cancel-workflow-action from 0.10.0 to 0.10.1 (#360)
Bumps [styfle/cancel-workflow-action](https://github.com/styfle/cancel-workflow-action) from 0.10.0 to 0.10.1.
- [Release notes](https://github.com/styfle/cancel-workflow-action/releases)
- [Commits](https://github.com/styfle/cancel-workflow-action/compare/0.10.0...0.10.1)

---
updated-dependencies:
- dependency-name: styfle/cancel-workflow-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-03 05:22:52 -04:00
dependabot[bot] 521f8a6081
Bump protobuf-java from 3.21.6 to 3.21.7 (#361)
Bumps [protobuf-java](https://github.com/protocolbuffers/protobuf) from 3.21.6 to 3.21.7.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/generate_changelog.py)
- [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.21.6...v3.21.7)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-03 05:22:41 -04:00
dependabot[bot] 7a5faf353d
Bump spotless-maven-plugin from 2.27.0 to 2.27.1 (#359) 2022-09-30 05:58:18 -04:00
dependabot[bot] 23450e90e0
Bump slf4j-api from 2.0.2 to 2.0.3 (#358) 2022-09-29 04:52:33 -04:00
dependabot[bot] 26cd0e6a7e
Bump snakeyaml from 1.32 to 1.33 (#357) 2022-09-28 05:11:20 -04:00
dependabot[bot] 08c82644a1
Bump maven-jar-plugin from 3.2.2 to 3.3.0 (#356) 2022-09-27 19:02:32 -04:00
Michael Barry 44ba8e3de6
Upgrade logging deps (#327) 2022-09-27 05:58:26 -04:00
Michael Barry 87bf116349
anchors and aliases (#354) 2022-09-25 06:46:36 -04:00
Michael Barry 02dec9701b
custommap readme tweaks (#346) 2022-09-24 14:26:07 -04:00
Michael Barry 5296d1772e
Shortbread schema (#323) 2022-09-23 06:49:09 -04:00
dependabot[bot] b934f4ee89
Bump spotless-maven-plugin from 2.26.0 to 2.27.0 (#345) 2022-09-23 04:56:53 -04:00
Michael Barry e74faec4a6
Fix build (#344) 2022-09-22 21:43:33 -04:00
Michael Barry a90646dff3
Bump version to 0.6-SNAPSHOT (#342) 2022-09-22 18:02:39 -04:00
dependabot[bot] 321e24bab0
Bump junit.version from 5.9.0 to 5.9.1 (#341)
Bumps `junit.version` from 5.9.0 to 5.9.1.

Updates `junit-jupiter-api` from 5.9.0 to 5.9.1
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.0...r5.9.1)

Updates `junit-jupiter-params` from 5.9.0 to 5.9.1
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.0...r5.9.1)

Updates `junit-jupiter-engine` from 5.9.0 to 5.9.1
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.0...r5.9.1)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter-params
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-22 06:52:23 -04:00
dependabot[bot] 38b0be31ce
Bump junit-jupiter-api in /.github/planetiler-examples-dependabot (#340) 2022-09-21 05:00:52 -04:00
dependabot[bot] 9e8248e282
Bump spotless-maven-plugin from 2.25.0 to 2.26.0 (#338) 2022-09-16 05:58:33 -04:00
dependabot[bot] 149bde212f
Bump protobuf-java from 3.21.5 to 3.21.6 (#337) 2022-09-15 05:10:49 -04:00
dependabot[bot] e03136e891
Bump snakeyaml from 1.31 to 1.32 (#336) 2022-09-13 05:14:25 -04:00
dependabot[bot] d5820ba0f7
Bump sqlite-jdbc from 3.39.2.1 to 3.39.3.0 (#335) 2022-09-12 06:10:05 -04:00
dependabot[bot] 93c95f7b18
Bump mockito-core from 4.7.0 to 4.8.0 (#334)
Bumps [mockito-core](https://github.com/mockito/mockito) from 4.7.0 to 4.8.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v4.7.0...v4.8.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-08 05:52:06 -04:00
dependabot[bot] 40810b357f
Bump RoaringBitmap from 0.9.31 to 0.9.32 (#333) 2022-09-07 04:39:32 -04:00
dependabot[bot] 18368fac7f
Bump jackson.version from 2.13.3 to 2.13.4 (#332) 2022-09-05 11:26:48 -04:00
dependabot[bot] be1e63dcea
Bump jib-maven-plugin from 3.2.1 to 3.3.0 (#331) 2022-08-31 06:06:17 -04:00
dependabot[bot] 3bfab48bcc
Bump snakeyaml from 1.30 to 1.31 (#330)
Bumps [snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) from 1.30 to 1.31.
- [Commits](https://bitbucket.org/snakeyaml/snakeyaml/branches/compare/snakeyaml-1.31..snakeyaml-1.30)

---
updated-dependencies:
- dependency-name: org.yaml:snakeyaml
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-30 07:42:49 -04:00
dependabot[bot] 45dd2a798e
Bump spotless-maven-plugin from 2.24.1 to 2.25.0 (#329)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.24.1 to 2.25.0.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.24.1...lib/2.25.0)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-29 09:02:26 -04:00
dependabot[bot] a0393dc878
Bump sqlite-jdbc from 3.39.2.0 to 3.39.2.1 (#328) 2022-08-26 04:39:36 -04:00
dependabot[bot] bfc04e4be1
Bump mockito-core from 4.6.1 to 4.7.0 (#322)
Bumps [mockito-core](https://github.com/mockito/mockito) from 4.6.1 to 4.7.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v4.6.1...v4.7.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-15 05:50:41 -04:00
dependabot[bot] 93ec5113ba
Bump maven-javadoc-plugin from 3.4.0 to 3.4.1 (#321) 2022-08-15 04:56:31 -04:00
dependabot[bot] 251720399e
Bump protobuf-java from 3.21.4 to 3.21.5 (#320) 2022-08-12 04:42:38 -04:00
dependabot[bot] 57be5e1bf5
Bump spotless-maven-plugin from 2.24.0 to 2.24.1 (#319)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.24.0 to 2.24.1.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.24.0...lib/2.24.1)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-10 05:22:17 -04:00
Michael Barry 9e0eec93c8
Add `quickstart.sh` script to run with recommended settings (#318) 2022-08-10 05:09:33 -04:00
Michael Barry 4cc139a603
Improve geofabrik area search (#317) 2022-08-09 07:13:45 -04:00
dependabot[bot] 21467c51ec
Bump RoaringBitmap from 0.9.30 to 0.9.31 (#316)
Bumps [RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap) from 0.9.30 to 0.9.31.
- [Release notes](https://github.com/RoaringBitmap/RoaringBitmap/releases)
- [Commits](https://github.com/RoaringBitmap/RoaringBitmap/compare/0.9.30...0.9.31)

---
updated-dependencies:
- dependency-name: org.roaringbitmap:RoaringBitmap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-08 09:23:31 -04:00
dependabot[bot] 9648ea83a7
Bump sqlite-jdbc from 3.36.0.3 to 3.39.2.0 (#315)
* Bump sqlite-jdbc from 3.36.0.3 to 3.39.2.0

Bumps [sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.36.0.3 to 3.39.2.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.36.0.3...3.39.2.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* disable failing test on windows

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mike Barry <msb5014@gmail.com>
2022-08-07 20:20:46 -04:00
Michael Barry 619ac83ed8
Submodule followups (#312) 2022-08-02 07:20:49 -04:00
Michael Barry 93fe75782e
Improve shapefile zip reads (#314) 2022-07-31 07:17:42 -04:00
Michael Barry ffbffb577b
Publish test zip files (#313) 2022-07-29 08:49:12 -04:00
Michael Barry 7fa51c1c02
Generate protobuf during build (#310) 2022-07-29 08:31:26 -04:00
Adam Laža 88c7f5650f
Move basemap profile into OpenMapTiles submodule (#258) 2022-07-29 06:40:15 -04:00
dependabot[bot] 232834e735
Bump spotless-maven-plugin from 2.23.0 to 2.24.0 (#311) 2022-07-29 04:59:55 -04:00
Michael Barry 8a8db0005d
Lazy primitive group deserialization (#309) 2022-07-28 07:56:41 -04:00
dependabot[bot] 7109450265
Bump geotools.version from 27.0 to 27.1 (#308)
Bumps `geotools.version` from 27.0 to 27.1.

Updates `gt-shapefile` from 27.0 to 27.1

Updates `gt-epsg-hsql` from 27.0 to 27.1

---
updated-dependencies:
- dependency-name: org.geotools:gt-shapefile
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.geotools:gt-epsg-hsql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-28 06:55:17 -04:00
dependabot[bot] c14be447c3
Bump junit.version from 5.8.2 to 5.9.0 (#306)
Bumps `junit.version` from 5.8.2 to 5.9.0.

Updates `junit-jupiter-api` from 5.8.2 to 5.9.0
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.8.2...r5.9.0)

Updates `junit-jupiter-params` from 5.8.2 to 5.9.0
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.8.2...r5.9.0)

Updates `junit-jupiter-engine` from 5.8.2 to 5.9.0
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.8.2...r5.9.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.junit.jupiter:junit-jupiter-params
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-27 05:40:21 -04:00
dependabot[bot] 9be2e7c69a
Bump junit-jupiter-api in /.github/planetiler-examples-dependabot (#307)
Bumps [junit-jupiter-api](https://github.com/junit-team/junit5) from 5.8.2 to 5.9.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.8.2...r5.9.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-api
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-27 05:38:19 -04:00
Michael Barry 621a8ed759
Support zoom levels up to 15 (#303) 2022-07-26 07:51:31 -04:00
dependabot[bot] a6a8c245b8
Bump maven-assembly-plugin in /.github/planetiler-examples-dependabot (#305) 2022-07-25 05:10:14 -04:00
dependabot[bot] 0a60a1f3a3
Bump maven-assembly-plugin from 3.4.1 to 3.4.2 (#304) 2022-07-25 05:08:02 -04:00
Brandon Liu a50c43835d
TileCoord supports up to zoom 15 using alternate ordering (#266) 2022-07-24 06:40:43 -04:00
Mike Barry aa40e083c5 rm unnecessary main 2022-07-22 06:54:36 -04:00
farfromrefuge 7818634774
feat: `--polygon` argument to constrain mbtiles to a poly shape (#280) 2022-07-22 06:48:04 -04:00
Michael Barry d1d68cf753
Memory-mapped lazy reads by default (#300) 2022-07-20 08:06:08 -04:00
dependabot[bot] 89b05f7039
Bump maven-deploy-plugin from 3.0.0-M2 to 3.0.0 (#299)
Bumps [maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.0.0-M2 to 3.0.0.
- [Release notes](https://github.com/apache/maven-deploy-plugin/releases)
- [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.0.0-M2...maven-deploy-plugin-3.0.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-deploy-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-07-20 07:52:27 -04:00
Michael Barry 0e6394036c
Fix bounds check on dense nodes (#301) 2022-07-20 07:44:15 -04:00
Michael Barry c6ad30cc9a
OSM QA Tiles Example Profile (#278) 2022-07-14 05:26:53 -04:00
dependabot[bot] 4b7a6018c9
Bump maven-assembly-plugin from 3.4.0 to 3.4.1 (#294) 2022-07-08 06:24:06 -04:00
dependabot[bot] 7c93afb421
Bump maven-assembly-plugin in /.github/planetiler-examples-dependabot (#295) 2022-07-08 06:23:54 -04:00
dependabot[bot] cec6a42310
Bump maven-assembly-plugin from 3.3.0 to 3.4.0 (#293) 2022-07-05 07:38:04 -04:00
dependabot[bot] def9a44545
Bump maven-assembly-plugin in /.github/planetiler-examples-dependabot (#292) 2022-07-04 07:28:26 -04:00
dependabot[bot] b62f19439f
Bump log4j.version from 2.17.2 to 2.18.0 (#291) 2022-07-04 07:27:35 -04:00
dependabot[bot] 850d826143
Bump spotless-maven-plugin from 2.22.8 to 2.23.0 (#289) 2022-07-01 06:30:09 -04:00
dependabot[bot] f519f2f100
Bump msgpack-core from 0.9.2 to 0.9.3 (#287) 2022-06-29 05:49:33 -04:00
dependabot[bot] c79f9a1fc6
Bump styfle/cancel-workflow-action from 0.9.1 to 0.10.0 (#285) 2022-06-27 05:31:18 -04:00
dependabot[bot] ad567b192a
Bump jts-core from 1.18.2 to 1.19.0 (#282)
Bumps jts-core from 1.18.2 to 1.19.0.

https://github.com/locationtech/jts/releases/tag/1.19.0

---
updated-dependencies:
- dependency-name: org.locationtech.jts:jts-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-22 05:37:19 -04:00
dependabot[bot] 549b4afcbc
Bump maven-enforcer-plugin from 3.0.0 to 3.1.0 (#281)
Bumps [maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.0.0...enforcer-3.1.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-21 05:20:19 -04:00
Michael Barry 52432b815b
Fix memoize bug (#279) 2022-06-20 07:32:55 -04:00
farfromrefuge 76c7880d6b
feat: added `maxzoomForRendering` and `minzoomForRendering` (#272) 2022-06-20 06:31:50 -04:00
Brian Sperlongano 3fd094ddae
Allow more than 256 attribute keys (#275) 2022-06-20 05:37:40 -04:00
dependabot[bot] c58696ed69
Bump msgpack-core from 0.9.1 to 0.9.2 (#277)
Bumps [msgpack-core](https://github.com/msgpack/msgpack-java) from 0.9.1 to 0.9.2.
- [Release notes](https://github.com/msgpack/msgpack-java/releases)
- [Changelog](https://github.com/msgpack/msgpack-java/blob/develop/RELEASE_NOTES.md)
- [Commits](https://github.com/msgpack/msgpack-java/compare/v0.9.1...v0.9.2)

---
updated-dependencies:
- dependency-name: org.msgpack:msgpack-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-20 05:13:52 -04:00
Brian Sperlongano e2f7cc2bfa
Add instructions for using Planetiler with gradle (#274) 2022-06-19 17:32:35 -04:00
dependabot[bot] df6c803ad6
Bump prometheus.version from 0.15.0 to 0.16.0 (#276)
Bumps `prometheus.version` from 0.15.0 to 0.16.0.

Updates `simpleclient` from 0.15.0 to 0.16.0
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.15.0...parent-0.16.0)

Updates `simpleclient_common` from 0.15.0 to 0.16.0
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.15.0...parent-0.16.0)

Updates `simpleclient_pushgateway` from 0.15.0 to 0.16.0
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.15.0...parent-0.16.0)

Updates `simpleclient_hotspot` from 0.15.0 to 0.16.0
- [Release notes](https://github.com/prometheus/client_java/releases)
- [Commits](https://github.com/prometheus/client_java/compare/parent-0.15.0...parent-0.16.0)

---
updated-dependencies:
- dependency-name: io.prometheus:simpleclient
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.prometheus:simpleclient_common
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.prometheus:simpleclient_pushgateway
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.prometheus:simpleclient_hotspot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-19 06:09:50 -04:00
dependabot[bot] 0f7ce4a0ad
Bump spotless-maven-plugin from 2.22.6 to 2.22.8 (#273)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.22.6 to 2.22.8.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/maven/2.22.6...maven/2.22.8)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-19 06:02:37 -04:00
farfromrefuge b9d91e47cf
fix: merge line if it needs to be simplified (#244) 2022-06-10 06:45:12 -04:00
Brandon Liu c9682d5bee
Small readme cleanups (#265) 2022-06-09 06:01:14 -04:00
dependabot[bot] c2aed9e52d
Bump maven-failsafe-plugin from 3.0.0-M6 to 3.0.0-M7 (#271)
Bumps [maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M6 to 3.0.0-M7.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M6...surefire-3.0.0-M7)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-09 05:34:03 -04:00
Oliver Wipfli c5558bff8a
Rename README subtitle from custom map to examples (#267) 2022-06-08 07:45:02 -04:00
Oliver Wipfli 78b25c7f16
Decrease power sample minzoom from 12 to 7 (#268) 2022-06-08 06:18:16 -04:00
dependabot[bot] 0f7745953f
Bump maven-surefire-plugin in /.github/planetiler-examples-dependabot (#270) 2022-06-08 04:58:50 -04:00
dependabot[bot] ccf16889c0
Bump commonmark from 0.18.2 to 0.19.0 (#269) 2022-06-08 04:58:16 -04:00
dependabot[bot] 82e144d6b2
Bump maven-surefire-plugin from 3.0.0-M6 to 3.0.0-M7 (#263)
Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.0.0-M6 to 3.0.0-M7.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0-M6...surefire-3.0.0-M7)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-07 20:49:52 -04:00
Michael Barry 6300b47897
Fix flaky windows test (#264) 2022-06-07 20:40:46 -04:00
dependabot[bot] 96eb5cd024
Bump maven-failsafe-plugin in /.github/planetiler-examples-dependabot (#259) 2022-06-07 17:57:36 -04:00
dependabot[bot] fb389e8d27
Bump spotless-maven-plugin from 2.22.5 to 2.22.6 (#257)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.22.5 to 2.22.6.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/maven/2.22.5...maven/2.22.6)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-07 17:43:59 -04:00
Brian Sperlongano da12fef79f
Declarative schema from configuration file (#160) 2022-06-07 17:34:21 -04:00
Michael Barry 74b7474c46
Gather v0.5.0 benchmarks (#256) 2022-06-05 15:03:12 -04:00
Mike Barry f2050ec4bc Demo tiles hosted by Americana project 2022-06-04 06:57:28 -04:00
Mike Barry 83ed0556dc 0.5-snapshot 2022-06-03 21:07:28 -04:00
Michael Barry bed2220e83
Cheap isFill check and add `--skip-filled-tiles` option (#234) 2022-06-03 21:04:17 -04:00
Michael Barry b0f634bcaf
Use fnv1a64 for tile hash (#253) 2022-06-03 20:44:49 -04:00
dependabot[bot] c39c667f02
Bump mockito-core from 4.6.0 to 4.6.1 (#252) 2022-06-03 05:46:22 -04:00
Michael Barry 4ba36655d4
Fall back to parsing bounds from all nodes (#251) 2022-06-03 05:25:17 -04:00
Michael Barry 85a50cf70c
Also run java 18 in CI (#249) 2022-06-02 05:52:40 -04:00
Mike Barry a2ff797267 Upload jar file on each commit to main 2022-06-02 05:41:05 -04:00
dependabot[bot] 2947968d9a
Bump commonmark from 0.18.2 to 0.19.0 (#248)
Bumps [commonmark](https://github.com/commonmark/commonmark-java) from 0.18.2 to 0.19.0.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.18.2...commonmark-parent-0.19.0)

---
updated-dependencies:
- dependency-name: org.commonmark:commonmark
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-02 05:20:53 -04:00
Michael Barry 2ccef9f7f6
Unsynchronize ICU4j transliterate (#246) 2022-06-01 21:31:49 -04:00
Björn Bilger 97642fc096
Improve DB Indexes and Fix Deferred Index Logging in Compact DB Mode (#245) 2022-06-01 21:29:59 -04:00
Michael Barry f93e5221f8
fix is convex negated (#241) 2022-05-30 08:15:40 -04:00
dependabot[bot] 27cf19cca4
Bump mockito-core from 4.5.1 to 4.6.0 (#239) 2022-05-30 04:55:43 -04:00
Brian Sperlongano 9cf7f318fe
Change 'render' terminology (#238) 2022-05-29 18:03:32 -04:00
Michael Barry f7fd3e90a7
Merge overlapping water polygons (#235) 2022-05-28 05:40:17 -04:00
Michael Barry 4ecc96e9d9
enable by default (#236) 2022-05-28 05:23:36 -04:00
Michael Barry 99c0f8ae9c
Add `--feature-read-threads` option to read features in parallel when writing tiles (#225) 2022-05-24 18:46:52 -04:00
Björn Bilger f5206b3a73
add compact DB mode (--compact-db) to de-duplicate mbtiles output (#219) 2022-05-24 17:46:56 -04:00
Michael Barry 6873b989d6
Upgrade basemap profile to OpenMapTiles v3.13.1 (#227) 2022-05-23 06:08:59 -04:00
dependabot[bot] 2cf36c61c8
Bump geotools.version from 26.4 to 27.0 (#230)
Bumps `geotools.version` from 26.4 to 27.0.

Updates `gt-shapefile` from 26.4 to 27.0

Updates `gt-epsg-hsql` from 26.4 to 27.0

---
updated-dependencies:
- dependency-name: org.geotools:gt-shapefile
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: org.geotools:gt-epsg-hsql
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-23 05:31:57 -04:00
Michael Barry dab37f572e
Handle elevations in units besides meters (#226) 2022-05-17 20:23:11 -04:00
dependabot[bot] 6b4eca3a78
Bump jackson.version from 2.13.2 to 2.13.3 (#223) 2022-05-16 06:01:39 -04:00
Michael Barry b1e6848979
Upload artifact during build (#222) 2022-05-12 06:31:07 -04:00
dependabot[bot] 1a55d138e7
Bump spotless-maven-plugin from 2.22.4 to 2.22.5 (#221)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.22.4 to 2.22.5.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/maven/2.22.4...maven/2.22.5)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-11 05:35:42 -04:00
Michael Barry a8bec7a56d
Run nested tests (#218) 2022-05-08 21:12:31 -04:00
Michael Barry 9062e6b79b
Use custom min-heap to improve k-way merge by 30-50% (#217) 2022-05-08 20:00:13 -04:00
Michael Barry 726e6d0107
Parallel temp feature writes using `--write-threads` argument (#213) 2022-05-05 22:02:18 -04:00
Michael Barry 3589fc61f3
More robust multiexpression filtering (#206) 2022-05-04 20:30:47 -04:00
dependabot[bot] b109bd0ee6
Bump spotless-maven-plugin from 2.22.3 to 2.22.4 (#210) 2022-05-04 08:29:15 -04:00
Michael Barry 01b52f9812
Add `--mmap-temp` option to use memory-mapped IO for temp feature files (#209) 2022-05-03 08:59:15 -04:00
Brian Sperlongano 891537e2bc
Implement matchField testing for Expression.not (#201) 2022-04-30 09:42:24 -04:00
Michael Barry 186af36c42
Minimize number of temp feature chunk files (#199) 2022-04-28 20:14:44 -04:00
Brian Sperlongano ffb157414e
Data type support for Expression / MultiExpression (#190) 2022-04-28 07:08:00 -04:00
dependabot[bot] 59a48e1620
Bump spotless-maven-plugin from 2.22.2 to 2.22.3 (#198)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.22.2 to 2.22.3.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.22.2...maven/2.22.3)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-28 05:45:52 -04:00
Michael Barry c1cac1d1d0
ignore generated code from sonar (#197) 2022-04-27 08:10:37 -04:00
Michael Barry b04f4cde0b
Review thread local warnings (#196) 2022-04-27 07:24:14 -04:00
Michael Barry 2db49fc76f
Fix sonar issues with unclosed resources (#195) 2022-04-26 06:26:05 -04:00
dependabot[bot] 4c67e10ed5
Bump spotless-maven-plugin from 2.22.1 to 2.22.2 (#194)
Bumps [spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.22.1 to 2.22.2.
- [Release notes](https://github.com/diffplug/spotless/releases)
- [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md)
- [Commits](https://github.com/diffplug/spotless/compare/lib/2.22.1...lib/2.22.2)

---
updated-dependencies:
- dependency-name: com.diffplug.spotless:spotless-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-25 06:09:22 -04:00
Michael Barry 29a50f59e4
fix sonar warnings in tests (#191) 2022-04-23 06:36:24 -04:00
Michael Barry 5341d4d712
Fix sonar warnings (#181) 2022-04-23 05:58:49 -04:00
dependabot[bot] ae92610f24
Bump mockito-core from 4.5.0 to 4.5.1 (#189) 2022-04-22 06:02:43 -04:00
dependabot[bot] 8f9c1fabe0
Bump maven-javadoc-plugin from 3.3.2 to 3.4.0 (#188)
Bumps [maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.3.2 to 3.4.0.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.3.2...maven-javadoc-plugin-3.4.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-21 07:30:00 -04:00
dependabot[bot] 6c4f22f2d9
Bump mockito-core from 4.4.0 to 4.5.0 (#183)
Bumps [mockito-core](https://github.com/mockito/mockito) from 4.4.0 to 4.5.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v4.4.0...v4.5.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-21 07:19:41 -04:00
dependabot[bot] b67189e2dd
Bump actions/cache from 2 to 3 (#182)
Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-21 07:18:38 -04:00
Michael Barry 48c443135a
Inline sonar token (#186) 2022-04-21 07:09:27 -04:00
Mike Barry 3332d27b16 force 1.0.13 2022-04-20 06:30:13 -04:00
Michael Barry afe1f08a75
Synchronize less in `transportation_name` layer (#180) 2022-04-19 06:38:50 -04:00
Michael Barry ad7502c601
[WIP] Sonar? (#177)
Try using sonarcloud for static analysis
2022-04-19 06:24:52 -04:00
Michael Barry 422c6c0fcb
reduce forest landcover min zoom to 7 (#176) 2022-04-14 05:39:01 -04:00
dependabot[bot] 2742bef48d
Bump actions/setup-java from 2 to 3 (#171)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 2 to 3.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-12 20:14:29 -04:00
dependabot[bot] d0bb275469
Bump geotools.version from 26.3 to 26.4 (#172)
Bumps `geotools.version` from 26.3 to 26.4.

Updates `gt-shapefile` from 26.3 to 26.4

Updates `gt-epsg-hsql` from 26.3 to 26.4

---
updated-dependencies:
- dependency-name: org.geotools:gt-shapefile
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.geotools:gt-epsg-hsql
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-12 09:07:11 -04:00
dependabot[bot] 6a7c679141
Bump actions/upload-artifact from 2 to 3 (#170)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-11 05:58:55 -04:00
Michael Barry 5cfb05a03b
Run `spotless:check` before verify actions in CI (#169)
move spotless:check to standalone ci job
2022-04-09 06:51:59 -04:00
dependabot[bot] 36ab288526
Bump icu4j from 70.1 to 71.1 (#161)
Bumps [icu4j](https://github.com/unicode-org/icu) from 70.1 to 71.1.
- [Release notes](https://github.com/unicode-org/icu/releases)
- [Commits](https://github.com/unicode-org/icu/commits)

---
updated-dependencies:
- dependency-name: com.ibm.icu:icu4j
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-04-08 05:40:33 -04:00
dependabot[bot] c9f55327fa
Bump spotless-maven-plugin from 2.22.0 to 2.22.1 (#159) 2022-04-07 04:55:32 -04:00
dependabot[bot] 1b54b427e1
Bump maven-failsafe-plugin from 3.0.0-M5 to 3.0.0-M6 (#157) 2022-04-05 06:06:32 -04:00
dependabot[bot] 94b8cb3e8e
Bump maven-failsafe-plugin in /.github/planetiler-examples-dependabot (#158) 2022-04-05 06:06:21 -04:00
dependabot[bot] ac3f27c03a
Bump maven-surefire-plugin in /.github/planetiler-examples-dependabot (#156) 2022-04-04 05:48:19 -04:00
dependabot[bot] 91076f5a6c
Bump maven-surefire-plugin from 3.0.0-M5 to 3.0.0-M6 (#155) 2022-04-04 05:48:00 -04:00
dependabot[bot] d2faf27af1
Bump jnr-ffi from 2.2.11 to 2.2.12 (#154) 2022-04-01 04:34:29 -04:00
Mike Barry 3ca78328a2 attach javadoc before signing 2022-03-31 07:20:07 -04:00
Michael Barry 4983bbc04e
0.4.0 tweaks (#153)
* tweaks from running on planet

* add no building merge log

* table format

* update maven descriptions
2022-03-31 06:42:28 -04:00
Mike Barry 827da1912a bump to 0.4-SNAPSHOT 2022-03-31 05:54:57 -04:00
dependabot[bot] 33931ed7f0
Bump jib-maven-plugin from 3.2.0 to 3.2.1 (#152)
Bumps [jib-maven-plugin](https://github.com/GoogleContainerTools/jib) from 3.2.0 to 3.2.1.
- [Release notes](https://github.com/GoogleContainerTools/jib/releases)
- [Commits](https://github.com/GoogleContainerTools/jib/commits)

---
updated-dependencies:
- dependency-name: com.google.cloud.tools:jib-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-31 05:34:28 -04:00
dependabot[bot] 1c76cdc96d
Bump spotless-maven-plugin from 2.21.0 to 2.22.0 (#151) 2022-03-29 06:10:34 -04:00
Yuri Astrakhan bc66bbd352
Linting - spelling, tiny cleanups (#150)
* Linting - spelling, tiny cleanups

Grammar fixes, marked one place as `final`, etc.

* formatting
2022-03-27 05:49:58 -04:00
Mike Barry 96b6f200c6 fix multipolygon size estimate 2022-03-25 19:47:49 -04:00
Mike Barry 11cb4ade2e fix --madvise flag 2022-03-25 19:47:31 -04:00
Michael Barry fb5fe8252f
Don't get transportation_name ref values from minor networks (#148) 2022-03-25 05:42:45 -04:00
Michael Barry 2a8ac32350
Improve name:latin logic (#147)
* name:latin improvements

* improve latin letter regex

* allow region codes and x-extension's on localized names
2022-03-25 05:39:12 -04:00
Robin 34f2be75cd
Allow changing Basemap Base-Url (#143) 2022-03-24 19:24:27 -04:00
Mike Barry 0f084f4028 tweak bug report template 2022-03-23 06:05:11 -04:00
Mike Barry 724c451f5c fix hasTag variants 2022-03-23 05:37:20 -04:00
Michael Barry e20b41c88d
Offload multipolygon storage to disk (reduce memory usage by 10-15gb) (#141) 2022-03-22 20:34:54 -04:00
SomeoneElseOSM 4c6d5e6aa7
Update README.md (#140)
* Update README.md

Fix "planetilerler" typo on "java" line.
Nudge non-Java people into adding methods inside their new class, not outside it.
2022-03-21 20:42:10 -04:00
Michael Barry 313a695abb
Handle more than one centerline for a lake (#139) 2022-03-19 15:16:11 -04:00
Michael Barry bf081692ce
Node location cache: off-heap storage and “array” implementation that supports parallel inserts (#131)
* Add --nodemap-type=array option for 2-3x faster osm pass 1 imports
* Add --nodemap-storage=direct option to experiment with direct (off-heap) memory usage
* Extract ResourceUsage and OsmPhaser utilities
2022-03-19 05:46:03 -04:00
Mike Barry ba7b861a8f remove reference to old profile name 2022-03-17 20:19:29 -04:00
Oliver Wipfli 1cfcca2e20
Read shapefiles in UTF-8 mode (#137) 2022-03-17 08:26:13 -04:00
Oliver Wipfli 332e631507
Check disk space and memory only with OSM input file (#138) 2022-03-16 05:42:44 -04:00
Michael Barry 0a064797fb
Memory-mapped file improvements (#103)
* Use large memory-mapped file segments to avoid running out of space on smaller machines
* Add `--nodemap-madvise` argument to opt into madvise(random) for memory-mapped file access
2022-03-09 07:22:33 -05:00
dependabot[bot] 1c27d833b2
Bump mockito-core from 4.3.1 to 4.4.0 (#130)
Bumps [mockito-core](https://github.com/mockito/mockito) from 4.3.1 to 4.4.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v4.3.1...v4.4.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-08 21:23:55 -05:00
Mike Barry f9c2434725 dependabot change 2022-03-08 21:14:27 -05:00
Mike Barry 628c937c9a fix dependabot wrapper pom 2022-03-08 21:11:31 -05:00
Michael Barry cce51668f2
Migrate to eclipse formatter to support multiple IDEs (#122) 2022-03-08 21:08:03 -05:00
Michael Barry bce75230f2
Move roadmap out of README
These are all tracked in issues now
2022-03-08 07:05:08 -05:00
dependabot[bot] 04da2864a6
Bump msgpack-core from 0.9.0 to 0.9.1 (#123) 2022-03-08 04:46:34 -05:00
dependabot[bot] 5f2733a7fb
Bump jackson.version from 2.13.1 to 2.13.2 (#121) 2022-03-07 06:31:57 -05:00
Michael Barry 385ffa9a50
Use newer lake centerlines from @acalcutt (#116) 2022-03-05 09:09:37 -05:00
Michael Barry 1ce2b5f76c
Retry wikidata requests (#115) 2022-03-05 08:52:20 -05:00
Mike Barry e5acfbd17c Add logs from @ZeLonewolf's r6g ramdisk run 2022-03-05 08:06:15 -05:00
Oliver Wipfli 4c9c24f1aa
Update adoptium links (#94) 2022-03-04 07:22:12 -05:00
Mike Barry 3767cc4719 check disk space and memory after wikidata/download early exit 2022-03-04 05:18:27 -05:00
Michael Barry e93ff79a01
Log direct memory usage (#108) 2022-03-03 20:21:25 -05:00
Michael Barry f051178b46
Test for freeing input file after read (#107) 2022-03-03 08:52:45 -05:00
Mike Barry 0ddba6e9a7 actually delete after run 2022-03-03 08:32:04 -05:00
Michael Barry 20c7a05caa
Warn when running with insufficient memory or disk space (#73) 2022-03-03 07:25:24 -05:00
dependabot[bot] 27bfb0f819
Bump actions/checkout from 2 to 3 (#106) 2022-03-02 04:51:45 -05:00
Michael Barry 8a6997f9dc
Remove graphhopper dependency (#101) 2022-03-01 08:43:19 -05:00
dependabot[bot] 1f75ad2667
Bump guava from 31.0.1-jre to 31.1-jre (#102)
Bumps [guava](https://github.com/google/guava) from 31.0.1-jre to 31.1-jre.
- [Release notes](https://github.com/google/guava/releases)
- [Commits](https://github.com/google/guava/commits)

---
updated-dependencies:
- dependency-name: com.google.guava:guava
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-01 07:17:52 -05:00
Michael Barry 2f05f942b2
Custom PBF parsing (#82)
Pull in pbf parsing to give more control over threading model and performance.
2022-02-28 20:52:30 -05:00
dependabot[bot] 7e8596b0e1
Bump log4j.version from 2.17.1 to 2.17.2 (#100) 2022-02-28 05:10:22 -05:00
dependabot[bot] 4ad4d952a6
Bump actions/setup-node from 2 to 3 (#95) 2022-02-25 05:02:25 -05:00
dependabot[bot] 2017e84475
Bump commonmark from 0.18.1 to 0.18.2 (#96) 2022-02-25 05:01:31 -05:00
Michael Barry 714c636e12
download from quickstart (#93) 2022-02-24 21:21:19 -05:00
Oliver Wipfli 0f2c2e9c76
Add intellij file settings instructions on Linux (#89) 2022-02-24 21:11:08 -05:00
Michael Barry 0d727c4302
Thread stats (#85)
Add more detailed thread and GC stats to summary.
2022-02-24 08:19:44 -05:00
dependabot[bot] aaaaa2f20b
Bump geotools.version from 26.2 to 26.3 (#84) 2022-02-24 05:03:49 -05:00
Mike Barry e7e5cd88c4 fix warnings 2022-02-23 20:45:56 -05:00
Michael Barry 209361eb7e
Support for each loop in workers (#83) 2022-02-23 20:32:41 -05:00
Mike Barry 0357f4ba8f log number of elements 2022-02-23 05:25:32 -05:00
dependabot[bot] 9f97ecd6b6
Bump actions/github-script from 5 to 6 (#79) 2022-02-14 04:47:06 -05:00
Mike Barry 314598c1f6 Add link to OSM-US slack invite app 2022-02-13 06:59:41 -05:00
dependabot[bot] 3d232b9f85
Bump maven-javadoc-plugin from 3.3.1 to 3.3.2 (#76) 2022-02-12 04:36:33 -05:00
dependabot[bot] 187af54b7c
Bump slf4j-api from 1.7.35 to 1.7.36 (#75) 2022-02-10 04:50:02 -05:00
Mike Barry 445e8e8f14 tweak README.md 2022-02-08 09:11:56 -05:00
Michael Barry a6b0072eca
Fix service/man_made npe (#72) 2022-02-07 20:41:02 -05:00
dependabot[bot] e3a47ad4b2
Bump prometheus.version from 0.14.1 to 0.15.0 (#71) 2022-02-07 04:37:37 -05:00
Michael Barry 9638c292b0
Include route relations without a network type (#68) 2022-02-05 06:21:39 -05:00
Mike Barry 5fc7f59d0f add test for bridge construction polygon 2022-02-04 07:40:19 -05:00
Michael Barry de08cf9c28
Handle highways with man_made=bridge (#66) 2022-02-04 07:22:31 -05:00
Michael Barry e092586dfc
Gracefully handle exceptions from profile (#65) 2022-02-04 06:26:26 -05:00
Michael Barry 8d90470d55
Fix unit tests in other locales (#64) 2022-01-27 20:23:24 -05:00
Michael Barry 48ce4cbe23
Fix pedestrian area multipolygons (#63) 2022-01-27 06:14:37 -05:00
dependabot[bot] 31a16226a1
Bump slf4j-api from 1.7.33 to 1.7.35 (#62) 2022-01-27 05:09:25 -05:00
dependabot[bot] 9938e11f24
Bump mockito-core from 4.3.0 to 4.3.1 (#60) 2022-01-26 05:40:33 -05:00
dependabot[bot] 43dbc005d7
Bump mockito-core from 4.2.0 to 4.3.0 (#59) 2022-01-25 05:02:51 -05:00
dependabot[bot] 87ba194e63
Bump geotools.version from 26.1 to 26.2 (#58) 2022-01-24 04:46:31 -05:00
dependabot[bot] 0f0e43cc0b
Bump jib-maven-plugin from 3.1.4 to 3.2.0 (#57) 2022-01-20 05:37:20 -05:00
Mike Barry 980dcfab7e 0.3-SNAPSHOT 2022-01-19 06:10:41 -05:00
Michael Barry 9c1472fd30
Upgrade planetiler-basemap to be compatible with OpenMapTiles 3.13 (#49)
Applying changes to layers from [OpenMapTiles 3.13 release](https://github.com/openmaptiles/openmaptiles/releases/tag/v3.13) (https://github.com/openmaptiles/openmaptiles/compare/v3.12.2...v3.13), minus transportation network connectivity improvements - those will be a separate change.
2022-01-19 05:36:44 -05:00
Michael Barry 6f2dbc4f4b
Add profile hooks for preprocessing OSM nodes and ways (#56) 2022-01-16 10:00:57 -05:00
dependabot[bot] ad9d547ffc
Bump slf4j-api from 1.7.32 to 1.7.33 (#55) 2022-01-14 04:52:30 -05:00
dependabot[bot] 26989da07e
Bump maven-jar-plugin from 3.2.1 to 3.2.2 (#53) 2022-01-13 05:12:06 -05:00
Mike Barry b6ba928be1 Revert "allow using label grid on lines and polygons too (#51)"
This reverts commit 1c622ffdfb.
2022-01-10 06:41:15 -05:00
dependabot[bot] b8911b0f83
Bump maven-jar-plugin from 3.2.0 to 3.2.1 (#52) 2022-01-10 05:12:13 -05:00
Michael Barry 1c622ffdfb
allow using label grid on lines and polygons too (#51) 2022-01-09 12:02:46 -05:00
Michael Barry bf99918198
Treat boundary and land_area relation types as multipolygons (#50) 2022-01-07 10:01:22 -05:00
dependabot[bot] f7a129168d
Bump maven-deploy-plugin from 3.0.0-M1 to 3.0.0-M2 (#48) 2021-12-31 04:35:16 -05:00
dependabot[bot] db8717d8c2
Bump reproducible-build-maven-plugin from 0.14 to 0.15 (#45) 2021-12-30 04:35:46 -05:00
dependabot[bot] af53451643
Bump log4j.version from 2.17.0 to 2.17.1 (#44) 2021-12-29 06:18:10 -05:00
509 zmienionych plików z 136227 dodań i 25143 usunięć

Wyświetl plik

@ -1,8 +1,9 @@
---
name: Bug report
about: Create a report to help improve Planetiler
title: "[BUG] "
labels: ''
labels: ["bug"]
assignees: ''
---
@ -18,7 +19,8 @@ Steps to reproduce the behavior:
3. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
A clear and concise description of what you expected to happen. For map data issues, plase include OSM element IDs and
the vector tile features you expect in the output to make help reproduce the issue in tests.
**Screenshots**
If applicable, add screenshots to help explain your problem (include tile IDs or latitude/longitude for visual issues

Wyświetl plik

@ -1,4 +1,5 @@
---
name: Feature request
about: Suggest an idea for Planetiler
title: "[FEATURE] "

Wyświetl plik

@ -12,7 +12,7 @@ runs:
- name: Get Date
id: get-data
run: |
echo "::set-output name=hash::${{ hashFiles('**/Planetiler.java', '**/Downloader.java', '**/Geofabrik.java', '**/BasemapMain.java') }}"
echo "::set-output name=hash::${{ hashFiles('**/Planetiler.java', '**/Downloader.java', '**/Geofabrik.java', '**/OpenMapTilesMain.java') }}"
echo "::set-output name=date::$(date -u "+%Y-%m-%d")"
shell: bash
working-directory: ${{ inputs.basedir }}

Wyświetl plik

@ -3,34 +3,36 @@
version: 2
updates:
- package-ecosystem: maven
directory: "/"
open-pull-requests-limit: 1
schedule:
interval: daily
time: "04:30"
timezone: America/New_York
labels:
- dependencies
ignore:
- dependency-name: "com.graphhopper:graphhopper-reader-osm"
- package-ecosystem: maven
directory: "/planetiler-examples"
open-pull-requests-limit: 1
schedule:
interval: daily
time: "04:30"
timezone: America/New_York
labels:
- dependencies
ignore:
- dependency-name: "com.onthegomap.planetiler:*"
- package-ecosystem: github-actions
directory: "/"
open-pull-requests-limit: 1
schedule:
interval: daily
time: "04:30"
timezone: America/New_York
labels:
- dependencies
- package-ecosystem: maven
directory: "/"
open-pull-requests-limit: 1
schedule:
interval: daily
time: "04:25"
timezone: America/New_York
labels:
- dependencies
ignore:
- dependency-name: "com.google.protobuf:protobuf-java"
versions: [ "3.23.3" ]
- package-ecosystem: maven
# workaround for non-standard pom.xml filename (https://github.com/dependabot/dependabot-core/issues/4425)
directory: "/.github/planetiler-examples-dependabot"
open-pull-requests-limit: 1
schedule:
interval: daily
time: "04:30"
timezone: America/New_York
labels:
- dependencies
ignore:
- dependency-name: "com.onthegomap.planetiler:*"
- package-ecosystem: github-actions
directory: "/"
open-pull-requests-limit: 1
schedule:
interval: daily
time: "04:30"
timezone: America/New_York
labels:
- dependencies

Wyświetl plik

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This is just a workaround for https://github.com/dependabot/dependabot-core/issues/4425 so that
dependabot can update planetiler-examples/standalone.pom.xml without referring directly to a pom.xml with a
non-standard name.
-->
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>
<groupId>com.onthegomap.planetiler</groupId>
<artifactId>planetiler-examples-parent-for-dependabot</artifactId>
<version>HEAD</version>
<packaging>pom</packaging>
<modules>
<module>../../planetiler-examples/standalone.pom.xml</module>
</modules>
</project>

Wyświetl plik

@ -12,9 +12,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
with:
# don't need to check planetiler-openmaptiles
submodules: false
- name: Run link check
uses: gaurav-nelson/github-action-markdown-link-check@v1
uses: gaurav-nelson/github-action-markdown-link-check@1.0.13
with:
use-quiet-mode: 'no'
use-verbose-mode: 'yes'

Wyświetl plik

@ -3,5 +3,8 @@
{
"pattern": "^http://localhost.*$"
}
]
],
"retryOn429": true,
"retryCount": 5,
"fallbackRetryDelay": "30s"
}

Wyświetl plik

@ -8,101 +8,146 @@ on:
branches: [ main ]
jobs:
# TODO: add format/checkstyle
# When spotless:apply fails, the error message is a bit cryptic, so try to make it obvious that
# is the problem by putting the check into a standalone job
lint:
name: Check formatting
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
cache: 'maven'
- name: Ensure code formatted with mvn spotless:apply
run: ./mvnw -DskipTests --batch-mode -no-transfer-progress spotless:check
build:
name: Java ${{ matrix.jdk }} / ${{ matrix.os }}
name: Java ${{ matrix.jdk }} / ${{ matrix.os }} ${{ matrix.args }}
# Wait until after we check that you ran mvn spotless:apply, otherwise will fail with a cryptic error message
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
jdk: [ 17 ]
jdk: [ 21 ]
include:
- os: ubuntu-latest
jdk: 16
- os: ubuntu-latest
jdk: 21
args: "-DargLine='-Duser.language=fr -Duser.country=FR'"
- os: ubuntu-latest
jdk: 21
args: ""
runs-on: ${{ matrix.os }}
timeout-minutes: 5
timeout-minutes: 15
steps:
- uses: actions/checkout@v2
- name: Set up JDK ${{ matrix.jdk }}
uses: actions/setup-java@v2
with:
java-version: ${{ matrix.jdk }}
distribution: 'temurin'
cache: 'maven'
- name: Build with mvnw (linux/mac)
if: ${{ !contains(matrix.os, 'windows') }}
run: ./mvnw --batch-mode -no-transfer-progress package jib:buildTar --file pom.xml
- name: Build with mvnw.cmd (windows)
if: ${{ contains(matrix.os, 'windows') }}
run: mvnw.cmd --batch-mode -no-transfer-progress package jib:buildTar --file pom.xml
shell: cmd
regenerate:
name: Regenerate
runs-on: macos-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: 17
distribution: 'temurin'
cache: 'maven'
- run: ./scripts/regenerate-openmaptiles.sh
- run: ./mvnw -DskipTests --batch-mode -no-transfer-progress clean install -pl planetiler-basemap -am
- run: ./mvnw --batch-mode -no-transfer-progress test -pl planetiler-basemap
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up JDK ${{ matrix.jdk }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.jdk }}
distribution: 'temurin'
cache: 'maven'
# Skip spotless since that gets checked in a separate task
- name: Build with mvnw (linux/mac)
if: ${{ !contains(matrix.os, 'windows') }}
run: ./mvnw ${{matrix.args}} -Dspotless.check.skip --batch-mode -no-transfer-progress package verify jib:buildTar --file pom.xml
- name: Build with mvnw.cmd (windows)
if: ${{ contains(matrix.os, 'windows') }}
run: mvnw.cmd ${{matrix.args}} -Dspotless.check.skip --batch-mode -no-transfer-progress package verify jib:buildTar --file pom.xml
shell: cmd
examples:
name: Example project
runs-on: ubuntu-latest
timeout-minutes: 5
timeout-minutes: 15
continue-on-error: true
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: 17
distribution: 'temurin'
- name: Build and test
run: mvn --batch-mode -no-transfer-progress package --file pom.xml
working-directory: planetiler-examples
- name: Find jar
run: mv target/*with-deps.jar ./run.jar
working-directory: planetiler-examples
- name: Run
run: java -jar run.jar --osm-path=../planetiler-core/src/test/resources/monaco-latest.osm.pbf --mbtiles=data/out.mbtiles
working-directory: planetiler-examples
- name: Verify
run: java -cp run.jar com.onthegomap.planetiler.mbtiles.Verify data/out.mbtiles
working-directory: planetiler-examples
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
- name: Build and test
run: mvn --batch-mode -no-transfer-progress package --file standalone.pom.xml
working-directory: planetiler-examples
- name: Find jar
run: mv target/*with-deps.jar ./run.jar
working-directory: planetiler-examples
- name: Run
run: java -jar run.jar --osm-path=../planetiler-core/src/test/resources/monaco-latest.osm.pbf --output=data/out.mbtiles
working-directory: planetiler-examples
- name: Verify
run: java -cp run.jar com.onthegomap.planetiler.mbtiles.Verify data/out.mbtiles
working-directory: planetiler-examples
run:
name: Build / Run
runs-on: ubuntu-latest
timeout-minutes: 5
timeout-minutes: 15
steps:
- uses: actions/checkout@v2
- name: Cache data/sources
uses: ./.github/cache-sources-action
- name: Set up JDK
uses: actions/setup-java@v2
with:
java-version: 17
distribution: 'temurin'
cache: 'maven'
- uses: actions/checkout@v4
with:
submodules: true
- name: Cache data/sources
uses: ./.github/cache-sources-action
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
cache: 'maven'
- name: Build this branch
run: ./mvnw -DskipTests -Dimage.version=CI_ONLY --batch-mode -no-transfer-progress package jib:dockerBuild --file pom.xml
- name: Build this branch
run: ./mvnw -DskipTests -Dimage.version=CI_ONLY --batch-mode -no-transfer-progress package jib:dockerBuild --file pom.xml
- name: Download data (java)
run: java -jar planetiler-dist/target/*with-deps.jar --only-download --area=monaco
- name: 'Upload artifact'
uses: actions/upload-artifact@v4
with:
name: planetiler-build
path: planetiler-dist/target/*with-deps.jar
- name: Download wikidata (java)
run: java -jar planetiler-dist/target/*with-deps.jar --only-fetch-wikidata --area=monaco
- name: Download data (java)
run: java -jar planetiler-dist/target/*with-deps.jar --only-download --area=monaco
- name: Verify build
run: ./scripts/test-release.sh CI_ONLY
env:
SKIP_EXAMPLE_PROJECT: true
- name: Download wikidata (java)
run: java -jar planetiler-dist/target/*with-deps.jar --only-fetch-wikidata --area=monaco
- name: Verify build
run: ./scripts/test-release.sh CI_ONLY
env:
SKIP_EXAMPLE_PROJECT: true
quickstart:
name: Quickstart script
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Cache data/sources
uses: ./.github/cache-sources-action
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
cache: 'maven'
- name: quickstart.sh --build
run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --build && ./scripts/check-monaco.sh data/output.mbtiles
- name: quickstart.sh --jar
run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --jar && ./scripts/check-monaco.sh data/output.mbtiles
# run docker last since it creates temp dirs with root user
- name: quickstart.sh --docker
run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --docker && ./scripts/check-monaco.sh data/output.mbtiles

Wyświetl plik

@ -22,71 +22,73 @@ jobs:
timeout-minutes: 20
continue-on-error: true
steps:
- name: 'Cancel previous runs'
uses: styfle/cancel-workflow-action@0.9.1
with:
access_token: ${{ github.token }}
- name: 'Checkout branch'
uses: actions/checkout@v2
with:
path: branch
- name: 'Checkout base'
uses: actions/checkout@v2
with:
path: base
ref: ${{ github.event.pull_request.base.sha }}
- name: Cache data/sources
uses: ./branch/.github/cache-sources-action
with:
basedir: branch
- name: Set up JDK
uses: actions/setup-java@v2
with:
java-version: 17
distribution: 'temurin'
cache: 'maven'
- uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install -g strip-ansi-cli@3.0.2
- name: 'Cancel previous runs'
uses: styfle/cancel-workflow-action@0.12.1
with:
access_token: ${{ github.token }}
- name: 'Checkout branch'
uses: actions/checkout@v4
with:
path: branch
submodules: true
- name: 'Checkout base'
uses: actions/checkout@v4
with:
path: base
ref: ${{ github.event.pull_request.base.sha }}
submodules: true
- name: Cache data/sources
uses: ./branch/.github/cache-sources-action
with:
basedir: branch
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
cache: 'maven'
- uses: actions/setup-node@v4
with:
node-version: '14'
- run: npm install -g strip-ansi-cli@3.0.2
- name: 'Build branch'
run: ./scripts/build.sh
working-directory: branch
- name: 'Build base'
run: ./scripts/build.sh
working-directory: base
- name: 'Build branch'
run: ./scripts/build.sh
working-directory: branch
- name: 'Build base'
run: ./scripts/build.sh
working-directory: base
- name: 'Download data'
run: |
set -eo pipefail
cp base/planetiler-dist/target/*with-deps.jar run.jar && java -jar run.jar --only-download --area="${{ env.AREA }}"
cp branch/planetiler-dist/target/*with-deps.jar run.jar && java -jar run.jar --only-download --area="${{ env.AREA }}"
- name: 'Download data'
run: |
set -eo pipefail
cp base/planetiler-dist/target/*with-deps.jar run.jar && java -jar run.jar --only-download --area="${{ env.AREA }}"
cp branch/planetiler-dist/target/*with-deps.jar run.jar && java -jar run.jar --only-download --area="${{ env.AREA }}"
- name: 'Store build info'
run: |
mkdir build-info
echo "${{ github.event.pull_request.base.sha }}" > build-info/base_sha
echo "${{ github.sha }}" > build-info/branch_sha
echo "${{ github.event.number }}" > build-info/pull_request_number
- name: 'Store build info'
run: |
mkdir build-info
echo "${{ github.event.pull_request.base.sha }}" > build-info/base_sha
echo "${{ github.sha }}" > build-info/branch_sha
echo "${{ github.event.number }}" > build-info/pull_request_number
- name: 'Run branch'
run: |
rm -f data/out.mbtiles
cp branch/planetiler-dist/target/*with-deps.jar run.jar
java -Xms${{ env.RAM }} -Xmx${{ env.RAM }} -jar run.jar --area="${{ env.AREA }}" "${{ env.BOUNDS_ARG }}" --mbtiles=data/out.mbtiles 2>&1 | tee log
ls -alh run.jar | tee -a log
cat log | strip-ansi > build-info/branchlogs.txt
- name: 'Run base'
run: |
rm -f data/out.mbtiles
cp base/planetiler-dist/target/*with-deps.jar run.jar
java -Xms${{ env.RAM }} -Xmx${{ env.RAM }} -jar run.jar --area="${{ env.AREA }}" "${{ env.BOUNDS_ARG }}" --mbtiles=data/out.mbtiles 2>&1 | tee log
ls -alh run.jar | tee -a log
cat log | strip-ansi > build-info/baselogs.txt
- name: 'Run branch'
run: |
rm -rf data/out.mbtiles data/tmp
cp branch/planetiler-dist/target/*with-deps.jar run.jar
java -Xms${{ env.RAM }} -Xmx${{ env.RAM }} -jar run.jar --area="${{ env.AREA }}" "${{ env.BOUNDS_ARG }}" --output=data/out.mbtiles --keep-unzipped 2>&1 | tee log
ls -alh run.jar | tee -a log
cat log | strip-ansi > build-info/branchlogs.txt
- name: 'Run base'
run: |
rm -rf data/out.mbtiles data/tmp
cp base/planetiler-dist/target/*with-deps.jar run.jar
java -Xms${{ env.RAM }} -Xmx${{ env.RAM }} -jar run.jar --area="${{ env.AREA }}" "${{ env.BOUNDS_ARG }}" --output=data/out.mbtiles --keep-unzipped 2>&1 | tee log
ls -alh run.jar | tee -a log
cat log | strip-ansi > build-info/baselogs.txt
- name: 'Upload build-info'
uses: actions/upload-artifact@v2
with:
name: build-info
path: ./build-info
- name: 'Upload build-info'
uses: actions/upload-artifact@v4
with:
name: build-info
path: ./build-info

Wyświetl plik

@ -9,72 +9,74 @@ on:
image_tags:
description: 'Extra docker image tags ("latest,test")'
required: true
default: 'latest'
default: 'latest,release'
jobs:
publish:
runs-on: ubuntu-latest
timeout-minutes: 10
timeout-minutes: 20
permissions:
contents: write
packages: write
steps:
- name: Ensure version does not start with 'v'
uses: actions/github-script@v5
with:
github-token: ${{ github.token }}
script: |
version = context.payload.inputs.version;
if (/^v/.test(version)) throw new Error("Bad version number: " + version)
- uses: actions/checkout@v2
- name: Cache data/sources
uses: ./.github/cache-sources-action
- uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'temurin'
cache: 'maven'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Ensure version does not start with 'v'
uses: actions/github-script@v7
with:
github-token: ${{ github.token }}
script: |
version = context.payload.inputs.version;
if (/^v/.test(version)) throw new Error("Bad version number: " + version)
- uses: actions/checkout@v4
with:
submodules: true
- name: Cache data/sources
uses: ./.github/cache-sources-action
- uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'maven'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Check tag does not exist yet
run: if git rev-list "v${{ github.event.inputs.version }}"; then echo "Tag already exists. Aborting the release process."; exit 1; fi
- name: Check tag does not exist yet
run: if git rev-list "v${{ github.event.inputs.version }}"; then echo "Tag already exists. Aborting the release process."; exit 1; fi
- run: ./scripts/set-versions.sh "${{ github.event.inputs.version }}"
- run: ./scripts/build-release.sh
- run: ./scripts/test-release.sh "${{ github.event.inputs.version }}"
- name: Create tag
uses: actions/github-script@v5
with:
github-token: ${{ github.token }}
script: |
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: "refs/tags/v${{ github.event.inputs.version }}",
sha: context.sha
})
- run: mv planetiler-dist/target/*with-deps.jar planetiler.jar
- run: sha256sum planetiler.jar > planetiler.jar.sha256
- run: md5sum planetiler.jar > planetiler.jar.md5
- name: Install GPG Private Key
run: |
echo -n "${{ secrets.OSSRH_GPG_SECRET_KEY }}" | base64 --decode | gpg --batch --import
- name: Create Release
uses: softprops/action-gh-release@v1
with:
fail_on_unmatched_files: true
tag_name: v${{ github.event.inputs.version }}
draft: true
files: |
planetiler.jar*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: ./scripts/push-release.sh ${{ github.event.inputs.version }}
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
IMAGE_TAGS: ${{ github.event.inputs.image_tags }}
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
OSSRH_GPG_SECRET_KEY_PASSWORD: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}
- run: ./scripts/set-versions.sh "${{ github.event.inputs.version }}"
- run: ./scripts/build-release.sh
- run: ./scripts/test-release.sh "${{ github.event.inputs.version }}"
- name: Create tag
uses: actions/github-script@v7
with:
github-token: ${{ github.token }}
script: |
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: "refs/tags/v${{ github.event.inputs.version }}",
sha: context.sha
})
- run: mv planetiler-dist/target/*with-deps.jar planetiler.jar
- run: sha256sum planetiler.jar > planetiler.jar.sha256
- run: md5sum planetiler.jar > planetiler.jar.md5
- name: Install GPG Private Key
run: |
echo -n "${{ secrets.OSSRH_GPG_SECRET_KEY }}" | base64 --decode | gpg --batch --import
- name: Create Release
uses: softprops/action-gh-release@v2
with:
fail_on_unmatched_files: true
tag_name: v${{ github.event.inputs.version }}
draft: true
files: |
planetiler.jar*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: ./scripts/push-release.sh ${{ github.event.inputs.version }}
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
IMAGE_TAGS: ${{ github.event.inputs.image_tags }}
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
OSSRH_GPG_SECRET_KEY_PASSWORD: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}

Wyświetl plik

@ -16,33 +16,42 @@ on:
jobs:
snapshot:
runs-on: ubuntu-latest
timeout-minutes: 10
timeout-minutes: 20
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v2
- name: Cache data/sources
uses: ./.github/cache-sources-action
- name: Set up JDK
uses: actions/setup-java@v2
with:
java-version: 17
distribution: 'temurin'
cache: 'maven'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- run: ./scripts/build-release.sh
- run: ./scripts/test-release.sh
- name: Install GPG Private Key
run: |
echo -n "${{ secrets.OSSRH_GPG_SECRET_KEY }}" | base64 --decode | gpg --batch --import
- run: ./scripts/push-release.sh
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
IMAGE_TAGS: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.image_tags || 'latest,snapshot' }}
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
OSSRH_GPG_SECRET_KEY_PASSWORD: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}
- uses: actions/checkout@v4
with:
submodules: true
- name: Cache data/sources
uses: ./.github/cache-sources-action
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
cache: 'maven'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- run: ./scripts/build-release.sh
- run: ./scripts/test-release.sh
- run: sha256sum planetiler-dist/target/*with-deps.jar
- run: md5sum planetiler-dist/target/*with-deps.jar
- name: 'Upload artifact'
uses: actions/upload-artifact@v4
with:
name: planetiler-build
path: planetiler-dist/target/*with-deps.jar
- name: Install GPG Private Key
run: |
echo -n "${{ secrets.OSSRH_GPG_SECRET_KEY }}" | base64 --decode | gpg --batch --import
- run: ./scripts/push-release.sh
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
IMAGE_TAGS: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.image_tags || 'latest,snapshot' }}
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
OSSRH_GPG_SECRET_KEY_PASSWORD: ${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}

80
.github/workflows/sonar.yml vendored 100644
Wyświetl plik

@ -0,0 +1,80 @@
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Analyze
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
sonar:
name: Analyze with Sonar
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
with:
# Disabling shallow clone is recommended for improving relevancy of reporting
fetch-depth: 0
submodules: true
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
cache: 'maven'
- name: Cache SonarCloud packages
uses: actions/cache@v4
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Analyze with SonarCloud
run: |
mvn -Dspotless.check.skip -Pcoverage -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
env:
# Needed to get some information about the pull request, if any
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Read-only user, use this token to link SonarLint to SonarCloud as well
SONAR_TOKEN: c2cfe8bd7368ced07e84a620b7c2487846e220eb
- name: Wait for SonarCloud API to update...
run: "sleep 10"
- name: Upload annotations on PRs
if: ${{ github.event_name == 'pull_request' }}
uses: actions/github-script@v7
with:
github-token: ${{ github.token }}
script: |
const pr = context.payload.pull_request.number;
const url = `https://sonarcloud.io/api/issues/search?pullRequest=${pr}&s=FILE_LINE&resolved=false&sinceLeakPeriod=true&ps=100&facets=severities%2Ctypes&componentKeys=onthegomap_planetiler&organization=onthegomap&additionalFields=_all`;
console.log("Fetching " + url);
const response = await github.request(url);
console.log("Got " + JSON.stringify(response.data));
response.data.issues.forEach(issue => {
try {
if (issue.severity === 'INFO') return;
const textRange = issue.textRange;
const rule = encodeURIComponent(issue.rule);
const message = [
issue.message,
'',
`rule: ${issue.rule} (https://sonarcloud.io/organizations/onthegomap/rules?open=${rule}&rule_key=${rule})`,
`issue url: https://sonarcloud.io/project/issues?pullRequest=${pr}&open=${encodeURIComponent(issue.key)}&id=onthegomap_planetiler`
].join('\n');
const args = {
title: `${issue.severity} ${issue.type}`,
file: issue.component.replace(/^[^:]*:/, ''),
startLine: textRange.startLine,
endLine: textRange.endLine,
startColumn: textRange.startOffset,
endColumn: textRange.endOffset
};
core.warning(message, args);
console.log(args);
} catch (e) {
core.error(`Unable to parse sonar issue: ${JSON.stringify(issue)}`);
}
});

Wyświetl plik

@ -7,7 +7,7 @@ on:
workflow_run:
workflows: [ "Performance" ]
types:
- completed
- completed
jobs:
updatepr:
@ -16,74 +16,61 @@ jobs:
if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' }}
timeout-minutes: 5
steps:
# report status back to pull request
- uses: haya14busa/action-workflow_run-status@v1
- uses: actions/checkout@v2
- name: 'Download branch build info'
uses: dawidd6/action-download-artifact@v2
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
run_id: ${{ github.event.workflow_run.id }}
name: build-info
path: build-info
repo: onthegomap/planetiler
- name: 'Get build info'
id: build_info
run: echo "::set-output name=pr_number::$(cat build-info/pull_request_number)"
- name: 'Build comment-body'
run: |
cat build-info/branchlogs.txt | sed -n '/^.*Tile stats/,$p' > branchsummary.txt
cat build-info/branchlogs.txt | sed -n '/^.*Exception in thread/,$p' >> branchsummary.txt
cat build-info/baselogs.txt | sed -n '/^.*Tile stats:/,$p' > basesummary.txt
cat build-info/baselogs.txt | sed -n '/^.*Exception in thread/,$p' >> basesummary.txt
# report status back to pull request
- uses: haya14busa/action-workflow_run-status@v1
- uses: actions/checkout@v4
with:
submodules: true
- name: 'Download branch build info'
uses: dawidd6/action-download-artifact@v3
with:
workflow: ${{ github.event.workflow_run.workflow_id }}
run_id: ${{ github.event.workflow_run.id }}
name: build-info
path: build-info
- name: 'Get build info'
id: build_info
run: echo "::set-output name=pr_number::$(cat build-info/pull_request_number)"
- name: 'Build comment-body'
run: |
cat build-info/branchlogs.txt | sed -n '/^.*Tile stats/,/\tfeatures\t/p' > branchsummary.txt
cat build-info/branchlogs.txt | sed -n '/^.*Exception in thread/,$p' >> branchsummary.txt
cat build-info/baselogs.txt | sed -n '/^.*Tile stats/,/\tfeatures\t/p' > basesummary.txt
cat build-info/baselogs.txt | sed -n '/^.*Exception in thread/,$p' >> basesummary.txt
cat << EOF > comment-body.txt
<table>
<thead>
<tr>
<th>Base $(cat build-info/base_sha)</th>
<th>This Branch $(cat build-info/branch_sha)</th>
</tr>
</thead>
<tr>
<td>
cat << EOF > comment-body.txt
<table>
<thead>
<tr>
<th>This Branch $(cat build-info/branch_sha)</th>
<th>Base $(cat build-info/base_sha)</th>
</tr>
</thead>
<tr>
<td>
\`\`\`
$(cat basesummary.txt)
\`\`\`
</td>
<td>
\`\`\`
$(cat branchsummary.txt)
\`\`\`
</td>
<td>
\`\`\`
$(cat build-info/branchlogs.txt | sed -n '/^.*Tile stats:/,$p')
\`\`\`
</td>
</tr>
</table>
\`\`\`
$(cat basesummary.txt)
\`\`\`
</td>
</tr>
</table>
https://github.com/onthegomap/planetiler/actions/runs/${{ github.event.workflow_run.id }}
Full logs: https://github.com/onthegomap/planetiler/actions/runs/${{ github.event.workflow_run.id }}
EOF
<details><summary> <strong>Base Logs $(cat build-info/base_sha)</strong></summary>
- name: 'Dump comment body'
run: cat comment-body.txt
\`\`\`
$(cat build-info/baselogs.txt)
\`\`\`
</details>
<details><summary> <strong>This Branch Logs $(cat build-info/branch_sha)</strong></summary>
\`\`\`
$(cat build-info/branchlogs.txt)
\`\`\`
</details>
EOF
- name: 'Dump comment body'
run: cat comment-body.txt
- uses: marocchino/sticky-pull-request-comment@v2
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
path: comment-body.txt
header: performance-tests
number: ${{ steps.build_info.outputs.pr_number }}
- uses: marocchino/sticky-pull-request-comment@v2
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
path: comment-body.txt
header: performance-tests
number: ${{ steps.build_info.outputs.pr_number }}

11
.gitignore vendored
Wyświetl plik

@ -1,16 +1,27 @@
.DS_Store
target/
.flattened-pom.xml
*.jar
!.mvn/wrapper/*.jar
*.log
# idea
*/.idea
.idea/*
*.iml
!.idea/codeStyles
!.idea/vcs.xml
!.idea/eclipseCodeFormatter.xml
!.idea/jsonSchemas.xml
# eclipse
.classpath
.project
.settings
bin/
TODO
data/
*-unzipped/

4
.gitmodules vendored 100644
Wyświetl plik

@ -0,0 +1,4 @@
[submodule "planetiler-openmaptiles"]
path = planetiler-openmaptiles
url = https://github.com/openmaptiles/planetiler-openmaptiles.git
branch = main

Wyświetl plik

@ -114,6 +114,9 @@
<XML>
<option name="XML_ALIGN_ATTRIBUTES" value="false" />
</XML>
<yaml>
<option name="INDENT_SEQUENCE_VALUE" value="false" />
</yaml>
<codeStyleSettings language="CSS">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
@ -265,6 +268,7 @@
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="XML">
<option name="RIGHT_MARGIN" value="120" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />

Wyświetl plik

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EclipseCodeFormatterProjectSettings">
<option name="projectSpecificProfile">
<ProjectSpecificProfile>
<option name="formatter" value="ECLIPSE" />
<option name="importOrder" value="#;" />
<option name="pathToConfigFileJava" value="$PROJECT_DIR$/eclipse-formatter.xml" />
<option name="selectedJavaProfile" value="Planetiler" />
</ProjectSpecificProfile>
</option>
</component>
</project>

Wyświetl plik

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JsonSchemaMappingsProjectConfiguration">
<state>
<map>
<entry key="JSON Schema version 7">
<value>
<SchemaInfo>
<option name="name" value="JSON Schema version 7" />
<option name="relativePathToSchema" value="http://json-schema.org/draft-07/schema" />
<option name="schemaVersion" value="JSON Schema version 7" />
<option name="applicationDefined" value="true" />
<option name="patterns">
<list>
<Item>
<option name="path" value="planetiler.schema.yml" />
</Item>
</list>
</option>
</SchemaInfo>
</value>
</entry>
<entry key="Planetiler">
<value>
<SchemaInfo>
<option name="generatedName" value="New Schema" />
<option name="name" value="Planetiler" />
<option name="relativePathToSchema" value="planetiler-custommap/planetiler.schema.json" />
<option name="schemaVersion" value="JSON Schema version 7" />
<option name="patterns">
<list>
<Item>
<option name="directory" value="true" />
<option name="path" value="planetiler-custommap" />
<option name="mappingKind" value="Directory" />
</Item>
</list>
</option>
</SchemaInfo>
</value>
</entry>
</map>
</state>
</component>
</project>

Wyświetl plik

@ -2,5 +2,6 @@
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/planetiler-openmaptiles" vcs="Git" />
</component>
</project>

5
.mvn/jvm.config 100644
Wyświetl plik

@ -0,0 +1,5 @@
--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED

11
.vscode/settings.json vendored 100644
Wyświetl plik

@ -0,0 +1,11 @@
{
"java.format.settings.url": "eclipse-formatter.xml",
"java.format.settings.profile": "Planetiler",
"java.completion.importOrder": ["#", ""],
"java.sources.organizeImports.staticStarThreshold": 5,
"java.sources.organizeImports.starThreshold": 999,
"java.saveActions.organizeImports": true,
"yaml.schemas": {
"./planetiler-custommap/planetiler.schema.json": "planetiler-custommap/**/*.yml"
}
}

Wyświetl plik

@ -4,12 +4,13 @@
Planetiler builds a map in 3 phases:
1. [Process Input Files](#1-process-input-files) according to
the [Profile](planetiler-core/src/main/java/com/onthegomap/planetiler/Profile.java) and write rendered tile features
to intermediate files on disk
1. [Process Input Files](#1-process-input-files) according to the [Profile](#profiles) and write vector tile features to
intermediate files on disk
2. [Sort Features](#2-sort-features) by tile ID
3. [Emit Vector Tiles](#3-emit-vector-tiles) by iterating through sorted features to group by tile ID, encoding, and
writing to the output MBTiles file
writing to the output tile archive
User-defined [profiles](#profiles) customize the behavior of each part of this pipeline.
## 1) Process Input Files
@ -28,7 +29,8 @@ from each input source:
- nodes: store node latitude/longitude locations in-memory or on disk
using [LongLongMap](planetiler-core/src/main/java/com/onthegomap/planetiler/collection/LongLongMap.java)
- ways: nothing
- relations: call `preprocessOsmRelation` on the profile and store information returned for each relation of
- relations: call `preprocessOsmRelation` on the [profile](#profiles) and store information returned for each
relation of
interest, along with relation member IDs in-memory using
a [LongLongMultimap](planetiler-core/src/main/java/com/onthegomap/planetiler/collection/LongLongMultimap.java).
- pass 2:
@ -46,11 +48,9 @@ from each input source:
then emit a polygon source feature with the reconstructed geometry if successful
Then, for each [SourceFeature](planetiler-core/src/main/java/com/onthegomap/planetiler/reader/SourceFeature.java),
render vector tile features according to
the [Profile](planetiler-core/src/main/java/com/onthegomap/planetiler/Profile.java) in a worker thread (default 1 per
core):
generate vector tile features according to the [profile](#profiles) in a worker thread (default 1 per core):
- Call `processFeature` method on the profile for each source feature
- Call `processFeature` method on the [profile](#profiles) for each source feature
- For every vector tile feature added to
the [FeatureCollector](planetiler-core/src/main/java/com/onthegomap/planetiler/FeatureCollector.java):
- Call [FeatureRenderer#accept](planetiler-core/src/main/java/com/onthegomap/planetiler/render/FeatureRenderer.java)
@ -96,7 +96,8 @@ of the intermediate features using a worker thread per core:
## 3) Emit Vector Tiles
[MbtilesWriter](planetiler-core/src/main/java/com/onthegomap/planetiler/mbtiles/MbtilesWriter.java) is the main driver.
[TileArchiveWriter](planetiler-core/src/main/java/com/onthegomap/planetiler/archive/TileArchiveWriter.java) is the main
driver.
First, a single-threaded reader reads features from disk:
- [ExternalMergeSort](planetiler-core/src/main/java/com/onthegomap/planetiler/collection/ExternalMergeSort.java) emits
@ -104,7 +105,8 @@ First, a single-threaded reader reads features from disk:
- [FeatureGroup](planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureGroup.java) collects
consecutive features in the same tile into a `TileFeatures` instance, dropping features in the same group over the
grouping limit to limit point label density
- Then [MbtilesWriter](planetiler-core/src/main/java/com/onthegomap/planetiler/mbtiles/MbtilesWriter.java) groups tiles
- Then [TileArchiveWriter](planetiler-core/src/main/java/com/onthegomap/planetiler/archive/TileArchiveWriter.java)
groups tiles
into variable-sized batches for workers to process (complex tiles get their own batch to ensure workers stay busy
while the writer thread waits for finished tiles in order)
@ -116,8 +118,23 @@ Then, process tile batches in worker threads (default 1 per core):
- gzip each encoded tile
- Pass the batch of encoded vector tiles to the writer thread
Finally, a single-threaded writer writes encoded vector tiles to the output MBTiles file:
Finally, a single-threaded writer writes encoded vector tiles to the output archive format:
- Create the largest prepared statement supported by SQLite (999 parameters)
- For MBTiles, create the largest prepared statement supported by SQLite (999 parameters)
- Iterate through finished vector tile batches until the prepared statement is full, flush to disk, then repeat
- Then flush any remaining tiles at the end
## Profiles
To customize the behavior of this pipeline, custom profiles implement
the [Profile](planetiler-core/src/main/java/com/onthegomap/planetiler/Profile.java) interface to override:
- what vector tile features to generate from an input feature
- what information from OpenStreetMap relations we need to save for later use
- how to post-process vector features grouped into a tile before emitting
A Java project can implement this interface and add arbitrarily complex processing when overriding the methods.
The [custommap](planetiler-custommap) project defines
a [ConfiguredProfile](planetiler-custommap/src/main/java/com/onthegomap/planetiler/custommap/ConfiguredProfile.java)
implementation that loads instructions from a YAML config file to dynamically control how schemas are generated without
needing to write or compile Java code.

Wyświetl plik

@ -1,39 +1,96 @@
# Contributing to Planetiler
Pull requests are welcome! To set up your development environment:
- Fork the repo
- [Install Java 16 or later](https://adoptium.net/installation.html)
- Build and run the tests ([mvnw](https://github.com/takari/maven-wrapper) automatically downloads maven the first time
you run it):
- on max/linux: `./mvnw clean test`
- on windows: `mvnw.cmd clean test`
- or if you already have maven installed globally on your machine: `mvn clean test`
To edit the code:
- [Install IntelliJ IDE](https://www.jetbrains.com/help/idea/installation-guide.html)
- In IntelliJ, click `Open`, navigate to the the `pom.xml` file in the local copy of this repo, and `Open`
then `Open as Project`
- If IntelliJ asks (and you trust the code) then click `Trust Project`
- If any java source files show "Cannot resolve symbol..." errors for Planetiler classes, you might need to
select: `File -> Invalidate Caches... -> Just Restart`.
- If you see a "Project JDK is not defined" error, then choose `Setup SDK` and point IntelliJ at the Java 16 or later
installed on your system
- Recommended: Under `Preferences -> Tools -> Actions on Save` select `Reformat code` and `Optimize imports` to
automatically format code on save.
- To verify everything works correctly, right click on `planetiler-core/src/test/java` folder and
click `Run 'All Tests'`
Any pull request should:
Pull requests are welcome! Any pull request should:
- Include at least one unit test to verify the change in behavior
- Include an end-to-end test
in [PlanetilerTests.java](planetiler-core/src/test/java/com/onthegomap/planetiler/PlanetilerTests.java)
to verify any major new user-facing features work
- Use IntelliJ's auto-formatting for modified files (this should get enabled automatically)
- Be free of IntelliJ warnings for modified files
- Format the change `./mvnw spotless:apply` and test with `./mvnw verify` before pushing
To set up your local development environment:
- Fork the repo [setup submodules](README.md#git-submodules)
- Install Java 21 or later. You can download Java manually from [Adoptium](https://adoptium.net/installation.html) or
use:
- [Windows installer](https://adoptium.net/installation.html#windows-msi)
- [macOS installer](https://adoptium.net/installation.html#macos-pkg) (or `brew install --cask temurin`,
or `port install openjdk21-temurin`)
- [Linux installer](https://adoptium.net/installation/linux/) (or `apt-get install openjdk-21-jdk`)
- If you update from an older version of java on Ubuntu, run `sudo update-alternatives --config java` after installing the new jdk.
- Build and run the tests ([mvnw](https://github.com/takari/maven-wrapper) automatically downloads maven the first time
you run it):
- on mac/linux: `./mvnw clean test`
- on windows: `mvnw.cmd clean test`
- or if you already have maven installed globally on your machine: `mvn clean test`
- to run just one test e.g. `GeoUtilsTest`: `./mvnw -pl planetiler-core -Dtest=GeoUtilsTest test`
- to run benchmarks e.g. `BenchmarkTileCoord`:
```sh
./scripts/build.sh
java -cp planetiler-dist/target/planetiler-dist-*-with-deps.jar com.onthegomap.planetiler.benchmarks.BenchmarkTileCoord
```
GitHub Workflows will run regression tests on any pull request.
TODO: Set up checkstyle and an auto-formatter to enforce standards, so you can use any IDE.
## IDE Setup
You can use any text editor as long as you format the code and test before pushing. A good IDE will make things a lot
easier though.
### IntelliJ IDEA (recommended)
- [Install IntelliJ IDEA](https://www.jetbrains.com/help/idea/installation-guide.html)
- Install
the [Adapter for Eclipse Code Formatter plugin](https://plugins.jetbrains.com/plugin/6546-adapter-for-eclipse-code-formatter)
- In IntelliJ, click `Open`, navigate to the the `pom.xml` file in the local copy of this repo, and `Open`
then `Open as Project`
- If IntelliJ asks (and you trust the code) then click `Trust Project`
- Under `Preferences -> Tools -> Actions on Save` (or `File -> Settings -> Tools -> Actions on Save` on Linux)
select `Reformat code` and `Optimize imports` to automatically format code on save.
- To verify everything works correctly, right click on `planetiler-core/src/test/java` folder and
click `Run 'All Tests'`
Troubleshooting:
- If any java source files show "Cannot resolve symbol..." errors for Planetiler classes, you might need to
select: `File -> Invalidate Caches... -> Just Restart`.
- If you see a "Project JDK is not defined" error, then choose `Setup SDK` and point IntelliJ at the Java 21 or later
installed on your system
### Visual Studio Code
- Install the [Extension Pack for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack)
- In VSCode, click `File -> Open` and navigate to Planetiler directory
- If VSCode asks (and you trust the code) then click `Yes I trust the authors`
- To verify everything works correctly, go to the `Testing` tab and click `Run Tests`
Learn more about using VSCode with Java [here](https://code.visualstudio.com/docs/languages/java).
### Eclipse
- In [Eclipse for Java Developers](https://www.eclipse.org/downloads/packages/), click `File -> Import ...`
then `Maven -> Existing Maven Projects`, navigate to Planetiler directory, and click `Finish`
- Under `Eclipse -> Preferences...`:
- Under `Java -> Code Style -> Formatter` and choose `Import...`
choose [`eclipse-formatter.xml`](eclipse-formatter.xml) from the root of this project. Then choose `Planetiler` as
the Active profile.
- Under `Java -> Editor -> Save Actions` check `Perform selected actions on save`, `Format source code`
, `Format all lines` and `Organize imports`
- Under `Java -> Code Style -> Organize Imports` change the `number of static imports needed for .*` to 5, then remove
the groups and add 2 new groups:
- `New Static...` and `*`
- `New...` and `*`
- To verify everything works correctly, right click on `planetiler-core/src/test/java` folder and
click `Run As -> JUnit Test`
## SonarLint Plugin Setup (optional, but recommended)
Planetiler uses [SonarCloud](https://sonarcloud.io/project/overview?id=onthegomap_planetiler) to statically analyze pull
requests to catch common bugs and security vulnerabilities. To preview Sonar warnings in VS Code, IntelliJ, or Eclipse:
- Follow the directions on [sonarlint.org](https://www.sonarlint.org/) to install the plugin for your IDE
- Then to synchronize your local configuration with the one used in SonarCloud,
enable connected mode for your IDE using "SonarCloud"
connection type and the shared read-only API token used in GitHub CI: `c2cfe8bd7368ced07e84a620b7c2487846e220eb`

Wyświetl plik

@ -20,6 +20,15 @@ The `planetiler-core` module includes the following software:
- org.xerial:sqlite-jdbc (Apache license)
- com.ibm.icu:icu4j ([ICU license](https://github.com/unicode-org/icu/blob/main/icu4c/LICENSE))
- com.google.guava:guava (Apache license)
- com.google.protobuf:protobuf-java (BSD 3-Clause License)
- com.carrotsearch:hppc (Apache license)
- com.github.jnr:jnr-ffi (Apache license)
- org.roaringbitmap:RoaringBitmap (Apache license)
- org.projectnessie.cel:cel-tools (Apache license)
- mil.nga.geopackage:geopackage (MIT license)
- org.snakeyaml:snakeyaml-engine (Apache license)
- org.commonmark:commonmark (BSD 2-clause license)
- org.tukaani:xz (public domain)
- Adapted code:
- `DouglasPeuckerSimplifier` from [JTS](https://github.com/locationtech/jts) (EDL)
- `OsmMultipolygon` from [imposm3](https://github.com/omniscale/imposm3) (Apache license)
@ -27,16 +36,19 @@ The `planetiler-core` module includes the following software:
- `VectorTileEncoder`
from [java-vector-tile](https://github.com/ElectronicChartCentre/java-vector-tile) (Apache license)
- `Imposm3Parsers` from [imposm3](https://github.com/omniscale/imposm3) (Apache license)
Additionally, the `planetiler-basemap` module is based on [OpenMapTiles](https://github.com/openmaptiles/openmaptiles):
- Maven Dependencies:
- org.yaml:snakeyaml (Apache license)
- org.commonmark:commonmark (BSD 2-clause license)
- Code adapted from OpenMapTiles (BSD 3-Clause License):
- `generated` package generated from OpenMapTiles
- All code in `layers` package ported from OpenMapTiles
- `LanguageUtils` ported from OpenMapTiles
- `PbfDecoder` from [osmosis](https://github.com/openstreetmap/osmosis) (Public Domain)
- `PbfFieldDecoder` from [osmosis](https://github.com/openstreetmap/osmosis) (Public Domain)
- `Madvise` from [uppend](https://github.com/upserve/uppend/) (MIT License)
- `ArrayLongMinHeap` implementations from [graphhopper](https://github.com/graphhopper/graphhopper) (Apache license)
- `Hilbert` implementation
from [github.com/rawrunprotected/hilbert_curves](https://github.com/rawrunprotected/hilbert_curves) (Public Domain)
- `osmformat.proto` and `fileformat.proto` (generates `Osmformat.java` and `Fileformat.java`)
from [openstreetmap/OSM-binary](https://github.com/openstreetmap/OSM-binary/tree/master/osmpbf) (MIT License)
- `VarInt` from [Bazel](https://github.com/bazelbuild/bazel) (Apache license)
- `SeekableInMemoryByteChannel`
from [Apache Commons compress](https://commons.apache.org/proper/commons-compress/apidocs/org/apache/commons/compress/utils/SeekableInMemoryByteChannel.html) (
Apache License)
- [`planetiler-openmaptiles`](https://github.com/openmaptiles/planetiler-openmaptiles) submodule (BSD 3-Clause License)
- Schema
- The cartography and visual design features of the map tile schema are licensed
under [CC-BY 4.0](http://creativecommons.org/licenses/by/4.0/). Products or services using maps derived from
@ -46,10 +58,11 @@ Additionally, the `planetiler-basemap` module is based on [OpenMapTiles](https:/
## Data
|source | license | used as default | included in repo |
|-------|---------|-----------------|------------------|
| OpenStreetMap (OSM) data | [ODBL](https://www.openstreetmap.org/copyright) | yes | yes
| Natural Earth | [public domain](https://www.naturalearthdata.com/about/terms-of-use/) | yes | yes
| OSM Lakelines | [MIT](https://github.com/lukasmartinelli/osm-lakelines), data from OSM [ODBL](https://www.openstreetmap.org/copyright) | yes | no
| OSM Water Polygons | [acknowledgement](https://osmdata.openstreetmap.de/info/license.html), data from OSM [ODBL](https://www.openstreetmap.org/copyright) | yes | yes
| Wikidata name translations | [CCO](https://www.wikidata.org/wiki/Wikidata:Licensing) | no | no
| source | license | used as default | included in repo |
|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------|-----------------|------------------|
| OpenStreetMap (OSM) data | [ODBL](https://www.openstreetmap.org/copyright) | yes | yes |
| Natural Earth | [public domain](https://www.naturalearthdata.com/about/terms-of-use/) | yes | yes |
| OSM Lakelines | [MIT](https://github.com/lukasmartinelli/osm-lakelines), data from OSM [ODBL](https://www.openstreetmap.org/copyright) | yes | no |
| OSM Water Polygons | [acknowledgement](https://osmdata.openstreetmap.de/info/license.html), data from OSM [ODBL](https://www.openstreetmap.org/copyright) | yes | yes |
| Wikidata name translations | [CCO](https://www.wikidata.org/wiki/Wikidata:Licensing) | no | no |

Wyświetl plik

@ -1,9 +1,11 @@
# Generating a Map of the World
To generate a map of the world using the built-in [basemap profile](planetiler-basemap), you will need a machine with
Java 16 or later installed and at least 10x as much disk space and 1.5x as much RAM as the `planet.osm.pbf` file you
start from. All testing has been done using Digital Ocean droplets with dedicated
vCPUs ([referral link](https://m.do.co/c/a947e99aab25)) and OpenJDK 17 installed through `apt`. Planetiler splits work
To generate a map of the world using the
built-in [OpenMapTiles profile](https://github.com/openmaptiles/planetiler-openmaptiles), you will need a
machine with
Java 21 or later installed and at least 10x as much disk space and at least 0.5x as much RAM as the `planet.osm.pbf`
file you start from. All testing has been done using Digital Ocean droplets with dedicated
vCPUs ([referral link](https://m.do.co/c/a947e99aab25)) and OpenJDK 21 installed through `apt`. Planetiler splits work
among available CPUs so the more you have, the less time it takes.
### 1) Choose the Data Source
@ -15,10 +17,18 @@ First decide where to get the `planet.osm.pbf` file:
- Or a [Daylight Distribution](https://daylightmap.org/) snapshot from Facebook that includes extra quality/consistency
checks, and add-ons like ML-detected roads and buildings. Combine add-ons and re-number
using [osmium-tool](https://osmcode.org/osmium-tool/):
```bash
osmium apply-changes daylight.osm.pbf admin.osc.bz2 <buildings.osc.bz2, ...> -o everything.osm.pbf
osmium renumber everything.osm.pbf -o planet.osm.pbf
```
- If you would like to update your `planet.osm.pbf` file to the latest changes from OpenStreetMap, you can
use [pyosmium-up-to-date](https://docs.osmcode.org/pyosmium/latest/tools_uptodate.html):
```bash
pyosmium-up-to-date --size 20000 -v planet.osm.pbf
```
NOTE: you need at least `admin.osc.bz2` for the `boundary` layer to show. This takes about 2.5 hours and needs as much
RAM as the `planet.osm.pbf` size.
@ -26,27 +36,45 @@ First decide where to get the `planet.osm.pbf` file:
Download the [latest release](https://github.com/onthegomap/planetiler/releases/latest) of `planetiler.jar`.
Then run `java -Xms100g -Xmx100g -jar planetiler.jar` (replacing `100g` with 1.5x the `planet.osm.pbf` size)
with these options:
If your system has at least 1.5x as much memory as the input OSM file size, run this command to store node location
cache in-memory:
- `--bounds=world` to set bounding box to the entire planet
- `--nodemap-type=sparsearray` to store node locations in a sparse array instead of a sorted table - `sortedtable` is
more efficient when there are large gaps in ID spaces (i.e. extracts) and `sparsearray` is more efficient with no/few
ID gaps (planet, or renumbered extracts).
- `--nodemap-storage=ram` to store all node locations in RAM instead of a memory-mapped file - when using `ram` give the
JVM 1.5x the input file size instead of 0.5x when using `mmap`
- `--download` to fetch [other data sources](NOTICE.md#data) automatically
- One of these to point planetiler at your data source:
- `--osm-path=path/to/planet.osm.pbf` to point Planetiler at a file you downloaded
- `--osm-url=http://url/of/planet.osm.pbf` to download automatically
- `--osm-url=s3:211011` to download a specific snapshot from the AWS Registry of Open Data or `--osm-url=s3:latest` to
download the latest snapshot
- `--area=planet` to use the file in `./data/sources/planet.osm.pbf` or download the latest snapshot from AWS S3
mirror if missing.
```bash
java -Xmx110g \
`# return unused heap memory to the OS` \
-XX:MaxHeapFreeRatio=40 \
-jar planetiler.jar \
`# Download the latest planet.osm.pbf from s3://osm-pds bucket` \
--area=planet --bounds=planet --download \
`# Accelerate the download by fetching the 10 1GB chunks at a time in parallel` \
--download-threads=10 --download-chunk-size-mb=1000 \
`# Also download name translations from wikidata` \
--fetch-wikidata \
--output=output.mbtiles \
`# Store temporary node locations in memory` \
--nodemap-type=array --storage=ram
```
If your system has less than 1.5x as much memory as the input OSM file size, run this command to store node location
cache in a temporary memory-mapped file by setting `--storage=mmap` and `-Xmx20g` to reduce the JVM's memory usage.
```bash
java -Xmx20g \
-jar planetiler.jar \
`# Download the latest planet.osm.pbf from s3://osm-pds bucket` \
--area=planet --bounds=planet --download \
`# Accelerate the download by fetching the 10 1GB chunks at a time in parallel` \
--download-threads=10 --download-chunk-size-mb=1000 \
`# Also download name translations from wikidata` \
--fetch-wikidata \
--output=output.mbtiles \
`# Store temporary node locations at fixed positions in a memory-mapped file` \
--nodemap-type=array --storage=mmap
```
Run with `--help` to see all available arguments.
NOTE: The default basemap profile merges nearby buildings at zoom-level 13 (for example,
NOTE: The default OpenMapTiles profile merges nearby buildings at zoom-level 13 (for example,
see [Boston](https://onthegomap.github.io/planetiler-demo/#13.08/42.35474/-71.06597)). This adds about 14 CPU hours (~50
minutes with 16 CPUs) to planet generation time and can be disabled using `--building-merge-z13=false`.
@ -56,10 +84,10 @@ To generate the tiles shown on https://onthegomap.github.io/planetiler-demo/ I u
S3 snapshot, then ran Planetiler on a Digital Ocean Memory-Optimized droplet with 16 CPUs, 128GB RAM, and 1.17TB disk
running Ubuntu 21.04 x64 in the nyc3 location.
First, I installed java 17 jre and screen:
First, I installed java 21 jre and screen:
```bash
apt-get update && apt-get install -y openjdk-17-jre-headless screen
apt-get update && apt-get install -y openjdk-21-jre-headless screen
```
Then I added a script `runworld.sh` to run with 100GB of RAM:
@ -67,8 +95,7 @@ Then I added a script `runworld.sh` to run with 100GB of RAM:
```bash
#!/usr/bin/env bash
set -e
java -Xmx100g -Xms100g \
-XX:OnOutOfMemoryError="kill -9 %p" \
java -Xmx100g \
-jar planetiler.jar \
`# Download the latest planet.osm.pbf from s3://osm-pds bucket` \
--area=planet --bounds=world --download \
@ -76,7 +103,7 @@ java -Xmx100g -Xms100g \
--download-threads=10 --download-chunk-size-mb=1000 \
`# Also download name translations from wikidata` \
--fetch-wikidata \
--mbtiles=output.mbtiles \
--output=output.mbtiles \
--nodemap-type=sparsearray --nodemap-storage=ram 2>&1 | tee logs.txt
```

202
README.md
Wyświetl plik

@ -1,39 +1,41 @@
# Planetiler
Planetiler (_**pla**&middot;nuh&middot;tai&middot;lr_, formerly named "Flatmap") is a tool that
generates [Mapbox Vector Tiles](https://github.com/mapbox/vector-tile-spec/tree/master/2.1)
Planetiler (_**pla**&middot;nuh&middot;tai&middot;lr_, formerly named "Flatmap") is a tool that generates
[Vector Tiles](https://github.com/mapbox/vector-tile-spec/tree/master/2.1)
from geographic data sources like [OpenStreetMap](https://www.openstreetmap.org/). Planetiler aims to be fast and
memory-efficient so that you can build a map of the world in a few hours on a single machine without any external tools
or database.
Vector tiles contain raw point, line, and polygon geometries that clients like [MapLibre](https://github.com/maplibre)
can use to render custom maps in the browser, native apps, or on a server. Planetiler packages tiles into
an [MBTiles](https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md) (sqlite) file that can be served using
tools like [TileServer GL](https://github.com/maptiler/tileserver-gl) or even
[queried directly from the browser](https://github.com/phiresky/sql.js-httpvfs).
an [MBTiles](https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md) (sqlite)
or [PMTiles](https://github.com/protomaps/PMTiles) file that can be served using tools
like [TileServer GL](https://github.com/maptiler/tileserver-gl) or [Martin](https://github.com/maplibre/martin) or
even [queried directly from the browser](https://github.com/protomaps/PMTiles/tree/main/js).
See [awesome-vector-tiles](https://github.com/mapbox/awesome-vector-tiles) for more projects that work with data in this
format.
Planetiler works by mapping input elements to rendered tile features, flattening them into a big list, then sorting by
Planetiler works by mapping input elements to vector tile features, flattening them into a big list, then sorting by
tile ID to group into tiles. See [ARCHITECTURE.md](ARCHITECTURE.md) for more details or
this [blog post](https://medium.com/@onthegomap/dc419f3af75d?source=friends_link&sk=fb71eaa0e2b26775a9d98c81750ec10b)
for more of the backstory.
## Demo
See the [live demo](https://onthegomap.github.io/planetiler-demo/) of vector tiles created by Planetiler.
See the [live demo](https://onthegomap.github.io/planetiler-demo/) of vector tiles created by Planetiler and hosted by
the [OpenStreetMap Americana Project](https://github.com/ZeLonewolf/openstreetmap-americana/).
[![Planetiler Demo Screenshot](./diagrams/demo.png)](https://onthegomap.github.io/planetiler-demo/)
Style [© OpenMapTiles](https://www.openmaptiles.org/)
&middot; Data [© OpenStreetMap contributors](https://www.openstreetmap.org/copyright)
[© OpenMapTiles](https://www.openmaptiles.org/) [© OpenStreetMap contributors](https://www.openstreetmap.org/copyright)
## Usage
To generate a map of an area using the [basemap profile](planetiler-basemap), you will need:
To generate a map of an area using the [OpenMapTiles profile](https://github.com/openmaptiles/planetiler-openmaptiles),
you will need:
- [Java 16+](https://adoptium.net/installation.html) or [Docker](https://docs.docker.com/get-docker/)
- Java 21+ (see [CONTRIBUTING.md](CONTRIBUTING.md)) or [Docker](https://docs.docker.com/get-docker/)
- at least 1GB of free disk space plus 5-10x the size of the `.osm.pbf` file
- at least 1.5x as much free RAM as the input `.osm.pbf` file size
- at least 0.5x as much free RAM as the input `.osm.pbf` file size
#### To build the map:
@ -52,7 +54,8 @@ Or using Docker:
docker run -e JAVA_TOOL_OPTIONS="-Xmx1g" -v "$(pwd)/data":/data ghcr.io/onthegomap/planetiler:latest --download --area=monaco
```
:warning: This starts off by downloading about 1GB of [data sources](NOTICE.md#data) required by the basemap profile
:warning: This starts off by downloading about 1GB of [data sources](NOTICE.md#data) required by the OpenMapTiles
profile
including ~750MB for [ocean polygons](https://osmdata.openstreetmap.de/data/water-polygons.html) and ~240MB
for [Natural Earth Data](https://www.naturalearthdata.com/).
@ -85,7 +88,7 @@ Using [Node.js](https://nodejs.org/en/download/):
```bash
npm install -g tileserver-gl-light
tileserver-gl-light --mbtiles data/output.mbtiles
tileserver-gl-light data/output.mbtiles
```
Or using [Docker](https://docs.docker.com/get-docker/):
@ -98,6 +101,8 @@ Then open http://localhost:8080 to view tiles.
Some common arguments:
- `--output` tells planetiler where to write output to, and what format to write it in. For
example `--output=australia.pmtiles` creates a pmtiles archive named `australia.pmtiles`.
- `--download` downloads input sources automatically and `--only-download` exits after downloading
- `--area=monaco` downloads a `.osm.pbf` extract from [Geofabrik](https://download.geofabrik.de/)
- `--osm-path=path/to/file.osm.pbf` points Planetiler at an existing OSM extract on disk
@ -106,35 +111,86 @@ Some common arguments:
- `--force` overwrites the output file
- `--help` shows all of the options and exits
### Git submodules
Planetiler has a submodule dependency
on [planetiler-openmaptiles](https://github.com/openmaptiles/planetiler-openmaptiles). Add `--recurse-submodules`
to `git clone`, `git pull`, or `git checkout` commands to also update submodule dependencies.
To clone the repo with submodules:
```bash
git clone --recurse-submodules https://github.com/onthegomap/planetiler.git
```
If you already pulled the repo, you can initialize submodules with:
```bash
git submodule update --init
```
To force git to always update submodules (recommended), run this command in your local repo:
```bash
git config --local submodule.recurse true
```
Learn more about working with submodules [here](https://git-scm.com/book/en/v2/Git-Tools-Submodules).
## Generating a Map of the World
See [PLANET.md](PLANET.md).
## Creating a Custom Map
## Generating Custom Vector Tiles
See the [planetiler-examples](planetiler-examples) project.
If you want to customize the OpenMapTiles schema or generate an mbtiles file with OpenMapTiles + extra layers, then
fork https://github.com/openmaptiles/planetiler-openmaptiles make changes there, and run directly from that repo. It
is a standalone Java project with a dependency on Planetiler.
If you want to generate a separate mbtiles file with overlay layers or a full custom basemap, then:
- For simple schemas, run a recent planetiler jar or docker image with a custom schema defined in a yaml
configuration file. See [planetiler-custommap](planetiler-custommap) for details.
- For complex schemas (or if you prefer working in Java), create a new Java project
that [depends on Planetiler](#use-as-a-library). See the [planetiler-examples](planetiler-examples) project for a
working example.
If you want to customize how planetiler works internally, then fork this project, build from source, and
consider [contributing](#contributing) your change back for others to use!
## Benchmarks
Some example runtimes (excluding downloading resources):
Some example runtimes for the OpenMapTiles profile (excluding downloading resources):
| Input | Profile | Machine | Time | mbtiles size | Logs |
| --- | --- | --- | --- | --- | --- |
| s3://osm-pds/2021/planet-211011.osm.pbf (65GB) | Basemap | DO 16cpu 128GB | 3h9m cpu:42h1m avg:13.3 | 99GB | [logs](planet-logs/v0.1.0-planet-do-16cpu-128gb.txt), [VisualVM Profile](planet-logs/v0.1.0-planet-do-16cpu-128gb.nps) |
| [Daylight Distribution v1.6](https://daylightmap.org/2021/09/29/daylight-v16-released.html) with ML buildings and admin boundaries (67GB) | Basemap | DO 16cpu 128GB | 3h13m cpu:43h40m avg:13.5 | 101GB | [logs](planet-logs/v0.1.0-daylight-do-16cpu-128gb.txt) |
| s3://osm-pds/2021/planet-211011.osm.pbf (65GB) | Basemap (without z13 building merge) | Linode 50cpu 128GB | 1h9m cpu:24h36m avg:21.2 | 97GB | [logs](planet-logs/v0.1.0-planet-linode-50cpu-128gb.txt), [VisualVM Profile](planet-logs/v0.1.0-planet-linode-50cpu-128gb.nps) |
| s3://osm-pds/2021/planet-211011.osm.pbf (65GB) | Basemap (without z13 building merge) | c5ad.16xlarge (64cpu/128GB) | 59m cpu:27h6m avg:27.4 | 97GB | [logs](planet-logs/v0.1.0-planet-c5ad-64cpu-128gb.txt) |
| Input | Version | Machine | Time | output size | Logs |
|------------------------------------------------|---------|---------------------------------|---------------------------|--------------|----------------------------------------------------------------------------------------------------------------|
| s3://osm-pds/2024/planet-240115.osm.pbf (69GB) | 0.7.0 | c3d-standard-180 (180cpu/720GB) | 22m cpu:44h34m avg:120 | 69GB pmtiles | [logs](planet-logs/v0.7.0-planet-c3d-standard-180.txt) |
| s3://osm-pds/2024/planet-240108.osm.pbf (73GB) | 0.7.0 | c7gd.16xlarge (64cpu/128GB) | 42m cpu:42m28s avg:52 | 69GB pmtiles | [logs](planet-logs/v0.7.0-planet-c7gd-128gb.txt) |
| s3://osm-pds/2022/planet-220530.osm.pbf (69GB) | 0.5.0 | c6gd.16xlarge (64cpu/128GB) | 53m cpu:41h58m avg:47.1 | 79GB mbtiles | [logs](planet-logs/v0.5.0-planet-c6gd-128gb.txt), [VisualVM Profile](planet-logs/v0.5.0-planet-c6gd-128gb.nps) |
| s3://osm-pds/2022/planet-220530.osm.pbf (69GB) | 0.5.0 | c6gd.8xlarge (32cpu/64GB) | 1h27m cpu:37h55m avg:26.1 | 79GB mbtiles | [logs](planet-logs/v0.5.0-planet-c6gd-64gb.txt) |
| s3://osm-pds/2022/planet-220530.osm.pbf (69GB) | 0.5.0 | c6gd.4xlarge (16cpu/32GB) | 2h38m cpu:34h3m avg:12.9 | 79GB mbtiles | [logs](planet-logs/v0.5.0-planet-c6gd-32gb.txt) |
Merging nearby buildings at z13 is very expensive, when run with `--building-merge-z13=false`:
| Input | Version | Machine | Time | output size | Logs |
|------------------------------------------------|---------|---------------------------------|--------------------------|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| s3://osm-pds/2024/planet-240115.osm.pbf (69GB) | 0.7.0 | c3d-standard-180 (180cpu/720GB) | 16m cpu:27h45m avg:104 | 69GB pmtiles | [logs](planet-logs/v0.7.0-planet-c3d-standard-180-no-z13-building-merge.txt) |
| s3://osm-pds/2024/planet-240108.osm.pbf (73GB) | 0.7.0 | c7gd.16xlarge (64cpu/128GB) | 29m cpu:23h57 avg:50 | 69GB pmtiles | [logs](planet-logs/v0.7.0-planet-c7gd-128gb-no-z13-building-merge.txt) |
| s3://osm-pds/2024/planet-240108.osm.pbf (73GB) | 0.7.0 | c7gd.2xlarge (8cpu/16GB) | 3h35m cpu:19h45 avg:5.5 | 69GB pmtiles | [logs](planet-logs/v0.7.0-planet-c7gd-16gb-no-z13-building-merge.txt) |
| s3://osm-pds/2024/planet-240108.osm.pbf (73GB) | 0.7.0 | im4gn.large (2cpu/8GB) | 18h18m cpu:28h6m avg:1.5 | 69GB pmtiles | [logs](planet-logs/v0.7.0-planet-im4gn-8gb-no-z13-building-merge.txt) |
| s3://osm-pds/2022/planet-220530.osm.pbf (69GB) | 0.5.0 | c6gd.16xlarge (64cpu/128GB) | 39m cpu:27h4m avg:42.1 | 79GB mbtiles | [logs](planet-logs/v0.5.0-planet-c6gd-128gb-no-z13-building-merge.txt), [VisualVM Profile](planet-logs/v0.5.0-planet-c6gd-128gb-no-z13-building-merge.nps) |
## Alternatives
Some other tools that generate vector tiles from OpenStreetMap data:
- [OpenMapTiles](https://github.com/openmaptiles/openmaptiles) is the reference implementation of
the [OpenMapTiles schema](https://openmaptiles.org/schema/) that the [basemap profile](planetiler-basemap) is based
on. It uses an intermediate postgres database and operates in two modes:
the [OpenMapTiles schema](https://openmaptiles.org/schema/) that
the [OpenMapTiles profile](https://github.com/openmaptiles/planetiler-openmaptiles)
is based on. It uses an intermediate postgres database and operates in two modes:
1. Import data into database (~1 day) then serve vector tiles directly from the database. Tile serving is slower and
requires bigger machines, but lets you easily incorporate realtime updates
2. Import data into database (~1 day) then prerender every tile for the planet into an mbtiles file which
2. Import data into database (~1 day) then pregenerate every tile for the planet into an mbtiles file which
takes [over 100 days](https://github.com/openmaptiles/openmaptiles/issues/654#issuecomment-724606293)
or a cluster of machines, but then tiles can be served faster on smaller machines
- [Tilemaker](https://github.com/systemed/tilemaker) uses a similar approach to Planetiler (no intermediate database),
@ -154,13 +210,17 @@ download regularly-updated tilesets.
- Supports [Natural Earth](https://www.naturalearthdata.com/),
OpenStreetMap [.osm.pbf](https://wiki.openstreetmap.org/wiki/PBF_Format),
[`geopackage`](https://www.geopackage.org/),
and [Esri Shapefiles](https://en.wikipedia.org/wiki/Shapefile) data sources
- Writes to [MBTiles](https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md) or
or [PMTiles](https://github.com/protomaps/PMTiles) output.
- Java-based [Profile API](planetiler-core/src/main/java/com/onthegomap/planetiler/Profile.java) to customize how source
elements map to vector tile features, and post-process generated tiles
using [JTS geometry utilities](https://github.com/locationtech/jts)
- [YAML config file format](planetiler-custommap) that lets you create custom schemas without writing Java code
- Merge nearby lines or polygons with the same tags before emitting vector tiles
- Automatically fixes self-intersecting polygons
- Built-in basemap profile based on [OpenMapTiles](https://openmaptiles.org/) v3.12.2
- Built-in OpenMapTiles profile based on [OpenMapTiles](https://openmaptiles.org/) v3.13.1
- Optionally download additional name translations for elements from Wikidata
- Export real-time stats to a [prometheus push gateway](https://github.com/prometheus/pushgateway) using
`--pushgateway=http://user:password@ip` argument (and a [grafana dashboard](grafana.json) for viewing)
@ -178,30 +238,56 @@ download regularly-updated tilesets.
finished ([boundary layer example](https://github.com/onthegomap/planetiler/blob/9e9cf7c413027ffb3ab5c7436d11418935ae3f6a/planetiler-basemap/src/main/java/com/onthegomap/planetiler/basemap/layers/Boundary.java#L294))
- Planetiler only does full imports from `.osm.pbf` snapshots, there is no way to incorporate real-time updates.
## Roadmap
## Use as a library
- [x] Enough `planetiler-core` functionality to support basemap profile based on OpenMapTiles
- [ ] Basemap profile based on OpenMapTiles v3.12.2
- [x] Port all layers
- [x] Download name translations from wikidata
- [x] Merge buildings at z13
- [x] `adm0_l`/`adm0_r` boundary labels
- [ ] Abbreviate road names to improve visibility
- [ ] Poi layer `agg_stop` tag
- [ ] Get `planetiler-core` into Maven Central
- [ ] Remove geotools dependency for reading shapefiles (not in Maven Central)
- [ ] Remove graphhopper dependency for reading OSM files, and
use [LocationsOnWays](https://blog.jochentopf.com/2016-04-20-node-locations-on-ways.html) to skip node location
storage when present and reduce memory requirement by 70%.
- [ ] "Sparse mode" to only store node and relation data for elements used by a profile
- [ ] Support zoom levels higher than 14
- [ ] Handle nodes and relations in relations (only ways handled now)
- [ ] Lake centerline support in `planetiler-core`
- [ ] Improve line merging to combine nearby parallel roads
- [ ] Basemap schema improvements for [onthegomap.com](https://onthegomap.com)
- [ ] Accept other kinds of data sources
- [ ] Extract reusable utilities for complex schemas from `planetiler-basemap` to `planetiler-core`
- [ ] Other schemas
Planetiler can be used as a maven-style dependency in a Java project using the settings below:
### Maven
Add this repository block to your `pom.xml`:
```xml
<repositories>
<repository>
<id>osgeo</id>
<name>OSGeo Release Repository</name>
<url>https://repo.osgeo.org/repository/release/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
```
Then add the following dependency:
```xml
<dependency>
<groupId>com.onthegomap.planetiler</groupId>
<artifactId>planetiler-core</artifactId>
<version>${planetiler.version}</version>
</dependency>
```
### Gradle
Set up your repositories block::
```groovy
mavenCentral()
maven {
url "https://repo.osgeo.org/repository/release/"
}
```
Set up your dependencies block:
```groovy
implementation 'com.onthegomap.planetiler:planetiler-core:<version>'
```
## Contributing
@ -209,7 +295,8 @@ Pull requests are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
## Support
Have a question or want to share something you've built? Start
For general questions, check out the #planetiler channel on [OSM-US Slack](https://osmus.slack.com/) (get an
invite [here](https://slack.openstreetmap.us/)), or start
a [GitHub discussion](https://github.com/onthegomap/planetiler/discussions).
Found a bug or have a feature request? Open a [GitHub issue](https://github.com/onthegomap/planetiler/issues) to report.
@ -223,9 +310,10 @@ Planetiler is made possible by these awesome open source projects:
- [OpenMapTiles](https://openmaptiles.org/) for the [schema](https://openmaptiles.org/schema/)
and [reference implementation](https://github.com/openmaptiles/openmaptiles)
that the [basemap profile](planetiler-basemap/src/main/java/com/onthegomap/planetiler/basemap/layers)
that
the [openmaptiles profile](https://github.com/openmaptiles/planetiler-openmaptiles/tree/main/src/main/java/org/openmaptiles/layers)
is based on
- [Graphhopper](https://www.graphhopper.com/) for utilities to process OpenStreetMap data in Java
- [Graphhopper](https://www.graphhopper.com/) for basis of utilities to process OpenStreetMap data in Java
- [JTS Topology Suite](https://github.com/locationtech/jts) for working with vector geometries
- [Geotools](https://github.com/geotools/geotools) for shapefile processing
- [SQLite JDBC Driver](https://github.com/xerial/sqlite-jdbc) for reading Natural Earth data and writing MBTiles files
@ -238,6 +326,14 @@ Planetiler is made possible by these awesome open source projects:
- [imposm3](https://github.com/omniscale/imposm3) for the basis
of [OSM multipolygon processing](planetiler-core/src/main/java/com/onthegomap/planetiler/reader/osm/OsmMultipolygon.java)
and [tag parsing utilities](planetiler-core/src/main/java/com/onthegomap/planetiler/util/Imposm3Parsers.java)
- [HPPC](http://labs.carrotsearch.com/) for high-performance primitive Java collections
- [Osmosis](https://wiki.openstreetmap.org/wiki/Osmosis) for Java utilities to parse OpenStreetMap data
- [JNR-FFI](https://github.com/jnr/jnr-ffi) for utilities to access low-level system utilities to improve memory-mapped
file performance.
- [cel-java](https://github.com/projectnessie/cel-java) for the Java implementation of
Google's [Common Expression Language](https://github.com/google/cel-spec) that powers dynamic expressions embedded in
schema config files.
- [PMTiles](https://github.com/protomaps/PMTiles) optimized tile storage format
See [NOTICE.md](NOTICE.md) for a full list and license details.

Wyświetl plik

@ -80,7 +80,7 @@
# mbtiles_version=0.1
# mbtiles_type=baselayer OR overlay
################# Basemap profile config #################
################# OpenMapTiles profile config #################
# Set the input file name and automatically determine the https://download.geofabrik.de/ download URL for a region by name:
# area=monaco
@ -119,6 +119,10 @@
# osm_path=path/to/monaco.osm.pbf
# osm_url=https://url/for/monaco.osm.pbf
# To delete an input file before writing the output file (and reduce peak disk requirements):
# free_osm_after_read: true
# free_natural_earth_after_read: true
#### Layer-specific overrides:
#### "boundary" layer

Wyświetl plik

@ -0,0 +1,480 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="21">
<profile kind="CodeFormatterProfile" name="Planetiler" version="21">
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration"
value="preserve_positions"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="20"/>
<setting
id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments"
value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_if_empty"/>
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_if_empty"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header"
value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="preserve_positions"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_annotations" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="84"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration"
value="preserve_positions"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header"
value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/>
<setting
id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_constructor" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="preserve_positions"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration"
value="preserve_positions"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="17"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="-1"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="120"/>
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_if_empty"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_if_empty"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_if_empty"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="48"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="separate_lines_if_wrapped"/>
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line" value="one_line_if_empty"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assertion_message" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration"
value="do not insert"/>
<setting
id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration"
value="preserve_positions"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration"
value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters"
value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
</profile>
</profiles>

Wyświetl plik

@ -0,0 +1,176 @@
Layer Stats
===========
This page describes how to generate and analyze layer stats data to find ways to optimize tile size.
### Generating Layer Stats
Run planetiler with `--output-layerstats` to generate an extra `<output>.layerstats.tsv.gz` file with a row for each
layer in each tile that can be used to analyze tile sizes. You can also get stats for an existing archive by running:
```bash
java -jar planetiler.jar stats --input=<path to mbtiles or pmtiles file> --output=layerstats.tsv.gz
```
The output is a gzipped tsv with a row per layer on each tile and the following columns:
| column | description |
|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| z | tile zoom |
| x | tile x |
| y | tile y |
| hilbert | tile hilbert ID (defines [pmtiles](https://protomaps.com/docs/pmtiles) order) |
| archived_tile_bytes | stored tile size (usually gzipped) |
| layer | layer name |
| layer_bytes | encoded size of this layer on this tile |
| layer_features | number of features in this layer |
| layer_geometries | number of geometries in features in this layer, including inside multipoint/multipolygons/multilinestring features |
| layer_attr_bytes | encoded size of the [attribute key/value pairs](https://github.com/mapbox/vector-tile-spec/tree/master/2.1#44-feature-attributes) in this layer |
| layer_attr_keys | number of distinct attribute keys in this layer on this tile |
| layer_attr_values | number of distinct attribute values in this layer on this tile |
### Analyzing Layer Stats
Load a layer stats file in [duckdb](https://duckdb.org/):
```sql
CREATE TABLE layerstats AS SELECT * FROM 'output.pmtiles.layerstats.tsv.gz';
```
Then get the biggest layers:
```sql
SELECT * FROM layerstats ORDER BY layer_bytes DESC LIMIT 2;
```
| z | x | y | hilbert | archived_tile_bytes | layer | layer_bytes | layer_features | layer_geometries | layer_attr_bytes | layer_attr_keys | layer_attr_values |
|----|-------|------|-----------|---------------------|-------------|-------------|----------------|------------------|------------------|-----------------|-------------------|
| 14 | 13722 | 7013 | 305278258 | 1260526 | housenumber | 2412589 | 108390 | 108390 | 30764 | 1 | 3021 |
| 14 | 13723 | 7014 | 305278256 | 1059752 | housenumber | 1850041 | 83038 | 83038 | 26022 | 1 | 2542 |
To get a table of biggest layers by zoom:
```sql
PIVOT (
SELECT z, layer, (max(layer_bytes)/1000)::int size FROM layerstats GROUP BY z, layer ORDER BY z ASC
) ON printf('%2d', z) USING sum(size);
-- duckdb sorts columns lexicographically, so left-pad the zoom so 2 comes before 10
```
| layer | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
|---------------------|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|------|
| boundary | 10 | 75 | 85 | 53 | 44 | 25 | 18 | 15 | 15 | 29 | 24 | 18 | 32 | 18 | 10 |
| landcover | 2 | 1 | 8 | 5 | 3 | 31 | 18 | 584 | 599 | 435 | 294 | 175 | 166 | 111 | 334 |
| place | 116 | 314 | 833 | 830 | 525 | 270 | 165 | 80 | 51 | 54 | 63 | 70 | 50 | 122 | 221 |
| water | 8 | 4 | 11 | 9 | 15 | 13 | 89 | 114 | 126 | 109 | 133 | 94 | 167 | 116 | 91 |
| water_name | 7 | 19 | 25 | 15 | 11 | 6 | 6 | 4 | 3 | 6 | 5 | 4 | 4 | 4 | 29 |
| waterway | | | | 1 | 4 | 2 | 18 | 13 | 10 | 28 | 20 | 16 | 60 | 66 | 73 |
| park | | | | | 54 | 135 | 89 | 76 | 72 | 82 | 90 | 56 | 48 | 19 | 50 |
| landuse | | | | | 3 | 2 | 33 | 67 | 95 | 107 | 177 | 132 | 66 | 313 | 109 |
| transportation | | | | | 384 | 425 | 259 | 240 | 287 | 284 | 165 | 95 | 313 | 187 | 133 |
| transportation_name | | | | | | | 32 | 20 | 18 | 13 | 30 | 18 | 65 | 59 | 169 |
| mountain_peak | | | | | | | | 13 | 13 | 12 | 15 | 12 | 12 | 317 | 235 |
| aerodrome_label | | | | | | | | | 5 | 4 | 5 | 4 | 4 | 4 | 4 |
| aeroway | | | | | | | | | | | 16 | 26 | 35 | 31 | 18 |
| poi | | | | | | | | | | | | | 35 | 18 | 811 |
| building | | | | | | | | | | | | | | 94 | 1761 |
| housenumber | | | | | | | | | | | | | | | 2412 |
To get biggest tiles:
```sql
CREATE TABLE tilestats AS SELECT
z, x, y,
any_value(archived_tile_bytes) gzipped,
sum(layer_bytes) raw
FROM layerstats GROUP BY z, x, y;
SELECT
z, x, y,
format_bytes(gzipped::int) gzipped,
format_bytes(raw::int) raw,
FROM tilestats ORDER BY gzipped DESC LIMIT 2;
```
NOTE: this group by uses a lot of memory so you need to be running in file-backed
mode `duckdb analysis.duckdb` (not in-memory mode)
| z | x | y | gzipped | raw |
|----|------|------|---------|------|
| 13 | 2286 | 3211 | 9KB | 12KB |
| 13 | 2340 | 2961 | 9KB | 12KB |
To make it easier to look at these tiles on a map, you can define following macros that convert z/x/y coordinates to
lat/lons:
```sql
CREATE MACRO lon(z, x) AS (x/2**z) * 360 - 180;
CREATE MACRO lat_n(z, y) AS pi() - 2 * pi() * y/2**z;
CREATE MACRO lat(z, y) AS degrees(atan(0.5*(exp(lat_n(z, y)) - exp(-lat_n(z, y)))));
CREATE MACRO debug_url(z, x, y) as concat(
'https://protomaps.github.io/PMTiles/#map=',
z + 0.5, '/',
round(lat(z, y + 0.5), 5), '/',
round(lon(z, x + 0.5), 5)
);
SELECT z, x, y, debug_url(z, x, y), layer, format_bytes(layer_bytes) size
FROM layerstats ORDER BY layer_bytes DESC LIMIT 2;
```
| z | x | y | debug_url(z, x, y) | layer | size |
|----|-------|------|------------------------------------------------------------------|-------------|-------|
| 14 | 13722 | 7013 | https://protomaps.github.io/PMTiles/#map=14.5/25.05575/121.51978 | housenumber | 2.4MB |
| 14 | 13723 | 7014 | https://protomaps.github.io/PMTiles/#map=14.5/25.03584/121.54175 | housenumber | 1.8MB |
Drag and drop your pmtiles archive to the pmtiles debugger to see the large tiles on a map. You can also switch to the
"inspect" tab to inspect an individual tile.
#### Computing Weighted Average Tile Sizes
If you compute a straight average tile size, it will be dominated by ocean tiles that no one looks at. You can compute a
weighted average based on actual usage by joining with a `z, x, y, loads` tile source. For
convenience, [top_osm_tiles.tsv.gz](top_osm_tiles.tsv.gz) has the top 1 million tiles from 90 days
of [OSM tile logs](https://planet.openstreetmap.org/tile_logs/) from summer 2023.
You can load these sample weights using duckdb's [httpfs module](https://duckdb.org/docs/extensions/httpfs.html):
```sql
INSTALL httpfs;
CREATE TABLE weights AS SELECT z, x, y, loads FROM 'https://raw.githubusercontent.com/onthegomap/planetiler/main/layerstats/top_osm_tiles.tsv.gz';
```
Then compute the weighted average tile size:
```sql
SELECT
format_bytes((sum(gzipped * loads) / sum(loads))::int) gzipped_avg,
format_bytes((sum(raw * loads) / sum(loads))::int) raw_avg,
FROM tilestats JOIN weights USING (z, x, y);
```
| gzipped_avg | raw_avg |
|-------------|---------|
| 81KB | 132KB |
If you are working with an extract, then the low-zoom tiles will dominate, so you can make the weighted average respect
the per-zoom weights that appear globally:
```sql
WITH zoom_weights AS (
SELECT z, sum(loads) loads FROM weights GROUP BY z
),
zoom_avgs AS (
SELECT
z,
sum(gzipped * loads) / sum(loads) gzipped,
sum(raw * loads) / sum(loads) raw,
FROM tilestats JOIN weights USING (z, x, y)
GROUP BY z
)
SELECT
format_bytes((sum(gzipped * loads) / sum(loads))::int) gzipped_avg,
format_bytes((sum(raw * loads) / sum(loads))::int) raw_avg,
FROM zoom_avgs JOIN zoom_weights USING (z);
```

Plik binarny nie jest wyświetlany.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Plik binarny nie jest wyświetlany.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -0,0 +1,637 @@
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=planet (name of the extract to download if osm_url/osm_path not specified (i.e. 'monaco' 'rhode island' 'australia' or 'planet'))
0:00:00 INF - 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=ram (default storage type for temporary data, one of [ram, mmap, direct])
0:00:00 DEB - argument: threads=180 (num threads)
0:00:00 DEB - argument: write_threads=6 (number of threads to use when writing temp features)
0:00:00 DEB - argument: process_threads=174 (number of threads to use when processing input features)
0:00:00 DEB - argument: bounds=Env[-180.0 : 180.0, -85.0511287798066 : 85.0511287798066] (bounds)
0:00:00 DEB - argument: 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=2 (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 [files, 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 [files, 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=array (type of node location map, one of [noop, sortedtable, sparsearray, array])
0:00:00 DEB - argument: nodemap_storage=ram (storage for node location map, one of [ram, mmap, direct])
0:00:00 DEB - argument: nodemap_madvise=true (use linux madvise(random) for node locations)
0:00:00 DEB - argument: multipolygon_geometry_storage=ram (storage for multipolygon geometries, one of [ram, mmap, direct])
0:00:00 DEB - argument: multipolygon_geometry_madvise=true (use linux madvise(random) for temporary multipolygon geometry storage)
0:00:00 DEB - argument: http_user_agent=Planetiler downloader (https://github.com/onthegomap/planetiler) (User-Agent header to set when downloading files over HTTP)
0:00:00 DEB - argument: http_timeout=30 seconds (Timeout to use when downloading files over HTTP)
0:00:00 DEB - argument: http_retries=1 (Retries to use when downloading files over HTTP)
0:00:00 DEB - argument: download_chunk_size_mb=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=false (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=false (keep unzipped sources by default after reading)
0:00:00 DEB - argument: tile_compression=gzip (the tile compression, one of [none, gzip])
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=false (keep unzipped natural_earth after reading)
0:00:00 DEB - argument: osm_path=data/sources/planet.osm.pbf (osm OSM input file path)
0:00:00 DEB - argument: free_osm_after_read=false (delete osm input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: output=planet.pmtiles (output tile archive path)
0:00:00 DEB - argument: version=false (show version then exit)
0:00:00 INF - Planetiler build git hash: 328e1b4d536dd7da38a192e56f4014a18c23a63b
0:00:00 INF - Planetiler build version: 0.7-SNAPSHOT
0:00:00 INF - Planetiler build timestamp: 2024-01-21T12:08:38.997Z
0:00:00 DEB - argument: transliterate=true (attempt to transliterate latin names)
0:00:00 DEB - argument: languages=am,ar,az,be,bg,bn,br,bs,ca,co,cs,cy,da,de,el,en,eo,es,et,eu,fa,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,pa,pnb,pl,pt,rm,ro,ru,sk,sl,sq,sr,sr-Latn,sv,ta,te,th,tr,uk,ur,vi,zh,zh-Hant,zh-Hans (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=false (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=/data/planet.pmtiles.layerstats.tsv.gz (layer stats output path)
0:00:00 INF - Building OpenMapTilesProfile profile into file:///data/planet.pmtiles 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=PMTILES, scheme=FILE, uri=file:///data/planet.pmtiles, options={}]
0:00:00 INF - no wikidata translations found, run with --fetch-wikidata to download
0:00:00 DEB - ✓ 260G storage on /data (tmpfs) requested for read phase disk, 457G available
0:00:00 DEB - - 260G used for temporary feature storage
0:00:00 DEB - ✓ 390G storage on /data (tmpfs) requested for write phase disk, 457G available
0:00:00 DEB - - 260G used for temporary feature storage
0:00:00 DEB - - 130G used for archive output
0:00:00 DEB - ✓ 124G JVM heap requested for read phase, 214G available
0:00:00 DEB - - 88G used for array node location cache (switch to sparsearray to reduce size)
0:00:00 DEB - - 11G used for multipolygon way geometries
0:00:00 DEB - - 23G used for temporary profile storage
0:00:00 DEB - ✓ 0 temporary files and 545G 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 INF - Using merge sort feature map, chunk size=2000mb max workers=180
0:00:00 INF [lake_centerlines] -
0:00:00 INF [lake_centerlines] - Starting...
0:00:02 INF [lake_centerlines] - read: [ 59k 100% 34k/s ] write: [ 0 0/s ] 0
cpus: 2.1 gc: 1% heap: 334M/214G direct: 262k postGC: 193M
-> (0/4) -> read( -%) -> (0/1.1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/230k) -> write( -% -% -% -% -% -%)
0:00:02 INF [lake_centerlines] - Finished in 2s cpu:8s avg:3.3
0:00:02 INF [lake_centerlines] - read 2x(18% 0.4s done:2s)
0:00:02 INF [lake_centerlines] - process 174x(0% 0s wait:2s)
0:00:02 INF [lake_centerlines] - write 6x(0% 0s wait:2s)
0:00:02 INF [water_polygons] -
0:00:02 INF [water_polygons] - Starting...
0:00:12 INF [water_polygons] - read: [ 5.5k 38% 549/s ] write: [ 32M 3.2M/s ] 12G
cpus: 92.3 gc: 7% heap: 9.8G/214G direct: 54M postGC: 4.1G
-> (0/4) -> read(93%) -> (0/1.1k) -> process(47% 60% 45% 54% 36% 40% 51% 49% 44% 41% 63% 42% 40% 38% 31% 55% 60% 65% 62% 47% 47% 47% 42% 42% 60% 77% 45% 28% 48% 30% 28% 52% 54% 58% 66% 39% 41% 35% 43% 64% 44% 46% 41% 65% 58% 88% 56% 32% 73% 62% 32% 64% 46% 61% 54% 55% 42% 59% 43% 28% 56% 47% 36% 57% 49% 65% 53% 63% 25% 29% 42% 51% 71% 37% 35% 36% 41% 38% 76% 43% 41% 54% 47% 58% 40% 72% 69% 49% 43% 49% 86% 46% 54% 56% 67% 29% 52% 54% 51% 54% 52% 50% 43% 38% 58% 40% 45% 33% 49% 41% 36% 53% 60% 45% 35% 60% 45% 47% 26% 58% 58% 42% 48% 51% 27% 52% 46% 52% 43% 56% 29% 43% 57% 32% 51% 37% 40% 77% 36% 38% 56% 77% 59% 43% 68% 48% 33% 40% 49% 38% 35% 51% 33% 40% 45% 41% 51% 69% 69% 46% 41% 90% 53% 30% 52% 62% 31% 26% 40% 70% 30% 30% 46% 34%) -> (88k/230k) -> write(27% 27% 27% 27% 26% 26%)
0:00:22 INF [water_polygons] - read: [ 9.8k 68% 429/s ] write: [ 113M 8M/s ] 12G
cpus: 30.8 gc: 1% heap: 38G/214G direct: 54M postGC: 2.1G
-> (0/4) -> read(13%) -> (1k/1.1k) -> process( 7% 33% 4% 7% 5% 7% 50% 59% 4% 51% 8% 11% 31% 6% 5% 16% 5% 53% 10% 21% 18% 4% 12% 11% 8% 18% 15% 15% 11% 7% 5% 12% 14% 17% 12% 5% 8% 15% 14% 30% 4% 5% 15% 15% 5% 33% 11% 7% 22% 14% 7% 16% 14% 4% 4% 10% 3% 13% 7% 22% 11% 14% 14% 3% 7% 35% 3% 18% 7% 4% 7% 15% 5% 6% 11% 10% 7% 19% 31% 16% 8% 9% 20% 5% 9% 6% 9% 9% 6% 15% 4% 19% 5% 7% 6% 4% 10% 10% 10% 4% 4% 8% 5% 9% 31% 25% 6% 12% 23% 4% 9% 9% 7% 20% 11% 7% 9% 10% 7% 39% 7% 41% 8% 20% 7% 6% 10% 8% 9% 6% 9% 12% 3% 5% 27% 6% 10% 5% 22% 5% 87% 4% 12% 18% 14% 13% 6% 52% 7% 3% 5% 29% 26% 13% 11% 62% 7% 11% 21% 49% 6% 23% 21% 6% 5% 16% 10% 4% 11% 7% 9% 38% 6% 18%) -> (224k/230k) -> write(90% 90% 90% 90% 90% 90%)
0:00:33 INF [water_polygons] - read: [ 13k 93% 365/s ] write: [ 197M 8.3M/s ] 17G
cpus: 9.6 gc: 0% heap: 52G/214G direct: 54M postGC: 2G
-> (0/4) -> read( 0%) -> (1k/1.1k) -> process( 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 12% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 3% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 3% 2% 2% 2%) -> (225k/230k) -> write(100% 100% 100% 100% 100% 100%)
0:00:36 INF [water_polygons] - read: [ 14k 100% 319/s ] write: [ 222M 7.9M/s ] 10G
cpus: 9.2 gc: 0% heap: 36G/214G direct: 54M postGC: 2G
-> (0/4) -> read( -%) -> (0/1.1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/230k) -> write( -% -% -% -% -% -%)
0:00:36 INF [water_polygons] - Finished in 33s cpu:22m40s avg:40.8
0:00:36 INF [water_polygons] - read 2x(16% 5s wait:9s done:18s)
0:00:36 INF [water_polygons] - process 174x(20% 7s wait:26s)
0:00:36 INF [water_polygons] - write 6x(74% 25s wait:8s)
0:00:36 INF [natural_earth] -
0:00:36 INF [natural_earth] - Starting...
0:00:36 INF [natural_earth] - unzipping /data/data/sources/natural_earth_vector.sqlite.zip to data/tmp/%2Fnatural_earth_vector.sqlite%2Fpackages%2Fnatural_earth_vector.sqlite
0:00:39 INF [natural_earth] - unzipping /data/data/sources/natural_earth_vector.sqlite.zip to data/tmp/%2Fnatural_earth_vector.sqlite%2Fpackages%2Fnatural_earth_vector.sqlite
0:00:49 INF [natural_earth] - read: [ 288k 83% 28k/s ] write: [ 0 0/s ] 22G
cpus: 1.9 gc: 0% heap: 43G/214G direct: 54M postGC: 2G
-> (0/4) -> read(63%) -> (1/1.1k) -> process( 0% 0% 1% 1% 0% 1% 0% 0% 1% 1% 1% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 1% 0% 1% 0% 1% 0% 1% 0% 0% 0% 0% 1% 0% 0% 1% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 0% 1% 0% 1% 0% 0% 0% 0% 0% 0% 1% 0% 0% 1% 9% 0% 0% 1% 0% 0% 0% 0% 1% 0% 1% 0% 1% 0% 1% 0% 0% 0% 0% 0% 0% 1% 0% 0% 0% 1% 0% 1% 0% 0% 0% 0% 0% 0% 1% 1% 0% 1% 0% 1% 0% 1% 0% 0% 0% 0% 0% 1% 1% 0% 0% 0% 0% 0% 0% 1% 0% 0% 1% 0% 0% 1% 0% 0% 0% 0% 0% 0% 1% 1% 0% 0% 0% 1% 0% 0% 1% 1% 0% 0% 0% 0% 0% 0% 0% 0% 0% 1% 1% 0% 0% 0% 1% 0% 0% 0% 0% 0% 0% 0% 0% 1% 0% 1% 1% 0% 0% 0% 1% 0% 0% 1% 0%) -> (27k/230k) -> write( 0% 0% 0% 0% 0% 0%)
0:00:51 INF [natural_earth] - read: [ 349k 100% 38k/s ] write: [ 33k 21k/s ] 10G
cpus: 1.5 gc: 0% heap: 44G/214G direct: 54M postGC: 2G
-> (0/4) -> read( -%) -> (0/1.1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/230k) -> write( -% -% -% -% -% -%)
0:00:51 INF [natural_earth] - Finished in 15s cpu:25s avg:1.7
0:00:51 INF [natural_earth] - read 2x(24% 4s wait:2s done:9s)
0:00:51 INF [natural_earth] - process 174x(0% 0.1s wait:12s done:3s)
0:00:51 INF [natural_earth] - write 6x(0% 0s wait:12s done:3s)
0:00:51 INF [osm_pass1] -
0:00:51 INF [osm_pass1] - Starting...
0:01:01 INF [osm_pass1] - nodes: [ 2.3B 233M/s ] 25G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 9.2k 924/s ]
cpus: 101.1 gc: 9% heap: 47G/214G direct: 57M postGC: 28G hppc: 1k
read(79%) -> (68/538) -> process(49% 49% 50% 51% 52% 46% 51% 56% 52% 49% 54% 54% 50% 53% 50% 51% 49% 55% 54% 54% 52% 51% 53% 53% 53% 54% 51% 53% 53% 52% 52% 51% 52% 53% 51% 50% 52% 48% 51% 53% 52% 51% 51% 50% 52% 52% 51% 53% 48% 51% 52% 52% 53% 57% 53% 52% 49% 50% 52% 51% 49% 51% 47% 53% 53% 51% 53% 56% 52% 49% 53% 52% 48% 48% 52% 49% 50% 51% 49% 51% 53% 49% 51% 52% 51% 52% 52% 53% 52% 49% 53% 53% 52% 51% 48% 50% 51% 49% 51% 49% 49% 49% 53% 52% 53% 50% 52% 52% 52% 50% 52% 50% 48% 49% 55% 47% 51% 52% 51% 50% 48% 51% 52% 52% 49% 48% 52% 50% 49% 52% 53% 52% 50% 50% 51% 54% 52% 53% 52% 48% 50% 50% 52% 53% 55% 51% 50% 47% 50% 53% 47% 50% 51% 53% 50% 51% 51% 51% 51% 50% 48% 51% 52% 53% 47% 48% 50% 49% 48% 48% 52% 53% 47% 50% 54% 47% 50% 50% 50%)
0:01:11 INF [osm_pass1] - nodes: [ 5.6B 332M/s ] 59G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 18k 965/s ]
cpus: 103.3 gc: 12% heap: 107G/214G direct: 57M postGC: 62G hppc: 1k
read(87%) -> (0/538) -> process(48% 50% 50% 47% 48% 49% 49% 52% 49% 49% 52% 49% 50% 50% 49% 50% 53% 52% 51% 50% 52% 49% 51% 53% 47% 49% 52% 50% 48% 48% 51% 51% 49% 52% 47% 51% 50% 50% 50% 48% 51% 49% 51% 54% 47% 51% 46% 48% 50% 49% 46% 49% 51% 50% 51% 52% 49% 52% 46% 50% 47% 48% 49% 49% 50% 53% 50% 49% 47% 55% 49% 49% 50% 51% 50% 50% 46% 52% 53% 47% 50% 51% 52% 50% 54% 49% 52% 50% 51% 50% 47% 50% 50% 52% 52% 48% 50% 50% 53% 48% 48% 47% 50% 51% 48% 46% 54% 52% 51% 49% 49% 49% 50% 49% 51% 51% 52% 49% 49% 48% 53% 49% 50% 49% 50% 51% 49% 51% 47% 52% 49% 52% 51% 53% 51% 51% 50% 54% 51% 47% 47% 50% 52% 50% 52% 52% 49% 50% 52% 50% 47% 48% 51% 53% 48% 52% 52% 51% 52% 54% 46% 49% 53% 49% 54% 48% 54% 48% 46% 48% 53% 49% 47% 54% 51% 51% 50% 49% 48%)
0:01:21 INF [osm_pass1:process] - Finished nodes: 8,876,780,887 (299M/s) in 30s cpu:51m38s gc:3s avg:104.6
0:01:21 INF [osm_pass1] - nodes: [ 8.8B 319M/s ] 92G ways: [ 114k 11k/s ] rels: [ 0 0/s ] blocks: [ 27k 900/s ]
cpus: 111.4 gc: 12% heap: 143G/214G direct: 57M postGC: 95G hppc: 1k
read(85%) -> (359/538) -> process(51% 50% 54% 48% 54% 55% 51% 53% 51% 53% 50% 51% 51% 50% 51% 57% 52% 54% 53% 54% 51% 50% 50% 52% 50% 54% 51% 56% 49% 57% 54% 54% 53% 47% 49% 53% 53% 55% 51% 53% 52% 54% 51% 52% 47% 52% 47% 51% 55% 48% 49% 49% 56% 53% 54% 53% 49% 51% 53% 49% 51% 50% 54% 51% 54% 54% 53% 49% 47% 49% 49% 49% 54% 54% 49% 50% 53% 51% 56% 52% 50% 52% 51% 48% 54% 51% 54% 39% 49% 50% 50% 51% 49% 56% 54% 51% 54% 33% 53% 54% 51% 37% 41% 52% 52% 50% 53% 53% 50% 53% 52% 48% 50% 53% 54% 46% 55% 54% 55% 53% 50% 53% 49% 48% 51% 48% 54% 53% 51% 51% 55% 51% 53% 52% 51% 48% 51% 50% 50% 50% 52% 53% 51% 49% 49% 52% 50% 48% 50% 53% 50% 48% 52% 53% 50% 51% 50% 53% 51% 49% 51% 52% 52% 55% 54% 51% 52% 50% 51% 49% 57% 49% 52% 56% 53% 54% 54% 52% 45%)
0:01:31 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 687M 68M/s ] rels: [ 0 0/s ] blocks: [ 38k 1k/s ]
cpus: 140 gc: 5% heap: 102G/214G direct: 58M postGC: 97G hppc: 1k
read(88%) -> (1/538) -> process(67% 66% 71% 72% 69% 71% 71% 68% 73% 69% 68% 71% 69% 69% 69% 71% 72% 68% 72% 68% 73% 69% 72% 70% 71% 71% 71% 70% 70% 68% 68% 71% 71% 70% 70% 67% 73% 71% 74% 68% 67% 70% 69% 68% 71% 70% 69% 70% 70% 73% 71% 71% 68% 72% 71% 70% 68% 67% 72% 71% 72% 72% 72% 69% 70% 74% 69% 68% 72% 69% 65% 69% 69% 69% 69% 71% 69% 72% 68% 73% 68% 72% 72% 71% 68% 71% 68% 69% 68% 70% 70% 68% 73% 66% 69% 68% 71% 73% 71% 70% 68% 71% 70% 71% 69% 73% 69% 67% 71% 75% 70% 73% 72% 68% 72% 73% 70% 69% 72% 70% 71% 69% 72% 69% 66% 72% 71% 70% 69% 70% 69% 71% 67% 66% 68% 67% 72% 74% 71% 68% 73% 70% 71% 71% 71% 70% 70% 73% 73% 68% 68% 72% 69% 67% 67% 75% 71% 71% 70% 68% 68% 72% 69% 71% 69% 71% 72% 69% 69% 70% 74% 71% 67% 70% 68% 69% 69% 68% 69%)
0:01:35 INF [osm_pass1:process] - Finished ways: 993,607,585 (69M/s) in 14s cpu:33m21s avg:139.6
0:01:41 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 993M 30M/s ] rels: [ 4.4M 439k/s ] blocks: [ 42k 436/s ]
cpus: 69 gc: 6% heap: 102G/214G direct: 54M postGC: 100G hppc: 322M
read( -%) -> (130/538) -> process(31% 33% 32% 33% 32% 33% 33% 34% 30% 32% 32% 32% 32% 34% 32% 35% 33% 32% 32% 31% 31% 35% 32% 34% 33% 34% 32% 33% 33% 32% 35% 33% 34% 34% 31% 34% 33% 33% 32% 37% 34% 33% 33% 35% 33% 35% 35% 32% 30% 32% 35% 33% 34% 33% 34% 33% 35% 31% 32% 30% 33% 32% 30% 34% 34% 34% 33% 34% 35% 33% 32% 32% 32% 35% 33% 32% 33% 32% 35% 33% 31% 31% 29% 33% 33% 35% 32% 32% 33% 32% 33% 33% 36% 33% 31% 33% 33% 30% 33% 32% 31% 30% 33% 32% 34% 33% 34% 33% 32% 32% 32% 37% 33% 35% 32% 32% 33% 34% 32% 34% 32% 32% 31% 33% 30% 32% 34% 31% 31% 34% 33% 32% 34% 33% 35% 35% 33% 32% 32% 36% 33% 37% 33% 35% 34% 30% 30% 34% 35% 34% 33% 34% 32% 33% 33% 33% 31% 33% 34% 33% 30% 35% 30% 32% 32% 34% 33% 32% 31% 34% 34% 31% 32% 34% 31% 35% 35% 33% 31%)
0:01:49 INF [osm_pass1:process] - Finished relations: 11,749,466 (834k/s) in 14s cpu:4m35s avg:19.5
0:01:49 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 993M 0/s ] rels: [ 11M 920k/s ] blocks: [ 43k 38/s ]
cpus: 16.1 gc: 5% heap: 106G/214G direct: 54M postGC: 100G hppc: 708M
read( -%) -> (0/538) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%)
0:01:49 DEB [osm_pass1] - Processed 43,182 blocks:
0:01:49 DEB [osm_pass1] - nodes: 8,876,780,887 (299M/s) in 30s cpu:51m38s gc:3s avg:104.6
0:01:49 DEB [osm_pass1] - ways: 993,607,585 (69M/s) in 14s cpu:33m21s avg:139.6
0:01:49 DEB [osm_pass1] - relations: 11,749,466 (834k/s) in 14s cpu:4m35s avg:19.5
0:01:49 INF [osm_pass1] - Finished in 58s cpu:1h29m56s gc:5s avg:92.8
0:01:49 INF [osm_pass1] - read 1x(65% 38s wait:2s done:14s)
0:01:49 INF [osm_pass1] - process 179x(44% 26s block:16s wait:12s done:1s)
0:01:49 INF [osm_pass2] -
0:01:49 INF [osm_pass2] - Starting...
0:02:00 INF [osm_pass2] - nodes: [ 793M 9% 78M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 281M 5.7M/s ] 22G blocks: [ 3.6k 8% 352/s ]
cpus: 96.4 gc: 12% heap: 134G/214G direct: 57M postGC: 101G relInfo: 708M mpGeoms: 297
read(38%) -> (88/262) -> process(47% 49% 50% 49% 45% 53% 56% 52% 43% 49% 51% 42% 47% 50% 42% 45% 45% 45% 54% 53% 45% 43% 51% 51% 43% 45% 44% 44% 63% 45% 47% 46% 46% 48% 44% 47% 48% 48% 52% 50% 48% 47% 49% 49% 61% 51% 47% 50% 50% 52% 49% 44% 50% 48% 49% 51% 45% 49% 46% 49% 51% 48% 47% 45% 49% 48% 44% 45% 42% 47% 41% 48% 48% 45% 46% 41% 50% 46% 45% 47% 41% 44% 43% 46% 37% 47% 49% 44% 40% 52% 50% 46% 50% 45% 45% 47% 48% 47% 45% 49% 46% 45% 46% 47% 46% 46% 49% 45% 47% 41% 52% 48% 45% 46% 38% 39% 41% 41% 47% 39% 43% 46% 49% 47% 42% 50% 44% 47% 51% 43% 48% 51% 54% 46% 46% 46% 44% 48% 44% 38% 44% 42% 48% 45% 48% 41% 44% 52% 44% 51% 44% 49% 47% 49% 43% 49% 46% 58% 41% 39% 46% 43% 47% 40% 43% 46% 46% 45% 42% 44% 47% 45% 45% 51%) -> (97k/230k) -> write(43% 43% 43% 43% 42% 43%)
0:02:11 INF [osm_pass2] - nodes: [ 2.2B 26% 138M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 350M 6.4M/s ] 30G blocks: [ 9.3k 22% 519/s ]
cpus: 111.5 gc: 11% heap: 118G/214G direct: 57M postGC: 100G relInfo: 708M mpGeoms: 297
read(64%) -> (47/262) -> process(56% 56% 58% 50% 58% 55% 46% 57% 60% 54% 51% 48% 55% 56% 61% 44% 55% 50% 51% 49% 61% 61% 56% 61% 58% 47% 51% 51% 64% 53% 49% 62% 51% 50% 56% 56% 54% 55% 59% 52% 60% 51% 41% 56% 60% 62% 55% 50% 55% 51% 51% 58% 53% 61% 54% 48% 61% 52% 54% 51% 55% 59% 48% 55% 51% 50% 57% 56% 59% 49% 57% 46% 50% 57% 58% 63% 51% 50% 52% 54% 55% 58% 51% 48% 52% 59% 65% 55% 57% 52% 54% 54% 59% 53% 52% 57% 56% 58% 54% 58% 49% 51% 59% 41% 48% 59% 52% 53% 55% 52% 50% 49% 58% 57% 54% 46% 59% 59% 55% 55% 60% 61% 54% 56% 49% 57% 61% 53% 56% 57% 46% 48% 56% 53% 49% 32% 63% 61% 58% 58% 58% 56% 58% 57% 59% 55% 53% 59% 59% 56% 51% 55% 57% 55% 50% 49% 61% 57% 56% 50% 55% 56% 50% 48% 56% 56% 59% 52% 49% 51% 52% 50% 57% 52%) -> (93k/230k) -> write(70% 71% 71% 70% 70% 70%)
0:02:21 INF [osm_pass2] - nodes: [ 4.2B 47% 168M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 413M 5.5M/s ] 38G blocks: [ 14k 34% 494/s ]
cpus: 118.9 gc: 4% heap: 106G/214G direct: 57M postGC: 100G relInfo: 708M mpGeoms: 297
read(77%) -> (78/262) -> process(59% 59% 66% 59% 57% 66% 66% 59% 43% 55% 58% 67% 68% 55% 54% 53% 49% 60% 62% 60% 62% 59% 58% 53% 61% 66% 60% 60% 57% 60% 58% 57% 65% 49% 59% 58% 63% 64% 62% 63% 58% 75% 74% 58% 49% 55% 67% 63% 61% 60% 65% 59% 54% 63% 56% 59% 54% 60% 63% 59% 54% 57% 64% 31% 53% 59% 63% 57% 57% 62% 56% 66% 62% 60% 58% 63% 62% 69% 63% 62% 53% 52% 65% 58% 53% 62% 46% 59% 55% 62% 68% 55% 60% 64% 64% 58% 58% 59% 63% 59% 68% 61% 57% 57% 55% 57% 56% 67% 65% 57% 47% 65% 67% 65% 58% 64% 60% 55% 64% 61% 53% 54% 60% 58% 74% 60% 63% 51% 59% 60% 72% 57% 59% 62% 63% 67% 50% 61% 59% 58% 60% 58% 64% 61% 54% 63% 57% 58% 62% 54% 59% 56% 72% 58% 57% 66% 53% 64% 58% 60% 53% 62% 69% 65% 55% 64% 58% 61% 64% 60% 57% 70% 60% 57%) -> (154k/230k) -> write(64% 66% 64% 63% 63% 65%)
0:02:33 INF [osm_pass2] - nodes: [ 6B 68% 175M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 466M 5M/s ] 46G blocks: [ 20k 47% 503/s ]
cpus: 136.7 gc: 3% heap: 111G/214G direct: 57M postGC: 99G relInfo: 708M mpGeoms: 297
read(87%) -> (0/262) -> process(67% 72% 63% 73% 71% 71% 62% 76% 66% 73% 72% 75% 64% 76% 61% 79% 73% 70% 74% 65% 65% 77% 74% 74% 70% 67% 66% 72% 65% 65% 66% 71% 68% 81% 67% 80% 72% 71% 71% 71% 64% 63% 72% 68% 65% 77% 73% 74% 70% 76% 74% 68% 72% 62% 77% 69% 68% 70% 70% 68% 64% 64% 66% 75% 69% 75% 66% 69% 69% 66% 75% 69% 69% 74% 75% 74% 76% 65% 81% 74% 72% 63% 67% 72% 77% 66% 63% 69% 74% 73% 66% 70% 69% 71% 70% 74% 64% 66% 63% 75% 63% 76% 66% 70% 72% 66% 61% 72% 74% 78% 65% 72% 78% 74% 80% 74% 66% 68% 79% 75% 70% 72% 71% 68% 74% 75% 66% 69% 76% 72% 75% 67% 71% 70% 71% 70% 64% 66% 75% 68% 77% 68% 65% 68% 70% 77% 56% 64% 69% 69% 68% 66% 60% 65% 69% 79% 65% 72% 81% 68% 74% 70% 72% 74% 59% 74% 65% 70% 73% 55% 61% 72% 68% 79%) -> (96k/230k) -> write(68% 68% 68% 68% 68% 69%)
0:02:43 INF [osm_pass2] - nodes: [ 8B 90% 179M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 525M 5.3M/s ] 46G blocks: [ 25k 59% 493/s ]
cpus: 148.4 gc: 3% heap: 177G/214G direct: 57M postGC: 99G relInfo: 708M mpGeoms: 297
read(88%) -> (88/262) -> process(75% 81% 70% 64% 79% 81% 75% 72% 69% 67% 65% 71% 75% 74% 75% 77% 75% 81% 78% 67% 72% 83% 77% 79% 70% 72% 79% 73% 71% 63% 73% 67% 75% 80% 71% 55% 77% 72% 68% 74% 70% 72% 78% 69% 83% 75% 76% 76% 79% 80% 81% 80% 82% 77% 82% 82% 76% 74% 75% 75% 71% 75% 74% 72% 80% 79% 79% 80% 74% 79% 86% 79% 70% 65% 74% 84% 80% 78% 72% 73% 76% 76% 77% 72% 74% 81% 81% 78% 77% 79% 74% 69% 75% 73% 76% 78% 67% 77% 74% 78% 76% 77% 78% 83% 71% 75% 70% 78% 79% 78% 73% 78% 83% 65% 67% 72% 68% 83% 72% 72% 67% 74% 78% 80% 80% 73% 77% 74% 72% 80% 82% 72% 81% 78% 81% 80% 73% 76% 74% 76% 76% 76% 77% 77% 76% 79% 79% 71% 63% 70% 79% 76% 69% 84% 79% 74% 70% 77% 75% 76% 70% 77% 74% 80% 81% 76% 77% 74% 76% 80% 78% 77% 72% 75%) -> (91k/230k) -> write(78% 78% 78% 78% 79% 79%)
0:02:48 DEB [osm_pass2:process] - Sorting long long multimap...
0:02:48 INF [osm_pass2:process] - Finished nodes: 8,876,780,887 (149M/s) in 59s cpu:2h1m37s gc:4s avg:123.1
0:02:53 INF [osm_pass2] - nodes: [ 8.8B 100% 81M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 555M 2.7M/s ] 54G blocks: [ 27k 65% 239/s ]
cpus: 78.9 gc: 2% heap: 101G/214G direct: 57M postGC: 101G relInfo: 708M mpGeoms: 1M
read(39%) -> (88/262) -> process(32% 38% 37% 36% 36% 29% 34% 35% 35% 35% 37% 33% 32% 32% 36% 38% 35% 34% 32% 30% 29% 31% 35% 32% 28% 39% 36% 31% 36% 36% 35% 34% 36% 32% 24% 37% 40% 38% 38% 31% 38% 32% 38% 35% 36% 31% 32% 35% 32% 33% 32% 31% 32% 37% 34% 37% 30% 36% 37% 33% 35% 33% 38% 30% 33% 30% 34% 30% 31% 36% 34% 37% 40% 35% 32% 30% 36% 27% 37% 30% 39% 38% 33% 30% 31% 38% 37% 36% 36% 32% 34% 28% 31% 37% 31% 30% 35% 41% 34% 39% 35% 35% 34% 33% 38% 35% 35% 30% 37% 33% 39% 33% 35% 41% 32% 29% 35% 35% 37% 32% 34% 33% 35% 32% 38% 34% 31% 36% 39% 35% 26% 36% 33% 28% 29% 36% 35% 38% 28% 36% 42% 36% 31% 33% 28% 24% 40% 31% 33% 32% 34% 39% 37% 30% 81% 35% 37% 32% 37% 32% 23% 33% 25% 34% 36% 34% 29% 34% 37% 29% 36% 37% 36% 34%) -> (84k/230k) -> write(37% 37% 35% 37% 35% 37%)
0:02:54 DEB [osm_pass2:process] - Sorted long long multimap 6s cpu:1m59s avg:18.6
0:03:03 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 10M 1% 1M/s ] rels: [ 0 0% 0/s ] features: [ 622M 6.5M/s ] 62G blocks: [ 28k 65% 17/s ]
cpus: 86.4 gc: 2% heap: 124G/214G direct: 57M postGC: 101G relInfo: 573M mpGeoms: 120M
read( 1%) -> (88/262) -> process(46% 46% 44% 44% 46% 46% 32% 48% 47% 47% 45% 36% 45% 45% 47% 38% 37% 45% 46% 43% 39% 45% 41% 45% 45% 44% 45% 47% 41% 48% 47% 42% 45% 42% 43% 46% 46% 41% 36% 47% 44% 33% 39% 49% 47% 43% 43% 44% 44% 44% 37% 45% 42% 47% 42% 44% 44% 48% 45% 48% 45% 46% 40% 45% 40% 48% 46% 45% 48% 46% 43% 49% 46% 45% 46% 42% 43% 42% 43% 44% 44% 42% 41% 38% 45% 46% 41% 41% 44% 47% 44% 47% 42% 43% 43% 43% 43% 46% 46% 47% 45% 44% 42% 49% 47% 43% 45% 46% 42% 48% 41% 43% 42% 49% 46% 47% 38% 45% 48% 48% 44% 47% 40% 46% 45% 44% 47% 37% 43% 44% 45% 45% 47% 48% 35% 43% 47% 47% 48% 45% 47% 43% 47% 47% 47% 40% 43% 48% 44% 46% 47% 42% 42% 46% 55% 47% 46% 44% 42% 43% 44% 47% 46% 45% 38% 36% 42% 35% 46% 43% 41% 46% 44% 47%) -> (193k/230k) -> write(56% 58% 57% 57% 57% 57%)
0:03:13 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 28M 3% 1.7M/s ] rels: [ 0 0% 0/s ] features: [ 710M 8.7M/s ] 69G blocks: [ 28k 66% 38/s ]
cpus: 118.6 gc: 5% heap: 120G/214G direct: 58M postGC: 102G relInfo: 573M mpGeoms: 530M
read( 4%) -> (88/262) -> process(57% 61% 58% 54% 59% 57% 58% 59% 60% 63% 50% 59% 54% 55% 60% 58% 60% 56% 58% 55% 69% 56% 57% 59% 65% 66% 55% 62% 53% 58% 59% 57% 60% 65% 60% 55% 58% 56% 54% 56% 58% 64% 51% 56% 59% 56% 58% 59% 56% 58% 60% 60% 68% 53% 58% 57% 54% 56% 60% 58% 58% 53% 59% 58% 62% 63% 58% 57% 59% 60% 55% 53% 61% 59% 60% 67% 58% 61% 62% 65% 59% 58% 63% 61% 56% 60% 59% 63% 55% 59% 56% 59% 60% 54% 58% 57% 63% 64% 55% 59% 59% 61% 66% 64% 56% 57% 61% 58% 52% 58% 55% 64% 56% 62% 56% 57% 62% 66% 57% 61% 59% 60% 64% 64% 58% 60% 61% 57% 58% 61% 64% 64% 57% 56% 61% 61% 60% 63% 55% 61% 57% 58% 59% 62% 58% 56% 57% 54% 58% 54% 52% 56% 61% 52% 57% 58% 56% 57% 58% 59% 59% 60% 61% 62% 66% 67% 61% 57% 61% 53% 56% 59% 58% 61%) -> (151k/230k) -> write(90% 90% 90% 91% 91% 90%)
0:03:24 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 52M 5% 2.3M/s ] rels: [ 0 0% 0/s ] features: [ 774M 6.3M/s ] 71G blocks: [ 29k 67% 44/s ]
cpus: 160.3 gc: 7% heap: 102G/214G direct: 58M postGC: 139G relInfo: 573M mpGeoms: 899M
read( 8%) -> (88/262) -> process(80% 76% 80% 79% 81% 83% 83% 80% 79% 84% 82% 79% 81% 81% 78% 85% 83% 79% 85% 80% 76% 78% 80% 79% 80% 77% 82% 84% 80% 84% 81% 79% 83% 88% 76% 80% 80% 84% 85% 81% 77% 85% 83% 79% 79% 85% 85% 78% 78% 83% 89% 83% 82% 81% 83% 84% 83% 82% 81% 83% 77% 82% 80% 83% 82% 80% 79% 84% 80% 84% 79% 79% 85% 84% 82% 84% 83% 85% 88% 78% 83% 83% 87% 81% 81% 82% 78% 85% 86% 82% 81% 82% 80% 83% 83% 82% 82% 87% 79% 80% 80% 82% 87% 88% 84% 83% 86% 82% 79% 82% 81% 83% 83% 81% 84% 79% 80% 88% 83% 80% 86% 81% 77% 89% 83% 80% 81% 83% 82% 78% 80% 81% 81% 82% 80% 80% 80% 81% 83% 79% 83% 79% 78% 79% 82% 84% 82% 83% 81% 78% 81% 84% 83% 83% 80% 78% 80% 86% 80% 84% 79% 83% 81% 85% 82% 81% 84% 77% 83% 85% 78% 83% 83% 80%) -> (82k/230k) -> write(78% 78% 79% 77% 78% 79%)
0:03:34 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 75M 8% 2.2M/s ] rels: [ 0 0% 0/s ] features: [ 836M 6M/s ] 77G blocks: [ 29k 68% 40/s ]
cpus: 160.4 gc: 5% heap: 196G/214G direct: 58M postGC: 136G relInfo: 573M mpGeoms: 1.2G
read( 7%) -> (88/262) -> process(84% 86% 86% 86% 85% 86% 84% 86% 85% 86% 83% 83% 81% 81% 86% 83% 83% 82% 74% 84% 83% 83% 86% 88% 85% 80% 79% 81% 82% 82% 84% 84% 83% 84% 87% 85% 87% 84% 84% 83% 86% 85% 83% 86% 84% 83% 84% 84% 87% 83% 81% 81% 84% 83% 81% 83% 86% 86% 74% 81% 83% 84% 84% 83% 85% 82% 86% 83% 83% 86% 82% 86% 87% 85% 84% 86% 84% 86% 80% 83% 86% 86% 79% 83% 84% 84% 85% 83% 85% 79% 82% 79% 81% 81% 82% 86% 85% 82% 83% 83% 84% 83% 81% 78% 85% 80% 84% 83% 78% 85% 82% 82% 81% 86% 84% 87% 82% 81% 84% 86% 79% 79% 79% 81% 85% 84% 84% 82% 76% 85% 83% 79% 84% 83% 87% 86% 83% 84% 87% 82% 80% 83% 84% 79% 83% 79% 82% 86% 81% 86% 80% 83% 84% 85% 84% 81% 86% 84% 86% 86% 78% 83% 81% 84% 85% 86% 85% 81% 86% 83% 86% 78% 76% 81%) -> (127k/230k) -> write(72% 75% 73% 73% 73% 74%)
0:03:44 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 103M 10% 2.6M/s ] rels: [ 0 0% 0/s ] features: [ 909M 7.1M/s ] 84G blocks: [ 29k 69% 47/s ]
cpus: 158.3 gc: 6% heap: 195G/214G direct: 58M postGC: 102G relInfo: 573M mpGeoms: 1.6G
read( 7%) -> (88/262) -> process(85% 83% 83% 83% 83% 82% 85% 83% 86% 80% 84% 84% 83% 86% 85% 83% 81% 80% 85% 84% 81% 86% 83% 84% 81% 83% 83% 84% 84% 84% 82% 84% 81% 83% 81% 84% 82% 84% 83% 81% 82% 82% 81% 83% 82% 84% 84% 83% 83% 80% 84% 84% 82% 83% 81% 84% 83% 82% 85% 85% 82% 83% 82% 83% 80% 82% 85% 82% 86% 81% 81% 80% 85% 84% 84% 85% 81% 83% 84% 83% 84% 80% 84% 85% 80% 82% 84% 85% 82% 82% 84% 82% 81% 82% 83% 83% 82% 83% 83% 84% 86% 81% 83% 82% 83% 84% 79% 82% 82% 83% 81% 85% 82% 82% 85% 83% 82% 81% 83% 81% 83% 81% 83% 79% 81% 84% 83% 81% 86% 80% 79% 83% 82% 82% 83% 84% 81% 83% 82% 82% 84% 76% 85% 81% 82% 85% 83% 84% 82% 83% 82% 82% 80% 82% 82% 83% 81% 83% 83% 81% 85% 81% 83% 84% 82% 84% 83% 80% 85% 82% 82% 83% 84% 78%) -> (118k/230k) -> write(87% 86% 86% 87% 86% 86%)
0:03:54 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 131M 13% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 985M 7.4M/s ] 91G blocks: [ 30k 70% 43/s ]
cpus: 154.1 gc: 6% heap: 171G/214G direct: 58M postGC: 102G relInfo: 573M mpGeoms: 1.9G
read( 7%) -> (88/262) -> process(82% 82% 83% 81% 79% 82% 83% 85% 79% 77% 79% 78% 81% 82% 82% 81% 81% 79% 80% 82% 79% 82% 83% 82% 79% 81% 80% 83% 82% 81% 80% 74% 80% 80% 80% 79% 82% 79% 80% 81% 81% 82% 81% 82% 78% 80% 81% 80% 81% 80% 81% 80% 78% 81% 82% 81% 81% 81% 80% 79% 79% 81% 79% 81% 79% 82% 80% 82% 82% 80% 81% 81% 81% 78% 80% 83% 82% 81% 78% 81% 80% 81% 79% 78% 80% 81% 80% 78% 79% 81% 82% 81% 82% 80% 81% 79% 81% 80% 82% 82% 81% 82% 82% 79% 81% 82% 80% 80% 81% 78% 81% 78% 81% 81% 82% 78% 81% 82% 82% 79% 78% 81% 80% 76% 81% 81% 80% 83% 80% 85% 81% 81% 80% 79% 81% 78% 79% 80% 79% 79% 81% 82% 80% 79% 81% 80% 80% 82% 80% 80% 81% 80% 81% 80% 78% 82% 79% 76% 81% 81% 80% 82% 79% 81% 79% 81% 82% 82% 81% 81% 81% 81% 77% 82%) -> (96k/230k) -> write(89% 88% 89% 89% 90% 90%)
0:04:04 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 158M 16% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 1B 6.9M/s ] 96G blocks: [ 30k 71% 43/s ]
cpus: 160.5 gc: 6% heap: 179G/214G direct: 58M postGC: 103G relInfo: 573M mpGeoms: 2.2G
read( 7%) -> (88/262) -> process(85% 83% 85% 85% 83% 84% 83% 84% 83% 83% 83% 81% 81% 81% 82% 82% 84% 83% 86% 82% 83% 85% 84% 83% 83% 83% 84% 83% 82% 82% 84% 85% 81% 84% 83% 84% 84% 82% 82% 83% 85% 83% 85% 82% 82% 82% 81% 83% 83% 83% 83% 83% 83% 83% 82% 81% 84% 82% 84% 85% 82% 84% 82% 82% 84% 84% 83% 83% 85% 82% 82% 82% 83% 84% 83% 83% 83% 84% 83% 81% 82% 82% 85% 81% 82% 83% 82% 83% 84% 83% 82% 83% 82% 83% 81% 85% 81% 81% 80% 82% 82% 83% 83% 82% 82% 84% 83% 82% 85% 81% 83% 84% 84% 84% 85% 82% 82% 85% 85% 80% 82% 84% 83% 81% 84% 83% 80% 83% 80% 81% 79% 83% 82% 81% 82% 80% 83% 84% 85% 82% 84% 82% 84% 84% 81% 84% 84% 83% 86% 83% 85% 84% 83% 85% 83% 85% 83% 85% 84% 85% 81% 82% 83% 83% 85% 82% 83% 83% 81% 84% 85% 81% 84% 81%) -> (142k/230k) -> write(86% 85% 86% 86% 85% 85%)
0:04:14 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 187M 19% 2.8M/s ] rels: [ 0 0% 0/s ] features: [ 1.1B 7M/s ] 99G blocks: [ 31k 72% 43/s ]
cpus: 159.6 gc: 6% heap: 106G/214G direct: 58M postGC: 103G relInfo: 573M mpGeoms: 2.5G
read( 7%) -> (88/262) -> process(84% 80% 82% 85% 81% 84% 83% 83% 84% 84% 82% 85% 83% 84% 81% 84% 84% 82% 81% 84% 82% 84% 83% 83% 84% 84% 81% 83% 82% 84% 84% 82% 86% 82% 87% 84% 81% 84% 83% 83% 81% 82% 84% 83% 79% 85% 84% 86% 81% 85% 82% 85% 83% 84% 82% 82% 82% 84% 81% 82% 84% 83% 84% 85% 84% 83% 84% 84% 84% 82% 83% 82% 85% 84% 83% 84% 83% 82% 82% 83% 84% 82% 82% 82% 84% 81% 84% 81% 85% 82% 81% 83% 84% 83% 83% 86% 86% 82% 82% 83% 83% 85% 83% 85% 83% 82% 81% 84% 85% 84% 83% 83% 84% 81% 82% 82% 83% 79% 80% 83% 82% 83% 84% 81% 83% 84% 83% 83% 82% 83% 82% 86% 81% 82% 83% 82% 84% 84% 85% 83% 81% 83% 81% 81% 82% 85% 82% 82% 87% 82% 84% 81% 83% 83% 83% 82% 84% 83% 81% 81% 83% 83% 82% 82% 82% 82% 83% 81% 79% 83% 84% 82% 83% 84%) -> (93k/230k) -> write(87% 88% 88% 88% 89% 87%)
0:04:25 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 217M 22% 3M/s ] rels: [ 0 0% 0/s ] features: [ 1.1B 6.2M/s ] 106G blocks: [ 31k 74% 51/s ]
cpus: 162.2 gc: 6% heap: 177G/214G direct: 58M postGC: 104G relInfo: 573M mpGeoms: 2.9G
read( 9%) -> (88/262) -> process(84% 82% 85% 83% 83% 85% 86% 82% 86% 82% 83% 84% 85% 84% 86% 83% 84% 86% 85% 82% 82% 84% 85% 84% 85% 84% 81% 83% 82% 84% 84% 82% 85% 84% 86% 83% 86% 83% 82% 84% 85% 82% 84% 79% 86% 82% 83% 87% 84% 84% 83% 85% 84% 85% 84% 84% 86% 84% 84% 83% 85% 85% 83% 84% 86% 84% 86% 85% 83% 84% 82% 83% 83% 86% 83% 85% 85% 85% 84% 82% 85% 83% 79% 86% 84% 83% 82% 84% 85% 80% 86% 84% 77% 84% 82% 84% 84% 82% 85% 84% 83% 84% 84% 86% 83% 83% 84% 84% 83% 83% 85% 81% 82% 82% 81% 86% 85% 83% 85% 84% 84% 83% 83% 83% 79% 84% 83% 84% 84% 84% 81% 85% 85% 84% 81% 82% 83% 83% 84% 83% 85% 81% 84% 84% 80% 83% 84% 86% 82% 83% 84% 83% 84% 84% 85% 80% 85% 86% 85% 85% 82% 83% 85% 86% 82% 84% 85% 86% 84% 83% 84% 85% 84% 83%) -> (142k/230k) -> write(83% 84% 83% 83% 83% 83%)
0:04:35 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 246M 25% 2.8M/s ] rels: [ 0 0% 0/s ] features: [ 1.2B 6.6M/s ] 110G blocks: [ 32k 75% 44/s ]
cpus: 166.1 gc: 6% heap: 126G/214G direct: 58M postGC: 104G relInfo: 573M mpGeoms: 3.3G
read( 7%) -> (88/262) -> process(85% 84% 88% 85% 85% 87% 87% 87% 88% 86% 85% 86% 86% 88% 85% 86% 87% 86% 84% 88% 86% 87% 86% 86% 85% 85% 87% 86% 86% 87% 87% 86% 85% 87% 84% 87% 86% 87% 86% 85% 87% 84% 88% 86% 88% 86% 85% 87% 86% 83% 86% 86% 87% 85% 86% 88% 86% 86% 85% 87% 86% 85% 86% 84% 86% 86% 87% 85% 87% 86% 88% 84% 85% 86% 84% 87% 87% 88% 86% 86% 85% 88% 85% 87% 86% 84% 85% 85% 85% 86% 83% 86% 87% 87% 87% 84% 87% 84% 86% 86% 87% 87% 86% 85% 89% 86% 85% 86% 88% 86% 86% 85% 86% 86% 87% 85% 85% 86% 88% 85% 86% 85% 86% 86% 84% 88% 86% 85% 87% 85% 85% 88% 87% 84% 84% 87% 85% 84% 86% 86% 85% 85% 86% 85% 87% 87% 86% 87% 86% 87% 85% 87% 86% 84% 86% 85% 88% 86% 85% 86% 86% 86% 85% 86% 86% 85% 86% 87% 86% 88% 85% 86% 88% 87%) -> (96k/230k) -> write(84% 85% 83% 83% 84% 83%)
0:04:45 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 278M 28% 3M/s ] rels: [ 0 0% 0/s ] features: [ 1.3B 6.3M/s ] 114G blocks: [ 32k 76% 46/s ]
cpus: 157.5 gc: 6% heap: 177G/214G direct: 58M postGC: 139G relInfo: 573M mpGeoms: 3.7G
read( 7%) -> (88/262) -> process(80% 83% 81% 84% 85% 83% 82% 80% 82% 72% 81% 83% 84% 81% 82% 81% 78% 80% 80% 83% 81% 83% 82% 83% 85% 84% 81% 87% 76% 82% 82% 83% 82% 82% 84% 85% 81% 79% 86% 73% 82% 81% 84% 85% 84% 85% 83% 78% 84% 81% 80% 82% 84% 79% 76% 81% 79% 87% 84% 78% 84% 80% 81% 83% 82% 82% 82% 77% 76% 84% 80% 77% 78% 81% 74% 84% 84% 85% 83% 83% 79% 85% 81% 83% 84% 83% 83% 81% 82% 82% 83% 75% 83% 84% 81% 86% 84% 79% 82% 80% 83% 86% 83% 83% 84% 73% 79% 81% 83% 78% 74% 74% 84% 73% 81% 83% 80% 81% 82% 82% 85% 83% 83% 84% 81% 84% 74% 83% 81% 79% 83% 85% 83% 86% 81% 85% 79% 81% 76% 79% 81% 80% 83% 84% 83% 84% 81% 83% 82% 82% 84% 80% 76% 83% 83% 86% 78% 82% 83% 80% 78% 77% 79% 80% 86% 74% 81% 85% 83% 77% 84% 79% 83% 82%) -> (135k/230k) -> write(79% 79% 80% 79% 80% 79%)
0:04:55 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 308M 31% 3M/s ] rels: [ 0 0% 0/s ] features: [ 1.3B 6.5M/s ] 120G blocks: [ 33k 77% 44/s ]
cpus: 162.5 gc: 6% heap: 118G/214G direct: 58M postGC: 104G relInfo: 573M mpGeoms: 4G
read( 7%) -> (88/262) -> process(86% 84% 84% 82% 82% 84% 84% 83% 85% 86% 85% 84% 83% 84% 86% 82% 82% 83% 84% 83% 85% 83% 79% 84% 84% 83% 84% 82% 84% 85% 82% 83% 85% 85% 84% 87% 84% 82% 87% 81% 86% 85% 79% 82% 84% 85% 82% 81% 83% 87% 84% 82% 86% 84% 84% 85% 85% 84% 82% 85% 86% 86% 85% 83% 84% 86% 84% 83% 82% 85% 86% 82% 84% 85% 85% 82% 84% 84% 79% 83% 86% 85% 84% 82% 84% 82% 85% 84% 81% 84% 85% 82% 85% 82% 84% 85% 86% 84% 85% 84% 86% 80% 83% 83% 83% 83% 85% 84% 82% 84% 87% 82% 82% 82% 84% 84% 84% 86% 85% 83% 84% 82% 84% 84% 83% 86% 82% 84% 86% 84% 85% 84% 82% 82% 84% 85% 84% 85% 83% 82% 84% 83% 84% 84% 80% 85% 82% 83% 83% 84% 83% 86% 85% 81% 82% 86% 83% 84% 84% 84% 83% 83% 83% 84% 82% 85% 84% 84% 82% 83% 83% 82% 82% 83%) -> (91k/230k) -> write(82% 84% 82% 83% 83% 84%)
0:05:05 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 342M 34% 3.2M/s ] rels: [ 0 0% 0/s ] features: [ 1.4B 6.4M/s ] 124G blocks: [ 33k 78% 49/s ]
cpus: 164.7 gc: 6% heap: 105G/214G direct: 58M postGC: 105G relInfo: 573M mpGeoms: 4.4G
read( 8%) -> (88/262) -> process(82% 85% 86% 85% 86% 84% 86% 85% 86% 83% 83% 84% 88% 86% 84% 86% 86% 85% 88% 82% 87% 86% 85% 86% 86% 82% 86% 87% 86% 84% 84% 83% 85% 86% 86% 86% 84% 86% 84% 85% 85% 87% 85% 84% 88% 86% 87% 84% 86% 86% 85% 83% 88% 85% 83% 83% 86% 86% 88% 84% 87% 84% 84% 87% 85% 85% 89% 87% 86% 84% 88% 86% 86% 85% 85% 88% 83% 86% 85% 85% 85% 86% 86% 84% 84% 88% 83% 87% 86% 85% 86% 79% 85% 87% 86% 87% 86% 85% 85% 87% 87% 85% 86% 86% 87% 85% 87% 85% 85% 85% 83% 86% 84% 84% 82% 84% 86% 82% 88% 87% 85% 86% 86% 86% 85% 86% 84% 85% 87% 88% 87% 87% 85% 86% 86% 86% 86% 84% 84% 84% 88% 82% 86% 87% 84% 84% 86% 87% 87% 83% 84% 85% 86% 85% 87% 84% 85% 85% 84% 86% 85% 84% 86% 86% 87% 84% 87% 86% 86% 85% 88% 85% 86% 86%) -> (144k/230k) -> write(83% 83% 82% 83% 83% 80%)
0:05:15 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 374M 38% 3.2M/s ] rels: [ 0 0% 0/s ] features: [ 1.5B 6.2M/s ] 128G blocks: [ 34k 79% 49/s ]
cpus: 164.3 gc: 6% heap: 178G/214G direct: 58M postGC: 107G relInfo: 573M mpGeoms: 4.8G
read( 7%) -> (88/262) -> process(85% 85% 85% 85% 85% 86% 85% 86% 86% 87% 85% 86% 86% 86% 85% 87% 85% 84% 86% 84% 86% 84% 87% 85% 85% 84% 87% 86% 85% 86% 85% 87% 84% 86% 87% 87% 85% 85% 86% 86% 85% 86% 85% 86% 86% 86% 85% 85% 87% 85% 85% 87% 86% 86% 84% 85% 87% 80% 85% 86% 84% 85% 84% 84% 84% 85% 83% 85% 85% 86% 86% 85% 87% 85% 84% 83% 85% 86% 86% 86% 85% 87% 86% 85% 84% 84% 84% 85% 85% 84% 86% 86% 79% 86% 85% 84% 85% 85% 86% 86% 85% 86% 86% 85% 85% 84% 84% 86% 85% 86% 86% 84% 86% 86% 84% 85% 86% 85% 86% 84% 86% 87% 86% 84% 86% 83% 84% 86% 84% 85% 86% 86% 85% 85% 85% 86% 87% 86% 84% 85% 87% 77% 84% 86% 84% 87% 85% 86% 81% 82% 85% 85% 83% 85% 85% 86% 85% 86% 87% 85% 82% 84% 86% 85% 84% 85% 79% 84% 85% 87% 86% 85% 84% 83%) -> (135k/230k) -> write(82% 83% 81% 81% 80% 80%)
0:05:25 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 410M 41% 3.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.5B 6.4M/s ] 131G blocks: [ 34k 80% 46/s ]
cpus: 168 gc: 6% heap: 106G/214G direct: 58M postGC: 105G relInfo: 573M mpGeoms: 5.1G
read( 6%) -> (88/262) -> process(87% 90% 86% 88% 88% 89% 89% 89% 86% 88% 87% 87% 89% 87% 88% 87% 86% 88% 87% 88% 88% 89% 90% 86% 89% 88% 88% 89% 88% 86% 90% 87% 89% 88% 87% 89% 86% 89% 88% 90% 86% 89% 87% 89% 85% 88% 86% 89% 89% 89% 88% 89% 89% 88% 88% 88% 87% 87% 89% 86% 84% 87% 86% 90% 87% 89% 89% 87% 88% 87% 88% 89% 86% 88% 89% 89% 85% 89% 87% 88% 89% 88% 84% 88% 87% 88% 86% 89% 86% 89% 89% 87% 90% 89% 89% 89% 89% 88% 86% 89% 88% 86% 89% 88% 88% 89% 87% 87% 88% 86% 89% 89% 88% 87% 89% 88% 89% 88% 90% 89% 88% 88% 89% 87% 89% 88% 87% 88% 88% 88% 88% 87% 89% 89% 89% 86% 88% 87% 86% 88% 88% 86% 87% 86% 88% 89% 84% 89% 86% 86% 85% 88% 87% 86% 89% 87% 87% 88% 87% 87% 88% 88% 87% 87% 87% 89% 88% 87% 87% 88% 89% 87% 88% 90%) -> (139k/230k) -> write(86% 85% 84% 85% 84% 86%)
0:05:35 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 446M 45% 3.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.6B 6.5M/s ] 138G blocks: [ 35k 81% 48/s ]
cpus: 166.9 gc: 6% heap: 109G/214G direct: 58M postGC: 106G relInfo: 573M mpGeoms: 5.4G
read( 6%) -> (88/262) -> process(89% 86% 87% 87% 87% 86% 88% 86% 87% 87% 88% 88% 86% 85% 88% 88% 88% 87% 87% 86% 90% 86% 90% 88% 88% 88% 84% 85% 87% 86% 88% 87% 86% 86% 87% 88% 86% 85% 89% 84% 86% 86% 86% 86% 87% 86% 86% 87% 87% 88% 89% 86% 88% 88% 89% 87% 87% 87% 85% 89% 88% 88% 86% 88% 86% 89% 86% 89% 86% 87% 86% 88% 88% 87% 87% 86% 89% 88% 86% 87% 87% 88% 88% 85% 89% 87% 87% 86% 86% 87% 87% 87% 86% 87% 87% 88% 88% 85% 90% 88% 85% 85% 87% 87% 88% 88% 88% 86% 87% 87% 85% 88% 88% 86% 86% 85% 88% 86% 85% 88% 84% 87% 85% 86% 87% 87% 88% 87% 85% 88% 87% 86% 86% 85% 84% 87% 88% 87% 86% 85% 89% 86% 85% 85% 85% 86% 88% 85% 86% 86% 88% 86% 86% 86% 87% 87% 86% 84% 87% 87% 86% 87% 87% 86% 85% 88% 87% 89% 87% 86% 87% 82% 87% 88%) -> (143k/230k) -> write(83% 83% 83% 84% 84% 82%)
0:05:46 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 484M 49% 3.7M/s ] rels: [ 0 0% 0/s ] features: [ 1.7B 6.6M/s ] 141G blocks: [ 35k 82% 51/s ]
cpus: 166.8 gc: 6% heap: 122G/214G direct: 58M postGC: 106G relInfo: 573M mpGeoms: 5.6G
read( 7%) -> (88/262) -> process(86% 86% 87% 86% 88% 88% 87% 87% 87% 86% 84% 86% 85% 84% 87% 86% 87% 85% 87% 88% 87% 89% 88% 86% 87% 87% 91% 86% 88% 88% 86% 87% 88% 88% 86% 87% 86% 89% 86% 87% 88% 85% 89% 88% 87% 88% 87% 88% 88% 86% 88% 88% 87% 85% 87% 89% 84% 87% 88% 87% 87% 88% 84% 86% 85% 88% 88% 87% 87% 88% 87% 86% 86% 86% 86% 88% 87% 89% 87% 88% 87% 86% 87% 87% 86% 87% 83% 86% 85% 88% 86% 88% 88% 88% 87% 87% 85% 88% 86% 85% 90% 87% 87% 87% 87% 85% 86% 86% 85% 85% 87% 88% 86% 88% 88% 90% 86% 89% 89% 87% 84% 88% 88% 87% 86% 88% 88% 86% 85% 87% 85% 86% 87% 85% 87% 89% 88% 87% 88% 89% 86% 89% 87% 88% 88% 89% 87% 86% 87% 88% 89% 89% 86% 87% 87% 86% 86% 85% 87% 88% 88% 87% 87% 85% 89% 88% 87% 88% 87% 87% 83% 85% 88% 87%) -> (128k/230k) -> write(83% 82% 82% 83% 83% 81%)
0:05:56 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 522M 53% 3.7M/s ] rels: [ 0 0% 0/s ] features: [ 1.7B 6.5M/s ] 144G blocks: [ 36k 84% 49/s ]
cpus: 165.1 gc: 6% heap: 133G/214G direct: 58M postGC: 106G relInfo: 573M mpGeoms: 5.9G
read( 6%) -> (88/262) -> process(87% 86% 85% 87% 80% 87% 85% 87% 85% 86% 85% 86% 85% 87% 87% 86% 88% 87% 85% 86% 87% 86% 86% 85% 85% 88% 85% 88% 87% 87% 88% 87% 88% 85% 87% 86% 89% 88% 85% 85% 86% 83% 85% 84% 86% 85% 86% 85% 86% 88% 86% 85% 86% 87% 84% 87% 88% 86% 85% 86% 86% 86% 86% 86% 84% 87% 87% 85% 87% 84% 87% 87% 85% 83% 87% 86% 86% 85% 89% 87% 86% 85% 87% 85% 86% 85% 87% 86% 87% 85% 86% 85% 84% 86% 85% 87% 86% 83% 87% 87% 86% 86% 86% 87% 87% 86% 87% 88% 82% 85% 86% 87% 85% 86% 85% 87% 85% 86% 87% 85% 88% 85% 85% 87% 85% 87% 85% 85% 87% 87% 85% 84% 86% 85% 86% 89% 85% 85% 87% 86% 87% 86% 84% 85% 86% 86% 84% 85% 86% 84% 86% 87% 85% 86% 83% 82% 84% 87% 86% 85% 85% 87% 86% 85% 85% 84% 83% 88% 85% 88% 89% 86% 84% 84%) -> (155k/230k) -> write(84% 85% 87% 85% 87% 86%)
0:06:06 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 556M 56% 3.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.8B 6.6M/s ] 151G blocks: [ 36k 85% 47/s ]
cpus: 167.1 gc: 6% heap: 144G/214G direct: 58M postGC: 140G relInfo: 573M mpGeoms: 6.2G
read( 6%) -> (88/262) -> process(84% 88% 87% 86% 89% 87% 86% 87% 89% 89% 87% 90% 88% 88% 88% 86% 87% 88% 87% 87% 88% 85% 87% 88% 88% 86% 86% 85% 87% 87% 87% 87% 86% 88% 88% 87% 88% 84% 87% 86% 87% 86% 88% 86% 86% 87% 85% 87% 88% 87% 87% 87% 85% 88% 86% 87% 89% 87% 89% 88% 89% 86% 85% 85% 86% 88% 85% 88% 89% 87% 86% 86% 87% 86% 86% 86% 89% 86% 89% 87% 86% 88% 87% 88% 88% 86% 87% 89% 88% 88% 85% 87% 88% 87% 87% 86% 87% 87% 89% 86% 87% 90% 85% 86% 88% 86% 88% 85% 88% 89% 87% 87% 87% 87% 86% 88% 87% 87% 86% 88% 87% 88% 85% 86% 87% 85% 87% 86% 89% 86% 87% 83% 86% 87% 87% 87% 88% 88% 85% 84% 87% 87% 87% 85% 87% 87% 86% 85% 88% 87% 87% 87% 86% 86% 85% 87% 86% 88% 88% 89% 87% 86% 87% 87% 87% 89% 84% 87% 87% 85% 87% 86% 88% 87%) -> (96k/230k) -> write(83% 85% 83% 84% 85% 84%)
0:06:16 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 591M 60% 3.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.9B 6.7M/s ] 154G blocks: [ 37k 86% 49/s ]
cpus: 166.8 gc: 6% heap: 157G/214G direct: 58M postGC: 107G relInfo: 573M mpGeoms: 6.6G
read( 6%) -> (88/262) -> process(89% 89% 88% 86% 88% 88% 88% 89% 89% 87% 89% 89% 87% 88% 87% 87% 88% 87% 88% 88% 87% 89% 87% 88% 87% 86% 88% 88% 86% 87% 87% 86% 88% 89% 88% 87% 87% 89% 87% 88% 86% 88% 88% 87% 87% 89% 89% 87% 89% 89% 87% 87% 87% 88% 87% 88% 87% 86% 88% 87% 88% 88% 86% 89% 86% 86% 87% 87% 87% 87% 86% 88% 87% 86% 87% 85% 87% 87% 88% 88% 87% 86% 88% 86% 87% 88% 87% 88% 86% 88% 87% 86% 89% 85% 88% 86% 88% 89% 88% 87% 86% 88% 89% 86% 88% 88% 87% 88% 88% 88% 87% 88% 89% 88% 89% 84% 88% 88% 87% 86% 88% 89% 87% 86% 86% 87% 87% 88% 85% 88% 87% 88% 88% 88% 89% 86% 86% 86% 87% 87% 87% 85% 87% 86% 85% 85% 89% 87% 86% 89% 87% 86% 87% 87% 87% 87% 87% 86% 87% 85% 87% 86% 88% 87% 88% 86% 88% 87% 87% 88% 88% 86% 87% 87%) -> (138k/230k) -> write(85% 84% 83% 84% 85% 83%)
0:06:26 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 625M 63% 3.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.9B 6.7M/s ] 158G blocks: [ 37k 87% 47/s ]
cpus: 163.3 gc: 6% heap: 147G/214G direct: 58M postGC: 138G relInfo: 573M mpGeoms: 7G
read( 6%) -> (88/262) -> process(78% 84% 84% 84% 84% 87% 87% 85% 84% 82% 83% 86% 85% 85% 84% 83% 85% 86% 81% 83% 86% 85% 84% 87% 86% 82% 86% 87% 85% 85% 88% 84% 86% 82% 87% 84% 86% 87% 83% 83% 84% 85% 84% 85% 82% 86% 83% 85% 85% 86% 86% 84% 80% 87% 86% 87% 84% 73% 86% 87% 86% 85% 87% 82% 85% 85% 82% 86% 86% 84% 88% 86% 83% 88% 84% 82% 77% 86% 87% 83% 85% 85% 84% 86% 86% 86% 87% 86% 85% 84% 86% 83% 84% 86% 87% 85% 86% 86% 86% 85% 84% 87% 86% 89% 82% 84% 83% 86% 86% 85% 84% 84% 85% 79% 84% 83% 86% 85% 86% 86% 84% 84% 84% 86% 83% 82% 85% 84% 86% 85% 80% 85% 84% 87% 84% 86% 84% 85% 85% 83% 86% 85% 84% 84% 86% 82% 84% 84% 84% 84% 84% 86% 85% 87% 87% 81% 84% 86% 84% 84% 88% 85% 86% 85% 81% 85% 85% 85% 85% 87% 85% 85% 85% 82%) -> (105k/230k) -> write(85% 84% 82% 83% 83% 82%)
0:06:36 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 660M 66% 3.4M/s ] rels: [ 0 0% 0/s ] features: [ 2B 6.5M/s ] 164G blocks: [ 38k 88% 49/s ]
cpus: 163.2 gc: 6% heap: 136G/214G direct: 58M postGC: 108G relInfo: 573M mpGeoms: 7.4G
read( 6%) -> (88/262) -> process(85% 84% 82% 83% 84% 83% 84% 84% 83% 84% 85% 85% 86% 83% 84% 86% 85% 86% 84% 82% 84% 85% 85% 84% 84% 81% 85% 82% 82% 85% 87% 84% 82% 88% 85% 86% 85% 84% 82% 85% 84% 84% 84% 85% 81% 84% 87% 83% 83% 84% 84% 88% 86% 82% 85% 83% 83% 84% 84% 84% 84% 84% 85% 86% 81% 86% 83% 85% 85% 84% 83% 85% 81% 85% 87% 83% 82% 85% 84% 85% 84% 83% 82% 84% 85% 83% 85% 85% 85% 85% 84% 84% 85% 82% 86% 85% 86% 84% 84% 81% 83% 85% 85% 85% 84% 79% 90% 83% 78% 83% 84% 79% 86% 85% 87% 84% 83% 85% 84% 85% 84% 83% 86% 84% 82% 84% 83% 85% 84% 85% 84% 82% 82% 88% 83% 84% 80% 84% 81% 85% 86% 86% 84% 85% 86% 80% 82% 85% 85% 81% 81% 83% 85% 85% 85% 77% 83% 83% 86% 87% 85% 83% 89% 84% 78% 78% 84% 87% 81% 84% 83% 83% 87% 85%) -> (106k/230k) -> write(79% 80% 78% 78% 79% 81%)
0:06:46 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 697M 70% 3.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.1B 6.7M/s ] 168G blocks: [ 38k 89% 49/s ]
cpus: 167.4 gc: 6% heap: 176G/214G direct: 58M postGC: 108G relInfo: 573M mpGeoms: 7.7G
read( 6%) -> (88/262) -> process(87% 87% 86% 86% 88% 87% 89% 86% 90% 88% 89% 87% 89% 88% 88% 88% 87% 87% 88% 86% 88% 88% 87% 88% 85% 89% 85% 86% 88% 88% 87% 85% 87% 87% 88% 86% 87% 86% 88% 88% 86% 87% 88% 85% 86% 87% 86% 85% 87% 88% 87% 88% 88% 88% 88% 86% 84% 87% 87% 85% 85% 85% 87% 89% 86% 87% 86% 87% 87% 87% 88% 87% 87% 88% 88% 89% 87% 87% 88% 86% 86% 84% 88% 86% 86% 86% 87% 88% 87% 91% 89% 87% 83% 87% 91% 87% 87% 85% 86% 87% 87% 88% 87% 87% 88% 89% 88% 88% 85% 88% 88% 87% 89% 88% 85% 88% 87% 88% 85% 86% 90% 86% 86% 86% 85% 82% 89% 87% 88% 86% 87% 90% 85% 87% 88% 86% 87% 87% 89% 88% 91% 87% 87% 86% 87% 88% 87% 88% 85% 87% 88% 88% 87% 86% 83% 89% 89% 88% 88% 87% 87% 87% 87% 87% 88% 88% 86% 89% 87% 88% 85% 88% 88% 88%) -> (96k/230k) -> write(84% 85% 84% 85% 85% 84%)
0:06:56 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 734M 74% 3.7M/s ] rels: [ 0 0% 0/s ] features: [ 2.1B 6.7M/s ] 171G blocks: [ 39k 91% 52/s ]
cpus: 167.5 gc: 6% heap: 121G/214G direct: 58M postGC: 108G relInfo: 573M mpGeoms: 8G
read( 6%) -> (88/262) -> process(87% 87% 89% 84% 87% 90% 87% 88% 89% 87% 88% 87% 86% 86% 87% 86% 89% 89% 89% 90% 87% 88% 87% 88% 88% 89% 89% 87% 86% 88% 88% 89% 87% 86% 88% 88% 88% 90% 86% 90% 88% 88% 88% 89% 87% 85% 90% 87% 84% 87% 89% 88% 86% 89% 88% 88% 88% 86% 88% 87% 88% 87% 86% 86% 89% 88% 88% 86% 89% 87% 89% 89% 89% 86% 84% 87% 87% 88% 88% 90% 85% 89% 88% 89% 86% 87% 89% 88% 88% 86% 89% 88% 87% 84% 88% 90% 87% 86% 88% 89% 88% 89% 88% 88% 88% 90% 88% 86% 87% 88% 87% 87% 88% 88% 86% 90% 86% 88% 87% 88% 87% 88% 87% 87% 88% 88% 86% 87% 88% 90% 88% 87% 85% 87% 87% 87% 89% 87% 87% 87% 89% 87% 88% 86% 87% 87% 86% 89% 88% 89% 88% 88% 89% 88% 86% 87% 87% 88% 89% 87% 88% 88% 87% 87% 89% 89% 88% 87% 86% 85% 88% 87% 89% 87%) -> (157k/230k) -> write(84% 84% 85% 85% 84% 85%)
0:07:06 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 772M 78% 3.7M/s ] rels: [ 0 0% 0/s ] features: [ 2.2B 6.5M/s ] 178G blocks: [ 39k 92% 51/s ]
cpus: 166 gc: 5% heap: 146G/214G direct: 58M postGC: 139G relInfo: 573M mpGeoms: 8.3G
read( 6%) -> (88/262) -> process(86% 84% 86% 84% 88% 88% 87% 87% 86% 88% 87% 87% 86% 87% 86% 85% 87% 87% 86% 86% 86% 87% 86% 86% 86% 85% 87% 87% 87% 85% 86% 86% 86% 87% 87% 85% 87% 87% 86% 86% 87% 87% 87% 87% 86% 89% 87% 87% 87% 86% 86% 89% 87% 87% 85% 88% 86% 86% 87% 85% 85% 87% 85% 85% 85% 86% 87% 87% 86% 85% 88% 86% 87% 87% 87% 87% 86% 88% 86% 85% 87% 85% 85% 86% 87% 87% 83% 85% 86% 87% 84% 87% 87% 84% 84% 87% 86% 85% 84% 86% 87% 86% 86% 85% 87% 86% 87% 87% 88% 85% 87% 88% 88% 87% 88% 85% 87% 87% 87% 87% 85% 85% 87% 86% 85% 87% 87% 85% 88% 86% 86% 86% 86% 87% 85% 86% 85% 87% 87% 88% 85% 85% 86% 88% 83% 86% 85% 86% 87% 86% 85% 87% 84% 84% 86% 87% 86% 86% 87% 88% 86% 85% 87% 85% 87% 86% 87% 86% 87% 88% 86% 87% 86% 85%) -> (121k/230k) -> write(82% 83% 82% 81% 82% 82%)
0:07:16 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 810M 82% 3.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.3B 6.3M/s ] 179G blocks: [ 40k 93% 51/s ]
cpus: 169.8 gc: 6% heap: 115G/214G direct: 58M postGC: 109G relInfo: 573M mpGeoms: 8.6G
read( 6%) -> (88/262) -> process(89% 87% 88% 90% 89% 88% 89% 89% 88% 88% 91% 89% 88% 88% 89% 88% 89% 90% 89% 87% 89% 89% 89% 89% 89% 89% 89% 89% 90% 89% 88% 90% 88% 86% 88% 88% 88% 88% 86% 90% 89% 87% 88% 89% 88% 91% 90% 89% 89% 88% 86% 87% 89% 90% 87% 87% 89% 89% 87% 89% 90% 88% 88% 88% 90% 87% 89% 88% 90% 89% 88% 88% 87% 89% 89% 88% 88% 89% 90% 89% 87% 87% 90% 88% 90% 88% 88% 90% 87% 89% 88% 88% 89% 86% 88% 90% 86% 89% 88% 88% 90% 90% 89% 89% 88% 88% 87% 89% 88% 87% 89% 89% 88% 89% 89% 89% 89% 89% 88% 87% 89% 89% 88% 90% 89% 88% 89% 86% 89% 88% 88% 88% 90% 88% 89% 88% 89% 88% 88% 89% 89% 87% 89% 87% 89% 89% 89% 87% 89% 88% 89% 88% 89% 89% 91% 88% 89% 87% 87% 88% 87% 90% 89% 85% 88% 89% 90% 89% 90% 88% 89% 89% 89% 89%) -> (98k/230k) -> write(83% 83% 81% 82% 83% 80%)
0:07:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 846M 85% 3.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.3B 6M/s ] 184G blocks: [ 40k 94% 48/s ]
cpus: 163.3 gc: 6% heap: 142G/214G direct: 58M postGC: 110G relInfo: 573M mpGeoms: 9.3G
read( 6%) -> (88/262) -> process(85% 86% 86% 86% 87% 86% 86% 86% 87% 86% 85% 85% 86% 87% 85% 86% 86% 87% 85% 88% 86% 85% 86% 85% 87% 86% 86% 85% 86% 86% 87% 87% 86% 86% 85% 86% 86% 85% 87% 86% 86% 86% 87% 85% 85% 85% 85% 84% 86% 85% 86% 85% 86% 85% 84% 86% 86% 86% 84% 83% 84% 87% 86% 85% 87% 87% 86% 84% 85% 87% 86% 85% 85% 86% 85% 86% 84% 87% 85% 85% 87% 86% 85% 85% 85% 85% 83% 87% 84% 85% 85% 87% 86% 87% 85% 85% 85% 86% 85% 86% 84% 85% 87% 86% 86% 86% 83% 85% 86% 84% 85% 85% 86% 85% 85% 84% 87% 86% 86% 84% 84% 84% 85% 86% 86% 86% 86% 85% 86% 84% 85% 86% 86% 87% 85% 84% 86% 87% 86% 87% 86% 85% 86% 87% 86% 86% 87% 85% 86% 85% 86% 87% 84% 86% 83% 85% 86% 87% 84% 85% 86% 86% 85% 85% 86% 86% 86% 83% 85% 84% 82% 86% 84% 86%) -> (136k/230k) -> write(78% 78% 79% 78% 80% 78%)
0:07:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 882M 89% 3.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.4B 6.2M/s ] 190G blocks: [ 41k 95% 49/s ]
cpus: 165.4 gc: 5% heap: 198G/214G direct: 58M postGC: 138G relInfo: 573M mpGeoms: 9.6G
read( 6%) -> (88/262) -> process(85% 84% 86% 86% 86% 86% 84% 86% 87% 88% 85% 87% 89% 86% 87% 84% 87% 85% 87% 86% 86% 86% 88% 84% 86% 85% 86% 87% 85% 86% 87% 83% 86% 85% 86% 86% 84% 87% 85% 86% 84% 85% 87% 86% 87% 87% 86% 85% 86% 84% 86% 87% 85% 87% 87% 87% 86% 86% 87% 89% 86% 87% 84% 84% 85% 87% 87% 85% 88% 88% 85% 87% 88% 87% 87% 86% 85% 85% 84% 87% 85% 86% 86% 86% 86% 87% 86% 85% 85% 88% 86% 87% 86% 85% 84% 85% 86% 86% 85% 86% 86% 86% 85% 84% 84% 84% 85% 87% 87% 85% 87% 87% 86% 85% 86% 86% 86% 83% 87% 87% 87% 86% 85% 86% 87% 84% 87% 88% 88% 86% 87% 87% 87% 87% 85% 86% 85% 86% 85% 85% 85% 86% 86% 84% 87% 88% 86% 89% 87% 84% 86% 87% 88% 87% 86% 85% 86% 86% 84% 84% 85% 86% 84% 86% 86% 85% 89% 86% 86% 85% 85% 86% 87% 86%) -> (88k/230k) -> write(78% 78% 78% 79% 78% 78%)
0:07:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 918M 92% 3.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.5B 6M/s ] 191G blocks: [ 41k 96% 50/s ]
cpus: 167.8 gc: 6% heap: 198G/214G direct: 58M postGC: 152G relInfo: 573M mpGeoms: 10G
read( 6%) -> (88/262) -> process(88% 87% 88% 89% 89% 87% 83% 89% 88% 90% 85% 88% 88% 87% 88% 89% 88% 89% 88% 88% 84% 88% 88% 91% 87% 88% 87% 88% 85% 89% 85% 87% 88% 89% 89% 86% 87% 88% 89% 89% 89% 85% 85% 87% 88% 88% 90% 88% 87% 88% 85% 87% 88% 88% 86% 88% 86% 85% 89% 91% 90% 89% 87% 83% 90% 88% 86% 89% 87% 89% 87% 90% 87% 84% 88% 87% 88% 84% 87% 87% 84% 89% 89% 87% 90% 87% 89% 86% 88% 87% 88% 86% 89% 87% 88% 82% 89% 83% 86% 88% 86% 88% 88% 87% 86% 86% 88% 81% 89% 85% 90% 86% 89% 87% 87% 89% 86% 88% 86% 89% 87% 88% 88% 87% 87% 87% 89% 87% 85% 86% 86% 86% 85% 87% 87% 85% 85% 87% 87% 88% 88% 88% 89% 89% 86% 89% 87% 88% 85% 84% 85% 88% 87% 86% 86% 88% 86% 88% 86% 87% 89% 86% 88% 88% 89% 90% 88% 87% 87% 87% 88% 88% 87% 89%) -> (93k/230k) -> write(77% 79% 78% 77% 78% 77%)
0:07:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 953M 96% 3.4M/s ] rels: [ 0 0% 0/s ] features: [ 2.5B 5.9M/s ] 198G blocks: [ 42k 98% 48/s ]
cpus: 168.7 gc: 6% heap: 191G/214G direct: 58M postGC: 150G relInfo: 573M mpGeoms: 10G
read( 6%) -> (88/262) -> process(86% 89% 90% 89% 88% 88% 88% 91% 89% 90% 88% 90% 89% 90% 89% 86% 90% 88% 89% 88% 90% 87% 88% 89% 89% 89% 89% 88% 87% 90% 89% 89% 86% 89% 89% 87% 89% 90% 88% 89% 88% 89% 90% 88% 89% 90% 86% 89% 90% 88% 90% 89% 88% 91% 89% 89% 90% 90% 88% 87% 87% 88% 87% 88% 88% 88% 90% 88% 88% 87% 90% 89% 88% 90% 88% 88% 89% 88% 91% 89% 87% 86% 88% 88% 88% 88% 88% 88% 88% 87% 89% 88% 88% 87% 89% 90% 90% 88% 87% 89% 90% 88% 89% 89% 88% 91% 90% 86% 84% 88% 87% 89% 88% 88% 90% 88% 89% 86% 89% 86% 89% 88% 87% 89% 89% 90% 89% 88% 87% 88% 87% 89% 90% 88% 90% 90% 90% 89% 88% 87% 89% 89% 89% 90% 90% 87% 90% 90% 87% 89% 89% 88% 88% 90% 89% 88% 89% 91% 88% 88% 87% 89% 90% 88% 89% 88% 87% 89% 88% 90% 89% 89% 88% 88%) -> (92k/230k) -> write(78% 78% 79% 77% 78% 78%)
0:08:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 987M 99% 3.3M/s ] rels: [ 0 0% 0/s ] features: [ 2.6B 5.8M/s ] 199G blocks: [ 42k 99% 47/s ]
cpus: 164.2 gc: 6% heap: 187G/214G direct: 58M postGC: 146G relInfo: 573M mpGeoms: 10G
read( 6%) -> (88/262) -> process(86% 88% 87% 86% 86% 87% 85% 87% 76% 91% 85% 86% 86% 84% 85% 85% 88% 88% 85% 88% 87% 90% 82% 85% 82% 89% 87% 82% 86% 84% 86% 83% 86% 84% 80% 82% 82% 86% 87% 82% 86% 85% 86% 89% 89% 87% 89% 87% 89% 86% 87% 88% 82% 87% 80% 88% 89% 85% 88% 77% 87% 80% 87% 86% 83% 83% 85% 86% 86% 89% 85% 86% 85% 86% 83% 86% 87% 86% 87% 86% 88% 85% 85% 87% 85% 86% 90% 86% 85% 85% 85% 85% 86% 81% 87% 87% 85% 88% 85% 85% 78% 86% 87% 88% 85% 86% 87% 84% 87% 84% 83% 87% 84% 87% 85% 84% 87% 88% 86% 88% 87% 89% 82% 87% 73% 88% 88% 84% 87% 83% 85% 86% 85% 87% 86% 87% 84% 89% 86% 87% 86% 78% 86% 86% 83% 88% 87% 87% 81% 88% 81% 86% 81% 88% 84% 87% 87% 86% 83% 85% 87% 87% 86% 85% 86% 84% 86% 80% 87% 84% 90% 88% 84% 88%) -> (95k/230k) -> write(73% 73% 73% 72% 73% 73%)
0:08:11 INF [osm_pass2:process] - Finished ways: 993,607,585 (3M/s) in 5m23s cpu:14h4m53s gc:18s avg:156.8
0:08:17 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 620k/s ] rels: [ 712k 6% 70k/s ] features: [ 2.6B 1.6M/s ] 201G blocks: [ 42k 99% 17/s ]
cpus: 131.3 gc: 5% heap: 153G/214G direct: 58M postGC: 144G relInfo: 573M mpGeoms: 10G
read( 1%) -> (88/262) -> process(76% 81% 75% 75% 60% 92% 79% 78% 75% 74% 66% 58% 88% 73% 74% 62% 53% 78% 69% 77% 80% 90% 67% 71% 85% 76% 72% 79% 59% 68% 68% 67% 75% 70% 63% 80% 75% 81% 76% 90% 79% 72% 62% 59% 68% 56% 76% 76% 72% 56% 79% 60% 71% 57% 63% 74% 69% 74% 62% 80% 59% 64% 60% 56% 67% 73% 76% 73% 59% 59% 52% 78% 77% 84% 76% 66% 88% 72% 70% 55% 78% 59% 69% 72% 63% 81% 73% 71% 67% 60% 70% 74% 66% 74% 69% 82% 74% 54% 55% 62% 59% 77% 74% 75% 70% 79% 61% 57% 53% 74% 71% 78% 78% 58% 57% 60% 54% 63% 76% 71% 62% 72% 72% 85% 73% 57% 70% 81% 71% 63% 80% 84% 75% 76% 71% 57% 70% 69% 55% 77% 62% 79% 78% 65% 64% 57% 65% 76% 66% 72% 76% 64% 61% 74% 62% 60% 79% 60% 78% 76% 61% 74% 54% 61% 72% 68% 57% 68% 75% 81% 72% 73% 56% 74%) -> (86k/230k) -> write(18% 18% 19% 18% 19% 17%)
0:08:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 1.8M 16% 111k/s ] features: [ 2.6B 744k/s ] 204G blocks: [ 42k 99% <1/s ]
cpus: 168.7 gc: 5% heap: 115G/214G direct: 58M postGC: 112G relInfo: 573M mpGeoms: 10G
read( 0%) -> (88/262) -> process(92% 94% 92% 92% 93% 94% 94% 92% 94% 91% 92% 94% 94% 92% 93% 93% 93% 92% 93% 93% 94% 91% 92% 90% 90% 93% 94% 92% 93% 93% 92% 92% 93% 91% 94% 93% 94% 92% 93% 92% 93% 92% 93% 94% 94% 91% 92% 93% 94% 93% 94% 92% 91% 93% 92% 93% 92% 91% 92% 93% 92% 91% 92% 93% 91% 93% 93% 94% 94% 93% 94% 93% 93% 93% 93% 94% 93% 92% 93% 94% 93% 92% 93% 91% 93% 94% 91% 92% 92% 93% 93% 92% 94% 93% 92% 92% 93% 92% 92% 92% 92% 93% 92% 91% 92% 93% 94% 92% 93% 93% 92% 92% 92% 93% 90% 93% 93% 93% 93% 93% 91% 93% 94% 93% 93% 92% 93% 94% 93% 94% 94% 92% 91% 92% 94% 93% 91% 93% 92% 93% 92% 94% 93% 92% 92% 91% 94% 92% 93% 94% 93% 92% 93% 94% 92% 93% 93% 92% 93% 94% 91% 92% 93% 94% 93% 94% 92% 93% 93% 93% 94% 93% 93% 92%) -> (91k/230k) -> write( 9% 11% 9% 10% 9% 11%)
0:08:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 3M 26% 115k/s ] features: [ 2.6B 751k/s ] 204G blocks: [ 42k 99% <1/s ]
cpus: 171.4 gc: 2% heap: 190G/214G direct: 58M postGC: 112G relInfo: 573M mpGeoms: 10G
read( 0%) -> (88/262) -> process(95% 96% 93% 97% 95% 97% 97% 95% 95% 96% 96% 95% 96% 95% 96% 96% 96% 95% 97% 97% 95% 95% 96% 95% 94% 97% 97% 97% 97% 93% 96% 96% 95% 97% 96% 94% 94% 96% 95% 96% 97% 96% 94% 97% 94% 96% 96% 96% 95% 96% 97% 96% 96% 95% 96% 96% 93% 95% 94% 95% 95% 95% 96% 96% 96% 94% 95% 95% 97% 96% 95% 96% 95% 96% 95% 95% 96% 93% 95% 95% 96% 97% 97% 95% 96% 94% 96% 96% 97% 96% 95% 95% 97% 95% 96% 97% 95% 96% 97% 96% 95% 96% 96% 95% 96% 95% 96% 95% 97% 95% 94% 95% 96% 96% 96% 96% 94% 96% 95% 96% 96% 96% 95% 96% 96% 96% 96% 97% 95% 96% 96% 95% 97% 96% 95% 95% 97% 97% 96% 95% 96% 96% 96% 94% 96% 96% 95% 96% 96% 95% 96% 96% 96% 97% 95% 93% 96% 97% 96% 96% 95% 96% 96% 96% 97% 96% 94% 93% 96% 97% 96% 97% 96% 97%) -> (138k/230k) -> write(10% 10% 10% 10% 10% 10%)
0:08:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 4.2M 36% 119k/s ] features: [ 2.6B 1.1M/s ] 204G blocks: [ 42k 99% 3/s ]
cpus: 170.8 gc: 2% heap: 182G/214G direct: 58M postGC: 145G relInfo: 573M mpGeoms: 10G
read( 0%) -> (88/262) -> process(96% 95% 95% 93% 95% 94% 95% 94% 95% 96% 95% 94% 95% 95% 95% 95% 93% 95% 94% 94% 96% 96% 93% 94% 95% 95% 96% 95% 96% 94% 95% 95% 94% 96% 94% 96% 94% 96% 95% 94% 95% 95% 96% 96% 95% 95% 96% 95% 94% 96% 96% 94% 95% 93% 95% 94% 95% 96% 95% 95% 96% 94% 95% 95% 95% 95% 96% 94% 96% 94% 95% 96% 96% 96% 95% 95% 95% 95% 94% 96% 96% 96% 94% 93% 95% 93% 95% 96% 95% 96% 95% 95% 96% 95% 96% 95% 94% 94% 96% 94% 95% 96% 94% 94% 96% 95% 95% 95% 94% 94% 95% 95% 95% 96% 94% 96% 95% 93% 94% 96% 95% 95% 95% 96% 96% 95% 95% 96% 93% 95% 96% 95% 96% 95% 96% 95% 96% 96% 94% 95% 93% 94% 95% 95% 94% 94% 94% 95% 94% 94% 95% 95% 95% 95% 96% 95% 94% 96% 96% 94% 95% 96% 95% 95% 94% 94% 95% 95% 95% 95% 96% 94% 96% 96%) -> (104k/230k) -> write(11% 11% 11% 11% 11% 11%)
0:08:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 5.4M 46% 120k/s ] features: [ 2.6B 1.3M/s ] 208G blocks: [ 42k 99% 5/s ]
cpus: 169.5 gc: 3% heap: 178G/214G direct: 58M postGC: 112G relInfo: 573M mpGeoms: 10G
read( 1%) -> (88/262) -> process(95% 95% 95% 95% 95% 94% 95% 94% 94% 95% 95% 95% 95% 95% 95% 94% 95% 94% 94% 94% 94% 95% 93% 94% 94% 94% 95% 95% 96% 95% 94% 95% 93% 94% 94% 93% 95% 93% 92% 95% 96% 95% 96% 94% 93% 95% 96% 93% 95% 94% 94% 94% 93% 95% 94% 94% 96% 95% 93% 93% 96% 94% 96% 94% 95% 93% 93% 94% 96% 96% 95% 95% 95% 94% 95% 95% 93% 95% 96% 95% 95% 94% 95% 94% 95% 95% 95% 95% 92% 94% 92% 93% 94% 95% 96% 93% 95% 93% 95% 94% 93% 94% 95% 95% 95% 94% 95% 94% 94% 95% 95% 94% 95% 94% 95% 94% 95% 96% 95% 95% 94% 95% 94% 95% 93% 93% 96% 95% 95% 95% 94% 94% 95% 94% 94% 95% 94% 95% 95% 94% 95% 94% 96% 93% 95% 93% 94% 93% 93% 95% 95% 94% 96% 95% 95% 94% 93% 95% 93% 94% 94% 93% 95% 94% 95% 93% 95% 94% 95% 92% 95% 96% 93% 94%) -> (86k/230k) -> write(15% 12% 15% 12% 12% 12%)
0:09:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 6.6M 57% 124k/s ] features: [ 2.6B 1.2M/s ] 212G blocks: [ 42k 99% 3/s ]
cpus: 169.3 gc: 3% heap: 164G/214G direct: 54M postGC: 112G relInfo: 573M mpGeoms: 10G
read( -%) -> (59/262) -> process(94% 95% 95% 94% 93% 95% 94% 91% 95% 95% 92% 95% 95% 95% 93% 95% 93% 96% 94% 96% 96% 95% 94% 95% 94% 94% 95% 94% 95% 96% 95% 94% 93% 94% 94% 95% 93% 94% 94% 92% 96% 93% 95% 95% 96% 94% 94% 93% 95% 95% 95% 92% 94% 94% 94% 94% 94% 95% 94% 94% 93% 94% 95% 95% 95% 94% 94% 95% 95% 91% 95% 93% 96% 94% 95% 93% 94% 94% 94% 93% 96% 94% 95% 91% 95% 94% 93% 92% 95% 92% 95% 93% 94% 94% 94% 94% 94% 95% 94% 95% 91% 94% 95% 92% 95% 95% 94% 94% 94% 93% 95% 94% 92% 94% 95% 95% 95% 94% 95% 94% 93% 90% 94% 95% 93% 93% 94% 95% 93% 94% 94% 94% 93% 94% 91% 94% 95% 95% 93% 92% 93% 93% 93% 95% 94% 92% 94% 96% 92% 92% 94% 94% 96% 94% 94% 95% 94% 94% 92% 93% 93% 94% 94% 94% 94% 91% 92% 93% 95% 95% 93% 94% 93% 95%) -> (94k/230k) -> write(11% 14% 11% 13% 14% 11%)
0:09:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 8M 69% 135k/s ] features: [ 2.7B 1.5M/s ] 214G blocks: [ 42k 100% 4/s ]
cpus: 170.6 gc: 3% heap: 154G/214G direct: 54M postGC: 148G relInfo: 573M mpGeoms: 10G
read( -%) -> (14/262) -> process(95% 95% 94% 94% 95% 93% 95% 94% 95% 95% 94% 94% 95% 93% 95% 94% 94% 94% 95% 96% 95% 94% 93% 95% 95% 96% 95% 96% 95% 95% 95% 95% 94% 95% 95% 93% 96% 94% 96% 95% 95% 95% 95% 96% 93% 93% 95% 96% 94% 95% 95% 94% 93% 95% 93% 95% 94% 94% 94% 93% 95% 94% 94% 93% 94% 96% 95% 94% 93% 94% 93% 92% 95% 94% 95% 96% 96% 95% 95% 95% 95% 94% 95% 95% 94% 95% 93% 94% 94% 95% 94% 93% 95% 95% 94% 94% 93% 93% 95% 94% 95% 95% 96% 95% 95% 95% 94% 95% 96% 94% 95% 96% 95% 96% 95% 94% 95% 93% 94% 93% 94% 94% 95% 93% 94% 96% 94% 95% 94% 95% 93% 94% 95% 95% 94% 95% 92% 94% 95% 94% 95% 95% 95% 95% 95% 95% 96% 94% 94% 95% 94% 94% 94% 93% 94% 94% 94% 95% 94% 94% 95% 94% 93% 94% 96% 92% 94% 95% 94% 95% 95% 94% 94% 95%) -> (80k/230k) -> write(15% 16% 16% 16% 16% 17%)
0:09:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 9.4M 80% 138k/s ] features: [ 2.7B 806k/s ] 214G blocks: [ 43k 100% 2/s ]
cpus: 170.3 gc: 3% heap: 152G/214G direct: 54M postGC: 112G relInfo: 573M mpGeoms: 10G
read( -%) -> (0/262) -> process(96% 96% 96% 95% 94% 95% 96% 95% 96% 95% 96% 95% 96% 94% 95% 95% 96% 96% 96% 96% 96% 95% 96% 94% 96% 96% 95% 95% 96% 95% 94% 95% 96% 96% 95% 96% 95% 96% 96% 95% 95% 94% 96% 95% 96% 95% 95% 95% 96% 95% 96% 95% 95% 94% 95% 95% 96% 95% 96% 94% 95% 95% 94% 96% 96% 94% 94% 95% 94% 96% 96% 95% 95% 95% 96% 96% 96% 96% 95% 95% 94% 95% 96% 95% 96% 95% 95% 94% 95% 94% 96% 94% 94% 95% 94% 96% 95% 93% 95% 96% 95% 95% 95% 93% 94% 96% 96% 95% 95% 95% 96% 96% 95% 95% 96% 96% 95% 95% 93% 95% 94% 96% 95% 94% 95% 95% 96% 96% 95% 96% 94% 96% 96% 95% 95% 94% 97% 96% 95% 94% 96% 95% 95% 96% 95% 95% 95% 96% 95% 96% 96% 96% 94% 94% 95% 96% 96% 95% 96% 95% 95% 96% 95% 96% 96% 94% 96% 95% 94% 96% 95% 95% 95% 94%) -> (86k/230k) -> write( 9% 10% 10% 9% 10% 9%)
0:09:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 10M 92% 139k/s ] features: [ 2.7B 766k/s ] 217G blocks: [ 43k 100% 6/s ]
cpus: 170.7 gc: 2% heap: 138G/214G direct: 54M postGC: 111G relInfo: 573M mpGeoms: 10G
read( -%) -> (0/262) -> process(97% 95% 95% 94% 96% 96% 96% 95% 96% 96% 97% 95% 95% 96% 96% 96% 96% 94% 95% 95% 95% 95% 96% 95% 95% 96% 96% 96% 95% 96% 96% 94% 96% 96% 95% 95% 97% 96% 96% 94% 95% 96% 96% 95% 96% 96% 95% 96% 97% 94% 95% 96% 95% 96% 96% 95% 95% 96% 96% 95% 96% 96% 96% 96% 96% 95% 95% 95% 95% 96% 95% 96% 95% 94% 96% 95% 94% 92% 94% 96% 95% 94% 96% 94% 97% 96% 95% 95% 95% 95% 95% 93% 96% 97% 95% 94% 95% 95% 94% 94% 96% 94% 95% 95% 95% 96% 94% 95% 97% 96% 97% 96% 96% 96% 96% 96% 96% 96% 96% 96% 96% 95% 96% 94% 97% 95% 95% 96% 96% 96% 92% 96% 95% 95% 92% 96% 95% 95% 96% 95% 97% 96% 95% 95% 96% 96% 95% 96% 96% 96% 96% 96% 96% 95% 96% 95% 95% 94% 95% 96% 96% 95% 95% 93% 97% 96% 96% 93% 95% 95% 96% 96% 95% 94%) -> (92k/230k) -> write(13% 10% 14% 10% 10% 9%)
0:09:47 INF [osm_pass2:process] - Finished relations: 11,749,466 (122k/s) in 1m36s cpu:4h27m5s gc:3s avg:166.8
0:09:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 11M 100% 88k/s ] features: [ 2.7B 463k/s ] 219G blocks: [ 43k 100% 9/s ]
cpus: 127.3 gc: 1% heap: 182G/214G direct: 54M postGC: 110G relInfo: 573M mpGeoms: 10G
read( -%) -> (0/262) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% 80% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (88k/230k) -> write( 6% 6% 6% 6% 9% 6%)
0:09:49 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 11M 100% <1/s ] features: [ 2.7B 60k/s ] 212G blocks: [ 43k 100% 0/s ]
cpus: 1.1 gc: 0% heap: 184G/214G direct: 54M postGC: 110G relInfo: 573M mpGeoms: 10G
read( -%) -> (0/262) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/230k) -> write( -% -% -% -% -% -%)
0:09:49 DEB [osm_pass2] - Processed 43,182 blocks:
0:09:49 DEB [osm_pass2] - nodes: 8,876,780,887 (149M/s) in 59s cpu:2h1m37s gc:4s avg:123.1
0:09:49 DEB [osm_pass2] - ways: 993,607,585 (3M/s) in 5m23s cpu:14h4m53s gc:18s avg:156.8
0:09:49 DEB [osm_pass2] - relations: 11,749,466 (122k/s) in 1m36s cpu:4h27m5s gc:3s avg:166.8
0:09:49 INF [osm_pass2] - Finished in 8m1s cpu:20h33m34s gc:25s avg:154
0:09:49 INF [osm_pass2] - read 1x(13% 1m2s wait:6m2s done:51s)
0:09:49 INF [osm_pass2] - process 174x(81% 6m28s block:14s wait:26s done:2s)
0:09:49 INF [osm_pass2] - write 6x(64% 5m6s wait:2m17s)
0:09:49 INF [boundaries] -
0:09:49 INF [boundaries] - Starting...
0:09:49 INF [boundaries] - Creating polygons for 218 boundaries
0:09:54 INF [boundaries] - Finished creating 218 country polygons
0:09:55 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/54.19118/7.52130
0:09:55 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/54.61356/12.41358
0:09:57 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/50.01340/6.13601
0:09:57 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/49.77642/6.51023
0:09:58 WAR [boundaries] - no left or right country for border between OSM country relations: [51477, 16239] around https://www.openstreetmap.org/#map=10/47.38554/10.16937
0:09:58 WAR [boundaries] - no left or right country for border between OSM country relations: [51477, 16239] around https://www.openstreetmap.org/#map=10/47.67866/12.16969
0:09:58 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/53.42387/6.88641
0:09:58 INF [boundaries] - Finished in 9s cpu:11s avg:1.3
0:09:58 INF [agg_stop] -
0:09:58 INF [agg_stop] - Starting...
0:09:58 INF [agg_stop] - Processing 28687 agg_stop sets
0:09:58 INF [agg_stop] - Finished in 0.3s cpu:0.7s avg:2.6
0:09:58 INF - Deleting node.db to make room for output file
0:09:58 INF [sort] -
0:09:58 INF [sort] - Starting...
0:09:58 INF [sort] - Grouped 198 chunks into 179
0:10:09 INF [sort] - chunks: [ 7 / 179 4% ] 217G
cpus: 50.5 gc: 12% heap: 61G/214G direct: 54M postGC: 61G
-> (137/215) -> worker(18% 19% 19% 18% 18% 18% 19% 16% 16% 17% 8% 17% 17% 5% 5% 5% 5% 2% 5% 5% 5% 5% 2% 3% 1% 5% 5% 0% 4% 1% 0% 0% 0% 0% 0%)
0:10:19 INF [sort] - chunks: [ 33 / 179 18% ] 213G
cpus: 20.8 gc: 5% heap: 39G/214G direct: 54M postGC: 39G
-> (111/215) -> worker( 2% 4% 1% 1% 1% 0% 0% 0% 1% 0% 7% 0% 0% 11% 13% 13% 13% 12% 12% 13% 11% 11% 12% 13% 13% 13% 12% 15% 11% 15% 19% 18% 15% 15% 4%)
0:10:30 INF [sort] - chunks: [ 45 / 179 25% ] 215G
cpus: 27.7 gc: 7% heap: 62G/214G direct: 54M postGC: 62G
-> (99/215) -> worker(15% 12% 11% 15% 15% 16% 17% 15% 17% 16% 2% 16% 16% 14% 12% 3% 3% 0% 0% 11% 2% 0% 0% 0% 0% 3% 0% 0% 1% 0% 0% 0% 0% 0% 12%)
0:10:41 INF [sort] - chunks: [ 62 / 179 35% ] 214G
cpus: 26 gc: 4% heap: 39G/214G direct: 54M postGC: 33G
-> (82/215) -> worker( 0% 1% 0% 0% 0% 0% 0% 0% 0% 0% 2% 0% 0% 0% 0% 13% 13% 16% 16% 0% 15% 14% 14% 17% 17% 13% 15% 15% 15% 16% 3% 4% 4% 3% 0%)
0:10:54 INF [sort] - chunks: [ 73 / 179 41% ] 217G
cpus: 27.2 gc: 5% heap: 35G/214G direct: 54M postGC: 35G
-> (71/215) -> worker(14% 15% 15% 15% 16% 16% 15% 1% 2% 13% 14% 3% 16% 10% 0% 0% 0% 0% 0% 3% 0% 0% 0% 0% 0% 0% 0% 0% 0% 1% 12% 11% 11% 13% 11%)
0:11:04 INF [sort] - chunks: [ 92 / 179 51% ] 214G
cpus: 26.4 gc: 5% heap: 20G/214G direct: 54M postGC: 20G
-> (52/215) -> worker( 0% 0% 0% 0% 0% 0% 0% 14% 15% 0% 0% 14% 0% 0% 18% 19% 18% 19% 18% 14% 19% 2% 18% 3% 3% 18% 15% 1% 18% 1% 0% 0% 0% 0% 0%)
0:11:15 INF [sort] - chunks: [ 108 / 179 60% ] 216G
cpus: 32.5 gc: 7% heap: 59G/214G direct: 54M postGC: 59G
-> (36/215) -> worker(16% 13% 11% 16% 17% 17% 3% 0% 2% 17% 16% 1% 17% 3% 0% 0% 0% 0% 0% 2% 0% 14% 0% 11% 14% 0% 0% 14% 0% 14% 16% 13% 17% 16% 16%)
0:11:26 INF [sort] - chunks: [ 122 / 179 68% ] 216G
cpus: 27.7 gc: 5% heap: 38G/214G direct: 54M postGC: 38G
-> (22/215) -> worker( 0% 0% 0% 0% 0% 0% 14% 16% 15% 0% 0% 12% 0% 14% 13% 16% 18% 11% 8% 13% 14% 2% 4% 0% 1% 16% 17% 0% 17% 3% 0% 0% 0% 0% 0%)
0:11:37 INF [sort] - chunks: [ 144 / 179 80% ] 215G
cpus: 32.6 gc: 6% heap: 25G/214G direct: 54M postGC: 25G
-> (0/215) -> worker(16% 18% 18% 12% -72% 5% 0% 0% 2% 5% 14% 0% -% -% 0% 0% 0% 0% 0% 2% 0% 13% 14% 18% 17% 0% 0% 12% 0% 15% 18% 15% 19% 15% 15%)
0:11:47 INF [sort] - chunks: [ 162 / 179 91% ] 214G
cpus: 33.3 gc: 8% heap: 65G/214G direct: 54M postGC: 65G
-> (0/215) -> worker( 0% 0% 0% 0% -% -% -% -% -% -% 0% -% -% -% -% -% -% 17% -% -% -% 5% -62% 1% 3% -% -% 4% -% -66% 1% 0% 0% 4% 0%)
0:11:54 INF [sort] - chunks: [ 179 / 179 100% ] 212G
cpus: 32.7 gc: 5% heap: 37G/214G direct: 54M postGC: 36G
-> (0/215) -> worker( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%)
0:11:54 INF [sort] - Finished in 1m56s cpu:58m44s gc:7s avg:30.5
0:11:54 INF [sort] - worker 35x(8% 9s wait:1m18s done:7s)
0:11:54 INF - read:680s write:352s sort:56s
0:11:54 INF [archive] -
0:11:54 INF [archive] - Starting...
0:11:56 INF [archive:write] - Starting z0
0:11:56 INF [archive:write] - Finished z0 in 0s cpu:0s avg:8.8, now starting z1
0:11:56 INF [archive:write] - Finished z1 in 0s cpu:1s avg:237.3, now starting z2
0:11:56 INF [archive:write] - Finished z2 in 0s cpu:5s avg:182.8, now starting z3
0:11:56 INF [archive:write] - Finished z3 in 0.1s cpu:9s avg:109.2, now starting z4
0:11:57 INF [archive:write] - Finished z4 in 0.8s cpu:2m5s avg:152.4, now starting z5
0:11:57 INF [archive:write] - Finished z5 in 0s cpu:6s avg:194.1, now starting z6
0:12:00 INF [archive:write] - Finished z6 in 3s cpu:8m24s avg:165.9, now starting z7
0:12:05 INF [archive] - features: [ 54M 2% 5.4M/s ] 212G tiles: [ 16k 1.6k/s ] 154M
cpus: 157.6 gc: 14% heap: 48G/214G direct: 54M postGC: 47G
read(79% 78%) -> merge(82%) -> (0/10k) -> encode(81% 79% 82% 81% 78% 79% 80% 78% 79% 79% 80% 78% 76% 79% 80% 77% 83% 78% 79% 78% 82% 80% 79% 80% 80% 77% 79% 83% 81% 76% 80% 80% 79% 78% 81% 79% 80% 79% 79% 80% 79% 79% 79% 79% 77% 78% 80% 79% 76% 78% 78% 79% 78% 76% 78% 81% 79% 79% 79% 81% 78% 78% 78% 79% 83% 80% 79% 77% 80% 79% 79% 79% 78% 78% 77% 78% 79% 78% 80% 77% 78% 76% 77% 78% 77% 79% 79% 78% 78% 80% 76% 80% 76% 78% 79% 78% 79% 80% 78% 78% 75% 78% 75% 80% 76% 80% 78% 79% 78% 78% 79% 77% 79% 76% 75% 79% 79% 76% 77% 79% 77% 76% 78% 80% 76% 78% 76% 79% 77% 78% 77% 76% 78% 79% 81% 77% 77% 77% 77% 77% 79% 79% 76% 73% 78% 77% 79% 78% 78% 80% 82% 78% 78% 76% 79% 79% 78% 77% 77% 79% 80% 77% 77% 82% 78% 78% 76% 79% 77% 76% 76% 76% 77% 77% 80% 80% 79% 78%) -> (1.6k/10k) -> write( 2%)
last tile: 7/64/42 (z7 85%) https://onthegomap.github.io/planetiler-demo/#7.5/51.60962/1.40625
0:12:05 INF [archive:write] - Finished z7 in 5s cpu:12m3s avg:156.9, now starting z8
0:12:11 INF [archive:write] - Finished z8 in 6s cpu:16m25s avg:154, now starting z9
0:12:15 INF [archive] - features: [ 115M 4% 6M/s ] 212G tiles: [ 253k 23k/s ] 1.1G
cpus: 144.2 gc: 8% heap: 59G/214G direct: 54M postGC: 47G
read(91% 91%) -> merge(87%) -> (110/10k) -> encode(74% 73% 76% 76% 68% 76% 74% 73% 78% 75% 71% 73% 67% 70% 73% 70% 70% 73% 71% 71% 77% 76% 74% 75% 83% 73% 76% 72% 75% 71% 74% 77% 77% 73% 74% 77% 74% 74% 72% 78% 77% 79% 74% 79% 76% 81% 73% 74% 73% 74% 72% 73% 75% 73% 83% 72% 69% 70% 81% 79% 76% 74% 78% 80% 78% 75% 85% 72% 76% 76% 74% 72% 75% 77% 76% 75% 75% 78% 75% 73% 70% 69% 78% 78% 72% 74% 73% 73% 76% 77% 81% 79% 86% 76% 70% 75% 71% 75% 76% 74% 74% 76% 79% 73% 79% 78% 72% 77% 69% 74% 77% 77% 76% 78% 75% 77% 71% 74% 77% 73% 75% 76% 73% 81% 72% 81% 76% 74% 78% 74% 77% 74% 77% 72% 72% 74% 74% 76% 75% 72% 69% 78% 76% 73% 78% 81% 77% 76% 75% 75% 76% 75% 73% 75% 77% 77% 73% 71% 75% 75% 77% 76% 77% 77% 75% 81% 75% 69% 74% 73% 76% 72% 75% 78% 78% 76% 75% 69%) -> (688/10k) -> write(11%)
last tile: 9/266/171 (z9 85%) https://onthegomap.github.io/planetiler-demo/#9.5/50.9579/7.38281
0:12:18 INF [archive:write] - Finished z9 in 7s cpu:16m11s avg:147.1, now starting z10
0:12:25 INF [archive] - features: [ 181M 7% 6.4M/s ] 212G tiles: [ 495k 23k/s ] 1.6G
cpus: 132.9 gc: 7% heap: 96G/214G direct: 54M postGC: 55G
read(78% 80%) -> merge(86%) -> (46/10k) -> encode(67% 70% 69% 66% 73% 73% 70% 68% 68% 66% 66% 74% 66% 70% 72% 66% 67% 69% 68% 67% 69% 66% 71% 71% 70% 69% 68% 69% 68% 70% 68% 70% 72% 70% 68% 72% 67% 70% 65% 67% 69% 68% 69% 72% 69% 67% 76% 70% 67% 67% 68% 71% 67% 65% 68% 67% 69% 69% 68% 67% 68% 67% 69% 70% 68% 67% 71% 65% 66% 67% 66% 70% 72% 65% 68% 70% 68% 67% 69% 92% 72% 68% 64% 72% 67% 70% 67% 92% 68% 68% 75% 67% 69% 66% 68% 68% 71% 64% 66% 71% 66% 65% 70% 65% 67% 69% 88% 69% 67% 69% 70% 70% 70% 68% 69% 72% 74% 70% 70% 69% 66% 71% 65% 63% 71% 69% 67% 75% 68% 68% 65% 64% 71% 70% 70% 70% 66% 69% 69% 71% 68% 67% 74% 69% 72% 70% 65% 66% 65% 68% 67% 70% 70% 69% 66% 69% 72% 69% 70% 69% 70% 67% 70% 72% 67% 70% 68% 65% 70% 72% 65% 72% 64% 71% 65% 70% 70% 70%) -> (6k/10k) -> write( 6%)
last tile: 10/172/399 (z10 20%) https://onthegomap.github.io/planetiler-demo/#10.5/36.73875/-119.35547
0:12:33 INF [archive:write] - Finished z10 in 15s cpu:23m6s gc:1s avg:92.2, now starting z11
0:12:35 INF [archive] - features: [ 245M 9% 6.3M/s ] 212G tiles: [ 3.6M 307k/s ] 4.2G
cpus: 74.1 gc: 8% heap: 31G/214G direct: 54M postGC: 19G
read(60% 56%) -> merge(70%) -> (0/10k) -> encode(37% 36% 35% 35% 36% 30% 40% 38% 35% 37% 39% 34% 31% 35% 37% 28% 34% 35% 40% 37% 37% 33% 37% 36% 33% 31% 33% 34% 34% 34% 34% 30% 32% 32% 29% 32% 52% 35% 33% 39% 40% 33% 36% 33% 35% 32% 31% 34% 32% 34% 39% 34% 34% 39% 36% 38% 37% 33% 32% 32% 35% 35% 32% 30% 34% 32% 35% 35% 31% 36% 33% 36% 35% 31% 32% 39% 38% 34% 35% 71% 30% 31% 35% 32% 32% 36% 31% 38% 35% 34% 33% 34% 28% 33% 31% 31% 34% 37% 33% 35% 42% 30% 36% 32% 32% 30% 32% 33% 31% 33% 36% 31% 32% 30% 34% 31% 36% 33% 59% 35% 33% 31% 36% 32% 35% 37% 30% 39% 30% 35% 38% 29% 32% 36% 32% 31% 35% 29% 35% 34% 36% 36% 35% 38% 33% 31% 31% 41% 38% 32% 50% 32% 34% 53% 33% 32% 51% 38% 34% 33% 33% 38% 33% 34% 33% 35% 37% 29% 30% 33% 31% 34% 32% 37% 31% 37% 41% 34%) -> (2.9k/10k) -> write(29%)
last tile: 11/1730/648 (z11 78%) https://onthegomap.github.io/planetiler-demo/#11.5/54.92711/124.18945
0:12:39 INF [archive:write] - Finished z11 in 7s cpu:8m23s avg:75.7, now starting z12
0:12:45 INF [archive] - features: [ 318M 12% 7.2M/s ] 212G tiles: [ 7.3M 371k/s ] 7.5G
cpus: 59.8 gc: 2% heap: 69G/214G direct: 54M postGC: 15G
read(60% 60%) -> merge(71%) -> (0/10k) -> encode(28% 32% 33% 31% 28% 38% 35% 28% 35% 32% 31% 29% 28% 30% 30% 34% 33% 30% 34% 26% 35% 33% 36% 31% 27% 32% 32% 38% 31% 42% 30% 33% 31% 27% 33% 30% 30% 32% 33% 32% 35% 31% 26% 31% 33% 31% 34% 39% 31% 26% 32% 35% 40% 31% 25% 37% 29% 35% 34% 27% 28% 33% 31% 29% 39% 33% 31% 30% 28% 22% 35% 35% 35% 35% 30% 35% 30% 30% 30% 24% 31% 36% 32% 31% 27% 30% 26% 28% 37% 31% 31% 25% 29% 32% 34% 30% 27% 29% 32% 25% 33% 36% 27% 24% 28% 33% 36% 31% 31% 28% 33% 30% 29% 33% 35% 31% 36% 30% 30% 36% 29% 35% 33% 33% 33% 25% 35% 30% 29% 36% 32% 31% 30% 27% 31% 32% 32% 32% 36% 32% 24% 32% 32% 23% 36% 35% 33% 36% 32% 34% 33% 31% 32% 28% 22% 15% 27% 38% 28% 25% 27% 31% 36% 33% 32% 27% 35% 24% 33% 32% 33% 29% 29% 31% 31% 28% 29% 31%) -> (282/10k) -> write(35%)
last tile: 12/1087/1691 (z12 18%) https://onthegomap.github.io/planetiler-demo/#12.5/29.87875/-84.41895
0:12:55 INF [archive] - features: [ 430M 16% 11M/s ] 212G tiles: [ 14M 726k/s ] 10G
cpus: 71.1 gc: 5% heap: 60G/214G direct: 54M postGC: 17G
read(93% 94%) -> merge(95%) -> (0/10k) -> encode(36% 34% 37% 37% 33% 38% 35% 35% 38% 38% 37% 35% 32% 33% 36% 32% 39% 36% 35% 41% 41% 36% 33% 43% 35% 34% 43% 37% 35% 34% 37% 33% 37% 36% 36% 34% 36% 34% 36% 39% 39% 34% 35% 33% 37% 36% 35% 35% 35% 36% 35% 36% 33% 37% 38% 35% 35% 34% 38% 40% 37% 34% 37% 37% 33% 36% 37% 37% 34% 41% 33% 37% 32% 38% 32% 34% 34% 34% 37% 31% 37% 33% 34% 35% 40% 33% 38% 34% 33% 34% 35% 35% 33% 33% 36% 36% 40% 32% 33% 33% 35% 35% 35% 32% 35% 41% 34% 34% 35% 33% 36% 34% 43% 32% 38% 36% 34% 35% 34% 34% 36% 35% 34% 36% 43% 37% 34% 35% 37% 34% 35% 37% 37% 33% 34% 32% 36% 33% 36% 39% 33% 36% 40% 33% 37% 33% 36% 36% 34% 37% 36% 32% 38% 32% 35% 36% 37% 37% 32% 38% 36% 40% 37% 35% 38% 36% 35% 34% 35% 36% 37% 35% 29% 39% 36% 34% 34% 34%) -> (74/10k) -> write(44%)
last tile: 12/2948/1928 (z12 81%) https://onthegomap.github.io/planetiler-demo/#12.5/10.44459/79.14551
0:13:05 INF [archive] - features: [ 536M 20% 10M/s ] 212G tiles: [ 15M 65k/s ] 13G
cpus: 72.5 gc: 3% heap: 68G/214G direct: 54M postGC: 17G
read(94% 95%) -> merge(96%) -> (0/10k) -> encode(38% 35% 37% 40% 36% 37% 38% 35% 39% 36% 35% 33% 39% 38% 38% 39% 35% 37% 38% 38% 40% 36% 38% 36% 39% 38% 36% 36% 41% 39% 35% 35% 41% 37% 37% 34% 38% 37% 40% 35% 37% 35% 39% 38% 38% 39% 41% 36% 36% 39% 38% 33% 38% 38% 36% 38% 37% 37% 39% 39% 36% 36% 36% 41% 38% 39% 38% 33% 41% 37% 37% 41% 37% 40% 38% 36% 36% 38% 36% 37% 36% 37% 37% 38% 37% 39% 38% 40% 39% 35% 35% 37% 39% 35% 35% 37% 35% 37% 38% 36% 37% 40% 35% 38% 38% 33% 37% 34% 36% 34% 36% 40% 40% 36% 39% 35% 39% 41% 33% 34% 39% 39% 36% 36% 36% 36% 41% 39% 38% 44% 34% 38% 36% 40% 38% 44% 35% 37% 39% 40% 37% 38% 40% 36% 36% 39% 34% 36% 34% 36% 38% 39% 36% 38% 38% 37% 38% 37% 35% 35% 34% 39% 41% 40% 38% 36% 40% 38% 39% 37% 39% 36% 35% 37% 38% 38% 39% 37%) -> (727/10k) -> write(23%)
last tile: 12/2204/1107 (z12 85%) https://onthegomap.github.io/planetiler-demo/#12.5/63.41119/13.75488
0:13:07 INF [archive:write] - Finished z12 in 28s cpu:30m41s avg:66.8, now starting z13
0:13:15 INF [archive] - features: [ 651M 24% 11M/s ] 212G tiles: [ 30M 1.4M/s ] 16G
cpus: 68.2 gc: 4% heap: 35G/214G direct: 54M postGC: 20G
read(90% 82%) -> merge(95%) -> (0/10k) -> encode(36% 36% 34% 33% 32% 33% 36% 33% 34% 36% 31% 32% 34% 33% 34% 34% 33% 35% 35% 33% 34% 32% 34% 33% 33% 34% 34% 34% 34% 35% 35% 35% 34% 33% 34% 33% 31% 35% 35% 35% 32% 33% 36% 32% 34% 34% 34% 34% 32% 31% 33% 35% 33% 30% 33% 36% 35% 32% 36% 33% 32% 30% 30% 35% 35% 36% 33% 33% 35% 35% 36% 31% 34% 31% 35% 35% 35% 35% 33% 32% 34% 32% 31% 34% 33% 32% 32% 36% 37% 35% 32% 35% 35% 32% 37% 35% 33% 34% 36% 37% 34% 34% 35% 32% 35% 36% 31% 36% 33% 34% 32% 36% 34% 34% 33% 36% 34% 37% 33% 34% 32% 32% 31% 34% 37% 33% 31% 36% 38% 34% 38% 35% 33% 32% 34% 32% 31% 32% 34% 34% 34% 34% 35% 35% 34% 32% 34% 37% 34% 33% 33% 34% 38% 33% 34% 38% 35% 33% 36% 33% 35% 35% 34% 34% 35% 35% 36% 32% 32% 33% 35% 34% 32% 38% 34% 33% 37% 36%) -> (153/10k) -> write(68%)
last tile: 13/1558/3084 (z13 20%) https://onthegomap.github.io/planetiler-demo/#13.5/40.56389/-111.51123
0:13:25 INF [archive] - features: [ 770M 28% 11M/s ] 212G tiles: [ 55M 2.4M/s ] 20G
cpus: 64.8 gc: 4% heap: 22G/214G direct: 54M postGC: 21G
read(87% 73%) -> merge(94%) -> (48/10k) -> encode(29% 34% 34% 29% 33% 34% 30% 33% 31% 33% 31% 33% 34% 31% 31% 32% 34% 31% 31% 33% 33% 31% 35% 32% 32% 33% 32% 33% 34% 34% 33% 33% 31% 33% 32% 31% 34% 33% 32% 30% 33% 32% 32% 32% 30% 30% 32% 30% 34% 31% 35% 31% 30% 33% 31% 30% 33% 31% 31% 33% 33% 34% 31% 32% 33% 33% 33% 32% 33% 29% 31% 32% 31% 30% 34% 37% 31% 32% 35% 29% 33% 33% 31% 30% 33% 31% 37% 31% 32% 31% 33% 32% 33% 29% 33% 31% 30% 33% 32% 33% 29% 31% 34% 32% 33% 29% 29% 35% 30% 36% 31% 33% 33% 32% 31% 29% 31% 35% 32% 35% 36% 30% 36% 32% 30% 33% 34% 34% 33% 33% 34% 31% 32% 32% 29% 30% 30% 31% 30% 35% 30% 32% 32% 31% 32% 30% 31% 33% 34% 31% 32% 33% 32% 31% 31% 33% 33% 33% 31% 33% 35% 32% 34% 33% 31% 33% 34% 30% 35% 33% 35% 34% 30% 33% 30% 33% 32% 35%) -> (632/10k) -> write(80%)
last tile: 13/7305/3101 (z13 76%) https://onthegomap.github.io/planetiler-demo/#13.5/39.99395/141.04248
0:13:35 INF [archive] - features: [ 887M 33% 11M/s ] 212G tiles: [ 59M 472k/s ] 24G
cpus: 71.2 gc: 4% heap: 80G/214G direct: 54M postGC: 21G
read(86% 92%) -> merge(94%) -> (0/10k) -> encode(36% 37% 36% 36% 33% 34% 36% 38% 33% 36% 36% 39% 35% 36% 36% 36% 35% 35% 34% 40% 33% 36% 36% 39% 36% 35% 34% 35% 34% 37% 35% 36% 35% 38% 32% 39% 37% 36% 36% 33% 34% 34% 38% 33% 33% 34% 36% 36% 38% 36% 38% 37% 37% 35% 35% 35% 34% 35% 31% 41% 33% 37% 36% 39% 36% 36% 33% 36% 37% 34% 37% 35% 36% 36% 33% 34% 36% 35% 37% 33% 35% 36% 39% 38% 37% 38% 36% 35% 37% 36% 34% 37% 36% 37% 34% 35% 33% 35% 35% 39% 33% 36% 33% 34% 40% 35% 35% 40% 36% 35% 39% 37% 33% 39% 35% 36% 34% 40% 37% 37% 39% 35% 33% 39% 38% 39% 35% 36% 36% 37% 35% 39% 34% 35% 36% 34% 36% 35% 38% 34% 33% 39% 34% 37% 35% 34% 35% 40% 34% 35% 34% 33% 35% 36% 40% 36% 36% 39% 39% 33% 36% 36% 36% 34% 33% 37% 33% 38% 35% 35% 34% 37% 33% 35% 37% 34% 37% 35%) -> (360/10k) -> write(68%)
last tile: 13/4531/2966 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/44.38669/19.13818
0:13:45 INF [archive] - features: [ 992M 36% 10M/s ] 212G tiles: [ 61M 128k/s ] 28G
cpus: 61.1 gc: 2% heap: 85G/214G direct: 54M postGC: 22G
read(94% 94%) -> merge(97%) -> (4.8k/10k) -> encode(33% 27% 28% 28% 33% 33% 26% 34% 29% 33% 33% 34% 33% 28% 31% 32% 29% 31% 29% 32% 30% 31% 31% 32% 30% 31% 31% 34% 32% 31% 27% 30% 34% 30% 32% 33% 32% 31% 29% 30% 30% 29% 32% 34% 33% 33% 28% 31% 32% 36% 33% 32% 26% 31% 32% 30% 32% 35% 33% 33% 32% 30% 34% 30% 32% 32% 30% 35% 33% 30% 29% 28% 28% 29% 33% 36% 31% 29% 31% 30% 28% 29% 28% 35% 32% 30% 33% 33% 34% 30% 32% 31% 31% 30% 30% 34% 31% 33% 33% 32% 29% 33% 31% 33% 32% 31% 29% 28% 33% 29% 31% 34% 30% 37% 31% 31% 29% 28% 35% 34% 31% 32% 33% 30% 31% 30% 33% 37% 31% 34% 32% 32% 31% 31% 30% 31% 29% 29% 31% 30% 32% 33% 33% 31% 32% 29% 34% 32% 33% 26% 29% 32% 28% 31% 30% 34% 34% 32% 35% 32% 32% 32% 33% 29% 28% 31% 29% 32% 32% 33% 32% 29% 31% 32% 33% 30% 28% 32%) -> (6.2k/10k) -> write(38%)
last tile: 13/5910/2723 (z13 87%) https://onthegomap.github.io/planetiler-demo/#13.5/51.52241/79.73877
0:13:47 INF [archive:write] - Finished z13 in 40s cpu:43m55s gc:1s avg:65.2, now starting z14
0:13:55 INF [archive] - features: [ 1.1B 41% 11M/s ] 212G tiles: [ 101M 4M/s ] 30G
cpus: 46.2 gc: 3% heap: 50G/214G direct: 54M postGC: 23G
read(50% 68%) -> merge(75%) -> (2.1k/10k) -> encode(22% 23% 20% 23% 22% 23% 21% 23% 22% 23% 22% 24% 21% 23% 23% 21% 22% 23% 22% 21% 22% 21% 23% 25% 23% 21% 24% 23% 22% 21% 23% 24% 23% 23% 24% 22% 24% 23% 23% 24% 25% 23% 21% 22% 24% 23% 22% 24% 23% 24% 22% 23% 21% 21% 23% 21% 22% 22% 22% 24% 23% 23% 22% 23% 22% 22% 23% 23% 22% 23% 21% 24% 22% 23% 22% 24% 22% 22% 22% 22% 23% 22% 23% 21% 22% 23% 22% 21% 23% 22% 23% 23% 23% 22% 22% 21% 23% 23% 23% 23% 21% 23% 22% 23% 22% 23% 23% 22% 23% 21% 20% 23% 23% 20% 23% 22% 24% 22% 22% 23% 22% 23% 22% 24% 23% 24% 24% 23% 21% 20% 24% 22% 22% 23% 23% 22% 22% 22% 22% 22% 22% 22% 20% 24% 22% 24% 22% 23% 24% 22% 22% 24% 21% 24% 21% 22% 23% 23% 25% 23% 21% 24% 24% 23% 23% 24% 22% 22% 22% 22% 23% 21% 23% 23% 23% 22% 22% 23%) -> (4.3k/10k) -> write(86%)
last tile: 14/5260/5642 (z14 13%) https://onthegomap.github.io/planetiler-demo/#14.5/48.77067/-64.41284
0:14:05 INF [archive] - features: [ 1.2B 46% 15M/s ] 212G tiles: [ 113M 1.2M/s ] 34G
cpus: 44.1 gc: 2% heap: 48G/214G direct: 54M postGC: 21G
read(90% 97%) -> merge(98%) -> (0/10k) -> encode(23% 19% 22% 23% 22% 20% 21% 22% 23% 22% 21% 22% 19% 21% 21% 23% 23% 22% 24% 19% 21% 23% 22% 23% 22% 22% 22% 22% 21% 22% 20% 23% 22% 20% 23% 22% 22% 22% 22% 21% 19% 22% 22% 23% 23% 20% 23% 21% 22% 21% 24% 23% 24% 22% 21% 23% 21% 22% 22% 22% 22% 20% 23% 21% 21% 21% 22% 25% 24% 23% 24% 21% 22% 23% 23% 23% 23% 21% 20% 23% 22% 21% 22% 24% 20% 22% 21% 22% 23% 20% 21% 23% 21% 20% 20% 21% 21% 22% 22% 25% 23% 21% 23% 20% 22% 22% 22% 22% 25% 21% 23% 23% 22% 22% 22% 19% 24% 23% 22% 23% 22% 22% 22% 21% 21% 22% 20% 23% 23% 24% 21% 21% 20% 23% 22% 21% 22% 23% 23% 22% 20% 20% 24% 21% 20% 22% 21% 22% 20% 21% 23% 22% 23% 22% 20% 22% 22% 23% 21% 23% 21% 22% 23% 21% 23% 23% 24% 21% 21% 21% 21% 22% 19% 24% 21% 22% 21% 20%) -> (93/10k) -> write(47%)
last tile: 14/4665/6267 (z14 18%) https://onthegomap.github.io/planetiler-demo/#14.5/38.89958/-77.48657
0:14:16 INF [archive] - features: [ 1.4B 51% 13M/s ] 212G tiles: [ 118M 510k/s ] 37G
cpus: 47.8 gc: 2% heap: 27G/214G direct: 54M postGC: 22G
read(96% 93%) -> merge(98%) -> (0/10k) -> encode(23% 22% 22% 25% 23% 24% 25% 27% 25% 26% 24% 23% 23% 24% 24% 25% 23% 23% 23% 25% 21% 25% 23% 27% 23% 22% 23% 24% 22% 25% 23% 23% 24% 25% 24% 22% 24% 24% 25% 23% 26% 23% 25% 26% 26% 23% 23% 23% 24% 22% 22% 24% 24% 24% 22% 25% 25% 22% 25% 22% 25% 27% 24% 26% 22% 25% 24% 23% 23% 26% 24% 24% 22% 26% 24% 24% 21% 23% 23% 25% 24% 23% 25% 24% 21% 24% 24% 25% 23% 24% 25% 27% 21% 22% 23% 23% 23% 23% 24% 25% 21% 25% 25% 25% 23% 24% 26% 23% 25% 22% 24% 25% 24% 25% 22% 23% 26% 24% 22% 23% 20% 26% 23% 27% 24% 25% 23% 23% 23% 25% 22% 25% 27% 23% 22% 22% 23% 25% 25% 25% 23% 23% 23% 23% 25% 22% 24% 24% 24% 27% 23% 25% 23% 25% 24% 24% 23% 26% 23% 23% 24% 25% 27% 23% 24% 22% 23% 24% 23% 27% 23% 25% 24% 25% 24% 27% 25% 24%) -> (298/10k) -> write(42%)
last tile: 14/3448/7072 (z14 20%) https://onthegomap.github.io/planetiler-demo/#14.5/23.87579/-104.22729
0:14:26 INF [archive] - features: [ 1.5B 56% 11M/s ] 212G tiles: [ 156M 3.7M/s ] 40G
cpus: 43.6 gc: 3% heap: 84G/214G direct: 54M postGC: 27G
read(61% 60%) -> merge(81%) -> (0/10k) -> encode(21% 20% 22% 20% 22% 22% 19% 21% 22% 22% 21% 22% 21% 20% 22% 20% 22% 21% 23% 21% 20% 24% 20% 23% 23% 20% 22% 21% 20% 23% 22% 23% 22% 20% 21% 18% 20% 20% 21% 22% 19% 19% 22% 21% 22% 22% 22% 22% 21% 22% 21% 22% 21% 21% 19% 21% 24% 20% 22% 21% 20% 19% 19% 19% 21% 20% 19% 21% 21% 22% 23% 21% 21% 21% 21% 22% 21% 20% 22% 22% 23% 24% 22% 21% 21% 23% 22% 23% 22% 21% 21% 20% 20% 20% 22% 20% 19% 22% 21% 20% 20% 22% 23% 22% 22% 19% 21% 19% 20% 22% 22% 20% 23% 22% 20% 21% 20% 21% 22% 21% 21% 21% 22% 20% 24% 19% 21% 22% 20% 20% 20% 21% 20% 21% 17% 21% 21% 22% 21% 21% 22% 23% 21% 21% 20% 20% 21% 23% 22% 22% 22% 21% 22% 20% 19% 21% 21% 20% 20% 21% 22% 21% 21% 21% 22% 21% 22% 20% 22% 21% 19% 21% 20% 21% 21% 22% 17% 21%) -> (4.5k/10k) -> write(84%)
last tile: 14/5542/14009 (z14 39%) https://onthegomap.github.io/planetiler-demo/#14.5/-77.73728/-58.21655
0:14:36 INF [archive] - features: [ 1.6B 61% 15M/s ] 212G tiles: [ 181M 2.5M/s ] 44G
cpus: 53.5 gc: 4% heap: 35G/214G direct: 54M postGC: 24G
read(79% 85%) -> merge(96%) -> (0/10k) -> encode(27% 26% 27% 27% 28% 29% 25% 26% 27% 26% 24% 27% 29% 26% 25% 29% 29% 27% 27% 26% 26% 29% 27% 22% 25% 25% 26% 25% 24% 25% 24% 27% 25% 24% 28% 26% 26% 26% 27% 26% 22% 26% 24% 26% 26% 28% 26% 26% 29% 29% 24% 26% 25% 29% 27% 25% 23% 28% 26% 29% 23% 27% 28% 24% 26% 26% 26% 27% 27% 27% 26% 25% 25% 25% 25% 28% 27% 25% 27% 27% 26% 25% 27% 24% 23% 24% 28% 26% 25% 27% 26% 26% 27% 24% 24% 27% 26% 28% 27% 25% 26% 24% 26% 27% 26% 28% 27% 26% 26% 27% 24% 26% 26% 24% 25% 24% 26% 26% 27% 26% 25% 25% 27% 27% 26% 26% 25% 26% 23% 25% 24% 28% 24% 26% 25% 26% 23% 28% 24% 26% 27% 27% 26% 26% 24% 28% 26% 28% 27% 24% 29% 23% 24% 26% 28% 26% 26% 26% 26% 26% 29% 25% 25% 25% 27% 27% 25% 26% 29% 24% 26% 25% 24% 26% 25% 28% 28% 26%) -> (93/10k) -> write(87%)
last tile: 14/10395/9071 (z14 52%) https://onthegomap.github.io/planetiler-demo/#14.5/-18.96864/48.41675
0:14:43 WAR [archive:encode] - {x=14553 y=6450 z=14} 1303kb uncompressed
0:14:46 INF [archive] - features: [ 1.8B 67% 15M/s ] 212G tiles: [ 221M 3.9M/s ] 46G
cpus: 41 gc: 2% heap: 76G/214G direct: 55M postGC: 24G
read(81% 78%) -> merge(98%) -> (2.7k/10k) -> encode(19% 20% 20% 21% 18% 20% 20% 20% 21% 20% 21% 20% 22% 20% 21% 21% 21% 19% 19% 20% 20% 21% 22% 19% 21% 20% 20% 19% 21% 20% 21% 20% 19% 20% 18% 20% 17% 22% 21% 19% 18% 21% 21% 21% 18% 18% 22% 19% 19% 20% 20% 21% 22% 20% 21% 21% 19% 19% 19% 21% 21% 19% 22% 18% 20% 21% 20% 22% 20% 20% 22% 22% 19% 21% 20% 21% 21% 18% 20% 20% 20% 20% 21% 20% 21% 19% 19% 21% 20% 20% 20% 20% 21% 22% 17% 22% 21% 20% 22% 19% 21% 19% 21% 19% 22% 23% 19% 20% 20% 19% 18% 21% 20% 20% 19% 20% 19% 20% 19% 19% 22% 20% 21% 19% 20% 19% 21% 20% 19% 19% 22% 20% 18% 21% 20% 20% 21% 22% 20% 22% 20% 21% 19% 22% 19% 22% 20% 21% 21% 20% 19% 18% 21% 22% 21% 21% 22% 19% 20% 18% 20% 19% 19% 20% 23% 19% 21% 22% 18% 21% 18% 22% 20% 18% 20% 21% 20% 20%) -> (3.3k/10k) -> write(64%)
last tile: 14/14337/5699 (z14 78%) https://onthegomap.github.io/planetiler-demo/#14.5/47.93843/135.03296
0:14:51 WAR [archive:encode] - {x=13722 y=7013 z=14} 1080kb uncompressed
0:14:56 INF [archive] - features: [ 1.9B 73% 14M/s ] 212G tiles: [ 228M 678k/s ] 50G
cpus: 69.4 gc: 6% heap: 38G/214G direct: 55M postGC: 36G
read(93% 75%) -> merge(93%) -> (0/10k) -> encode(33% 34% 33% 36% 33% 33% 32% 35% 30% 35% 35% 32% 33% 34% 34% 35% 33% 32% 34% 33% 32% 34% 34% 35% 33% 35% 33% 36% 32% 33% 32% 33% 34% 33% 35% 32% 31% 35% 34% 33% 32% 31% 30% 35% 33% 34% 34% 32% 34% 31% 33% 33% 33% 34% 35% 34% 34% 34% 33% 33% 34% 33% 35% 33% 32% 35% 32% 33% 33% 33% 36% 34% 34% 32% 32% 33% 34% 34% 34% 34% 33% 34% 35% 36% 31% 31% 35% 34% 32% 30% 30% 33% 36% 31% 34% 32% 32% 31% 33% 33% 34% 33% 33% 32% 35% 32% 34% 33% 32% 30% 34% 34% 33% 36% 33% 33% 35% 34% 34% 33% 40% 35% 33% 33% 30% 33% 34% 35% 35% 34% 33% 34% 33% 34% 32% 33% 33% 31% 31% 33% 35% 34% 32% 35% 33% 34% 33% 34% 32% 31% 31% 31% 34% 34% 31% 34% 33% 32% 34% 33% 35% 36% 33% 34% 35% 30% 33% 33% 32% 33% 29% 36% 33% 34% 32% 33% 35% 34%) -> (103/10k) -> write(82%)
last tile: 14/11970/6960 (z14 82%) https://onthegomap.github.io/planetiler-demo/#14.5/26.10612/83.02368
0:15:06 INF [archive] - features: [ 2.1B 78% 15M/s ] 212G tiles: [ 234M 554k/s ] 54G
cpus: 50.9 gc: 3% heap: 96G/214G direct: 55M postGC: 37G
read(86% 88%) -> merge(97%) -> (0/10k) -> encode(26% 26% 28% 24% 24% 25% 28% 25% 23% 26% 26% 28% 25% 25% 23% 24% 23% 25% 23% 27% 24% 24% 27% 27% 27% 25% 25% 27% 28% 23% 27% 27% 25% 22% 24% 28% 27% 27% 26% 25% 25% 24% 25% 28% 25% 25% 27% 26% 28% 26% 27% 25% 23% 27% 26% 24% 25% 25% 23% 25% 23% 26% 24% 27% 25% 25% 26% 27% 23% 25% 23% 24% 26% 26% 24% 28% 24% 28% 25% 24% 24% 26% 24% 27% 24% 26% 28% 27% 23% 22% 25% 23% 25% 25% 25% 25% 25% 26% 26% 25% 23% 27% 23% 24% 26% 25% 26% 24% 26% 27% 23% 25% 24% 25% 25% 26% 28% 26% 26% 26% 26% 23% 26% 27% 24% 24% 26% 26% 24% 27% 25% 24% 25% 26% 27% 25% 26% 25% 25% 24% 22% 22% 25% 21% 24% 25% 24% 26% 27% 27% 25% 25% 25% 23% 25% 24% 26% 25% 23% 26% 25% 25% 25% 26% 23% 25% 27% 23% 26% 26% 23% 26% 25% 25% 28% 28% 25% 24%) -> (80/10k) -> write(71%)
last tile: 14/9821/5680 (z14 84%) https://onthegomap.github.io/planetiler-demo/#14.5/48.21735/35.80444
0:15:15 WAR [archive:encode] - {x=8290 y=6118 z=14} 1082kb uncompressed
0:15:15 WAR [archive:encode] - {x=8290 y=6119 z=14} 1067kb uncompressed
0:15:16 INF [archive] - features: [ 2.2B 84% 14M/s ] 212G tiles: [ 235M 122k/s ] 58G
cpus: 44.2 gc: 2% heap: 74G/214G direct: 55M postGC: 36G
read(98% 97%) -> merge(98%) -> (0/10k) -> encode(20% 23% 22% 21% 22% 23% 22% 23% 21% 23% 23% 22% 22% 21% 23% 21% 23% 22% 21% 21% 21% 23% 20% 21% 22% 23% 23% 24% 24% 24% 23% 20% 21% 20% 21% 23% 23% 22% 21% 21% 19% 21% 21% 22% 22% 22% 22% 22% 22% 23% 22% 22% 22% 21% 23% 23% 23% 23% 22% 21% 23% 19% 20% 22% 21% 22% 22% 22% 23% 21% 20% 22% 23% 24% 22% 21% 23% 24% 24% 24% 22% 21% 23% 22% 21% 22% 21% 23% 21% 22% 22% 23% 22% 22% 22% 22% 20% 22% 21% 21% 20% 22% 23% 20% 23% 19% 24% 22% 21% 21% 20% 23% 22% 22% 23% 20% 23% 21% 22% 23% 23% 22% 23% 22% 21% 21% 21% 20% 22% 23% 23% 22% 21% 21% 23% 22% 20% 22% 20% 22% 21% 22% 21% 22% 20% 22% 22% 23% 24% 21% 22% 22% 21% 24% 22% 19% 22% 21% 21% 23% 19% 22% 22% 22% 22% 22% 22% 22% 21% 21% 21% 21% 21% 22% 22% 21% 23% 24%) -> (40/10k) -> write(38%)
last tile: 14/8200/5891 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/45.03471/0.18677
0:15:26 INF [archive] - features: [ 2.4B 89% 14M/s ] 212G tiles: [ 235M 22k/s ] 61G
cpus: 34.4 gc: 1% heap: 46G/214G direct: 55M postGC: 35G
read(99% 99%) -> merge(95%) -> (0/10k) -> encode(17% 18% 17% 17% 17% 16% 16% 17% 17% 17% 17% 17% 17% 18% 16% 16% 17% 17% 17% 18% 16% 16% 18% 18% 17% 16% 17% 16% 18% 17% 17% 17% 17% 18% 18% 17% 17% 18% 17% 18% 18% 16% 18% 17% 17% 15% 17% 15% 17% 17% 16% 18% 17% 16% 17% 20% 19% 19% 16% 18% 17% 15% 17% 17% 17% 18% 18% 17% 18% 16% 18% 16% 17% 17% 17% 17% 15% 17% 17% 17% 17% 18% 18% 17% 16% 16% 18% 18% 17% 18% 16% 17% 16% 16% 18% 16% 18% 18% 17% 19% 18% 16% 17% 17% 17% 16% 17% 17% 18% 17% 17% 17% 18% 18% 16% 16% 18% 17% 17% 17% 16% 14% 19% 15% 17% 17% 17% 18% 16% 19% 17% 15% 19% 17% 17% 17% 16% 18% 17% 18% 17% 18% 18% 17% 16% 16% 18% 18% 15% 18% 18% 17% 16% 18% 17% 18% 17% 17% 17% 18% 18% 16% 16% 16% 18% 17% 16% 18% 19% 15% 16% 17% 18% 16% 17% 17% 17% 16%) -> (39/10k) -> write(17%)
last tile: 14/8386/5508 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/50.67383/4.27368
0:15:36 INF [archive] - features: [ 2.5B 95% 15M/s ] 212G tiles: [ 235M 40k/s ] 64G
cpus: 33.5 gc: 1% heap: 73G/214G direct: 55M postGC: 35G
read(96% 99%) -> merge(96%) -> (0/10k) -> encode(16% 17% 19% 17% 16% 16% 18% 16% 17% 18% 17% 16% 17% 17% 15% 16% 16% 16% 16% 17% 18% 17% 15% 17% 18% 18% 16% 16% 18% 17% 16% 15% 16% 18% 15% 16% 17% 17% 16% 19% 17% 16% 16% 17% 17% 17% 18% 16% 17% 17% 17% 17% 15% 17% 17% 17% 17% 15% 16% 17% 16% 17% 17% 17% 16% 16% 18% 18% 18% 18% 18% 16% 16% 17% 17% 15% 17% 16% 16% 17% 16% 19% 17% 15% 16% 16% 17% 16% 18% 17% 17% 17% 17% 16% 15% 16% 18% 17% 15% 18% 18% 16% 17% 17% 17% 17% 17% 16% 17% 17% 16% 17% 18% 17% 14% 17% 18% 17% 17% 17% 16% 16% 15% 17% 17% 17% 17% 18% 17% 18% 18% 17% 18% 16% 15% 16% 17% 17% 15% 15% 16% 17% 16% 17% 16% 16% 15% 18% 18% 16% 16% 17% 17% 16% 16% 16% 17% 17% 17% 18% 17% 17% 16% 16% 17% 15% 17% 16% 14% 17% 16% 17% 17% 15% 16% 17% 18% 17%) -> (42/10k) -> write(19%)
last tile: 14/8994/5282 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/53.71622/17.63306
0:15:46 INF [archive] - features: [ 2.6B 99% 11M/s ] 212G tiles: [ 240M 433k/s ] 68G
cpus: 46.9 gc: 3% heap: 61G/214G direct: 55M postGC: 42G
read(77% 80%) -> merge(89%) -> (9.3k/10k) -> encode(23% 23% 24% 22% 23% 23% 22% 20% 21% 20% 26% 23% 25% 22% 22% 22% 23% 23% 23% 22% 23% 23% 23% 23% 24% 25% 25% 24% 23% 23% 22% 24% 24% 22% 23% 24% 23% 22% 22% 23% 23% 24% 24% 22% 23% 24% 23% 22% 24% 21% 22% 24% 24% 23% 22% 23% 24% 23% 22% 23% 25% 22% 23% 22% 24% 24% 22% 21% 23% 23% 21% 21% 24% 23% 25% 22% 20% 26% 24% 25% 21% 22% 23% 22% 21% 23% 23% 21% 22% 23% 22% 22% 26% 25% 23% 23% 24% 20% 26% 26% 25% 23% 25% 22% 24% 23% 22% 21% 24% 25% 24% 20% 22% 24% 24% 24% 25% 24% 25% 23% 24% 22% 23% 23% 25% 24% 25% 25% 24% 23% 23% 23% 22% 21% 23% 24% 23% 23% 25% 21% 24% 23% 24% 24% 24% 21% 25% 22% 21% 23% 21% 24% 22% 23% 22% 23% 25% 26% 23% 26% 23% 23% 21% 24% 23% 22% 20% 24% 23% 23% 23% 25% 25% 24% 24% 20% 22% 24%) -> (10k/10k) -> write(76%)
last tile: 14/11448/4481 (z14 87%) https://onthegomap.github.io/planetiler-demo/#14.5/62.90022/71.55396
0:15:53 INF [archive:write] - Finished z14 in 2m5s cpu:1h33m24s gc:3s avg:44.7
0:15:53 INF [archive:write] - Building directories with 14083 entries per leaf, attempt 1...
0:15:56 INF [archive] - features: [ 2.7B 100% 3.5M/s ] 212G tiles: [ 270M 2.9M/s ] 68G
cpus: 9.9 gc: 1% heap: 71G/214G direct: 55M postGC: 42G
read( -% -%) -> merge( -%) -> (0/10k) -> encode( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/10k) -> write(72%)
last tile: 14/16383/0 (z14 100%) https://onthegomap.github.io/planetiler-demo/#14.5/85.05018/179.98901
0:15:58 INF [archive:write] - Built directories with 3501 leaves, 16460B root directory
0:15:58 INF [archive:write] - Building directories with 16899 entries per leaf, attempt 2...
0:16:04 INF [archive:write] - Built directories with 2917 leaves, 14121B root directory
0:16:04 INF [archive:write] - Writing metadata and leaf directories...
0:16:04 INF [archive:write] - Writing header...
0:16:04 INF [archive:write] - # addressed tiles: 270425693
0:16:04 INF [archive:write] - # of tile entries: 49291908
0:16:04 INF [archive:write] - # of tile contents: 40261197
0:16:04 INF [archive:write] - Root directory: 14kB
0:16:04 INF [archive:write] - # leaves: 2917
0:16:04 INF [archive:write] - Leaf directories: 87MB
0:16:04 INF [archive:write] - Avg leaf size: 29kB
0:16:04 INF [archive:write] - Total dir bytes: 87MB
0:16:04 INF [archive:write] - Average bytes per addressed tile: 0.32291183589571126
0:16:04 INF [archive] - features: [ 2.7B 100% 0/s ] 212G tiles: [ 270M 0/s ] 68G
cpus: 1 gc: 0% heap: 74G/214G direct: 141M postGC: 42G
read( -% -%) -> merge( -%) -> (0/10k) -> encode( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/10k) -> write( -%)
last tile: 14/16383/0 (z14 100%) https://onthegomap.github.io/planetiler-demo/#14.5/85.05018/179.98901
0:16:04 DEB [archive] - Tile stats:
0:16:04 DEB [archive] - Biggest tiles (gzipped)
1. 14/14553/6450 (747k) https://onthegomap.github.io/planetiler-demo/#14.5/35.70192/139.77905 (poi:979k)
2. 14/8290/6118 (675k) https://onthegomap.github.io/planetiler-demo/#14.5/41.40154/2.16431 (poi:537k)
3. 14/8290/6119 (661k) https://onthegomap.github.io/planetiler-demo/#14.5/41.38505/2.16431 (poi:611k)
4. 14/13722/7013 (617k) https://onthegomap.github.io/planetiler-demo/#14.5/25.05574/121.51978 (poi:685k)
5. 14/6437/8362 (592k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.74367/-38.55103 (building:605k)
6. 14/7990/6392 (592k) https://onthegomap.github.io/planetiler-demo/#14.5/36.73008/-4.42749 (building:380k)
7. 14/13722/7014 (588k) https://onthegomap.github.io/planetiler-demo/#14.5/25.03584/121.51978 (poi:627k)
8. 14/14552/6450 (577k) https://onthegomap.github.io/planetiler-demo/#14.5/35.70192/139.75708 (poi:744k)
9. 14/6435/8361 (573k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.72175/-38.59497 (building:710k)
10. 14/6436/8361 (558k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.72175/-38.573 (building:607k)
0:16:04 INF [archive] - Other tiles with large layers
14/8414/5384 (313k) https://onthegomap.github.io/planetiler-demo/#14.5/52.36889/4.88892 (housenumber:313k)
14/3411/6216 (333k) https://onthegomap.github.io/planetiler-demo/#14.5/39.76632/-105.04028 (landcover:333k)
10/236/413 (176k) https://onthegomap.github.io/planetiler-demo/#10.5/32.69474/-96.85547 (landuse:176k)
13/1596/3157 (337k) https://onthegomap.github.io/planetiler-demo/#13.5/38.08269/-109.84131 (mountain_peak:337k)
5/5/11 (144k) https://onthegomap.github.io/planetiler-demo/#5.5/44.9512/-118.125 (park:144k)
3/5/3 (558k) https://onthegomap.github.io/planetiler-demo/#3.5/20.48995/67.5 (place:558k)
12/3229/2032 (313k) https://onthegomap.github.io/planetiler-demo/#12.5/1.36218/103.84277 (transportation:313k)
14/9618/6751 (179k) https://onthegomap.github.io/planetiler-demo/#14.5/30.15463/31.34399 (transportation_name:179k)
12/3415/1774 (165k) https://onthegomap.github.io/planetiler-demo/#12.5/23.36242/120.19043 (water:165k)
0:16:04 DEB [archive] - Max tile sizes
z0 z1 z2 z3 z4 z5 z6 z7 z8 z9 z10 z11 z12 z13 z14 all
boundary 5.4k 37k 43k 25k 19k 24k 18k 14k 14k 28k 23k 17k 31k 18k 9.4k 43k
landcover 1.5k 982 8k 4.6k 3.2k 31k 17k 271k 333k 235k 153k 175k 166k 111k 333k 333k
place 52k 145k 546k 558k 351k 183k 109k 58k 41k 52k 62k 69k 50k 122k 221k 558k
water 8.4k 4.1k 10k 9k 14k 13k 89k 113k 126k 109k 132k 94k 165k 115k 91k 165k
water_name 8.5k 19k 26k 14k 12k 7.4k 5k 4.7k 12k 8.6k 5.6k 3.8k 3.1k 9.4k 29k 29k
waterway 0 0 0 546 3.7k 1.6k 17k 13k 9.8k 28k 20k 16k 59k 75k 88k 88k
landuse 0 0 0 0 2.6k 1.5k 32k 66k 125k 113k 176k 129k 63k 124k 47k 176k
park 0 0 0 0 54k 144k 99k 76k 71k 82k 90k 55k 47k 19k 50k 144k
transportation 0 0 0 0 60k 107k 62k 122k 89k 135k 91k 67k 313k 187k 128k 313k
transportation_name 0 0 0 0 0 0 34k 20k 19k 15k 37k 22k 33k 27k 179k 179k
mountain_peak 0 0 0 0 0 0 0 12k 12k 10k 10k 9.5k 9.4k 337k 234k 337k
aerodrome_label 0 0 0 0 0 0 0 0 4.1k 2.8k 3.9k 2.9k 2.7k 2.7k 2.7k 4.1k
aeroway 0 0 0 0 0 0 0 0 0 0 16k 25k 35k 31k 18k 35k
poi 0 0 0 0 0 0 0 0 0 0 0 175 35k 17k 979k 979k
building 0 0 0 0 0 0 0 0 0 0 0 0 0 66k 710k 710k
housenumber 0 0 0 0 0 0 0 0 0 0 0 0 0 0 313k 313k
full tile 76k 204k 626k 590k 401k 349k 271k 396k 370k 343k 272k 204k 379k 341k 1.3M 1.3M
gzipped 46k 119k 334k 314k 238k 204k 172k 284k 268k 250k 182k 141k 188k 227k 747k 747k
0:16:04 DEB [archive] - Max tile: 1.3M (gzipped: 747k)
0:16:04 DEB [archive] - Avg tile: 98k (gzipped: 63k) using weighted average based on OSM traffic
0:16:04 DEB [archive] - # tiles: 270,425,693
0:16:04 DEB [archive] - # features: 2,731,231,488
0:16:04 INF [archive] - Finished in 4m10s cpu:4h19m10s gc:10s avg:62.2
0:16:04 INF [archive] - read 2x(78% 3m16s wait:25s done:11s)
0:16:04 INF [archive] - merge 1x(84% 3m31s wait:16s done:12s)
0:16:04 INF [archive] - encode 178x(31% 1m18s block:44s wait:1m51s done:12s)
0:16:04 INF [archive] - write 1x(47% 1m56s wait:1m57s done:12s)
0:16:04 INF - Finished in 16m4s cpu:27h44m50s gc:47s avg:103.6
0:16:04 INF - FINISHED!
0:16:04 INF -
0:16:04 INF - ----------------------------------------
0:16:04 INF - data errors:
0:16:04 INF - render_snap_fix_input 21,288,964
0:16:04 INF - merge_snap_fix_input 2,945
0:16:04 INF - feature_polygon_osm_invalid_multipolygon_empty_after_fix 254
0:16:04 INF - omt_park_area_osm_invalid_multipolygon_empty_after_fix 23
0:16:04 INF - feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix 17
0:16:04 INF - feature_point_on_surface_osm_invalid_multipolygon_empty_after_fix 4
0:16:04 INF - feature_centroid_osm_invalid_multipolygon_empty_after_fix 2
0:16:04 INF - omt_place_island_poly_osm_invalid_multipolygon_empty_after_fix 2
0:16:04 INF - merge_snap_fix_input2 1
0:16:04 INF - merge_snap_fix_input3 1
0:16:04 INF - ----------------------------------------
0:16:04 INF - overall 16m4s cpu:27h44m50s gc:47s avg:103.6
0:16:04 INF - lake_centerlines 2s cpu:8s avg:3.3
0:16:04 INF - read 2x(18% 0.4s done:2s)
0:16:04 INF - process 174x(0% 0s wait:2s)
0:16:04 INF - write 6x(0% 0s wait:2s)
0:16:04 INF - water_polygons 33s cpu:22m40s avg:40.8
0:16:04 INF - read 2x(16% 5s wait:9s done:18s)
0:16:04 INF - process 174x(20% 7s wait:26s)
0:16:04 INF - write 6x(74% 25s wait:8s)
0:16:04 INF - natural_earth 15s cpu:25s avg:1.7
0:16:04 INF - read 2x(24% 4s wait:2s done:9s)
0:16:04 INF - process 174x(0% 0.1s wait:12s done:3s)
0:16:04 INF - write 6x(0% 0s wait:12s done:3s)
0:16:04 INF - osm_pass1 58s cpu:1h29m56s gc:5s avg:92.8
0:16:04 INF - read 1x(65% 38s wait:2s done:14s)
0:16:04 INF - process 179x(44% 26s block:16s wait:12s done:1s)
0:16:04 INF - osm_pass2 8m1s cpu:20h33m34s gc:25s avg:154
0:16:04 INF - read 1x(13% 1m2s wait:6m2s done:51s)
0:16:04 INF - process 174x(81% 6m28s block:14s wait:26s done:2s)
0:16:04 INF - write 6x(64% 5m6s wait:2m17s)
0:16:04 INF - boundaries 9s cpu:11s avg:1.3
0:16:04 INF - agg_stop 0.3s cpu:0.7s avg:2.6
0:16:04 INF - sort 1m56s cpu:58m44s gc:7s avg:30.5
0:16:04 INF - worker 35x(8% 9s wait:1m18s done:7s)
0:16:04 INF - archive 4m10s cpu:4h19m10s gc:10s avg:62.2
0:16:04 INF - read 2x(78% 3m16s wait:25s done:11s)
0:16:04 INF - merge 1x(84% 3m31s wait:16s done:12s)
0:16:04 INF - encode 178x(31% 1m18s block:44s wait:1m51s done:12s)
0:16:04 INF - write 1x(47% 1m56s wait:1m57s done:12s)
0:16:04 INF - ----------------------------------------
0:16:04 INF - archive 68GB
0:16:04 INF - features 212GB

Wyświetl plik

@ -0,0 +1,777 @@
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=planet (name of the extract to download if osm_url/osm_path not specified (i.e. 'monaco' 'rhode island' 'australia' or 'planet'))
0:00:00 INF - 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=ram (default storage type for temporary data, one of [ram, mmap, direct])
0:00:00 DEB - argument: threads=180 (num threads)
0:00:00 DEB - argument: write_threads=6 (number of threads to use when writing temp features)
0:00:00 DEB - argument: process_threads=174 (number of threads to use when processing input features)
0:00:00 DEB - argument: bounds=Env[-180.0 : 180.0, -85.0511287798066 : 85.0511287798066] (bounds)
0:00:00 DEB - argument: 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=2 (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 [files, 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 [files, 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=array (type of node location map, one of [noop, sortedtable, sparsearray, array])
0:00:00 DEB - argument: nodemap_storage=ram (storage for node location map, one of [ram, mmap, direct])
0:00:00 DEB - argument: nodemap_madvise=true (use linux madvise(random) for node locations)
0:00:00 DEB - argument: multipolygon_geometry_storage=ram (storage for multipolygon geometries, one of [ram, mmap, direct])
0:00:00 DEB - argument: multipolygon_geometry_madvise=true (use linux madvise(random) for temporary multipolygon geometry storage)
0:00:00 DEB - argument: http_user_agent=Planetiler downloader (https://github.com/onthegomap/planetiler) (User-Agent header to set when downloading files over HTTP)
0:00:00 DEB - argument: http_timeout=30 seconds (Timeout to use when downloading files over HTTP)
0:00:00 DEB - argument: http_retries=1 (Retries to use when downloading files over HTTP)
0:00:00 DEB - argument: download_chunk_size_mb=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=false (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=false (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=false (keep unzipped natural_earth after reading)
0:00:00 DEB - argument: osm_path=data/sources/planet.osm.pbf (osm OSM input file path)
0:00:00 DEB - argument: free_osm_after_read=false (delete osm input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: output=planet.pmtiles (output tile archive path)
0:00:00 DEB - argument: version=false (show version then exit)
0:00:00 INF - Planetiler build git hash: 328e1b4d536dd7da38a192e56f4014a18c23a63b
0:00:00 INF - Planetiler build version: 0.7-SNAPSHOT
0:00:00 INF - Planetiler build timestamp: 2024-01-21T12:08:38.997Z
0:00:00 DEB - argument: transliterate=true (attempt to transliterate latin names)
0:00:00 DEB - argument: languages=am,ar,az,be,bg,bn,br,bs,ca,co,cs,cy,da,de,el,en,eo,es,et,eu,fa,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,pa,pnb,pl,pt,rm,ro,ru,sk,sl,sq,sr,sr-Latn,sv,ta,te,th,tr,uk,ur,vi,zh,zh-Hant,zh-Hans (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=/data/planet.pmtiles.layerstats.tsv.gz (layer stats output path)
0:00:00 INF - Building OpenMapTilesProfile profile into file:///data/planet.pmtiles 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=PMTILES, scheme=FILE, uri=file:///data/planet.pmtiles, options={}]
0:00:00 INF - no wikidata translations found, run with --fetch-wikidata to download
0:00:00 DEB - ✓ 260G storage on /data (tmpfs) requested for read phase disk, 457G available
0:00:00 DEB - - 260G used for temporary feature storage
0:00:00 DEB - ✓ 390G storage on /data (tmpfs) requested for write phase disk, 457G available
0:00:00 DEB - - 260G used for temporary feature storage
0:00:00 DEB - - 130G used for archive output
0:00:00 DEB - ✓ 124G JVM heap requested for read phase, 214G available
0:00:00 DEB - - 88G used for array node location cache (switch to sparsearray to reduce size)
0:00:00 DEB - - 11G used for multipolygon way geometries
0:00:00 DEB - - 23G used for temporary profile storage
0:00:00 DEB - ✓ 0 temporary files and 545G 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 INF - Using merge sort feature map, chunk size=2000mb max workers=180
0:00:00 INF [lake_centerlines] -
0:00:00 INF [lake_centerlines] - Starting...
0:00:02 INF [lake_centerlines] - read: [ 59k 100% 34k/s ] write: [ 0 0/s ] 0
cpus: 2.2 gc: 2% heap: 179M/214G direct: 262k postGC: 211M
-> (0/4) -> read( -% -%) -> (0/1.1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/230k) -> write( -% -% -% -% -% -%)
0:00:02 INF [lake_centerlines] - Finished in 3s cpu:9s avg:3.5
0:00:02 INF [lake_centerlines] - read 2x(17% 0.4s done:2s)
0:00:02 INF [lake_centerlines] - process 174x(0% 0s wait:2s)
0:00:02 INF [lake_centerlines] - write 6x(0% 0s wait:2s)
0:00:02 INF [water_polygons] -
0:00:02 INF [water_polygons] - Starting...
0:00:13 INF [water_polygons] - read: [ 5.6k 39% 566/s ] write: [ 32M 3.2M/s ] 12G
cpus: 90.8 gc: 6% heap: 4.6G/214G direct: 54M postGC: 3.8G
-> (0/4) -> read(93%) -> (0/1.1k) -> process(49% 48% 48% 33% 46% 42% 68% 23% 29% 63% 56% 38% 55% 55% 37% 44% 35% 37% 47% 53% 73% 73% 25% 55% 28% 50% 48% 37% 38% 49% 65% 50% 35% 61% 31% 58% 32% 48% 70% 45% 48% 61% 56% 66% 27% 30% 61% 50% 37% 27% 77% 46% 32% 54% 54% 43% 53% 65% 46% 37% 44% 68% 40% 56% 43% 41% 49% 32% 39% 75% 41% 54% 41% 51% 48% 53% 30% 36% 61% 37% 40% 27% 49% 41% 37% 39% 41% 60% 65% 70% 85% 42% 30% 43% 41% 51% 84% 29% 64% 45% 58% 65% 45% 47% 53% 28% 66% 63% 42% 33% 49% 56% 42% 23% 80% 28% 53% 68% 34% 50% 48% 52% 34% 59% 44% 28% 39% 52% 57% 63% 41% 40% 41% 62% 61% 41% 49% 42% 58% 41% 47% 34% 50% 46% 44% 39% 46% 40% 50% 34% 74% 50% 72% 51% 42% 39% 26% 41% 35% 34% 61% 24% 44% 65% 48% 46% 46% 66% 42% 59% 86% 39% 32% 40%) -> (143k/230k) -> write(28% 28% 28% 28% 28% 27%)
0:00:23 INF [water_polygons] - read: [ 10k 70% 441/s ] write: [ 120M 8.6M/s ] 15G
cpus: 29.4 gc: 1% heap: 5.8G/214G direct: 54M postGC: 1.8G
-> (0/4) -> read(11%) -> (1k/1.1k) -> process( 6% 52% 10% 6% 7% 6% 4% 4% 6% 21% 25% 5% 5% 15% 12% 25% 14% 4% 10% 3% 4% 16% 38% 9% 4% 8% 10% 7% 5% 10% 9% 5% 11% 10% 13% 5% 8% 9% 10% 4% 6% 5% 10% 28% 8% 20% 7% 15% 8% 6% 16% 51% 5% 30% 13% 13% 6% 5% 16% 4% 20% 7% 15% 4% 12% 6% 7% 20% 5% 6% 6% 4% 5% 3% 9% 4% 7% 14% 7% 9% 5% 3% 11% 6% 9% 6% 16% 10% 13% 11% 31% 4% 17% 5% 15% 4% 17% 5% 4% 29% 12% 7% 6% 26% 8% 18% 4% 15% 33% 4% 15% 18% 4% 27% 60% 5% 18% 11% 6% 9% 5% 8% 18% 7% 10% 5% 3% 60% 8% 10% 8% 11% 9% 18% 8% 89% 8% 15% 6% 4% 5% 5% 4% 5% 4% 6% 6% 13% 47% 24% 5% 22% 29% 6% 5% 11% 6% 5% 8% 11% 12% 6% 39% 5% 11% 4% 15% 30% 48% 40% 20% 13% 20% 49%) -> (226k/230k) -> write(91% 91% 91% 91% 91% 91%)
0:00:33 INF [water_polygons] - read: [ 13k 95% 369/s ] write: [ 205M 8.4M/s ] 17G
cpus: 9.6 gc: 0% heap: 30G/214G direct: 54M postGC: 1.7G
-> (0/4) -> read( -%) -> (665/1.1k) -> process( 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 3% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 3% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 10% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 3% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2%) -> (225k/230k) -> write(100% 100% 100% 100% 100% 100%)
0:00:35 INF [water_polygons] - read: [ 14k 100% 294/s ] write: [ 222M 7.7M/s ] 10G
cpus: 9 gc: 0% heap: 7.5G/214G direct: 54M postGC: 1.7G
-> (0/4) -> read( -%) -> (0/1.1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/230k) -> write( -% -% -% -% -% -%)
0:00:35 INF [water_polygons] - Finished in 32s cpu:22m5s avg:40.9
0:00:35 INF [water_polygons] - read 2x(16% 5s wait:9s done:18s)
0:00:35 INF [water_polygons] - process 174x(20% 6s wait:25s)
0:00:35 INF [water_polygons] - write 6x(74% 24s wait:8s)
0:00:35 INF [natural_earth] -
0:00:35 INF [natural_earth] - Starting...
0:00:35 INF [natural_earth] - unzipping /data/data/sources/natural_earth_vector.sqlite.zip to data/tmp/%2Fnatural_earth_vector.sqlite%2Fpackages%2Fnatural_earth_vector.sqlite
0:00:38 INF [natural_earth] - unzipping /data/data/sources/natural_earth_vector.sqlite.zip to data/tmp/%2Fnatural_earth_vector.sqlite%2Fpackages%2Fnatural_earth_vector.sqlite
0:00:48 INF [natural_earth] - read: [ 304k 87% 30k/s ] write: [ 0 0/s ] 22G
cpus: 2 gc: 0% heap: 14G/214G direct: 54M postGC: 1.7G
-> (0/4) -> read(63%) -> (1/1.1k) -> process( 0% 1% 0% 0% 0% 1% 0% 0% 1% 0% 0% 0% 1% 1% 0% 1% 0% 1% 0% 0% 1% 0% 0% 1% 1% 1% 1% 0% 1% 1% 1% 0% 1% 0% 1% 0% 0% 0% 1% 0% 0% 1% 1% 0% 1% 0% 0% 0% 0% 1% 1% 0% 0% 1% 0% 1% 1% 1% 1% 0% 1% 1% 1% 0% 1% 0% 1% 9% 1% 1% 1% 1% 1% 1% 0% 0% 0% 0% 0% 0% 0% 1% 0% 0% 1% 0% 1% 0% 1% 1% 1% 0% 0% 0% 0% 1% 1% 1% 0% 0% 1% 0% 0% 1% 1% 1% 0% 0% 1% 0% 1% 0% 1% 1% 1% 0% 0% 0% 0% 1% 1% 1% 0% 0% 1% 1% 1% 0% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 0% 1% 1% 1% 1% 1% 1% 1% 0% 1% 1% 1% 0% 0% 0% 0% 1% 0% 1% 0% 1% 0% 0% 0% 0% 1% 0% 0% 1% 1% 0% 1% 0% 0% 0% 0%) -> (27k/230k) -> write( 0% 0% 0% 0% 0% 0%)
0:00:49 INF [natural_earth] - read: [ 349k 100% 36k/s ] write: [ 33k 26k/s ] 10G
cpus: 1.6 gc: 0% heap: 15G/214G direct: 54M postGC: 1.7G
-> (0/4) -> read( -%) -> (0/1.1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/230k) -> write( -% -% -% -% -% -%)
0:00:49 INF [natural_earth] - Finished in 14s cpu:25s avg:1.7
0:00:49 INF [natural_earth] - read 2x(24% 3s wait:2s done:9s)
0:00:49 INF [natural_earth] - process 174x(0% 0.1s wait:11s done:3s)
0:00:49 INF [natural_earth] - write 6x(0% 0s wait:11s done:3s)
0:00:49 INF [osm_pass1] -
0:00:49 INF [osm_pass1] - Starting...
0:00:59 INF [osm_pass1] - nodes: [ 2.2B 227M/s ] 24G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 9.1k 907/s ]
cpus: 104.4 gc: 9% heap: 31G/214G direct: 57M postGC: 28G hppc: 1k
read(76%) -> (0/538) -> process(55% 54% 53% 54% 55% 50% 54% 53% 52% 54% 52% 52% 56% 57% 53% 52% 50% 52% 53% 49% 48% 55% 55% 52% 53% 49% 48% 52% 52% 52% 54% 54% 54% 53% 57% 52% 54% 52% 52% 51% 50% 49% 51% 54% 50% 53% 52% 56% 53% 52% 52% 54% 53% 53% 50% 52% 58% 54% 53% 50% 51% 53% 53% 55% 53% 52% 51% 54% 53% 52% 55% 54% 50% 53% 52% 52% 53% 53% 52% 52% 54% 54% 56% 54% 50% 53% 55% 58% 49% 54% 52% 55% 51% 52% 55% 52% 53% 52% 53% 55% 53% 53% 55% 54% 51% 52% 54% 54% 56% 56% 53% 52% 54% 54% 54% 54% 52% 51% 51% 53% 51% 50% 53% 60% 50% 55% 52% 52% 53% 51% 54% 54% 53% 53% 52% 49% 50% 52% 53% 55% 52% 54% 54% 52% 52% 51% 55% 48% 55% 52% 50% 54% 53% 52% 51% 55% 52% 53% 53% 55% 53% 53% 50% 51% 54% 51% 53% 52% 54% 52% 48% 54% 53% 56% 50% 50% 52% 53% 55%)
0:01:09 INF [osm_pass1] - nodes: [ 5.5B 322M/s ] 57G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 18k 936/s ]
cpus: 100.9 gc: 12% heap: 111G/214G direct: 57M postGC: 60G hppc: 1k
read(88%) -> (0/538) -> process(48% 50% 49% 51% 48% 48% 49% 49% 47% 51% 50% 48% 51% 52% 49% 46% 49% 48% 49% 50% 49% 48% 49% 51% 49% 48% 50% 51% 50% 50% 51% 51% 45% 48% 51% 50% 49% 48% 50% 48% 46% 51% 48% 52% 45% 49% 47% 51% 49% 54% 49% 49% 48% 48% 47% 45% 48% 51% 51% 45% 47% 46% 51% 50% 54% 47% 47% 49% 50% 49% 49% 51% 50% 49% 50% 50% 48% 52% 52% 49% 48% 48% 47% 50% 50% 48% 49% 50% 46% 50% 48% 50% 49% 49% 51% 50% 48% 45% 48% 47% 49% 50% 49% 46% 49% 51% 50% 46% 49% 50% 50% 47% 51% 50% 48% 50% 46% 50% 49% 50% 47% 50% 52% 50% 49% 49% 49% 49% 50% 48% 49% 50% 51% 48% 49% 50% 48% 49% 50% 46% 50% 49% 50% 48% 51% 47% 48% 47% 50% 53% 50% 49% 49% 50% 50% 48% 49% 47% 50% 50% 48% 47% 51% 49% 49% 52% 50% 49% 48% 52% 50% 49% 50% 51% 49% 50% 47% 48% 51%)
0:01:19 INF [osm_pass1] - nodes: [ 8.8B 331M/s ] 90G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 27k 930/s ]
cpus: 109.7 gc: 13% heap: 103G/214G direct: 57M postGC: 96G hppc: 1k
read(85%) -> (277/538) -> process(53% 53% 55% 54% 50% 53% 51% 50% 53% 53% 48% 47% 51% 50% 51% 55% 51% 52% 50% 53% 50% 50% 56% 52% 50% 52% 49% 52% 48% 52% 53% 52% 49% 54% 54% 50% 49% 51% 51% 51% 47% 48% 50% 50% 52% 52% 50% 47% 49% 53% 52% 51% 50% 48% 49% 55% 49% 49% 53% 51% 48% 48% 51% 48% 50% 50% 50% 50% 49% 48% 53% 52% 52% 49% 52% 52% 51% 52% 51% 50% 51% 51% 53% 52% 52% 50% 52% 52% 50% 48% 53% 49% 49% 52% 49% 50% 51% 51% 51% 50% 48% 49% 50% 51% 48% 33% 51% 52% 52% 52% 52% 50% 55% 50% 49% 49% 49% 49% 51% 52% 52% 53% 51% 53% 52% 53% 54% 53% 51% 52% 52% 52% 51% 54% 54% 50% 52% 46% 38% 47% 52% 51% 51% 54% 51% 52% 50% 54% 51% 52% 48% 53% 54% 49% 49% 40% 55% 50% 51% 53% 49% 51% 51% 48% 46% 52% 50% 54% 54% 51% 52% 50% 52% 49% 51% 51% 53% 39% 49%)
0:01:20 INF [osm_pass1:process] - Finished nodes: 8,876,780,887 (295M/s) in 30s cpu:52m26s gc:3s avg:104.9
0:01:30 INF [osm_pass1] - nodes: [ 8.8B 4M/s ] 92G ways: [ 644M 64M/s ] rels: [ 0 0/s ] blocks: [ 37k 1k/s ]
cpus: 138.6 gc: 5% heap: 162G/214G direct: 58M postGC: 105G hppc: 1k
read(85%) -> (3/538) -> process(71% 70% 68% 72% 67% 71% 69% 67% 71% 69% 68% 69% 68% 66% 67% 72% 72% 64% 69% 72% 69% 67% 71% 70% 66% 67% 69% 69% 68% 70% 72% 70% 71% 70% 67% 72% 71% 68% 65% 70% 70% 70% 72% 70% 71% 69% 67% 69% 70% 68% 70% 66% 73% 70% 69% 71% 70% 67% 68% 72% 63% 70% 69% 71% 70% 68% 72% 68% 65% 67% 69% 68% 71% 67% 70% 67% 74% 69% 72% 71% 69% 67% 66% 68% 69% 73% 66% 67% 65% 66% 73% 71% 68% 69% 68% 68% 67% 71% 73% 73% 68% 68% 69% 67% 69% 67% 71% 70% 66% 68% 71% 72% 70% 66% 66% 69% 68% 71% 69% 72% 67% 70% 70% 73% 67% 68% 68% 69% 69% 67% 71% 67% 68% 73% 67% 72% 69% 70% 65% 72% 68% 68% 71% 68% 66% 69% 71% 66% 66% 70% 69% 69% 68% 67% 71% 67% 71% 70% 65% 69% 70% 68% 68% 70% 70% 66% 70% 70% 68% 71% 70% 69% 69% 72% 69% 69% 68% 68% 71%)
0:01:34 INF [osm_pass1:process] - Finished ways: 993,607,585 (69M/s) in 14s cpu:33m25s avg:139.5
0:01:40 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 993M 34M/s ] rels: [ 4.4M 440k/s ] blocks: [ 42k 495/s ]
cpus: 76.1 gc: 5% heap: 105G/214G direct: 54M postGC: 100G hppc: 321M
read( -%) -> (129/538) -> process(37% 36% 39% 38% 38% 38% 37% 37% 37% 38% 36% 36% 34% 37% 41% 37% 37% 39% 36% 39% 36% 37% 39% 36% 36% 37% 36% 36% 38% 37% 40% 37% 36% 37% 40% 37% 37% 35% 37% 39% 36% 37% 35% 38% 38% 39% 37% 38% 37% 36% 39% 37% 39% 38% 37% 36% 38% 37% 38% 38% 38% 36% 37% 36% 38% 36% 35% 38% 37% 38% 38% 39% 38% 39% 37% 36% 38% 37% 35% 36% 38% 37% 36% 38% 37% 37% 36% 38% 39% 39% 38% 39% 39% 36% 36% 37% 37% 36% 39% 37% 40% 38% 39% 39% 38% 39% 38% 35% 38% 37% 36% 36% 37% 38% 37% 37% 35% 38% 36% 37% 35% 36% 37% 34% 36% 39% 39% 38% 36% 36% 39% 35% 37% 38% 38% 37% 36% 36% 41% 37% 38% 39% 39% 37% 38% 39% 36% 40% 38% 35% 36% 36% 37% 36% 39% 40% 36% 37% 38% 40% 37% 37% 40% 38% 36% 38% 39% 36% 36% 34% 40% 37% 36% 35% 37% 37% 40% 38% 36%)
0:01:47 INF [osm_pass1:process] - Finished relations: 11,749,466 (887k/s) in 13s cpu:4m16s avg:19.3
0:01:47 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 993M 0/s ] rels: [ 11M 955k/s ] blocks: [ 43k 40/s ]
cpus: 16.4 gc: 7% heap: 104G/214G direct: 54M postGC: 101G hppc: 708M
read( -%) -> (0/538) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%)
0:01:47 DEB [osm_pass1] - Processed 43,182 blocks:
0:01:47 DEB [osm_pass1] - nodes: 8,876,780,887 (295M/s) in 30s cpu:52m26s gc:3s avg:104.9
0:01:47 DEB [osm_pass1] - ways: 993,607,585 (69M/s) in 14s cpu:33m25s avg:139.5
0:01:47 DEB [osm_pass1] - relations: 11,749,466 (887k/s) in 13s cpu:4m16s avg:19.3
0:01:47 INF [osm_pass1] - Finished in 58s cpu:1h30m37s gc:5s avg:94
0:01:47 INF [osm_pass1] - read 1x(65% 38s wait:2s done:13s)
0:01:47 INF [osm_pass1] - process 179x(45% 26s block:16s wait:11s done:1s)
0:01:47 INF [osm_pass2] -
0:01:47 INF [osm_pass2] - Starting...
0:01:58 INF [osm_pass2] - nodes: [ 785M 9% 78M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 280M 5.7M/s ] 22G blocks: [ 3.5k 8% 349/s ]
cpus: 94.8 gc: 10% heap: 151G/214G direct: 57M postGC: 103G relInfo: 708M mpGeoms: 297
read(36%) -> (28/262) -> process(49% 45% 43% 49% 54% 53% 53% 59% 44% 45% 58% 50% 58% 49% 56% 54% 47% 48% 49% 51% 40% 45% 48% 46% 41% 42% 45% 41% 58% 45% 50% 48% 46% 46% 42% 53% 53% 47% 50% 51% 63% 46% 46% 56% 50% 52% 52% 48% 49% 44% 42% 44% 46% 49% 50% 47% 52% 47% 49% 48% 48% 49% 45% 44% 47% 43% 48% 49% 44% 47% 47% 50% 45% 45% 42% 45% 45% 49% 50% 44% 45% 46% 49% 49% 43% 48% 53% 50% 42% 45% 48% 49% 42% 48% 43% 46% 51% 47% 43% 45% 46% 45% 47% 45% 51% 44% 49% 40% 50% 52% 51% 45% 49% 44% 60% 49% 46% 46% 49% 45% 45% 43% 44% 43% 52% 43% 45% 51% 49% 50% 46% 45% 48% 49% 43% 44% 46% 43% 51% 40% 50% 51% 47% 44% 48% 32% 48% 48% 50% 40% 42% 40% 42% 49% 48% 54% 45% 50% 45% 50% 46% 51% 43% 43% 46% 49% 42% 48% 42% 42% 46% 50% 46% 48%) -> (88k/230k) -> write(41% 42% 42% 42% 42% 42%)
0:02:11 INF [osm_pass2] - nodes: [ 2.2B 26% 141M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 351M 6.6M/s ] 30G blocks: [ 9.2k 21% 523/s ]
cpus: 122.2 gc: 10% heap: 143G/214G direct: 57M postGC: 101G relInfo: 708M mpGeoms: 297
read(63%) -> (49/262) -> process(64% 70% 57% 64% 65% 61% 59% 57% 67% 64% 72% 64% 64% 60% 57% 61% 69% 60% 57% 70% 58% 64% 73% 68% 58% 62% 65% 63% 71% 60% 55% 62% 66% 55% 58% 69% 55% 65% 61% 63% 70% 58% 64% 71% 63% 65% 39% 65% 51% 66% 66% 64% 60% 55% 62% 53% 64% 62% 69% 63% 56% 64% 63% 61% 60% 62% 61% 64% 62% 63% 59% 59% 64% 60% 67% 62% 61% 61% 61% 64% 70% 64% 57% 62% 64% 63% 61% 60% 62% 67% 55% 64% 60% 62% 53% 66% 58% 59% 58% 60% 63% 60% 61% 62% 66% 70% 54% 64% 64% 63% 66% 65% 60% 65% 48% 55% 68% 53% 72% 68% 60% 57% 62% 63% 62% 66% 63% 62% 66% 63% 58% 64% 57% 68% 67% 53% 54% 60% 70% 61% 56% 63% 63% 67% 53% 55% 60% 60% 60% 65% 51% 60% 62% 68% 58% 64% 53% 63% 61% 64% 61% 69% 60% 56% 70% 67% 69% 65% 66% 66% 62% 65% 70% 60%) -> (107k/230k) -> write(71% 71% 70% 70% 71% 70%)
0:02:23 INF [osm_pass2] - nodes: [ 4.6B 52% 171M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 425M 5.5M/s ] 38G blocks: [ 16k 37% 505/s ]
cpus: 124.9 gc: 4% heap: 176G/214G direct: 57M postGC: 100G relInfo: 708M mpGeoms: 297
read(76%) -> (87/262) -> process(64% 63% 65% 60% 60% 71% 73% 58% 62% 59% 58% 56% 68% 62% 63% 61% 60% 61% 73% 62% 71% 56% 54% 54% 61% 65% 56% 57% 65% 71% 74% 58% 63% 63% 63% 53% 64% 67% 66% 67% 51% 57% 61% 60% 57% 64% 65% 69% 58% 66% 65% 66% 63% 68% 63% 69% 53% 69% 59% 56% 67% 66% 63% 58% 61% 50% 65% 71% 75% 62% 59% 67% 71% 66% 64% 66% 61% 61% 63% 48% 72% 57% 59% 58% 66% 62% 62% 67% 68% 63% 62% 64% 57% 69% 64% 61% 72% 57% 57% 60% 56% 57% 69% 61% 60% 62% 64% 66% 67% 63% 69% 60% 59% 57% 67% 66% 58% 68% 61% 56% 63% 68% 61% 59% 59% 62% 64% 61% 49% 68% 65% 64% 63% 60% 61% 69% 65% 58% 64% 63% 64% 59% 58% 66% 70% 63% 60% 59% 65% 59% 66% 69% 66% 61% 61% 60% 62% 68% 60% 66% 65% 65% 59% 61% 68% 63% 61% 58% 65% 65% 62% 64% 72% 67%) -> (90k/230k) -> write(62% 61% 63% 61% 62% 62%)
0:02:34 INF [osm_pass2] - nodes: [ 6.6B 75% 176M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 484M 5M/s ] 46G blocks: [ 21k 50% 497/s ]
cpus: 148.6 gc: 4% heap: 185G/214G direct: 57M postGC: 100G relInfo: 708M mpGeoms: 297
read(82%) -> (77/262) -> process(77% 76% 86% 78% 78% 83% 84% 74% 75% 74% 75% 77% 79% 75% 75% 78% 79% 81% 75% 78% 74% 81% 74% 80% 79% 75% 78% 83% 77% 73% 80% 80% 74% 78% 71% 72% 70% 74% 79% 79% 69% 85% 89% 68% 83% 74% 79% 63% 79% 80% 76% 74% 69% 80% 78% 73% 76% 74% 72% 75% 72% 71% 85% 81% 75% 73% 77% 77% 74% 71% 80% 71% 74% 74% 72% 81% 69% 72% 83% 77% 61% 72% 71% 81% 84% 80% 80% 80% 74% 76% 78% 78% 70% 74% 79% 79% 73% 73% 86% 71% 70% 76% 73% 78% 72% 77% 80% 72% 74% 77% 77% 71% 84% 81% 84% 73% 76% 77% 79% 78% 79% 80% 74% 86% 78% 77% 78% 80% 75% 76% 72% 73% 76% 74% 82% 78% 77% 84% 79% 82% 83% 79% 81% 77% 82% 75% 80% 83% 79% 78% 80% 78% 73% 75% 79% 78% 77% 75% 79% 78% 73% 86% 72% 76% 72% 71% 79% 76% 71% 71% 76% 71% 83% 77%) -> (108k/230k) -> write(70% 69% 70% 70% 69% 68%)
0:02:44 INF [osm_pass2] - nodes: [ 8.5B 96% 174M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 542M 5.4M/s ] 51G blocks: [ 26k 62% 488/s ]
cpus: 152.1 gc: 3% heap: 177G/214G direct: 57M postGC: 99G relInfo: 708M mpGeoms: 297
read(79%) -> (84/262) -> process(78% 85% 86% 77% 77% 76% 87% 81% 72% 73% 67% 82% 76% 78% 80% 84% 82% 81% 77% 76% 85% 81% 75% 83% 75% 79% 77% 75% 81% 82% 78% 79% 77% 75% 77% 75% 83% 68% 82% 76% 75% 80% 81% 76% 80% 85% 70% 78% 74% 70% 82% 74% 80% 81% 74% 79% 77% 80% 75% 81% 79% 82% 76% 81% 77% 82% 69% 83% 79% 80% 83% 75% 82% 78% 79% 78% 81% 68% 66% 85% 83% 80% 79% 80% 79% 82% 81% 80% 85% 68% 72% 76% 76% 70% 77% 80% 74% 76% 86% 76% 77% 71% 76% 74% 75% 85% 78% 69% 75% 77% 67% 78% 72% 73% 76% 80% 82% 71% 83% 82% 78% 71% 79% 77% 74% 76% 78% 85% 77% 67% 81% 82% 84% 75% 74% 69% 75% 83% 76% 75% 80% 77% 74% 80% 80% 82% 81% 80% 83% 75% 78% 76% 72% 77% 74% 83% 77% 77% 73% 79% 83% 80% 81% 73% 62% 79% 77% 80% 74% 76% 80% 80% 80% 78%) -> (92k/230k) -> write(73% 76% 74% 75% 74% 74%)
0:02:46 DEB [osm_pass2:process] - Sorting long long multimap...
0:02:47 INF [osm_pass2:process] - Finished nodes: 8,876,780,887 (150M/s) in 59s cpu:2h6m27s gc:4s avg:128.3
0:02:53 DEB [osm_pass2:process] - Sorted long long multimap 6s cpu:2m48s avg:26.3
0:02:54 INF [osm_pass2] - nodes: [ 8.8B 100% 33M/s ] 92G ways: [ 230k 0% 22k/s ] rels: [ 0 0% 0/s ] features: [ 556M 1.3M/s ] 54G blocks: [ 27k 65% 104/s ]
cpus: 55 gc: 1% heap: 114G/214G direct: 57M postGC: 103G relInfo: 573M mpGeoms: 3.1M
read(14%) -> (88/262) -> process(18% 22% 24% 18% 23% 19% 23% 22% 24% 16% 22% 23% 20% 23% 19% 18% 21% 24% 23% 17% 20% 20% 20% 22% 24% 18% 18% 18% 16% 18% 24% 23% 18% 22% 26% 22% 16% 22% 23% 14% 19% 22% 24% 17% 15% 17% 19% 22% 24% 23% 23% 18% 22% 19% 25% 67% 22% 21% 22% 18% 20% 21% 20% 18% 23% 24% 23% 23% 14% 21% 22% 24% 17% 19% 22% 19% 19% 15% 18% 20% 19% 23% 21% 22% 25% 20% 19% 24% 20% 19% 22% 20% 20% 24% 22% 20% 20% 22% 20% 18% 20% 19% 22% 24% 20% 23% 18% 21% 24% 22% 22% 22% 23% 16% 20% 16% 19% 23% 15% 22% 19% 19% 24% 22% 17% 21% 21% 20% 21% 17% 18% 22% 23% 21% 23% 24% 21% 23% 23% 14% 15% 18% 17% 16% 24% 22% 19% 16% 17% 21% 23% 26% 22% 17% 20% 17% 21% 21% 18% 19% 21% 23% 22% 23% 21% 15% 21% 24% 19% 22% 19% 21% 17% 23%) -> (89k/230k) -> write(14% 14% 12% 14% 14% 14%)
0:03:05 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 13M 1% 1.3M/s ] rels: [ 0 0% 0/s ] features: [ 641M 8.2M/s ] 62G blocks: [ 28k 65% 21/s ]
cpus: 93 gc: 3% heap: 104G/214G direct: 57M postGC: 101G relInfo: 573M mpGeoms: 177M
read( 2%) -> (87/262) -> process(45% 45% 44% 48% 49% 49% 49% 46% 47% 37% 48% 47% 49% 47% 47% 42% 52% 48% 48% 42% 43% 45% 43% 47% 50% 43% 46% 47% 48% 43% 48% 52% 45% 49% 50% 47% 41% 51% 47% 48% 47% 47% 50% 39% 45% 33% 41% 49% 41% 48% 44% 48% 48% 45% 46% 37% 46% 44% 40% 47% 47% 47% 45% 46% 48% 46% 47% 47% 47% 49% 47% 49% 39% 41% 50% 48% 50% 43% 41% 47% 50% 46% 49% 50% 44% 43% 43% 46% 48% 46% 47% 46% 46% 50% 47% 44% 44% 49% 48% 46% 45% 48% 44% 49% 40% 49% 51% 45% 48% 46% 48% 43% 44% 38% 48% 49% 42% 50% 41% 47% 48% 45% 48% 50% 46% 49% 51% 49% 46% 48% 49% 49% 48% 52% 48% 46% 49% 50% 45% 47% 45% 48% 45% 39% 48% 48% 49% 47% 46% 51% 45% 46% 49% 45% 43% 41% 46% 49% 40% 48% 49% 52% 49% 47% 48% 37% 47% 46% 46% 48% 47% 48% 45% 49%) -> (176k/230k) -> write(77% 76% 76% 77% 77% 77%)
0:03:15 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 31M 3% 1.6M/s ] rels: [ 0 0% 0/s ] features: [ 726M 8.1M/s ] 69G blocks: [ 28k 66% 37/s ]
cpus: 131.4 gc: 7% heap: 103G/214G direct: 58M postGC: 102G relInfo: 573M mpGeoms: 621M
read( 5%) -> (87/262) -> process(68% 66% 61% 67% 69% 65% 63% 67% 65% 67% 71% 66% 66% 76% 60% 66% 63% 70% 69% 62% 68% 62% 63% 67% 64% 71% 67% 66% 62% 69% 60% 63% 66% 66% 68% 73% 63% 66% 65% 65% 68% 61% 64% 66% 62% 65% 66% 66% 67% 66% 61% 66% 67% 65% 61% 64% 63% 61% 62% 66% 68% 64% 69% 67% 67% 69% 66% 72% 68% 64% 63% 62% 69% 68% 64% 73% 65% 68% 66% 67% 67% 68% 64% 64% 74% 64% 66% 63% 64% 62% 61% 65% 65% 68% 65% 66% 70% 62% 69% 64% 67% 65% 64% 66% 66% 71% 64% 64% 64% 66% 73% 75% 66% 65% 67% 68% 65% 68% 64% 71% 66% 64% 69% 66% 64% 65% 70% 65% 74% 64% 67% 64% 68% 64% 66% 67% 68% 64% 65% 66% 72% 73% 61% 62% 67% 65% 66% 67% 66% 65% 67% 65% 73% 67% 70% 68% 68% 65% 72% 66% 62% 66% 61% 63% 69% 71% 65% 69% 64% 74% 64% 69% 73% 66%) -> (134k/230k) -> write(85% 85% 86% 85% 84% 85%)
0:03:26 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 53M 5% 2M/s ] rels: [ 0 0% 0/s ] features: [ 793M 6.4M/s ] 74G blocks: [ 29k 67% 39/s ]
cpus: 157.7 gc: 6% heap: 195G/214G direct: 58M postGC: 139G relInfo: 573M mpGeoms: 909M
read(10%) -> (88/262) -> process(78% 85% 84% 80% 81% 78% 79% 74% 82% 81% 80% 85% 81% 87% 80% 83% 79% 80% 81% 82% 80% 75% 77% 78% 84% 77% 78% 80% 77% 80% 82% 81% 79% 76% 83% 85% 76% 80% 85% 79% 79% 79% 82% 80% 84% 82% 84% 78% 83% 79% 81% 79% 79% 76% 81% 73% 79% 75% 82% 84% 82% 80% 87% 80% 80% 77% 78% 85% 79% 81% 80% 81% 81% 80% 78% 87% 80% 80% 76% 82% 79% 79% 83% 79% 87% 78% 79% 78% 80% 76% 81% 78% 84% 81% 82% 84% 82% 82% 84% 85% 77% 81% 83% 83% 81% 86% 83% 78% 77% 81% 81% 71% 79% 80% 83% 76% 79% 76% 80% 84% 83% 79% 80% 75% 81% 77% 76% 76% 89% 79% 81% 81% 87% 79% 79% 76% 78% 72% 83% 83% 85% 81% 73% 84% 84% 79% 81% 83% 79% 80% 82% 83% 73% 82% 84% 84% 80% 79% 84% 80% 77% 80% 80% 81% 81% 81% 81% 78% 81% 88% 77% 80% 82% 80%) -> (85k/230k) -> write(84% 85% 85% 86% 84% 85%)
0:03:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 74M 7% 1.9M/s ] rels: [ 0 0% 0/s ] features: [ 860M 6.3M/s ] 78G blocks: [ 29k 68% 36/s ]
cpus: 157.5 gc: 6% heap: 147G/214G direct: 58M postGC: 102G relInfo: 573M mpGeoms: 1.2G
read( 8%) -> (88/262) -> process(80% 81% 86% 85% 80% 81% 84% 84% 83% 81% 81% 79% 84% 76% 81% 84% 83% 83% 80% 83% 81% 82% 82% 83% 82% 84% 83% 83% 87% 80% 83% 86% 72% 82% 84% 85% 76% 86% 83% 77% 84% 79% 83% 83% 75% 76% 83% 77% 84% 86% 84% 84% 82% 81% 87% 83% 80% 85% 81% 81% 82% 76% 81% 83% 82% 84% 77% 84% 84% 79% 87% 82% 85% 83% 81% 78% 80% 85% 80% 83% 79% 78% 82% 82% 77% 82% 74% 86% 82% 85% 82% 80% 87% 81% 83% 85% 84% 83% 76% 77% 85% 75% 85% 79% 84% 87% 78% 83% 82% 79% 83% 84% 82% 81% 81% 78% 77% 83% 83% 81% 81% 80% 78% 85% 81% 83% 82% 85% 80% 75% 84% 71% 74% 80% 86% 82% 79% 84% 75% 80% 80% 78% 79% 78% 81% 81% 82% 84% 85% 84% 84% 83% 77% 83% 81% 79% 85% 79% 82% 87% 81% 84% 78% 82% 80% 81% 79% 84% 82% 77% 83% 71% 79% 80%) -> (105k/230k) -> write(84% 85% 86% 86% 85% 86%)
0:03:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 99M 10% 2.3M/s ] rels: [ 0 0% 0/s ] features: [ 940M 7.3M/s ] 85G blocks: [ 29k 69% 39/s ]
cpus: 147.7 gc: 6% heap: 191G/214G direct: 58M postGC: 102G relInfo: 573M mpGeoms: 1.5G
read( 7%) -> (88/262) -> process(75% 76% 76% 75% 77% 77% 77% 75% 72% 78% 78% 78% 72% 73% 74% 79% 75% 77% 77% 76% 72% 78% 75% 76% 77% 75% 79% 74% 74% 76% 76% 77% 76% 76% 75% 79% 76% 75% 76% 79% 79% 77% 76% 75% 77% 76% 78% 75% 76% 75% 74% 75% 77% 74% 77% 76% 76% 79% 76% 76% 77% 76% 77% 77% 75% 78% 77% 75% 70% 76% 72% 75% 79% 73% 75% 77% 75% 77% 75% 77% 76% 74% 75% 77% 75% 73% 74% 76% 74% 74% 74% 77% 75% 75% 75% 78% 75% 75% 76% 76% 74% 80% 76% 77% 75% 75% 75% 79% 77% 76% 75% 76% 75% 77% 76% 74% 76% 75% 76% 73% 73% 74% 75% 75% 75% 78% 75% 76% 77% 78% 79% 77% 76% 76% 76% 78% 77% 76% 79% 78% 75% 76% 76% 74% 76% 74% 75% 77% 72% 78% 74% 76% 77% 77% 74% 76% 73% 77% 76% 75% 76% 78% 76% 74% 76% 76% 79% 76% 70% 77% 79% 75% 78% 77%) -> (151k/230k) -> write(90% 90% 89% 89% 90% 90%)
0:03:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 123M 12% 2.3M/s ] rels: [ 0 0% 0/s ] features: [ 1B 7.4M/s ] 91G blocks: [ 30k 70% 40/s ]
cpus: 143.7 gc: 6% heap: 114G/214G direct: 58M postGC: 102G relInfo: 573M mpGeoms: 1.8G
read( 7%) -> (88/262) -> process(78% 75% 73% 73% 74% 74% 73% 74% 77% 75% 76% 71% 73% 75% 72% 73% 76% 73% 71% 74% 74% 70% 73% 79% 71% 74% 75% 76% 73% 70% 77% 77% 74% 73% 72% 71% 76% 74% 74% 74% 73% 75% 73% 72% 75% 71% 71% 74% 75% 74% 75% 72% 74% 76% 77% 73% 67% 74% 74% 73% 77% 74% 75% 75% 76% 75% 73% 75% 68% 77% 73% 71% 74% 74% 73% 74% 71% 71% 73% 73% 71% 73% 74% 75% 77% 75% 75% 75% 74% 74% 74% 74% 73% 73% 75% 69% 72% 72% 76% 75% 73% 74% 76% 73% 76% 77% 73% 73% 75% 68% 73% 75% 77% 75% 74% 74% 75% 75% 76% 74% 71% 75% 75% 73% 75% 72% 75% 74% 76% 75% 74% 75% 77% 74% 74% 74% 74% 75% 71% 74% 73% 74% 73% 76% 75% 74% 73% 74% 74% 75% 71% 72% 74% 73% 71% 74% 73% 66% 74% 74% 73% 75% 74% 75% 75% 74% 70% 76% 76% 72% 75% 72% 74% 73%) -> (124k/230k) -> write(88% 88% 88% 89% 90% 88%)
0:04:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 146M 15% 2.2M/s ] rels: [ 0 0% 0/s ] features: [ 1B 7M/s ] 95G blocks: [ 30k 71% 34/s ]
cpus: 149 gc: 6% heap: 176G/214G direct: 58M postGC: 138G relInfo: 573M mpGeoms: 2.1G
read( 6%) -> (88/262) -> process(78% 76% 75% 75% 74% 76% 79% 78% 77% 74% 77% 75% 77% 78% 76% 77% 77% 78% 79% 76% 73% 77% 77% 76% 77% 78% 78% 76% 74% 74% 76% 76% 75% 76% 74% 76% 75% 77% 76% 76% 79% 78% 75% 79% 78% 76% 77% 76% 77% 72% 77% 78% 78% 74% 76% 77% 76% 79% 75% 75% 75% 72% 75% 76% 76% 76% 73% 76% 77% 78% 79% 75% 77% 76% 76% 78% 76% 78% 78% 77% 73% 75% 78% 75% 76% 79% 77% 76% 77% 77% 76% 78% 79% 74% 79% 72% 74% 77% 76% 77% 74% 75% 74% 75% 78% 74% 75% 75% 74% 76% 74% 77% 78% 77% 77% 73% 76% 79% 76% 77% 78% 74% 78% 74% 74% 75% 75% 76% 77% 77% 77% 75% 77% 78% 73% 76% 74% 76% 78% 76% 80% 74% 79% 75% 77% 75% 73% 73% 76% 77% 75% 75% 74% 79% 75% 77% 77% 78% 75% 74% 78% 78% 72% 77% 75% 77% 77% 75% 77% 75% 77% 76% 77% 75%) -> (152k/230k) -> write(87% 88% 87% 89% 87% 87%)
0:04:17 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 169M 17% 2.2M/s ] rels: [ 0 0% 0/s ] features: [ 1.1B 7.1M/s ] 100G blocks: [ 30k 72% 36/s ]
cpus: 145.3 gc: 6% heap: 153G/214G direct: 58M postGC: 103G relInfo: 573M mpGeoms: 2.3G
read( 7%) -> (88/262) -> process(74% 77% 74% 76% 75% 72% 75% 74% 73% 74% 75% 71% 75% 75% 72% 74% 78% 76% 73% 76% 72% 75% 73% 74% 74% 72% 76% 71% 71% 75% 74% 75% 72% 73% 76% 73% 73% 74% 72% 74% 74% 74% 75% 73% 72% 75% 75% 76% 77% 77% 77% 74% 74% 75% 77% 75% 76% 71% 75% 78% 75% 74% 75% 73% 75% 76% 72% 73% 74% 76% 76% 77% 78% 73% 73% 75% 75% 73% 77% 76% 75% 74% 74% 74% 76% 75% 73% 72% 76% 75% 72% 73% 72% 73% 75% 71% 73% 74% 75% 76% 77% 72% 76% 72% 72% 74% 74% 74% 75% 75% 76% 73% 76% 75% 74% 74% 73% 73% 73% 76% 69% 72% 74% 74% 73% 75% 77% 76% 74% 72% 76% 73% 73% 72% 74% 77% 75% 73% 75% 73% 76% 77% 73% 72% 74% 72% 75% 74% 76% 73% 72% 73% 74% 77% 69% 75% 76% 71% 73% 74% 75% 76% 73% 74% 72% 76% 75% 75% 73% 75% 74% 75% 74% 74%) -> (155k/230k) -> write(89% 89% 90% 89% 89% 89%)
0:04:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 192M 19% 2.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.2B 7M/s ] 105G blocks: [ 31k 73% 35/s ]
cpus: 146.1 gc: 6% heap: 138G/214G direct: 58M postGC: 103G relInfo: 573M mpGeoms: 2.6G
read( 6%) -> (88/262) -> process(75% 73% 74% 76% 72% 73% 76% 73% 73% 73% 76% 74% 72% 74% 74% 78% 74% 76% 75% 74% 74% 75% 76% 77% 73% 74% 76% 72% 77% 73% 76% 74% 75% 75% 73% 78% 70% 74% 76% 78% 74% 72% 73% 74% 77% 74% 76% 75% 76% 72% 82% 76% 73% 74% 75% 74% 74% 75% 73% 77% 77% 77% 74% 73% 77% 76% 78% 73% 76% 76% 74% 76% 74% 75% 75% 75% 74% 73% 73% 75% 78% 72% 76% 73% 80% 76% 73% 76% 75% 76% 74% 72% 72% 73% 74% 74% 74% 75% 76% 75% 73% 73% 73% 73% 74% 75% 77% 73% 74% 72% 74% 75% 72% 75% 75% 74% 75% 72% 75% 72% 78% 77% 76% 73% 77% 74% 75% 74% 76% 73% 73% 74% 74% 73% 70% 76% 77% 74% 77% 76% 75% 75% 75% 77% 77% 72% 75% 74% 72% 73% 74% 73% 74% 76% 77% 75% 73% 73% 70% 74% 79% 77% 75% 71% 76% 75% 73% 77% 74% 74% 75% 72% 73% 74%) -> (163k/230k) -> write(89% 90% 90% 90% 90% 89%)
0:04:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 216M 22% 2.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.2B 6.4M/s ] 109G blocks: [ 31k 73% 39/s ]
cpus: 152.1 gc: 7% heap: 152G/214G direct: 58M postGC: 147G relInfo: 573M mpGeoms: 2.9G
read( 8%) -> (88/262) -> process(79% 78% 77% 79% 79% 75% 76% 79% 74% 79% 79% 77% 80% 75% 80% 79% 78% 79% 77% 77% 80% 81% 78% 77% 76% 76% 75% 76% 78% 76% 78% 75% 75% 77% 79% 79% 77% 78% 79% 78% 79% 76% 76% 78% 78% 76% 75% 75% 78% 77% 79% 77% 80% 80% 77% 77% 76% 78% 78% 78% 75% 75% 78% 78% 76% 82% 77% 79% 76% 79% 78% 80% 77% 78% 75% 77% 76% 77% 77% 75% 78% 76% 75% 77% 78% 78% 75% 78% 77% 75% 79% 77% 76% 77% 78% 79% 77% 74% 77% 80% 77% 77% 78% 79% 77% 78% 79% 79% 78% 79% 77% 79% 78% 78% 77% 75% 75% 74% 78% 74% 79% 79% 77% 79% 80% 77% 75% 76% 79% 75% 76% 74% 77% 77% 78% 75% 77% 78% 79% 77% 80% 76% 78% 79% 78% 79% 76% 77% 77% 79% 81% 78% 76% 79% 78% 77% 78% 78% 75% 78% 78% 75% 78% 76% 78% 79% 77% 78% 77% 77% 75% 76% 78% 78%) -> (146k/230k) -> write(87% 87% 86% 88% 86% 88%)
0:04:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 240M 24% 2.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.3B 6.7M/s ] 113G blocks: [ 32k 74% 37/s ]
cpus: 148.9 gc: 6% heap: 152G/214G direct: 58M postGC: 104G relInfo: 573M mpGeoms: 3.2G
read( 7%) -> (88/262) -> process(76% 76% 76% 74% 78% 78% 76% 77% 74% 76% 77% 76% 77% 82% 78% 74% 74% 75% 79% 78% 79% 77% 77% 77% 76% 77% 75% 76% 77% 73% 74% 77% 75% 76% 76% 76% 73% 77% 74% 73% 78% 74% 76% 75% 74% 75% 75% 75% 76% 77% 75% 78% 79% 78% 78% 74% 77% 74% 77% 78% 75% 76% 75% 75% 76% 77% 76% 75% 79% 76% 76% 71% 76% 73% 76% 79% 75% 75% 77% 77% 75% 78% 76% 74% 76% 75% 74% 75% 76% 73% 75% 79% 77% 77% 75% 77% 78% 77% 75% 76% 76% 77% 74% 77% 75% 75% 75% 76% 76% 75% 74% 74% 75% 75% 75% 76% 76% 73% 74% 75% 76% 76% 77% 73% 72% 75% 75% 76% 75% 74% 76% 76% 77% 78% 75% 75% 74% 75% 74% 76% 76% 72% 75% 77% 75% 76% 75% 76% 75% 77% 75% 75% 76% 77% 76% 72% 75% 76% 75% 75% 72% 78% 76% 72% 73% 79% 76% 79% 74% 75% 77% 78% 77% 73%) -> (144k/230k) -> write(89% 85% 88% 86% 88% 88%)
0:04:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 263M 27% 2.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.4B 6.7M/s ] 118G blocks: [ 32k 75% 37/s ]
cpus: 147.3 gc: 6% heap: 156G/214G direct: 58M postGC: 140G relInfo: 573M mpGeoms: 3.5G
read( 7%) -> (88/262) -> process(75% 71% 77% 75% 79% 75% 75% 75% 74% 77% 77% 78% 76% 76% 73% 77% 72% 76% 73% 74% 76% 76% 74% 75% 75% 74% 73% 75% 74% 72% 78% 76% 71% 76% 77% 73% 78% 74% 73% 77% 75% 74% 74% 75% 76% 75% 76% 71% 72% 74% 77% 75% 75% 77% 75% 74% 78% 76% 73% 76% 76% 76% 76% 73% 74% 75% 78% 76% 75% 74% 75% 76% 78% 74% 74% 72% 77% 77% 74% 75% 76% 74% 76% 76% 74% 75% 76% 78% 75% 76% 77% 74% 76% 77% 73% 74% 76% 71% 74% 76% 75% 75% 77% 71% 76% 74% 75% 73% 77% 74% 76% 74% 75% 74% 77% 75% 76% 72% 75% 77% 75% 74% 75% 77% 73% 74% 74% 74% 74% 71% 70% 73% 73% 74% 77% 76% 75% 72% 73% 75% 77% 73% 76% 73% 75% 76% 73% 72% 76% 75% 73% 77% 74% 76% 77% 76% 74% 78% 71% 76% 77% 76% 77% 76% 77% 76% 72% 74% 75% 75% 76% 77% 76% 77%) -> (146k/230k) -> write(88% 88% 89% 88% 88% 88%)
0:05:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 289M 29% 2.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.5B 6.7M/s ] 122G blocks: [ 32k 76% 38/s ]
cpus: 145.8 gc: 6% heap: 186G/214G direct: 58M postGC: 104G relInfo: 573M mpGeoms: 3.8G
read( 7%) -> (88/262) -> process(75% 72% 71% 73% 72% 77% 74% 75% 74% 74% 75% 78% 73% 76% 71% 75% 73% 76% 71% 71% 73% 76% 74% 75% 70% 73% 75% 77% 72% 72% 72% 76% 75% 77% 76% 75% 76% 72% 76% 74% 73% 75% 72% 73% 76% 75% 74% 74% 72% 75% 73% 75% 71% 74% 72% 75% 76% 77% 77% 74% 74% 76% 73% 74% 77% 76% 76% 77% 75% 77% 75% 76% 74% 72% 74% 76% 75% 74% 76% 76% 78% 72% 76% 75% 73% 74% 79% 70% 74% 76% 76% 74% 70% 76% 68% 72% 73% 74% 71% 73% 76% 72% 76% 69% 71% 72% 77% 76% 75% 75% 74% 68% 75% 76% 75% 76% 70% 75% 77% 76% 75% 75% 75% 68% 71% 74% 73% 75% 76% 74% 71% 74% 76% 73% 75% 76% 78% 74% 76% 69% 73% 78% 72% 72% 78% 73% 72% 75% 73% 74% 77% 76% 73% 75% 76% 76% 74% 71% 78% 76% 75% 74% 77% 74% 69% 74% 74% 76% 78% 71% 77% 75% 75% 77%) -> (155k/230k) -> write(87% 89% 88% 89% 88% 88%)
0:05:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 314M 32% 2.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.5B 6.7M/s ] 126G blocks: [ 33k 77% 36/s ]
cpus: 151 gc: 6% heap: 106G/214G direct: 58M postGC: 105G relInfo: 573M mpGeoms: 4.1G
read( 6%) -> (88/262) -> process(78% 73% 77% 80% 77% 75% 76% 76% 78% 78% 77% 77% 76% 77% 80% 80% 79% 77% 78% 76% 77% 76% 77% 75% 77% 78% 77% 78% 77% 78% 79% 77% 78% 77% 76% 75% 77% 76% 75% 78% 75% 78% 79% 78% 76% 79% 75% 77% 78% 79% 76% 77% 79% 78% 79% 77% 74% 77% 77% 78% 76% 75% 78% 79% 78% 77% 76% 77% 74% 80% 77% 75% 79% 77% 79% 78% 78% 76% 79% 76% 76% 76% 79% 75% 78% 77% 77% 75% 80% 76% 78% 76% 75% 80% 78% 78% 78% 75% 77% 74% 77% 79% 77% 76% 78% 73% 77% 77% 80% 79% 78% 78% 78% 78% 76% 80% 76% 75% 78% 75% 77% 75% 76% 77% 78% 79% 76% 79% 76% 76% 77% 75% 77% 77% 76% 77% 77% 77% 79% 77% 79% 76% 79% 78% 75% 76% 77% 79% 74% 74% 78% 76% 77% 77% 78% 77% 79% 76% 74% 73% 78% 76% 80% 74% 75% 77% 77% 75% 76% 77% 76% 75% 78% 78%) -> (155k/230k) -> write(87% 87% 88% 88% 87% 87%)
0:05:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 339M 34% 2.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.6B 6.6M/s ] 130G blocks: [ 33k 78% 36/s ]
cpus: 152.5 gc: 6% heap: 144G/214G direct: 58M postGC: 133G relInfo: 573M mpGeoms: 4.3G
read( 7%) -> (88/262) -> process(77% 81% 77% 75% 75% 78% 80% 76% 77% 80% 79% 77% 78% 78% 78% 80% 79% 79% 77% 77% 79% 75% 80% 79% 76% 80% 80% 80% 77% 76% 78% 80% 75% 80% 77% 79% 82% 75% 79% 77% 76% 79% 79% 77% 75% 78% 80% 75% 77% 80% 78% 77% 79% 78% 79% 76% 77% 77% 76% 77% 78% 76% 80% 76% 78% 78% 80% 80% 80% 77% 77% 77% 79% 74% 79% 79% 78% 78% 75% 77% 81% 77% 78% 77% 78% 77% 76% 77% 78% 78% 79% 79% 76% 78% 78% 74% 75% 78% 78% 78% 78% 77% 82% 80% 80% 79% 80% 77% 79% 77% 76% 76% 76% 78% 77% 80% 78% 81% 79% 77% 79% 76% 76% 78% 79% 81% 80% 78% 76% 79% 76% 77% 78% 78% 79% 77% 77% 78% 78% 82% 79% 77% 80% 76% 79% 77% 78% 76% 80% 79% 78% 78% 79% 79% 77% 77% 79% 77% 78% 79% 76% 78% 79% 77% 78% 77% 78% 78% 81% 76% 77% 77% 78% 77%) -> (148k/230k) -> write(86% 86% 87% 87% 87% 87%)
0:05:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 365M 37% 2.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.7B 6.6M/s ] 134G blocks: [ 33k 79% 37/s ]
cpus: 147.7 gc: 6% heap: 186G/214G direct: 58M postGC: 105G relInfo: 573M mpGeoms: 4.6G
read( 6%) -> (88/262) -> process(75% 75% 76% 77% 75% 75% 76% 77% 75% 72% 75% 73% 76% 80% 78% 76% 77% 76% 73% 78% 76% 75% 75% 74% 74% 70% 75% 74% 75% 76% 78% 77% 76% 72% 76% 76% 77% 78% 72% 76% 74% 79% 75% 72% 73% 74% 76% 74% 78% 78% 72% 75% 72% 76% 75% 75% 76% 77% 75% 78% 71% 73% 75% 73% 74% 77% 72% 79% 76% 75% 73% 76% 76% 74% 71% 77% 78% 77% 77% 76% 76% 75% 75% 74% 80% 77% 77% 78% 74% 74% 76% 74% 75% 79% 76% 73% 74% 71% 74% 77% 76% 76% 74% 75% 72% 73% 72% 74% 75% 76% 74% 75% 76% 76% 76% 74% 73% 77% 78% 75% 77% 79% 77% 74% 77% 75% 71% 78% 76% 78% 77% 76% 76% 74% 76% 76% 74% 76% 75% 79% 72% 73% 77% 78% 78% 70% 77% 73% 77% 73% 77% 76% 73% 77% 75% 72% 76% 76% 74% 73% 78% 74% 76% 76% 73% 72% 74% 71% 74% 74% 76% 78% 77% 74%) -> (168k/230k) -> write(88% 86% 89% 86% 88% 89%)
0:05:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 390M 39% 2.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.7B 6.5M/s ] 138G blocks: [ 34k 80% 36/s ]
cpus: 148.4 gc: 6% heap: 163G/214G direct: 58M postGC: 144G relInfo: 573M mpGeoms: 5G
read( 6%) -> (88/262) -> process(76% 77% 72% 77% 73% 77% 75% 75% 74% 74% 77% 76% 72% 77% 74% 76% 76% 78% 76% 75% 74% 75% 75% 77% 77% 74% 77% 74% 77% 76% 76% 74% 74% 77% 72% 77% 76% 77% 77% 75% 71% 74% 78% 74% 75% 78% 78% 76% 77% 76% 74% 76% 77% 77% 77% 76% 80% 75% 76% 76% 78% 77% 73% 78% 74% 75% 77% 74% 76% 76% 75% 76% 75% 76% 75% 75% 72% 76% 76% 75% 76% 77% 77% 69% 78% 75% 72% 76% 76% 76% 73% 76% 75% 74% 78% 75% 74% 78% 75% 78% 77% 75% 77% 76% 78% 75% 76% 77% 80% 72% 78% 77% 74% 76% 77% 76% 75% 74% 76% 77% 75% 75% 75% 76% 74% 76% 75% 77% 71% 75% 75% 75% 76% 73% 74% 78% 76% 76% 79% 74% 74% 75% 77% 74% 76% 77% 78% 75% 74% 76% 75% 76% 77% 75% 77% 76% 74% 77% 76% 76% 75% 75% 75% 75% 75% 78% 72% 76% 77% 74% 76% 76% 74% 77%) -> (146k/230k) -> write(88% 88% 86% 87% 88% 86%)
0:05:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 418M 42% 2.6M/s ] rels: [ 0 0% 0/s ] features: [ 1.8B 6.7M/s ] 142G blocks: [ 34k 80% 35/s ]
cpus: 150.4 gc: 6% heap: 144G/214G direct: 58M postGC: 136G relInfo: 573M mpGeoms: 5.2G
read( 6%) -> (88/262) -> process(78% 76% 74% 76% 76% 79% 75% 78% 78% 77% 76% 80% 76% 76% 78% 74% 79% 78% 80% 79% 76% 77% 76% 79% 78% 77% 75% 76% 76% 79% 79% 77% 78% 73% 75% 77% 77% 79% 75% 79% 74% 77% 80% 78% 79% 76% 79% 77% 75% 78% 76% 78% 79% 77% 73% 77% 80% 77% 78% 78% 78% 77% 76% 74% 75% 78% 76% 77% 77% 79% 76% 79% 74% 77% 77% 76% 79% 80% 79% 76% 77% 79% 77% 76% 75% 78% 79% 77% 76% 74% 76% 77% 80% 76% 76% 76% 74% 78% 77% 75% 74% 75% 75% 77% 78% 75% 77% 77% 73% 79% 74% 76% 74% 78% 79% 77% 81% 77% 75% 77% 79% 79% 77% 78% 79% 79% 76% 76% 78% 76% 75% 79% 76% 74% 80% 78% 73% 77% 76% 77% 78% 77% 77% 79% 77% 75% 75% 81% 80% 75% 79% 74% 77% 80% 77% 79% 77% 76% 76% 77% 78% 79% 78% 78% 78% 76% 80% 77% 75% 77% 75% 78% 77% 77%) -> (166k/230k) -> write(90% 88% 89% 89% 88% 90%)
0:06:09 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 445M 45% 2.6M/s ] rels: [ 0 0% 0/s ] features: [ 1.9B 6.8M/s ] 147G blocks: [ 35k 81% 37/s ]
cpus: 149.2 gc: 5% heap: 201G/214G direct: 58M postGC: 106G relInfo: 573M mpGeoms: 5.4G
read( 6%) -> (88/262) -> process(76% 75% 77% 74% 79% 76% 77% 75% 78% 76% 78% 74% 78% 73% 78% 76% 76% 77% 78% 75% 76% 76% 75% 76% 79% 77% 76% 76% 74% 76% 79% 75% 78% 77% 76% 74% 78% 79% 76% 76% 78% 78% 78% 75% 74% 80% 77% 77% 78% 80% 79% 78% 76% 77% 78% 75% 76% 76% 78% 76% 77% 74% 77% 76% 78% 77% 73% 78% 74% 77% 74% 77% 79% 77% 75% 75% 77% 77% 78% 75% 79% 78% 77% 78% 76% 76% 77% 77% 78% 77% 77% 78% 77% 78% 75% 76% 76% 78% 78% 78% 78% 79% 78% 76% 78% 76% 76% 77% 77% 76% 76% 77% 77% 76% 76% 76% 78% 79% 76% 75% 77% 77% 75% 77% 76% 76% 78% 77% 77% 76% 76% 73% 74% 75% 76% 76% 76% 75% 79% 73% 80% 78% 79% 77% 76% 74% 79% 76% 78% 77% 77% 78% 78% 79% 77% 75% 74% 76% 78% 78% 76% 78% 75% 74% 74% 75% 78% 77% 77% 78% 74% 75% 74% 76%) -> (88k/230k) -> write(88% 87% 88% 88% 89% 86%)
0:06:19 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 473M 48% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 1.9B 6.8M/s ] 151G blocks: [ 35k 82% 38/s ]
cpus: 147 gc: 6% heap: 175G/214G direct: 58M postGC: 106G relInfo: 573M mpGeoms: 5.6G
read( 5%) -> (88/262) -> process(76% 76% 77% 76% 73% 73% 75% 76% 74% 73% 74% 74% 78% 75% 76% 73% 74% 74% 78% 76% 75% 78% 76% 73% 77% 75% 75% 72% 74% 76% 74% 76% 74% 78% 73% 75% 75% 73% 76% 78% 74% 75% 75% 73% 77% 74% 75% 73% 72% 75% 77% 77% 74% 77% 74% 74% 77% 75% 75% 77% 78% 72% 77% 78% 76% 74% 74% 75% 77% 78% 75% 77% 77% 74% 76% 76% 73% 76% 75% 75% 74% 76% 75% 74% 76% 77% 76% 74% 77% 74% 73% 75% 78% 73% 76% 75% 75% 77% 76% 76% 76% 76% 74% 73% 74% 76% 78% 72% 77% 73% 79% 74% 78% 75% 80% 75% 75% 76% 75% 75% 75% 76% 76% 76% 75% 75% 75% 75% 74% 74% 75% 75% 75% 79% 74% 79% 72% 78% 77% 75% 74% 74% 78% 77% 73% 78% 76% 74% 76% 75% 74% 75% 76% 77% 74% 73% 74% 76% 76% 76% 73% 75% 77% 74% 73% 76% 74% 76% 74% 76% 77% 78% 75% 76%) -> (157k/230k) -> write(90% 89% 89% 88% 88% 88%)
0:06:29 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 501M 50% 2.8M/s ] rels: [ 0 0% 0/s ] features: [ 2B 6.8M/s ] 153G blocks: [ 35k 83% 37/s ]
cpus: 148.1 gc: 6% heap: 157G/214G direct: 58M postGC: 106G relInfo: 573M mpGeoms: 5.8G
read( 6%) -> (88/262) -> process(77% 78% 77% 75% 77% 73% 77% 75% 73% 74% 75% 79% 75% 75% 73% 74% 76% 77% 75% 76% 76% 72% 75% 75% 74% 75% 76% 74% 74% 74% 76% 75% 76% 74% 77% 76% 76% 75% 77% 75% 79% 76% 78% 77% 76% 74% 73% 74% 73% 74% 79% 74% 74% 75% 78% 75% 76% 76% 76% 74% 75% 78% 76% 76% 76% 78% 75% 73% 77% 77% 76% 76% 75% 76% 76% 77% 79% 76% 76% 73% 74% 77% 77% 75% 76% 73% 76% 74% 77% 73% 75% 73% 74% 74% 79% 75% 78% 78% 78% 77% 73% 77% 74% 72% 77% 75% 76% 76% 78% 73% 78% 78% 77% 76% 74% 79% 77% 78% 75% 75% 74% 75% 72% 77% 77% 76% 76% 74% 77% 78% 73% 74% 75% 73% 75% 77% 76% 76% 75% 74% 75% 75% 77% 75% 77% 77% 78% 76% 75% 76% 73% 72% 75% 76% 73% 76% 76% 74% 76% 75% 77% 73% 76% 75% 76% 78% 77% 77% 74% 74% 73% 76% 74% 77%) -> (152k/230k) -> write(89% 90% 88% 90% 89% 90%)
0:06:39 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 529M 53% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 2.1B 6.7M/s ] 158G blocks: [ 36k 84% 37/s ]
cpus: 147.8 gc: 6% heap: 127G/214G direct: 58M postGC: 106G relInfo: 573M mpGeoms: 6G
read( 6%) -> (88/262) -> process(74% 82% 77% 74% 75% 74% 73% 75% 75% 78% 74% 76% 73% 77% 76% 75% 76% 76% 76% 75% 75% 75% 74% 78% 74% 75% 76% 79% 75% 79% 73% 77% 75% 76% 76% 74% 76% 73% 73% 78% 77% 75% 76% 77% 77% 77% 78% 74% 75% 80% 74% 72% 75% 78% 73% 77% 75% 75% 74% 73% 70% 76% 74% 77% 76% 74% 74% 74% 77% 78% 77% 75% 75% 76% 78% 76% 74% 76% 75% 74% 71% 76% 74% 76% 74% 75% 72% 73% 72% 74% 78% 77% 77% 76% 75% 78% 79% 75% 76% 77% 76% 76% 76% 71% 76% 77% 75% 73% 80% 77% 77% 75% 74% 72% 73% 75% 73% 74% 75% 77% 74% 77% 73% 74% 77% 75% 74% 78% 76% 75% 73% 73% 78% 77% 77% 75% 75% 70% 74% 73% 73% 76% 76% 75% 75% 76% 74% 75% 73% 75% 77% 73% 76% 76% 71% 76% 74% 75% 74% 73% 71% 79% 71% 77% 74% 72% 75% 78% 76% 73% 73% 78% 73% 74%) -> (163k/230k) -> write(87% 88% 88% 87% 89% 89%)
0:06:49 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 555M 56% 2.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.1B 6.8M/s ] 161G blocks: [ 36k 85% 36/s ]
cpus: 148.8 gc: 5% heap: 195G/214G direct: 58M postGC: 143G relInfo: 573M mpGeoms: 6.2G
read( 6%) -> (88/262) -> process(78% 83% 78% 74% 78% 75% 76% 80% 76% 77% 75% 77% 76% 77% 79% 76% 76% 78% 78% 76% 79% 77% 81% 80% 74% 78% 74% 75% 74% 73% 72% 75% 76% 75% 79% 74% 75% 76% 76% 76% 75% 77% 74% 76% 79% 75% 75% 76% 75% 76% 75% 77% 74% 76% 78% 77% 79% 75% 75% 74% 75% 77% 77% 76% 75% 78% 76% 76% 80% 75% 75% 79% 79% 76% 78% 77% 75% 76% 76% 75% 77% 81% 75% 77% 78% 77% 77% 77% 78% 77% 77% 75% 74% 77% 75% 75% 73% 79% 80% 82% 76% 75% 76% 77% 76% 75% 78% 77% 78% 76% 74% 79% 78% 77% 75% 75% 79% 76% 77% 75% 78% 75% 77% 73% 76% 75% 75% 78% 74% 72% 76% 77% 75% 74% 77% 76% 74% 76% 79% 75% 75% 78% 74% 77% 75% 76% 78% 79% 77% 74% 80% 76% 79% 75% 79% 76% 78% 75% 76% 77% 75% 74% 74% 73% 78% 78% 76% 75% 77% 76% 76% 75% 79% 76%) -> (162k/230k) -> write(90% 88% 90% 87% 87% 89%)
0:06:59 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 582M 59% 2.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.2B 6.8M/s ] 165G blocks: [ 36k 86% 37/s ]
cpus: 148.6 gc: 6% heap: 160G/214G direct: 58M postGC: 139G relInfo: 573M mpGeoms: 6.5G
read( 5%) -> (88/262) -> process(77% 76% 78% 76% 75% 77% 76% 76% 75% 75% 77% 76% 77% 76% 76% 80% 75% 75% 77% 75% 77% 77% 79% 76% 76% 75% 80% 78% 78% 76% 74% 75% 77% 76% 74% 73% 75% 76% 75% 77% 75% 73% 74% 76% 73% 76% 70% 76% 77% 76% 75% 77% 75% 73% 75% 77% 74% 79% 78% 76% 78% 73% 78% 74% 77% 78% 76% 77% 78% 76% 77% 77% 76% 75% 74% 78% 76% 76% 77% 76% 71% 74% 77% 77% 79% 77% 76% 78% 76% 75% 75% 74% 74% 74% 74% 78% 74% 76% 75% 78% 74% 75% 75% 75% 79% 75% 75% 76% 78% 72% 73% 74% 79% 76% 78% 76% 76% 77% 79% 74% 74% 78% 78% 75% 76% 77% 75% 75% 76% 76% 76% 77% 75% 76% 79% 72% 77% 74% 75% 77% 78% 75% 78% 76% 76% 77% 76% 76% 75% 74% 78% 75% 73% 76% 80% 76% 74% 77% 76% 79% 77% 74% 75% 76% 80% 76% 78% 76% 76% 77% 76% 77% 75% 76%) -> (158k/230k) -> write(90% 88% 88% 88% 90% 88%)
0:07:09 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 610M 61% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 2.3B 7M/s ] 171G blocks: [ 37k 87% 40/s ]
cpus: 148.8 gc: 6% heap: 123G/214G direct: 58M postGC: 107G relInfo: 573M mpGeoms: 6.8G
read( 6%) -> (88/262) -> process(80% 78% 77% 75% 76% 74% 75% 74% 76% 79% 78% 76% 77% 73% 78% 78% 76% 75% 76% 76% 77% 74% 75% 75% 75% 75% 77% 75% 75% 74% 77% 74% 75% 78% 76% 75% 76% 77% 79% 78% 75% 74% 77% 79% 75% 74% 75% 73% 74% 78% 77% 74% 78% 77% 75% 78% 76% 77% 78% 75% 75% 76% 75% 77% 77% 75% 80% 75% 79% 75% 77% 75% 74% 77% 77% 74% 73% 76% 75% 75% 79% 76% 76% 79% 78% 75% 77% 74% 78% 76% 75% 76% 74% 77% 75% 79% 74% 76% 77% 77% 74% 72% 75% 79% 74% 76% 75% 75% 76% 75% 76% 76% 75% 76% 78% 76% 75% 76% 76% 72% 73% 77% 76% 78% 75% 76% 79% 78% 76% 73% 76% 78% 78% 75% 74% 76% 77% 76% 78% 78% 74% 76% 76% 77% 77% 74% 75% 79% 79% 76% 78% 77% 77% 77% 76% 77% 76% 75% 74% 75% 75% 78% 76% 78% 77% 78% 74% 76% 77% 75% 78% 76% 77% 76%) -> (152k/230k) -> write(89% 87% 89% 88% 89% 88%)
0:07:19 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 637M 64% 2.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.3B 6.8M/s ] 174G blocks: [ 37k 87% 37/s ]
cpus: 154.2 gc: 6% heap: 196G/214G direct: 58M postGC: 107G relInfo: 573M mpGeoms: 7.1G
read( 6%) -> (88/262) -> process(78% 81% 79% 79% 77% 80% 79% 80% 81% 80% 80% 79% 77% 77% 79% 83% 78% 80% 83% 76% 77% 79% 77% 83% 81% 78% 79% 81% 78% 78% 79% 80% 79% 80% 79% 81% 80% 79% 78% 78% 76% 83% 79% 82% 76% 78% 81% 80% 77% 76% 77% 79% 80% 75% 79% 79% 79% 77% 79% 79% 77% 79% 80% 79% 77% 80% 77% 80% 78% 77% 75% 79% 82% 83% 77% 78% 79% 74% 76% 80% 78% 78% 79% 76% 75% 79% 80% 78% 79% 76% 80% 77% 79% 78% 79% 80% 77% 79% 80% 80% 80% 78% 79% 79% 78% 76% 80% 75% 79% 81% 78% 78% 79% 80% 78% 78% 76% 80% 78% 78% 83% 81% 81% 77% 77% 79% 80% 79% 78% 79% 77% 78% 81% 79% 78% 78% 78% 79% 80% 80% 79% 83% 78% 80% 78% 79% 77% 78% 77% 82% 80% 80% 78% 80% 77% 76% 78% 79% 77% 80% 76% 79% 78% 80% 76% 79% 77% 80% 78% 76% 79% 80% 76% 79%) -> (113k/230k) -> write(87% 88% 85% 86% 88% 88%)
0:07:29 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 666M 67% 2.8M/s ] rels: [ 0 0% 0/s ] features: [ 2.4B 7M/s ] 178G blocks: [ 38k 88% 37/s ]
cpus: 150.8 gc: 6% heap: 186G/214G direct: 58M postGC: 108G relInfo: 573M mpGeoms: 7.4G
read( 6%) -> (88/262) -> process(79% 80% 75% 76% 74% 75% 74% 77% 77% 75% 76% 78% 76% 79% 75% 84% 77% 75% 75% 78% 77% 76% 75% 76% 80% 75% 74% 76% 78% 78% 76% 76% 77% 80% 83% 78% 75% 77% 79% 77% 78% 80% 75% 75% 76% 77% 76% 78% 76% 77% 77% 74% 75% 79% 77% 76% 77% 78% 79% 77% 78% 76% 74% 76% 76% 76% 75% 78% 80% 79% 76% 79% 78% 75% 74% 79% 73% 77% 77% 77% 76% 77% 80% 74% 75% 76% 80% 75% 76% 79% 78% 74% 78% 77% 74% 73% 75% 76% 78% 80% 77% 76% 76% 76% 77% 79% 79% 77% 75% 76% 77% 77% 75% 77% 75% 77% 80% 77% 80% 78% 80% 77% 78% 76% 78% 76% 74% 75% 77% 76% 76% 76% 76% 76% 75% 75% 76% 79% 74% 80% 79% 75% 79% 77% 78% 86% 77% 78% 78% 80% 74% 72% 76% 82% 78% 77% 77% 77% 77% 79% 74% 77% 77% 80% 78% 78% 75% 76% 77% 74% 75% 75% 74% 80%) -> (140k/230k) -> write(87% 89% 88% 89% 87% 89%)
0:07:39 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 694M 70% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 2.5B 6.9M/s ] 182G blocks: [ 38k 89% 40/s ]
cpus: 150.2 gc: 6% heap: 178G/214G direct: 58M postGC: 143G relInfo: 573M mpGeoms: 7.7G
read( 6%) -> (88/262) -> process(77% 75% 78% 76% 81% 79% 76% 75% 76% 74% 76% 74% 77% 79% 76% 77% 77% 79% 76% 72% 75% 77% 76% 75% 77% 77% 77% 78% 78% 75% 76% 75% 77% 77% 75% 77% 77% 74% 77% 76% 76% 76% 77% 78% 79% 78% 77% 77% 76% 77% 77% 80% 79% 75% 76% 72% 78% 76% 80% 72% 76% 77% 79% 78% 74% 74% 77% 76% 78% 77% 76% 75% 78% 75% 76% 78% 75% 79% 76% 75% 78% 76% 78% 76% 77% 80% 85% 79% 75% 77% 78% 73% 76% 69% 75% 77% 75% 76% 77% 78% 77% 75% 77% 79% 77% 78% 78% 76% 74% 76% 76% 76% 79% 77% 76% 77% 76% 75% 81% 78% 76% 75% 78% 73% 76% 78% 78% 76% 77% 77% 73% 77% 74% 75% 75% 75% 77% 74% 76% 77% 76% 76% 78% 77% 76% 74% 76% 76% 78% 75% 78% 77% 79% 82% 75% 76% 78% 75% 72% 77% 76% 78% 79% 77% 78% 78% 74% 75% 76% 78% 74% 79% 75% 81%) -> (162k/230k) -> write(89% 87% 89% 89% 89% 89%)
0:07:50 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 723M 73% 2.8M/s ] rels: [ 0 0% 0/s ] features: [ 2.6B 6.9M/s ] 185G blocks: [ 38k 90% 39/s ]
cpus: 150 gc: 6% heap: 178G/214G direct: 58M postGC: 145G relInfo: 573M mpGeoms: 7.9G
read( 5%) -> (88/262) -> process(77% 80% 77% 78% 76% 77% 79% 75% 76% 76% 78% 78% 74% 77% 77% 78% 78% 76% 77% 75% 79% 78% 78% 78% 77% 76% 78% 78% 79% 76% 78% 76% 77% 77% 79% 76% 78% 78% 78% 78% 77% 78% 74% 79% 76% 75% 78% 78% 77% 80% 77% 78% 77% 76% 71% 76% 79% 76% 77% 76% 79% 77% 76% 78% 74% 77% 79% 80% 77% 76% 77% 79% 80% 75% 75% 76% 75% 79% 78% 77% 75% 77% 76% 75% 75% 79% 77% 75% 80% 75% 78% 78% 75% 77% 80% 79% 76% 76% 74% 76% 76% 78% 79% 74% 76% 80% 77% 77% 77% 77% 79% 80% 80% 79% 78% 75% 77% 77% 80% 78% 77% 77% 77% 79% 76% 76% 75% 78% 77% 79% 74% 77% 76% 76% 78% 76% 77% 80% 74% 77% 77% 76% 77% 75% 78% 79% 77% 77% 79% 76% 78% 78% 80% 76% 77% 77% 77% 77% 78% 76% 76% 75% 77% 76% 78% 78% 76% 77% 79% 78% 77% 76% 78% 77%) -> (139k/230k) -> write(88% 89% 90% 89% 89% 88%)
0:08:00 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 753M 76% 2.9M/s ] rels: [ 0 0% 0/s ] features: [ 2.6B 6.9M/s ] 190G blocks: [ 39k 91% 40/s ]
cpus: 151.9 gc: 6% heap: 192G/214G direct: 58M postGC: 151G relInfo: 573M mpGeoms: 8.1G
read( 6%) -> (88/262) -> process(79% 79% 79% 79% 76% 79% 79% 74% 79% 76% 79% 78% 76% 77% 76% 77% 77% 80% 80% 77% 78% 78% 79% 79% 77% 80% 78% 77% 80% 78% 76% 75% 82% 82% 78% 78% 78% 78% 77% 78% 81% 78% 71% 78% 81% 77% 77% 80% 80% 77% 79% 77% 78% 79% 76% 80% 79% 80% 76% 76% 78% 77% 79% 81% 77% 76% 80% 77% 78% 78% 80% 79% 79% 77% 75% 78% 76% 78% 76% 78% 76% 76% 81% 78% 77% 81% 79% 79% 79% 76% 79% 76% 76% 80% 80% 78% 76% 80% 78% 76% 79% 78% 79% 77% 77% 73% 77% 76% 78% 77% 77% 79% 78% 78% 78% 78% 80% 78% 80% 74% 76% 80% 74% 77% 78% 79% 76% 80% 79% 76% 79% 76% 78% 77% 79% 78% 79% 78% 78% 78% 78% 77% 75% 77% 74% 78% 77% 75% 77% 79% 78% 79% 78% 79% 78% 76% 77% 79% 79% 78% 78% 76% 78% 77% 78% 75% 80% 76% 76% 78% 78% 79% 79% 79%) -> (137k/230k) -> write(88% 87% 89% 88% 90% 88%)
0:08:10 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 781M 79% 2.8M/s ] rels: [ 0 0% 0/s ] features: [ 2.7B 6.7M/s ] 194G blocks: [ 39k 92% 38/s ]
cpus: 152.5 gc: 6% heap: 110G/214G direct: 58M postGC: 109G relInfo: 573M mpGeoms: 8.4G
read( 5%) -> (88/262) -> process(77% 78% 78% 81% 76% 77% 79% 80% 80% 76% 77% 78% 81% 78% 76% 82% 76% 79% 80% 79% 78% 78% 78% 80% 80% 74% 80% 80% 79% 78% 80% 79% 79% 77% 76% 79% 75% 80% 80% 77% 78% 79% 77% 79% 78% 79% 79% 77% 80% 76% 80% 78% 78% 78% 80% 76% 78% 77% 79% 76% 81% 76% 77% 76% 76% 81% 79% 77% 78% 79% 80% 77% 78% 79% 81% 80% 77% 79% 78% 77% 78% 76% 81% 80% 79% 79% 77% 81% 77% 75% 78% 80% 79% 80% 78% 80% 78% 76% 76% 78% 78% 77% 79% 78% 77% 73% 78% 77% 78% 80% 79% 76% 80% 79% 80% 79% 77% 78% 77% 78% 75% 76% 76% 79% 80% 80% 80% 78% 77% 79% 78% 79% 79% 77% 76% 79% 79% 80% 76% 79% 77% 77% 78% 77% 78% 79% 77% 78% 79% 78% 80% 76% 75% 81% 79% 78% 77% 79% 80% 79% 78% 78% 77% 79% 79% 77% 79% 78% 80% 78% 79% 78% 81% 79%) -> (144k/230k) -> write(88% 88% 87% 87% 86% 89%)
0:08:20 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 809M 82% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 2.8B 6.6M/s ] 197G blocks: [ 40k 93% 40/s ]
cpus: 153.7 gc: 6% heap: 119G/214G direct: 58M postGC: 109G relInfo: 573M mpGeoms: 8.6G
read( 6%) -> (88/262) -> process(79% 80% 79% 77% 77% 80% 76% 80% 78% 79% 80% 80% 80% 78% 79% 77% 82% 80% 80% 79% 82% 80% 75% 78% 80% 76% 77% 78% 79% 78% 78% 78% 79% 75% 77% 80% 78% 80% 78% 78% 78% 79% 77% 79% 78% 80% 80% 78% 78% 77% 76% 78% 80% 79% 78% 78% 79% 82% 76% 74% 75% 77% 81% 78% 78% 78% 78% 77% 79% 79% 79% 79% 80% 79% 79% 80% 79% 80% 81% 80% 79% 78% 80% 81% 80% 77% 78% 79% 78% 75% 77% 78% 80% 80% 80% 76% 77% 78% 76% 78% 76% 79% 81% 78% 76% 79% 79% 79% 76% 77% 78% 79% 77% 75% 80% 79% 78% 78% 77% 81% 79% 80% 80% 80% 78% 78% 78% 81% 80% 79% 80% 78% 77% 76% 80% 82% 77% 83% 79% 79% 79% 80% 80% 80% 76% 81% 78% 78% 82% 78% 76% 81% 80% 79% 74% 78% 79% 79% 78% 79% 80% 81% 76% 77% 79% 78% 80% 74% 81% 78% 81% 77% 78% 81%) -> (147k/230k) -> write(87% 87% 88% 88% 87% 84%)
0:08:30 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 837M 84% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 2.8B 6.3M/s ] 201G blocks: [ 40k 94% 36/s ]
cpus: 149 gc: 6% heap: 111G/214G direct: 58M postGC: 110G relInfo: 573M mpGeoms: 9.2G
read( 5%) -> (88/262) -> process(75% 78% 80% 78% 75% 78% 78% 79% 75% 73% 75% 77% 76% 77% 77% 78% 78% 78% 78% 75% 77% 77% 78% 76% 75% 76% 80% 75% 74% 77% 77% 75% 77% 77% 77% 78% 77% 75% 75% 76% 76% 75% 77% 80% 75% 76% 77% 76% 77% 78% 76% 78% 76% 75% 74% 77% 81% 74% 79% 77% 80% 75% 77% 77% 78% 77% 75% 75% 75% 75% 78% 79% 77% 76% 79% 77% 75% 77% 77% 76% 77% 75% 75% 77% 75% 76% 73% 77% 77% 76% 73% 77% 75% 77% 79% 77% 75% 75% 77% 76% 76% 76% 76% 78% 76% 78% 77% 76% 77% 76% 77% 75% 78% 75% 74% 75% 78% 77% 78% 75% 77% 77% 81% 79% 77% 76% 76% 76% 76% 77% 80% 76% 74% 75% 76% 76% 78% 75% 74% 77% 77% 75% 79% 79% 76% 78% 76% 76% 73% 77% 80% 77% 76% 75% 76% 76% 77% 78% 76% 73% 78% 78% 78% 78% 78% 77% 78% 75% 77% 73% 76% 76% 77% 79%) -> (158k/230k) -> write(85% 86% 86% 86% 86% 84%)
0:08:40 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 865M 87% 2.8M/s ] rels: [ 0 0% 0/s ] features: [ 2.9B 6.6M/s ] 205G blocks: [ 40k 95% 38/s ]
cpus: 152.6 gc: 5% heap: 150G/214G direct: 58M postGC: 110G relInfo: 573M mpGeoms: 9.4G
read( 6%) -> (88/262) -> process(77% 78% 81% 79% 78% 76% 75% 80% 78% 79% 82% 78% 79% 79% 82% 79% 82% 80% 75% 80% 76% 79% 79% 80% 76% 78% 76% 80% 77% 79% 78% 79% 76% 79% 80% 80% 76% 79% 78% 81% 78% 80% 83% 77% 82% 78% 81% 78% 78% 80% 79% 78% 80% 78% 79% 81% 80% 78% 81% 76% 79% 80% 78% 81% 76% 80% 78% 79% 77% 79% 77% 79% 78% 75% 77% 78% 77% 77% 77% 78% 77% 79% 75% 77% 77% 79% 77% 78% 81% 77% 79% 79% 77% 81% 79% 76% 78% 80% 73% 82% 76% 80% 76% 76% 81% 80% 78% 80% 77% 80% 76% 78% 77% 79% 78% 79% 80% 78% 79% 84% 77% 80% 79% 78% 78% 77% 78% 79% 74% 76% 79% 77% 77% 79% 75% 78% 79% 80% 82% 77% 77% 79% 80% 76% 78% 80% 80% 78% 77% 77% 80% 78% 80% 77% 81% 77% 78% 79% 76% 80% 79% 78% 77% 78% 78% 77% 78% 77% 79% 77% 78% 77% 80% 78%) -> (142k/230k) -> write(89% 88% 88% 90% 89% 89%)
0:08:50 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 893M 90% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 3B 6.5M/s ] 208G blocks: [ 41k 96% 39/s ]
cpus: 156.3 gc: 6% heap: 172G/214G direct: 58M postGC: 110G relInfo: 573M mpGeoms: 9.7G
read( 6%) -> (88/262) -> process(82% 78% 83% 81% 79% 80% 79% 77% 82% 82% 80% 81% 82% 78% 80% 80% 82% 80% 80% 79% 80% 79% 80% 82% 83% 80% 80% 79% 81% 78% 78% 79% 82% 79% 81% 82% 80% 82% 80% 79% 81% 78% 78% 80% 82% 81% 81% 81% 78% 80% 83% 80% 83% 81% 82% 81% 79% 80% 80% 80% 78% 82% 82% 79% 81% 78% 82% 78% 82% 79% 82% 76% 79% 80% 81% 83% 78% 81% 78% 79% 80% 79% 80% 81% 81% 78% 80% 80% 82% 79% 80% 79% 82% 81% 78% 79% 81% 80% 79% 81% 81% 80% 81% 82% 78% 79% 78% 80% 80% 80% 81% 81% 80% 82% 83% 79% 81% 81% 80% 80% 81% 83% 79% 78% 79% 79% 82% 81% 80% 78% 82% 82% 81% 79% 79% 79% 78% 81% 81% 80% 79% 81% 82% 79% 80% 80% 77% 82% 78% 76% 77% 80% 80% 79% 83% 80% 81% 78% 81% 78% 79% 77% 80% 80% 82% 79% 79% 79% 82% 81% 82% 80% 79% 81%) -> (156k/230k) -> write(85% 85% 88% 88% 86% 86%)
0:09:00 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 921M 93% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 3B 6.3M/s ] 212G blocks: [ 41k 97% 36/s ]
cpus: 157.1 gc: 6% heap: 115G/214G direct: 58M postGC: 110G relInfo: 573M mpGeoms: 10G
read( 5%) -> (88/262) -> process(83% 79% 82% 82% 81% 80% 83% 79% 79% 82% 82% 81% 80% 80% 82% 81% 83% 82% 82% 82% 78% 78% 82% 81% 82% 83% 81% 83% 79% 80% 80% 80% 83% 82% 81% 79% 81% 80% 83% 84% 80% 82% 83% 81% 78% 83% 80% 81% 79% 83% 82% 81% 82% 81% 81% 80% 77% 82% 81% 82% 83% 81% 81% 78% 82% 81% 78% 83% 79% 79% 80% 79% 80% 81% 81% 82% 82% 82% 81% 81% 81% 79% 79% 82% 82% 83% 80% 81% 81% 80% 81% 81% 83% 79% 80% 79% 80% 82% 80% 82% 80% 80% 80% 79% 81% 85% 79% 81% 79% 83% 84% 84% 80% 82% 81% 79% 83% 81% 80% 80% 82% 80% 81% 80% 80% 81% 81% 79% 82% 82% 80% 81% 82% 80% 81% 81% 80% 79% 83% 78% 79% 82% 80% 81% 79% 79% 78% 83% 79% 80% 78% 80% 82% 81% 82% 81% 83% 82% 80% 82% 81% 80% 80% 82% 80% 82% 81% 82% 80% 80% 82% 82% 79% 78%) -> (111k/230k) -> write(84% 86% 87% 86% 85% 87%)
0:09:10 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 948M 95% 2.6M/s ] rels: [ 0 0% 0/s ] features: [ 3.1B 6.2M/s ] 215G blocks: [ 42k 97% 38/s ]
cpus: 160.3 gc: 6% heap: 169G/214G direct: 58M postGC: 155G relInfo: 573M mpGeoms: 10G
read( 7%) -> (88/262) -> process(82% 82% 83% 82% 82% 80% 82% 86% 85% 80% 82% 81% 83% 83% 81% 83% 85% 82% 83% 83% 81% 84% 82% 84% 81% 83% 84% 81% 82% 84% 84% 82% 84% 82% 84% 83% 83% 83% 83% 83% 82% 83% 83% 82% 81% 84% 84% 81% 84% 84% 85% 83% 81% 84% 83% 84% 83% 82% 82% 81% 84% 83% 81% 84% 83% 82% 82% 83% 84% 82% 79% 84% 83% 81% 83% 83% 83% 82% 81% 81% 82% 85% 80% 80% 81% 81% 84% 84% 81% 83% 84% 83% 83% 83% 83% 81% 83% 85% 81% 84% 83% 85% 81% 81% 82% 85% 81% 84% 83% 82% 82% 82% 82% 84% 81% 86% 83% 82% 83% 84% 82% 82% 83% 83% 84% 80% 81% 83% 84% 80% 79% 81% 84% 81% 79% 83% 83% 82% 82% 83% 81% 81% 81% 81% 81% 81% 84% 85% 81% 83% 84% 82% 82% 83% 85% 83% 83% 81% 83% 80% 83% 82% 87% 84% 83% 83% 85% 82% 82% 82% 81% 78% 83% 81%) -> (144k/230k) -> write(86% 85% 86% 88% 85% 86%)
0:09:21 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 976M 98% 2.7M/s ] rels: [ 0 0% 0/s ] features: [ 3.2B 6.3M/s ] 220G blocks: [ 42k 98% 37/s ]
cpus: 157.4 gc: 6% heap: 120G/214G direct: 58M postGC: 111G relInfo: 573M mpGeoms: 10G
read( 6%) -> (88/262) -> process(80% 83% 84% 83% 81% 77% 83% 80% 83% 80% 77% 82% 80% 81% 82% 82% 79% 81% 83% 83% 82% 83% 81% 83% 81% 82% 82% 80% 76% 79% 81% 84% 81% 84% 82% 80% 82% 81% 79% 81% 82% 81% 81% 82% 82% 79% 81% 83% 81% 82% 83% 84% 80% 81% 80% 81% 83% 82% 81% 79% 80% 79% 82% 81% 83% 82% 82% 82% 82% 84% 81% 80% 82% 83% 82% 83% 81% 82% 80% 80% 82% 80% 81% 82% 82% 77% 81% 80% 83% 79% 82% 80% 80% 80% 81% 78% 80% 77% 82% 83% 81% 81% 82% 78% 82% 82% 82% 79% 81% 79% 81% 79% 81% 80% 80% 84% 82% 80% 82% 82% 81% 80% 83% 82% 80% 83% 81% 82% 81% 83% 81% 81% 81% 81% 83% 81% 83% 81% 81% 78% 81% 80% 82% 83% 82% 82% 78% 81% 82% 82% 80% 82% 79% 82% 83% 81% 82% 82% 80% 82% 83% 83% 81% 83% 78% 82% 81% 84% 80% 79% 84% 79% 82% 81%) -> (144k/230k) -> write(85% 88% 86% 85% 87% 87%)
0:09:29 INF [osm_pass2:process] - Finished ways: 993,607,585 (2.4M/s) in 6m43s cpu:16h19m39s gc:23s avg:145.8
0:09:31 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 1.7M/s ] rels: [ 211k 2% 20k/s ] features: [ 3.2B 4.3M/s ] 223G blocks: [ 42k 99% 34/s ]
cpus: 131 gc: 5% heap: 180G/214G direct: 58M postGC: 139G relInfo: 573M mpGeoms: 10G
read( 5%) -> (88/262) -> process(73% 73% 75% 56% 77% 58% 55% 63% 76% 53% 69% 72% 54% 60% 61% 76% 63% 76% 76% 76% 54% 76% 52% 55% 52% 59% 64% 60% 59% 62% 66% 79% 77% 48% 57% 57% 51% 61% 74% 58% 61% 76% 85% 80% 64% 62% 52% 72% 81% 75% 81% 71% 54% 70% 54% 57% 67% 71% 66% 77% 58% 63% 70% 77% 83% 63% 65% 49% 59% 61% 80% 76% 61% 74% 74% 67% 66% 74% 76% 75% 75% 86% 68% 73% 67% 52% 63% 71% 72% 56% 71% 75% 80% 58% 78% 73% 59% 71% 73% 77% 65% 70% 57% 60% 58% 70% 71% 76% 50% 61% 73% 62% 70% 69% 73% 72% 81% 68% 68% 71% 73% 78% 70% 78% 76% 70% 74% 68% 50% 76% 77% 80% 72% 72% 54% 71% 77% 88% 68% 71% 81% 65% 67% 63% 66% 52% 55% 60% 55% 75% 52% 61% 54% 69% 69% 58% 54% 78% 56% 73% 63% 63% 73% 75% 60% 70% 61% 75% 74% 66% 76% 51% 49% 74%) -> (85k/230k) -> write(56% 54% 55% 55% 54% 54%)
0:09:41 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 1.3M 11% 109k/s ] features: [ 3.2B 756k/s ] 223G blocks: [ 42k 99% <1/s ]
cpus: 168.8 gc: 5% heap: 155G/214G direct: 58M postGC: 112G relInfo: 573M mpGeoms: 10G
read( 0%) -> (88/262) -> process(93% 94% 94% 93% 91% 93% 93% 93% 93% 93% 92% 91% 94% 93% 90% 92% 92% 91% 93% 94% 92% 92% 93% 92% 93% 94% 92% 92% 92% 91% 93% 93% 93% 93% 92% 92% 93% 92% 90% 93% 93% 93% 91% 94% 93% 93% 94% 93% 91% 91% 93% 93% 93% 93% 92% 94% 92% 92% 94% 91% 92% 93% 93% 93% 92% 93% 94% 93% 92% 93% 93% 92% 92% 93% 93% 92% 90% 91% 92% 91% 92% 92% 92% 92% 93% 93% 90% 93% 91% 93% 92% 92% 92% 92% 93% 93% 92% 93% 91% 92% 92% 92% 93% 92% 92% 92% 90% 91% 92% 93% 90% 92% 92% 92% 93% 93% 93% 93% 93% 92% 93% 92% 94% 92% 92% 91% 93% 93% 93% 91% 93% 93% 93% 91% 92% 92% 92% 92% 93% 93% 92% 93% 93% 92% 93% 91% 92% 92% 92% 93% 93% 93% 90% 93% 91% 91% 93% 92% 93% 91% 93% 91% 92% 93% 93% 93% 93% 92% 91% 92% 91% 92% 93% 93%) -> (85k/230k) -> write( 9% 9% 9% 9% 9% 10%)
0:09:51 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 2.5M 21% 117k/s ] features: [ 3.2B 736k/s ] 224G blocks: [ 42k 99% <1/s ]
cpus: 170.3 gc: 3% heap: 170G/214G direct: 58M postGC: 112G relInfo: 573M mpGeoms: 10G
read( 0%) -> (88/262) -> process(94% 94% 95% 95% 94% 96% 94% 94% 95% 95% 95% 93% 94% 95% 93% 93% 94% 95% 93% 94% 95% 94% 96% 94% 94% 95% 95% 95% 95% 95% 94% 94% 93% 96% 95% 94% 95% 93% 94% 95% 94% 95% 94% 95% 94% 92% 94% 94% 94% 92% 93% 94% 94% 94% 95% 93% 92% 93% 95% 92% 94% 94% 92% 94% 94% 95% 94% 93% 95% 92% 95% 93% 93% 94% 93% 93% 95% 95% 94% 94% 94% 94% 94% 95% 95% 94% 94% 95% 95% 95% 95% 93% 96% 93% 95% 95% 95% 94% 95% 95% 95% 95% 94% 94% 95% 93% 93% 95% 95% 95% 95% 94% 94% 94% 95% 95% 95% 94% 94% 94% 94% 94% 94% 94% 93% 94% 93% 94% 96% 93% 93% 94% 94% 94% 94% 94% 94% 95% 95% 92% 95% 94% 94% 94% 94% 94% 94% 93% 92% 95% 94% 95% 96% 94% 95% 94% 95% 96% 95% 95% 94% 94% 94% 94% 92% 93% 95% 93% 94% 92% 95% 94% 95% 95%) -> (86k/230k) -> write(10% 10% 10% 9% 12% 9%)
0:10:01 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 3.7M 32% 119k/s ] features: [ 3.2B 899k/s ] 225G blocks: [ 42k 99% 1/s ]
cpus: 170.5 gc: 2% heap: 117G/214G direct: 58M postGC: 112G relInfo: 573M mpGeoms: 10G
read( 0%) -> (88/262) -> process(96% 95% 95% 95% 94% 96% 96% 94% 95% 94% 95% 95% 95% 96% 95% 96% 93% 94% 93% 94% 94% 92% 95% 94% 95% 94% 96% 95% 93% 94% 95% 94% 95% 93% 95% 94% 94% 93% 96% 94% 95% 95% 95% 94% 95% 95% 95% 95% 95% 94% 94% 96% 93% 95% 95% 95% 93% 95% 95% 95% 96% 95% 96% 95% 95% 94% 95% 94% 93% 95% 94% 95% 94% 95% 94% 94% 94% 94% 95% 96% 93% 94% 94% 94% 95% 93% 95% 95% 96% 94% 96% 95% 95% 96% 96% 95% 95% 96% 95% 95% 95% 96% 96% 94% 95% 95% 94% 96% 94% 96% 95% 95% 95% 96% 95% 93% 93% 95% 94% 96% 95% 94% 96% 95% 95% 95% 96% 96% 94% 94% 96% 91% 95% 96% 95% 95% 94% 96% 95% 95% 95% 95% 96% 95% 94% 94% 94% 95% 95% 95% 96% 94% 96% 96% 94% 95% 95% 94% 93% 94% 94% 95% 95% 94% 95% 93% 95% 95% 96% 94% 96% 95% 95% 95%) -> (89k/230k) -> write(11% 14% 11% 14% 12% 11%)
0:10:11 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 4.9M 42% 121k/s ] features: [ 3.2B 1.7M/s ] 230G blocks: [ 42k 99% 5/s ]
cpus: 168.3 gc: 3% heap: 146G/214G direct: 58M postGC: 143G relInfo: 573M mpGeoms: 10G
read( 1%) -> (88/262) -> process(94% 92% 94% 94% 94% 93% 95% 94% 95% 94% 93% 94% 94% 94% 95% 95% 95% 93% 95% 92% 94% 93% 94% 94% 93% 95% 93% 96% 93% 94% 92% 94% 92% 96% 94% 93% 94% 94% 93% 93% 93% 93% 92% 94% 94% 93% 91% 92% 92% 94% 93% 92% 95% 95% 92% 95% 93% 92% 94% 93% 92% 92% 95% 94% 95% 94% 94% 93% 94% 93% 94% 93% 92% 96% 92% 94% 95% 92% 92% 90% 93% 94% 94% 94% 95% 94% 94% 92% 91% 94% 95% 92% 93% 94% 93% 94% 93% 93% 93% 94% 95% 95% 93% 93% 93% 95% 95% 92% 93% 93% 93% 93% 94% 93% 93% 92% 94% 93% 94% 95% 94% 95% 91% 93% 93% 94% 94% 93% 93% 93% 93% 96% 93% 92% 95% 95% 90% 93% 93% 94% 93% 91% 93% 95% 93% 93% 93% 93% 95% 94% 94% 95% 94% 94% 94% 94% 93% 93% 95% 93% 95% 91% 94% 93% 93% 93% 91% 92% 95% 93% 93% 93% 95% 94%) -> (83k/230k) -> write(13% 14% 15% 14% 14% 16%)
0:10:21 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 6.1M 53% 122k/s ] features: [ 3.2B 1M/s ] 231G blocks: [ 42k 99% 4/s ]
cpus: 169.7 gc: 3% heap: 197G/214G direct: 54M postGC: 112G relInfo: 573M mpGeoms: 10G
read( -%) -> (69/262) -> process(95% 93% 95% 95% 95% 96% 95% 96% 96% 95% 94% 95% 96% 95% 95% 93% 95% 93% 95% 95% 95% 95% 95% 96% 96% 96% 96% 95% 95% 95% 95% 94% 96% 94% 96% 95% 95% 95% 95% 93% 94% 95% 95% 95% 96% 93% 96% 95% 95% 94% 95% 94% 94% 94% 94% 95% 95% 94% 95% 93% 95% 94% 95% 95% 96% 95% 95% 93% 95% 95% 94% 95% 95% 95% 95% 95% 93% 95% 95% 95% 94% 94% 94% 94% 94% 95% 96% 95% 95% 94% 96% 95% 95% 94% 95% 94% 94% 95% 95% 95% 95% 96% 95% 93% 94% 95% 96% 95% 96% 94% 95% 94% 93% 93% 96% 94% 94% 95% 95% 95% 94% 95% 95% 94% 95% 94% 95% 94% 94% 94% 95% 95% 94% 95% 95% 95% 94% 94% 94% 94% 94% 95% 95% 95% 95% 95% 95% 96% 95% 95% 94% 95% 94% 95% 95% 95% 94% 94% 96% 95% 95% 95% 94% 93% 95% 93% 95% 95% 96% 95% 95% 95% 95% 96%) -> (87k/230k) -> write(12% 10% 11% 10% 11% 11%)
0:10:31 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 7.5M 64% 136k/s ] features: [ 3.3B 1.4M/s ] 233G blocks: [ 42k 100% 3/s ]
cpus: 170.3 gc: 3% heap: 149G/214G direct: 54M postGC: 112G relInfo: 573M mpGeoms: 10G
read( -%) -> (33/262) -> process(94% 95% 95% 95% 94% 96% 94% 94% 95% 95% 95% 95% 94% 95% 94% 94% 94% 94% 93% 94% 94% 96% 95% 94% 93% 93% 96% 94% 94% 95% 95% 96% 94% 95% 94% 94% 95% 95% 93% 92% 93% 92% 94% 94% 95% 94% 94% 93% 93% 96% 94% 94% 94% 94% 95% 96% 94% 94% 94% 93% 95% 93% 92% 95% 95% 96% 92% 94% 94% 93% 95% 94% 95% 94% 95% 94% 94% 95% 95% 96% 94% 95% 92% 93% 94% 95% 94% 95% 93% 94% 93% 93% 95% 95% 96% 95% 94% 93% 94% 95% 95% 94% 95% 93% 93% 93% 94% 95% 95% 96% 94% 94% 93% 94% 92% 95% 93% 93% 95% 95% 94% 93% 95% 94% 96% 95% 95% 94% 94% 95% 95% 94% 94% 94% 95% 95% 92% 94% 94% 93% 94% 93% 95% 94% 95% 95% 93% 95% 95% 95% 92% 94% 95% 94% 94% 94% 94% 95% 94% 94% 95% 95% 95% 93% 93% 94% 95% 95% 95% 96% 94% 93% 95% 92%) -> (131k/230k) -> write(15% 16% 15% 15% 17% 14%)
0:10:42 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 8.9M 76% 139k/s ] features: [ 3.3B 1.1M/s ] 236G blocks: [ 43k 100% 3/s ]
cpus: 170.2 gc: 3% heap: 180G/214G direct: 54M postGC: 112G relInfo: 573M mpGeoms: 10G
read( -%) -> (0/262) -> process(95% 96% 95% 95% 95% 95% 96% 93% 96% 95% 94% 95% 94% 96% 94% 95% 95% 94% 96% 95% 94% 94% 94% 92% 96% 95% 95% 94% 94% 94% 94% 95% 95% 94% 93% 95% 95% 94% 94% 94% 94% 94% 95% 94% 93% 94% 95% 96% 95% 96% 96% 96% 95% 95% 94% 95% 96% 96% 96% 93% 96% 94% 95% 94% 94% 95% 95% 96% 95% 96% 95% 94% 95% 95% 94% 95% 94% 95% 93% 96% 94% 95% 95% 94% 95% 95% 95% 95% 94% 96% 95% 95% 95% 94% 94% 96% 96% 94% 95% 95% 95% 95% 96% 94% 95% 95% 95% 95% 94% 96% 93% 94% 93% 91% 93% 94% 95% 95% 95% 94% 95% 96% 94% 96% 95% 95% 95% 95% 95% 96% 95% 96% 95% 94% 95% 95% 94% 94% 94% 95% 95% 96% 94% 95% 94% 94% 94% 94% 95% 91% 96% 95% 95% 94% 95% 93% 94% 94% 95% 95% 95% 95% 95% 96% 96% 95% 94% 95% 95% 96% 95% 96% 95% 95%) -> (80k/230k) -> write(12% 13% 13% 16% 12% 12%)
0:10:52 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 10M 89% 140k/s ] features: [ 3.3B 811k/s ] 239G blocks: [ 43k 100% 5/s ]
cpus: 169.5 gc: 3% heap: 127G/214G direct: 54M postGC: 111G relInfo: 573M mpGeoms: 10G
read( -%) -> (0/262) -> process(95% 94% 95% 95% 95% 95% 95% 95% 93% 95% 95% 94% 95% 95% 92% 94% 94% 95% 94% 94% 96% 94% 94% 94% 95% 95% 95% 94% 96% 92% 95% 96% 96% 94% 95% 95% 95% 94% 95% 94% 93% 94% 95% 95% 96% 96% 95% 95% 94% 95% 94% 95% 94% 95% 95% 95% 93% 94% 93% 95% 94% 95% 95% 93% 94% 94% 95% 94% 95% 95% 94% 95% 95% 93% 91% 95% 93% 95% 95% 95% 94% 95% 93% 95% 95% 96% 95% 95% 96% 95% 94% 95% 94% 96% 94% 95% 95% 94% 95% 95% 93% 94% 93% 96% 94% 95% 95% 94% 93% 95% 94% 95% 94% 96% 95% 93% 95% 94% 96% 96% 93% 94% 95% 94% 95% 96% 95% 95% 96% 96% 96% 95% 95% 96% 94% 95% 96% 96% 93% 94% 95% 94% 93% 96% 96% 95% 94% 93% 93% 93% 95% 94% 95% 93% 95% 94% 95% 94% 94% 93% 93% 95% 94% 96% 94% 95% 95% 94% 94% 93% 95% 96% 95% 95%) -> (90k/230k) -> write(10% 10% 11% 10% 10% 12%)
0:11:02 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 11M 100% 128k/s ] features: [ 3.3B 641k/s ] 241G blocks: [ 43k 100% 10/s ]
cpus: 169.7 gc: 2% heap: 165G/214G direct: 54M postGC: 134G relInfo: 573M mpGeoms: 10G
read( -%) -> (0/262) -> process(95% 94% 96% 94% 96% 96% 96% 95% 95% 96% 94% 96% 95% 95% 96% 95% 96% 96% 95% 95% 94% 95% 95% 96% 95% 96% 96% 96% 95% 95% 94% 95% 96% 95% 95% 94% 96% 94% 95% 95% 95% 95% 94% 94% 96% 95% 95% 96% 95% 96% 96% 95% 96% 96% 95% 95% 95% 95% 95% 95% 94% 96% 95% 94% 95% 95% 95% 96% 95% 95% 95% 95% 96% 95% 95% 95% 95% 96% 95% 95% 95% 97% 96% 94% 94% 95% 94% 96% 94% 95% 95% 96% 96% 96% 95% 96% 93% 96% 94% 95% 95% 94% 94% 94% 95% 96% 95% 95% 95% 95% 96% 94% 96% 93% 95% 94% 94% 95% 95% 93% 95% 95% 95% 96% 95% 95% 95% 95% 95% 96% 96% 95% 95% 94% 96% 95% 94% 94% 94% 96% 95% 95% 95% 95% 95% 96% 95% 94% 94% 94% 95% 95% 95% 95% 96% 95% 95% 94% 94% 94% 94% 94% 94% 94% 96% 96% 95% 96% 95% 94% 96% 95% 95% 95%) -> (99k/230k) -> write(12% 9% 9% 9% 9% 9%)
0:11:04 INF [osm_pass2:process] - Finished relations: 11,749,466 (124k/s) in 1m34s cpu:4h22m23s gc:3s avg:166.7
0:11:06 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 993M 100% 0/s ] rels: [ 11M 100% 9.8k/s ] features: [ 3.3B 84k/s ] 233G blocks: [ 43k 100% 2/s ]
cpus: 16.4 gc: 0% heap: 137G/214G direct: 54M postGC: 110G relInfo: 573M mpGeoms: 10G
read( -%) -> (0/262) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/230k) -> write( -% -% -% -% -% -%)
0:11:06 DEB [osm_pass2] - Processed 43,182 blocks:
0:11:06 DEB [osm_pass2] - nodes: 8,876,780,887 (150M/s) in 59s cpu:2h6m27s gc:4s avg:128.3
0:11:06 DEB [osm_pass2] - ways: 993,607,585 (2.4M/s) in 6m43s cpu:16h19m39s gc:23s avg:145.8
0:11:06 DEB [osm_pass2] - relations: 11,749,466 (124k/s) in 1m34s cpu:4h22m23s gc:3s avg:166.7
0:11:06 INF [osm_pass2] - Finished in 9m19s cpu:22h48m33s gc:29s avg:147
0:11:06 INF [osm_pass2] - read 1x(11% 1m4s wait:7m20s done:49s)
0:11:06 INF [osm_pass2] - process 174x(76% 7m6s block:10s wait:1m6s done:2s)
0:11:06 INF [osm_pass2] - write 6x(70% 6m31s wait:2m6s)
0:11:06 INF [boundaries] -
0:11:06 INF [boundaries] - Starting...
0:11:06 INF [boundaries] - Creating polygons for 218 boundaries
0:11:10 INF [boundaries] - Finished creating 218 country polygons
0:11:11 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/54.19118/7.52130
0:11:11 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/54.61356/12.41358
0:11:13 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/50.01340/6.13601
0:11:13 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/49.77642/6.51023
0:11:14 WAR [boundaries] - no left or right country for border between OSM country relations: [51477, 16239] around https://www.openstreetmap.org/#map=10/47.38554/10.16937
0:11:14 WAR [boundaries] - no left or right country for border between OSM country relations: [51477, 16239] around https://www.openstreetmap.org/#map=10/47.67866/12.16969
0:11:14 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/53.42387/6.88641
0:11:14 INF [boundaries] - Finished in 8s cpu:10s avg:1.2
0:11:14 INF [agg_stop] -
0:11:14 INF [agg_stop] - Starting...
0:11:14 INF [agg_stop] - Processing 28687 agg_stop sets
0:11:14 INF [agg_stop] - Finished in 0.3s cpu:0.9s avg:3.4
0:11:14 INF - Deleting node.db to make room for output file
0:11:14 INF [sort] -
0:11:14 INF [sort] - Starting...
0:11:14 INF [sort] - Grouped 226 chunks into 205
0:11:25 INF [sort] - chunks: [ 19 / 205 9% ] 237G
cpus: 54.2 gc: 10% heap: 171G/214G direct: 54M postGC: 171G
-> (151/241) -> worker(20% 21% 17% 21% 18% 16% 19% 19% 14% 16% 17% 17% 16% 14% 16% 14% 15% 18% 14% 17% 14% 17% 5% 7% 14% 3% 3% 3% 3% 3% 0% 0% 0% 0% 0%)
0:11:35 INF [sort] - chunks: [ 37 / 205 18% ] 235G
cpus: 30.1 gc: 9% heap: 62G/214G direct: 54M postGC: 62G
-> (133/241) -> worker( 4% 13% 13% 14% 16% 2% 11% 0% 2% 16% 1% 0% 0% 4% 0% 0% 0% 0% 0% 0% 0% 0% 9% 8% 0% 14% 16% 14% 15% 13% 14% 16% 16% 16% 13%)
0:11:46 INF [sort] - chunks: [ 52 / 205 25% ] 237G
cpus: 27.1 gc: 5% heap: 91G/214G direct: 54M postGC: 91G
-> (118/241) -> worker(12% 0% 0% 0% 0% 15% 0% 11% 3% 0% 17% 17% 15% 13% 11% 17% 17% 11% 11% 4% 17% 16% 3% 3% 17% 0% 0% 2% 0% 0% 0% 0% 0% 0% 0%)
0:11:57 INF [sort] - chunks: [ 68 / 205 33% ] 234G
cpus: 26.2 gc: 4% heap: 34G/214G direct: 54M postGC: 34G
-> (102/241) -> worker( 0% 1% 4% 13% 3% 0% 0% 0% 14% 1% 0% 0% 0% 0% 0% 0% 0% 0% 0% 13% 0% 0% 13% 14% 0% 16% 16% 10% 14% 16% 16% 17% 16% 4% 17%)
0:12:08 INF [sort] - chunks: [ 85 / 205 41% ] 235G
cpus: 30 gc: 6% heap: 60G/214G direct: 54M postGC: 60G
-> (85/241) -> worker(14% 13% 14% 0% 13% 17% 17% 18% 0% 16% 18% 17% 17% 17% 11% 16% 11% 3% 17% 0% 4% 4% 1% 1% 4% 0% 0% 0% 0% 0% 0% 0% 0% 14% 0%)
0:12:20 INF [sort] - chunks: [ 101 / 205 49% ] 234G
cpus: 29.7 gc: 5% heap: 22G/214G direct: 54M postGC: 22G
-> (69/241) -> worker( 0% 1% 1% 2% 1% 0% 0% 0% 15% 0% 0% 0% 0% 0% 0% 0% 0% 13% 0% 15% 12% 13% 15% 14% 12% 13% 13% 15% 14% 13% 13% 16% 2% 0% 13%)
0:12:30 INF [sort] - chunks: [ 120 / 205 59% ] 234G
cpus: 34 gc: 7% heap: 58G/214G direct: 54M postGC: 58G
-> (50/241) -> worker(18% 17% 18% 18% 18% 17% 19% 18% 0% 15% 19% 17% 15% 13% 18% 3% 15% 1% 17% 0% 2% 2% 2% 0% 3% 0% 0% 0% 1% 0% 0% 0% 16% 19% 0%)
0:12:40 INF [sort] - chunks: [ 133 / 205 65% ] 234G
cpus: 28.9 gc: 5% heap: 42G/214G direct: 54M postGC: 34G
-> (37/241) -> worker( 0% 0% 2% 3% 0% 0% 0% 0% 18% 0% 0% 0% 0% 0% 0% 14% 0% 16% 0% 18% 15% 15% 15% 12% 14% 11% 4% 18% 4% 17% 19% 4% 0% 0% 4%)
0:12:51 INF [sort] - chunks: [ 146 / 205 71% ] 237G
cpus: 35.4 gc: 7% heap: 31G/214G direct: 54M postGC: 31G
-> (24/241) -> worker(17% 16% 15% 13% 18% 18% 17% 1% 0% 17% 1% 1% 17% 5% 1% 0% 4% 0% 17% 0% 0% 0% 0% 0% 0% 0% 14% 0% 14% 0% 0% 7% 16% 18% 14%)
0:13:02 INF [sort] - chunks: [ 163 / 205 80% ] 238G
cpus: 36.5 gc: 7% heap: 53G/214G direct: 54M postGC: 53G
-> (7/241) -> worker( 0% 0% 1% 2% 0% 0% 0% 11% 16% 0% 17% 12% 0% 11% 15% 17% 13% 17% 0% 16% 16% 17% 15% 14% 16% 5% 1% 13% 2% 16% 16% 3% 0% 0% 0%)
0:13:13 INF [sort] - chunks: [ 184 / 205 90% ] 236G
cpus: 41.5 gc: 7% heap: 48G/214G direct: 54M postGC: 40G
-> (0/241) -> worker( -% -% -% -% -% 14% -% 4% 0% -% 2% 4% -% 15% 13% 2% 16% 0% -% 0% 0% 0% 1% 0% 3% 10% -% 0% -% 0% 0% 14% -% -% -%)
0:13:20 INF [sort] - chunks: [ 205 / 205 100% ] 233G
cpus: 35 gc: 7% heap: 70G/214G direct: 54M postGC: 65G
-> (0/241) -> worker( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%)
0:13:20 INF [sort] - Finished in 2m5s cpu:1h10m52s gc:8s avg:33.9
0:13:20 INF [sort] - worker 35x(8% 10s wait:1m28s done:6s)
0:13:20 INF - read:737s write:355s sort:68s
0:13:20 INF [archive] -
0:13:20 INF [archive] - Starting...
0:13:22 INF [archive:write] - Starting z0
0:13:22 INF [archive:write] - Finished z0 in 0s cpu:0.7s avg:532.1, now starting z1
0:13:22 INF [archive:write] - Finished z1 in 0s cpu:0.1s avg:24.6, now starting z2
0:13:23 INF [archive:write] - Finished z2 in 0.3s cpu:40s avg:136.1, now starting z3
0:13:23 INF [archive:write] - Finished z3 in 0s cpu:3s avg:164, now starting z4
0:13:25 INF [archive:write] - Finished z4 in 2s cpu:4m54s avg:150.3, now starting z5
0:13:25 INF [archive:write] - Finished z5 in 0s cpu:3s avg:175.8, now starting z6
0:13:27 INF [archive:write] - Finished z6 in 2s cpu:6m15s avg:164.6, now starting z7
0:13:31 INF [archive] - features: [ 48M 1% 4.8M/s ] 233G tiles: [ 14k 1.4k/s ] 107M
cpus: 153 gc: 22% heap: 48G/214G direct: 54M postGC: 22G
read(69% 68%) -> merge(71%) -> (0/10k) -> encode(72% 72% 73% 72% 73% 73% 68% 73% 71% 72% 72% 73% 72% 73% 68% 72% 71% 72% 73% 71% 70% 71% 71% 71% 73% 72% 72% 72% 72% 72% 73% 72% 73% 72% 74% 73% 72% 70% 72% 71% 73% 72% 71% 70% 71% 71% 73% 70% 70% 71% 73% 71% 72% 73% 71% 68% 72% 71% 68% 70% 71% 71% 71% 72% 71% 69% 73% 72% 70% 73% 70% 71% 69% 70% 72% 69% 72% 71% 73% 67% 71% 70% 70% 68% 70% 70% 71% 73% 70% 66% 71% 70% 67% 70% 72% 69% 71% 70% 69% 71% 69% 69% 67% 69% 67% 70% 71% 69% 72% 71% 71% 70% 70% 70% 67% 71% 70% 69% 71% 68% 67% 67% 70% 68% 69% 71% 70% 69% 69% 69% 70% 70% 68% 68% 67% 69% 70% 69% 68% 68% 68% 68% 70% 71% 68% 69% 67% 68% 68% 68% 70% 69% 67% 69% 70% 69% 68% 70% 70% 68% 69% 70% 69% 67% 66% 68% 74% 68% 69% 68% 68% 68% 67% 68% 67% 65% 66% 66%) -> (1.4k/10k) -> write( 2%)
last tile: 7/77/41 (z7 85%) https://onthegomap.github.io/planetiler-demo/#7.5/53.32261/37.96875
0:13:31 INF [archive:write] - Finished z7 in 4s cpu:10m47s avg:151.7, now starting z8
0:13:38 INF [archive:write] - Finished z8 in 7s cpu:17m34s avg:154.4, now starting z9
0:13:41 INF [archive] - features: [ 111M 3% 6.1M/s ] 233G tiles: [ 122k 10k/s ] 611M
cpus: 137.7 gc: 10% heap: 42G/214G direct: 54M postGC: 27G
read(87% 89%) -> merge(88%) -> (0/10k) -> encode(72% 71% 64% 68% 71% 74% 70% 77% 76% 69% 73% 85% 65% 66% 68% 69% 69% 70% 72% 70% 68% 68% 70% 72% 70% 72% 74% 73% 71% 71% 71% 66% 73% 74% 68% 70% 65% 69% 70% 70% 73% 71% 76% 77% 73% 70% 61% 68% 72% 63% 69% 71% 64% 58% 66% 73% 69% 70% 68% 71% 66% 70% 69% 74% 62% 76% 64% 67% 61% 72% 60% 70% 74% 68% 68% 66% 73% 75% 67% 69% 70% 69% 69% 66% 64% 72% 69% 72% 73% 72% 73% 74% 66% 74% 66% 76% 72% 71% 73% 73% 71% 73% 73% 66% 60% 70% 74% 70% 75% 71% 65% 77% 71% 71% 66% 70% 72% 69% 73% 72% 64% 73% 72% 66% 72% 67% 65% 76% 69% 75% 67% 68% 73% 67% 71% 70% 73% 64% 72% 68% 64% 68% 75% 75% 70% 63% 69% 67% 65% 69% 73% 68% 64% 76% 66% 74% 70% 74% 73% 71% 75% 70% 83% 71% 67% 70% 74% 67% 71% 72% 63% 68% 66% 64% 68% 65% 74% 73%) -> (2.7k/10k) -> write( 5%)
last tile: 9/123/172 (z9 21%) https://onthegomap.github.io/planetiler-demo/#9.5/50.5129/-93.16406
0:13:45 INF [archive:write] - Finished z9 in 7s cpu:16m22s avg:145.3, now starting z10
0:13:51 INF [archive] - features: [ 175M 5% 6.3M/s ] 233G tiles: [ 495k 37k/s ] 1.6G
cpus: 138.2 gc: 6% heap: 102G/214G direct: 54M postGC: 31G
read(92% 89%) -> merge(90%) -> (4/10k) -> encode(71% 76% 76% 72% 73% 76% 69% 66% 70% 69% 71% 75% 72% 70% 73% 72% 71% 71% 73% 71% 74% 73% 73% 72% 74% 72% 73% 71% 72% 72% 74% 77% 73% 69% 71% 74% 76% 68% 70% 73% 70% 72% 71% 73% 73% 70% 74% 70% 71% 73% 73% 71% 72% 72% 73% 70% 73% 71% 76% 71% 70% 72% 73% 73% 69% 73% 73% 75% 92% 72% 74% 76% 75% 76% 91% 70% 75% 73% 72% 74% 71% 71% 74% 72% 74% 71% 72% 70% 67% 73% 72% 76% 71% 73% 69% 72% 72% 76% 72% 72% 68% 71% 75% 73% 69% 72% 73% 91% 73% 68% 69% 72% 72% 73% 68% 69% 74% 74% 70% 71% 74% 78% 69% 71% 73% 72% 70% 73% 75% 70% 70% 70% 71% 76% 73% 73% 66% 71% 69% 74% 74% 69% 71% 72% 73% 74% 71% 71% 75% 70% 72% 72% 68% 72% 72% 71% 76% 70% 75% 73% 71% 73% 71% 71% 74% 70% 72% 76% 69% 72% 72% 73% 72% 74% 73% 72% 69% 78%) -> (4.9k/10k) -> write(12%)
last tile: 10/172/399 (z10 20%) https://onthegomap.github.io/planetiler-demo/#10.5/36.73875/-119.35547
0:14:00 INF [archive:write] - Finished z10 in 15s cpu:22m36s gc:1s avg:89.8, now starting z11
0:14:01 INF [archive] - features: [ 238M 7% 6.2M/s ] 233G tiles: [ 2.7M 223k/s ] 3.8G
cpus: 70.8 gc: 7% heap: 142G/214G direct: 54M postGC: 42G
read(65% 59%) -> merge(67%) -> (0/10k) -> encode(32% 32% 33% 31% 34% 34% 32% 35% 33% 30% 33% 30% 35% 35% 51% 34% 37% 32% 36% 34% 33% 35% 33% 34% 40% 35% 33% 34% 31% 36% 32% 32% 35% 34% 31% 34% 32% 35% 34% 30% 54% 33% 33% 31% 33% 33% 34% 34% 31% 36% 58% 34% 31% 32% 31% 36% 31% 34% 36% 33% 33% 32% 37% 34% 34% 32% 33% 39% 39% 29% 39% 35% 35% 33% 32% 35% 34% 31% 37% 37% 30% 33% 38% 32% 39% 32% 30% 31% 34% 33% 36% 37% 32% 31% 31% 39% 34% 34% 33% 33% 35% 34% 36% 31% 36% 35% 33% 81% 35% 28% 42% 32% 32% 30% 38% 32% 30% 34% 35% 35% 31% 32% 33% 31% 33% 33% 32% 33% 33% 36% 31% 33% 31% 36% 34% 33% 38% 33% 30% 35% 36% 32% 32% 32% 35% 33% 34% 32% 37% 33% 41% 32% 29% 29% 39% 36% 31% 29% 48% 36% 36% 34% 35% 34% 31% 50% 33% 36% 39% 35% 37% 36% 34% 34% 30% 38% 33% 30%) -> (3.9k/10k) -> write(20%)
last tile: 11/662/1245 (z11 47%) https://onthegomap.github.io/planetiler-demo/#11.5/-36.24424/-63.54492
0:14:06 INF [archive:write] - Finished z11 in 6s cpu:8m32s avg:88.6, now starting z12
0:14:11 INF [archive] - features: [ 335M 10% 9.6M/s ] 233G tiles: [ 7.6M 485k/s ] 7.7G
cpus: 88.4 gc: 4% heap: 48G/214G direct: 54M postGC: 36G
read(88% 95%) -> merge(93%) -> (0/10k) -> encode(44% 48% 49% 42% 49% 48% 49% 44% 49% 42% 47% 42% 48% 44% 46% 49% 41% 42% 49% 47% 46% 47% 49% 46% 48% 47% 44% 41% 44% 48% 44% 45% 42% 46% 46% 46% 49% 46% 47% 44% 47% 49% 45% 44% 44% 45% 47% 43% 45% 41% 45% 47% 45% 45% 46% 46% 46% 41% 45% 44% 45% 46% 44% 42% 45% 49% 44% 52% 45% 43% 50% 41% 44% 47% 45% 43% 45% 48% 42% 47% 46% 43% 46% 46% 47% 48% 47% 48% 46% 45% 47% 49% 44% 48% 47% 47% 44% 47% 50% 47% 42% 46% 51% 45% 46% 44% 46% 43% 48% 43% 43% 47% 47% 47% 48% 46% 43% 48% 44% 47% 48% 45% 43% 43% 47% 46% 44% 47% 47% 40% 45% 49% 49% 47% 49% 46% 47% 44% 47% 45% 45% 48% 48% 47% 41% 48% 45% 44% 46% 44% 48% 48% 47% 44% 48% 45% 41% 43% 44% 44% 44% 40% 42% 41% 48% 46% 44% 46% 46% 49% 46% 44% 48% 43% 43% 48% 47% 50%) -> (912/10k) -> write(45%)
last tile: 12/686/1597 (z12 20%) https://onthegomap.github.io/planetiler-demo/#12.5/36.77408/-119.66309
0:14:21 INF [archive] - features: [ 448M 13% 11M/s ] 233G tiles: [ 14M 709k/s ] 10G
cpus: 66.1 gc: 2% heap: 75G/214G direct: 54M postGC: 36G
read(97% 94%) -> merge(94%) -> (0/10k) -> encode(32% 35% 36% 33% 32% 37% 33% 35% 35% 34% 36% 38% 32% 32% 32% 34% 36% 32% 37% 35% 35% 33% 34% 33% 34% 34% 34% 33% 32% 33% 36% 34% 31% 30% 35% 33% 36% 31% 31% 33% 33% 34% 34% 33% 42% 34% 35% 32% 34% 31% 32% 33% 34% 35% 30% 32% 34% 30% 31% 35% 32% 39% 30% 34% 31% 40% 38% 33% 36% 32% 30% 32% 37% 33% 35% 33% 40% 35% 31% 33% 34% 33% 35% 40% 34% 34% 33% 31% 36% 37% 34% 35% 34% 32% 33% 33% 31% 35% 36% 32% 40% 31% 36% 34% 33% 38% 37% 38% 37% 34% 34% 35% 31% 32% 35% 33% 31% 34% 32% 32% 33% 36% 37% 34% 31% 34% 33% 31% 38% 32% 40% 35% 35% 34% 31% 34% 32% 38% 33% 33% 34% 31% 33% 33% 35% 33% 35% 34% 35% 40% 41% 33% 33% 35% 30% 33% 40% 34% 32% 31% 36% 40% 37% 32% 34% 35% 33% 36% 31% 31% 36% 33% 34% 33% 35% 36% 32% 34%) -> (1.2k/10k) -> write(43%)
last tile: 12/3026/1762 (z12 82%) https://onthegomap.github.io/planetiler-demo/#12.5/24.32707/86.00098
0:14:31 INF [archive] - features: [ 541M 16% 9.2M/s ] 233G tiles: [ 15M 73k/s ] 13G
cpus: 65.5 gc: 2% heap: 88G/214G direct: 54M postGC: 37G
read(98% 79%) -> merge(87%) -> (829/10k) -> encode(38% 36% 36% 30% 35% 36% 33% 34% 35% 37% 36% 35% 33% 36% 34% 30% 35% 31% 34% 36% 34% 35% 33% 34% 35% 34% 32% 38% 34% 38% 33% 31% 41% 35% 27% 35% 36% 34% 35% 34% 37% 36% 36% 33% 37% 37% 38% 35% 36% 34% 34% 38% 36% 35% 32% 35% 31% 37% 33% 35% 36% 28% 36% 33% 39% 34% 35% 33% 39% 34% 38% 35% 36% 39% 34% 35% 35% 33% 33% 33% 30% 33% 33% 35% 37% 36% 35% 35% 32% 33% 34% 32% 31% 31% 36% 32% 36% 36% 31% 34% 31% 36% 29% 33% 32% 32% 33% 35% 31% 34% 38% 37% 37% 34% 37% 31% 34% 34% 31% 31% 33% 35% 33% 35% 35% 38% 34% 34% 32% 32% 36% 34% 38% 34% 31% 36% 36% 36% 31% 31% 33% 39% 30% 35% 37% 33% 30% 29% 37% 34% 32% 32% 35% 36% 35% 32% 32% 32% 34% 35% 33% 34% 35% 36% 31% 38% 35% 36% 35% 36% 34% 32% 32% 30% 37% 35% 33% 37%) -> (1.6k/10k) -> write(27%)
last tile: 12/2771/1512 (z12 87%) https://onthegomap.github.io/planetiler-demo/#12.5/42.52069/63.58887
0:14:32 INF [archive:write] - Finished z12 in 26s cpu:30m avg:68.2, now starting z13
0:14:41 INF [archive] - features: [ 593M 18% 5.1M/s ] 233G tiles: [ 25M 1M/s ] 14G
cpus: 135.3 gc: 9% heap: 76G/214G direct: 54M postGC: 44G
read(82% 78%) -> merge(86%) -> (4k/10k) -> encode(69% 71% 67% 68% 71% 69% 69% 70% 70% 69% 70% 69% 70% 70% 71% 70% 69% 66% 71% 69% 70% 69% 69% 70% 69% 70% 69% 69% 68% 70% 70% 68% 70% 70% 70% 70% 70% 69% 68% 68% 70% 70% 70% 69% 70% 68% 70% 69% 69% 70% 69% 68% 70% 69% 69% 69% 69% 69% 72% 69% 66% 69% 70% 72% 68% 69% 71% 68% 70% 69% 70% 70% 70% 70% 70% 70% 68% 70% 70% 70% 69% 68% 69% 69% 70% 70% 69% 69% 69% 67% 70% 69% 69% 69% 69% 70% 70% 70% 69% 70% 71% 70% 70% 70% 70% 70% 70% 69% 70% 67% 69% 70% 67% 68% 68% 69% 69% 70% 69% 68% 68% 69% 69% 71% 69% 70% 69% 70% 70% 69% 69% 70% 70% 69% 69% 70% 67% 71% 69% 69% 69% 69% 69% 70% 70% 71% 70% 67% 68% 69% 71% 69% 71% 69% 70% 69% 70% 70% 67% 69% 69% 69% 65% 66% 69% 69% 69% 69% 69% 71% 69% 68% 68% 69% 70% 69% 70% 70%) -> (6.6k/10k) -> write(33%)
last tile: 13/2421/2930 (z13 13%) https://onthegomap.github.io/planetiler-demo/#13.5/45.50634/-73.58643
0:14:51 INF [archive] - features: [ 623M 19% 2.9M/s ] 233G tiles: [ 26M 121k/s ] 15G
cpus: 168.1 gc: 12% heap: 79G/214G direct: 54M postGC: 49G
read(65% 67%) -> merge(77%) -> (8.1k/10k) -> encode(87% 87% 86% 85% 87% 87% 87% 85% 85% 87% 86% 87% 86% 86% 87% 86% 86% 85% 87% 87% 87% 86% 87% 87% 87% 87% 86% 87% 87% 84% 87% 85% 87% 87% 87% 87% 86% 86% 87% 85% 86% 87% 87% 86% 87% 87% 87% 87% 86% 87% 87% 87% 87% 87% 87% 86% 87% 86% 87% 86% 86% 87% 86% 87% 86% 86% 87% 85% 86% 87% 87% 87% 82% 86% 86% 86% 85% 87% 87% 86% 86% 86% 86% 87% 87% 87% 87% 86% 86% 85% 87% 85% 86% 86% 85% 85% 87% 87% 85% 83% 87% 83% 85% 86% 87% 86% 87% 87% 86% 86% 87% 86% 87% 87% 87% 86% 82% 87% 87% 86% 86% 85% 86% 87% 86% 87% 87% 87% 86% 87% 86% 87% 86% 87% 87% 86% 87% 86% 86% 87% 87% 87% 86% 87% 86% 86% 86% 86% 86% 87% 85% 87% 87% 84% 86% 86% 86% 86% 86% 87% 87% 87% 87% 87% 85% 87% 87% 86% 87% 87% 86% 87% 86% 86% 86% 87% 86% 87%) -> (9k/10k) -> write(17%)
last tile: 13/4090/2723 (z13 15%) https://onthegomap.github.io/planetiler-demo/#13.5/51.52241/-0.2417
0:15:01 INF [archive] - features: [ 654M 20% 3M/s ] 233G tiles: [ 26M 6.3k/s ] 15G
cpus: 168.8 gc: 12% heap: 71G/214G direct: 54M postGC: 55G
read(36% 33%) -> merge(48%) -> (8k/10k) -> encode(87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 85% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 85% 87% 87% 87% 87% 87% 87% 85% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87%) -> (10k/10k) -> write( 2%)
last tile: 13/4083/2952 (z13 15%) https://onthegomap.github.io/planetiler-demo/#13.5/44.82471/-0.54932
0:15:12 INF [archive] - features: [ 680M 20% 2.5M/s ] 233G tiles: [ 27M 91k/s ] 15G
cpus: 169.7 gc: 10% heap: 176G/214G direct: 54M postGC: 59G
read(27% 26%) -> merge(34%) -> (7.9k/10k) -> encode(88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 89% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 89% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 86% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 87% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88%) -> (10k/10k) -> write( 8%)
last tile: 13/4059/3812 (z13 17%) https://onthegomap.github.io/planetiler-demo/#13.5/12.36147/-1.604
0:15:22 INF [archive] - features: [ 724M 22% 4.3M/s ] 233G tiles: [ 28M 104k/s ] 16G
cpus: 170.7 gc: 9% heap: 127G/214G direct: 54M postGC: 27G
read(30% 28%) -> merge(36%) -> (5.5k/10k) -> encode(91% 90% 90% 92% 90% 87% 88% 92% 91% 90% 91% 90% 91% 92% 91% 90% 90% 92% 91% 89% 92% 92% 91% 91% 90% 89% 92% 89% 90% 92% 91% 90% 90% 91% 90% 90% 90% 91% 91% 89% 91% 91% 90% 89% 91% 89% 85% 90% 92% 92% 91% 91% 88% 90% 90% 89% 92% 89% 89% 88% 91% 91% 92% 92% 91% 89% 91% 89% 89% 85% 91% 91% 91% 90% 91% 92% 89% 91% 91% 87% 91% 91% 91% 91% 91% 92% 90% 91% 87% 91% 92% 90% 91% 89% 90% 89% 91% 90% 91% 91% 92% 91% 88% 90% 91% 87% 90% 91% 91% 91% 89% 90% 91% 90% 89% 89% 88% 92% 91% 91% 88% 91% 89% 91% 90% 89% 91% 91% 91% 91% 91% 92% 91% 88% 92% 92% 90% 91% 92% 90% 91% 90% 91% 91% 90% 92% 88% 91% 92% 92% 90% 92% 90% 90% 89% 90% 90% 89% 89% 89% 88% 91% 91% 88% 91% 89% 92% 87% 91% 91% 92% 89% 91% 90% 90% 91% 91% 92%) -> (8.4k/10k) -> write(10%)
last tile: 13/2270/3104 (z13 18%) https://onthegomap.github.io/planetiler-demo/#13.5/39.89288/-80.22217
0:15:32 INF [archive] - features: [ 758M 23% 3.2M/s ] 233G tiles: [ 29M 26k/s ] 16G
cpus: 169.6 gc: 11% heap: 109G/214G direct: 54M postGC: 36G
read(41% 40%) -> merge(66%) -> (5.8k/10k) -> encode(88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88% 88% 88% 88% 87% 87% 87% 88% 88% 88% 85% 88% 86% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 87% 88% 88% 88% 88% 87% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 87% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 87% 87% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 87% 87% 86% 88% 88% 88% 88% 88% 88% 88% 86% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88% 88%) -> (8.9k/10k) -> write( 7%)
last tile: 13/2393/3846 (z13 19%) https://onthegomap.github.io/planetiler-demo/#13.5/10.89804/-74.81689
0:15:42 INF [archive] - features: [ 790M 24% 3.1M/s ] 233G tiles: [ 30M 85k/s ] 16G
cpus: 168.8 gc: 11% heap: 54G/214G direct: 54M postGC: 38G
read(11% 11%) -> merge(25%) -> (7.7k/10k) -> encode(88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88%) -> (10k/10k) -> write( 7%)
last tile: 13/1430/3312 (z13 20%) https://onthegomap.github.io/planetiler-demo/#13.5/32.52829/-117.13623
0:15:52 INF [archive] - features: [ 847M 25% 5.5M/s ] 233G tiles: [ 40M 1M/s ] 18G
cpus: 110.5 gc: 6% heap: 72G/214G direct: 54M postGC: 44G
read(12% 9%) -> merge(15%) -> (15/10k) -> encode(61% 60% 62% 62% 57% 70% 59% 57% 60% 59% 55% 58% 60% 58% 59% 58% 59% 58% 58% 58% 59% 59% 60% 57% 58% 57% 60% 58% 62% 60% 61% 56% 59% 58% 58% 57% 56% 58% 57% 58% 60% 61% 60% 60% 59% 59% 59% 58% 57% 58% 63% 56% 56% 59% 56% 57% 59% 62% 62% 55% 61% 59% 57% 62% 58% 61% 55% 59% 56% 60% 59% 59% 59% 60% 62% 57% 56% 58% 57% 59% 57% 62% 60% 59% 56% 60% 57% 55% 56% 59% 61% 58% 60% 57% 57% 59% 59% 59% 59% 61% 60% 55% 58% 57% 56% 59% 62% 59% 57% 56% 57% 60% 61% 61% 59% 60% 58% 61% 57% 56% 60% 56% 57% 59% 58% 56% 57% 58% 63% 55% 58% 56% 56% 56% 56% 62% 63% 57% 57% 60% 59% 57% 59% 59% 58% 57% 58% 55% 57% 59% 58% 57% 59% 55% 56% 59% 59% 61% 58% 60% 60% 58% 57% 58% 58% 60% 58% 61% 57% 61% 57% 58% 59% 59% 61% 55% 59% 57%) -> (2.8k/10k) -> write(33%)
last tile: 13/3645/5644 (z13 44%) https://onthegomap.github.io/planetiler-demo/#13.5/-56.0843/-19.79736
0:16:02 INF [archive] - features: [ 884M 26% 3.6M/s ] 233G tiles: [ 43M 276k/s ] 18G
cpus: 169.6 gc: 11% heap: 123G/214G direct: 54M postGC: 51G
read(41% 43%) -> merge(70%) -> (1.7k/10k) -> encode(88% 88% 88% 87% 87% 88% 88% 88% 87% 88% 87% 87% 87% 88% 87% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 87% 88% 87% 88% 88% 88% 87% 88% 87% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 87% 88% 87% 88% 88% 87% 86% 88% 87% 88% 87% 88% 87% 87% 88% 88% 88% 87% 88% 87% 88% 88% 88% 87% 88% 87% 88% 87% 88% 88% 86% 88% 87% 87% 87% 86% 87% 86% 87% 88% 88% 87% 88% 88% 88% 87% 88% 88% 87% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 87% 88% 88% 86% 88% 87% 88% 87% 86% 88% 88% 87% 88% 88% 88% 87% 88% 88% 87% 87% 88% 87% 88% 87% 86% 87% 88% 87% 88% 88% 87% 88% 87% 87% 86% 87% 88% 87% 87% 88% 88% 88% 88% 88% 88% 87% 87% 88% 88% 87% 88% 87% 88% 88% 88% 88% 87% 86% 87% 87% 88% 88% 88% 87% 88% 88%) -> (7.1k/10k) -> write( 6%)
last tile: 13/3040/4647 (z13 47%) https://onthegomap.github.io/planetiler-demo/#13.5/-23.54384/-46.38428
0:16:13 INF [archive] - features: [ 907M 27% 2.3M/s ] 233G tiles: [ 43M 78k/s ] 19G
cpus: 168.9 gc: 12% heap: 74G/214G direct: 54M postGC: 55G
read(36% 36%) -> merge(44%) -> (3.8k/10k) -> encode(88% 88% 87% 88% 88% 87% 88% 88% 88% 86% 88% 87% 87% 87% 87% 88% 88% 87% 88% 87% 87% 87% 87% 87% 88% 87% 87% 88% 86% 87% 87% 87% 87% 87% 87% 86% 88% 87% 88% 87% 86% 88% 87% 87% 87% 87% 87% 88% 87% 87% 88% 86% 86% 87% 87% 87% 87% 88% 87% 87% 88% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 88% 88% 86% 87% 88% 88% 87% 87% 87% 87% 88% 87% 87% 86% 87% 88% 88% 88% 87% 87% 88% 87% 87% 87% 87% 88% 87% 87% 88% 87% 87% 87% 87% 87% 87% 87% 87% 87% 84% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 88% 87% 87% 88% 87% 87% 86% 85% 87% 87% 88% 87% 88% 87% 87% 87% 87% 85% 87% 88% 87% 87% 87% 87% 87% 88% 87% 87% 87% 87% 87% 86% 87% 87% 88% 87% 87% 87% 87% 87% 86% 87% 88% 87% 87% 87% 88% 87% 87% 87% 87% 87%) -> (9.3k/10k) -> write(18%)
last tile: 13/3034/4578 (z13 48%) https://onthegomap.github.io/planetiler-demo/#13.5/-20.73556/-46.64795
0:16:23 INF [archive] - features: [ 932M 28% 2.4M/s ] 233G tiles: [ 44M 17k/s ] 19G
cpus: 170.1 gc: 9% heap: 130G/214G direct: 54M postGC: 24G
read( 3% 3%) -> merge( 5%) -> (3.4k/10k) -> encode(89% 90% 88% 88% 90% 90% 90% 90% 90% 87% 90% 88% 89% 90% 89% 90% 89% 90% 90% 90% 90% 90% 89% 90% 89% 90% 87% 90% 90% 88% 89% 87% 89% 90% 88% 88% 87% 89% 88% 90% 89% 89% 89% 89% 89% 90% 90% 89% 90% 89% 88% 90% 90% 90% 87% 90% 90% 88% 88% 86% 90% 90% 89% 88% 90% 90% 88% 90% 89% 90% 89% 86% 87% 87% 90% 88% 90% 90% 90% 88% 90% 89% 88% 86% 90% 89% 87% 88% 89% 90% 90% 88% 89% 90% 87% 89% 90% 88% 89% 90% 90% 89% 87% 89% 86% 89% 90% 88% 88% 89% 88% 90% 88% 90% 88% 90% 88% 90% 89% 89% 90% 90% 90% 90% 90% 88% 88% 89% 90% 90% 88% 88% 89% 90% 88% 87% 90% 90% 90% 88% 90% 90% 89% 90% 90% 90% 90% 90% 87% 89% 88% 90% 90% 87% 90% 89% 89% 89% 90% 90% 88% 90% 90% 90% 90% 88% 89% 89% 88% 90% 90% 90% 90% 89% 89% 90% 88% 90%) -> (10k/10k) -> write( 5%)
last tile: 13/3219/4181 (z13 49%) https://onthegomap.github.io/planetiler-demo/#13.5/-3.75463/-38.51807
0:16:33 INF [archive] - features: [ 965M 29% 3.2M/s ] 233G tiles: [ 46M 190k/s ] 19G
cpus: 165.5 gc: 9% heap: 72G/214G direct: 54M postGC: 31G
read(31% 29%) -> merge(39%) -> (2.1k/10k) -> encode(90% 86% 90% 90% 88% 87% 87% 91% 87% 85% 86% 88% 87% 86% 85% 87% 85% 89% 84% 90% 86% 85% 87% 86% 89% 86% 87% 87% 91% 89% 88% 87% 89% 89% 86% 87% 88% 84% 85% 87% 88% 91% 89% 85% 85% 85% 84% 85% 90% 85% 85% 89% 86% 86% 87% 88% 88% 88% 86% 87% 90% 88% 87% 87% 88% 91% 87% 87% 88% 87% 91% 90% 87% 85% 88% 88% 89% 87% 87% 86% 88% 87% 87% 91% 89% 87% 87% 86% 87% 88% 90% 88% 91% 87% 87% 89% 88% 87% 90% 87% 85% 86% 87% 87% 87% 87% 85% 88% 91% 89% 86% 86% 88% 91% 87% 87% 85% 86% 87% 87% 86% 89% 88% 86% 89% 86% 89% 87% 87% 87% 87% 88% 91% 87% 87% 84% 88% 89% 85% 86% 87% 85% 89% 88% 87% 87% 87% 86% 86% 86% 87% 86% 85% 86% 85% 84% 88% 86% 85% 91% 87% 88% 86% 87% 90% 86% 86% 91% 88% 87% 86% 89% 85% 90% 90% 88% 88% 88%) -> (10k/10k) -> write(17%)
last tile: 13/4987/4252 (z13 52%) https://onthegomap.github.io/planetiler-demo/#13.5/-6.86098/39.17725
0:16:43 INF [archive] - features: [ 980M 29% 1.4M/s ] 233G tiles: [ 53M 702k/s ] 20G
cpus: 169.1 gc: 12% heap: 121G/214G direct: 54M postGC: 36G
read(25% 27%) -> merge(32%) -> (4.1k/10k) -> encode(88% 88% 88% 88% 88% 88% 88% 87% 87% 87% 88% 85% 88% 86% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 87% 87% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 87% 88% 87% 88% 88% 87% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 84% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 85% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 87% 88% 85% 86% 88% 88% 88% 88% 88% 87% 86% 88% 88% 88% 88% 88% 88% 87% 88% 86% 86% 88% 88% 87% 87% 88% 85% 88% 88% 88% 88% 86% 87% 86% 88% 88% 88% 88% 88% 88% 88% 88%) -> (5.4k/10k) -> write(18%)
last tile: 13/6526/4240 (z13 73%) https://onthegomap.github.io/planetiler-demo/#13.5/-6.33714/106.80908
0:16:53 INF [archive] - features: [ 999M 30% 1.9M/s ] 233G tiles: [ 53M 1.3k/s ] 20G
cpus: 168.2 gc: 13% heap: 48G/214G direct: 54M postGC: 43G
read(51% 51%) -> merge(69%) -> (9.1k/10k) -> encode(86% 86% 86% 86% 86% 86% 83% 86% 86% 86% 86% 86% 86% 83% 86% 86% 86% 86% 86% 84% 86% 84% 84% 86% 86% 86% 86% 86% 85% 86% 86% 84% 85% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 85% 86% 86% 85% 86% 85% 86% 85% 86% 86% 86% 86% 86% 86% 86% 86% 86% 83% 86% 86% 86% 85% 86% 86% 84% 85% 85% 85% 86% 86% 86% 86% 86% 86% 85% 86% 86% 86% 86% 86% 86% 86% 86% 85% 86% 86% 86% 86% 86% 86% 86% 86% 84% 86% 86% 86% 85% 86% 86% 86% 86% 86% 83% 86% 84% 86% 84% 86% 85% 86% 86% 86% 86% 85% 86% 86% 85% 83% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 84% 86% 85% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 86% 84% 86% 86% 86% 86% 86% 86% 86% 83% 85% 86% 86% 86% 86% 86% 86% 86% 86% 86%) -> (10k/10k) -> write( 1%)
last tile: 13/6607/4275 (z13 73%) https://onthegomap.github.io/planetiler-demo/#13.5/-7.86338/110.36865
0:17:03 INF [archive] - features: [ 1B 31% 2.7M/s ] 233G tiles: [ 53M 7.7k/s ] 20G
cpus: 169.1 gc: 10% heap: 107G/214G direct: 54M postGC: 46G
read(13% 14%) -> merge(18%) -> (6.6k/10k) -> encode(89% 89% 89% 89% 89% 88% 89% 89% 89% 88% 89% 88% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 88% 89% 89% 88% 88% 89% 88% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 88% 88% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 88% 89% 89% 88% 89% 89% 89% 89% 89% 88% 89% 89% 89% 88% 88% 88% 88% 87% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 88% 87% 89% 89% 89% 88% 88% 89% 89% 88% 89% 88% 89% 89% 89% 89% 89% 89% 87% 89% 89% 87% 89% 87% 88%) -> (10k/10k) -> write( 2%)
last tile: 13/6660/4261 (z13 73%) https://onthegomap.github.io/planetiler-demo/#13.5/-7.2535/112.69775
0:17:14 INF [archive] - features: [ 1B 32% 2.8M/s ] 233G tiles: [ 56M 276k/s ] 20G
cpus: 161.1 gc: 9% heap: 132G/214G direct: 54M postGC: 49G
read(31% 34%) -> merge(42%) -> (6.9k/10k) -> encode(86% 86% 82% 82% 86% 83% 85% 91% 84% 84% 82% 85% 85% 86% 85% 87% 85% 86% 85% 82% 84% 86% 81% 85% 86% 89% 86% 83% 84% 83% 83% 84% 83% 89% 83% 85% 82% 86% 85% 86% 84% 84% 88% 84% 85% 89% 86% 91% 84% 87% 84% 86% 85% 86% 87% 83% 83% 89% 86% 84% 87% 84% 90% 85% 84% 86% 87% 83% 84% 89% 84% 86% 83% 85% 83% 87% 87% 83% 89% 88% 82% 83% 81% 85% 87% 85% 84% 84% 83% 82% 88% 85% 84% 83% 82% 82% 86% 86% 86% 83% 85% 86% 87% 83% 85% 84% 84% 86% 84% 89% 86% 87% 84% 90% 85% 84% 86% 84% 83% 85% 87% 85% 82% 83% 82% 83% 87% 87% 86% 85% 84% 86% 82% 87% 87% 89% 83% 84% 83% 83% 87% 84% 81% 83% 83% 84% 88% 84% 84% 85% 85% 84% 84% 85% 85% 86% 85% 83% 87% 84% 84% 83% 81% 84% 86% 82% 83% 84% 83% 82% 83% 86% 84% 83% 82% 84% 83% 84%) -> (8.7k/10k) -> write(22%)
last tile: 13/7319/2968 (z13 78%) https://onthegomap.github.io/planetiler-demo/#13.5/44.32385/141.65771
0:17:24 INF [archive] - features: [ 1B 33% 3.7M/s ] 233G tiles: [ 56M 79k/s ] 21G
cpus: 168.8 gc: 12% heap: 55G/214G direct: 54M postGC: 55G
read(29% 32%) -> merge(37%) -> (6.7k/10k) -> encode(86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 85% 87% 85% 85% 87% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 87% 87% 87% 87% 86% 87% 87% 87% 87% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 85% 87% 87% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 85% 87% 85% 86% 87% 85% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87% 87%) -> (10k/10k) -> write(18%)
last tile: 13/6154/3542 (z13 80%) https://onthegomap.github.io/planetiler-demo/#13.5/23.62439/90.46143
0:17:34 INF [archive] - features: [ 1.1B 34% 2.8M/s ] 233G tiles: [ 57M 46k/s ] 21G
cpus: 169.5 gc: 11% heap: 73G/214G direct: 54M postGC: 26G
read(31% 30%) -> merge(47%) -> (7.7k/10k) -> encode(88% 85% 86% 87% 88% 88% 86% 87% 85% 88% 89% 85% 89% 88% 89% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 84% 89% 85% 88% 85% 88% 87% 88% 88% 88% 88% 88% 87% 87% 88% 88% 88% 88% 86% 88% 88% 88% 88% 87% 88% 87% 89% 89% 89% 87% 88% 86% 88% 88% 86% 87% 85% 88% 87% 88% 89% 88% 89% 88% 88% 86% 88% 88% 85% 88% 87% 88% 86% 88% 87% 88% 88% 88% 87% 87% 88% 87% 88% 88% 86% 87% 88% 85% 86% 88% 88% 87% 86% 88% 87% 88% 87% 86% 88% 87% 86% 88% 86% 88% 88% 88% 88% 88% 88% 84% 88% 88% 87% 85% 86% 87% 88% 86% 88% 86% 87% 88% 87% 88% 87% 87% 87% 87% 84% 85% 87% 86% 86% 87% 88% 86% 88% 87% 88% 86% 88% 88% 86% 87% 88% 88% 87% 86% 84% 84% 87% 88% 88% 84% 88% 87% 87% 87% 88% 87% 88% 88% 88% 84% 85% 87% 87% 88% 87% 87% 86% 86% 86%) -> (10k/10k) -> write(16%)
last tile: 13/6850/3761 (z13 81%) https://onthegomap.github.io/planetiler-demo/#13.5/14.54105/121.04736
0:17:44 INF [archive] - features: [ 1.1B 35% 2.8M/s ] 233G tiles: [ 57M 65k/s ] 22G
cpus: 169.9 gc: 10% heap: 140G/214G direct: 54M postGC: 30G
read(28% 26%) -> merge(36%) -> (8.4k/10k) -> encode(88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 87% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 87% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 87% 87% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88%) -> (9.7k/10k) -> write(11%)
last tile: 13/5883/3693 (z13 82%) https://onthegomap.github.io/planetiler-demo/#13.5/17.41354/78.55225
0:17:54 INF [archive] - features: [ 1.1B 36% 3.4M/s ] 233G tiles: [ 58M 12k/s ] 22G
cpus: 169.5 gc: 11% heap: 88G/214G direct: 54M postGC: 35G
read(34% 33%) -> merge(41%) -> (8.3k/10k) -> encode(89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 86% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 85% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 87% 89% 89% 89% 89%) -> (10k/10k) -> write( 5%)
last tile: 13/6039/3439 (z13 82%) https://onthegomap.github.io/planetiler-demo/#13.5/27.70298/85.40771
0:18:04 INF [archive] - features: [ 1.2B 36% 2.5M/s ] 233G tiles: [ 58M 64k/s ] 23G
cpus: 170.4 gc: 10% heap: 39G/214G direct: 54M postGC: 38G
read(20% 21%) -> merge(30%) -> (7.8k/10k) -> encode(90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 89% 90% 90% 90% 90% 89% 90% 90% 87% 90% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 87% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 90% 89% 90% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 86% 89% 90% 90% 90% 90% 90% 90% 89%) -> (10k/10k) -> write(15%)
last tile: 13/5126/4048 (z13 83%) https://onthegomap.github.io/planetiler-demo/#13.5/2.08694/45.28564
0:18:15 INF [archive] - features: [ 1.2B 37% 2M/s ] 233G tiles: [ 59M 30k/s ] 23G
cpus: 171.2 gc: 8% heap: 111G/214G direct: 54M postGC: 41G
read(29% 28%) -> merge(39%) -> (8.6k/10k) -> encode(91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 90% 91% 91% 91% 90% 89% 91% 91% 91% 91% 89% 89% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 89% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 90% 89% 91% 91% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 90% 91% 91% 91% 91%) -> (9.4k/10k) -> write(11%)
last tile: 13/4319/3861 (z13 83%) https://onthegomap.github.io/planetiler-demo/#13.5/10.25006/9.82178
0:18:25 INF [archive] - features: [ 1.2B 38% 3.2M/s ] 233G tiles: [ 59M 27k/s ] 23G
cpus: 170.1 gc: 10% heap: 66G/214G direct: 54M postGC: 46G
read(38% 39%) -> merge(44%) -> (8.8k/10k) -> encode(90% 90% 90% 90% 90% 90% 89% 89% 89% 89% 89% 89% 89% 90% 90% 89% 90% 89% 90% 90% 89% 89% 89% 90% 89% 87% 89% 88% 89% 90% 89% 90% 88% 89% 90% 90% 90% 89% 89% 89% 89% 90% 90% 90% 89% 90% 90% 89% 89% 89% 88% 86% 90% 90% 90% 90% 90% 90% 89% 89% 90% 90% 89% 90% 90% 89% 90% 88% 90% 90% 89% 89% 90% 89% 89% 90% 87% 89% 90% 89% 89% 89% 89% 89% 89% 89% 89% 90% 90% 89% 89% 89% 89% 90% 90% 90% 87% 90% 89% 89% 90% 87% 89% 90% 87% 90% 90% 90% 90% 89% 90% 89% 90% 89% 89% 89% 90% 89% 89% 90% 90% 89% 88% 89% 89% 89% 89% 90% 87% 89% 89% 89% 89% 89% 90% 90% 89% 89% 89% 89% 90% 89% 90% 88% 90% 90% 90% 89% 88% 90% 87% 89% 90% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 88% 89% 89% 89% 90% 89%) -> (10k/10k) -> write( 8%)
last tile: 13/4636/3160 (z13 84%) https://onthegomap.github.io/planetiler-demo/#13.5/37.97884/23.75244
0:18:35 INF [archive] - features: [ 1.3B 39% 5M/s ] 233G tiles: [ 59M 44k/s ] 24G
cpus: 170.4 gc: 9% heap: 64G/214G direct: 54M postGC: 51G
read(39% 40%) -> merge(48%) -> (7.3k/10k) -> encode(87% 90% 90% 89% 88% 90% 90% 90% 89% 90% 88% 89% 90% 90% 90% 90% 87% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 89% 89% 90% 90% 90% 90% 89% 89% 89% 89% 89% 90% 90% 90% 89% 89% 90% 90% 90% 90% 90% 90% 90% 89% 90% 89% 90% 90% 90% 90% 90% 90% 90% 89% 88% 89% 90% 90% 90% 90% 90% 89% 88% 90% 90% 89% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 88% 90% 90% 89% 87% 90% 89% 90% 89% 89% 90% 88% 90% 88% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 89% 90% 90% 90% 88% 90% 90% 90% 90% 90% 90% 90% 90% 90% 87% 90% 90% 90% 90% 89% 90% 90% 90% 89% 90% 89% 89% 90% 90% 89% 89% 88% 90% 90% 90% 90% 89% 90% 89% 90% 90% 90% 90% 87% 90% 87% 90% 90% 90% 90%) -> (8.4k/10k) -> write(21%)
last tile: 13/4669/2996 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/43.43696/25.20264
0:18:45 INF [archive] - features: [ 1.3B 41% 3.5M/s ] 233G tiles: [ 59M 8.5k/s ] 25G
cpus: 170.1 gc: 11% heap: 159G/214G direct: 54M postGC: 58G
read(77% 77%) -> merge(72%) -> (9.9k/10k) -> encode(87% 87% 87% 88% 88% 84% 87% 88% 87% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 89% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 85% 88% 87% 88% 88% 88% 86% 88% 87% 86% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 87% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 86% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 87% 88% 88% 88% 88% 88% 88% 88% 87% 87% 88% 87% 88% 88% 88% 87% 88% 88% 88% 88% 88% 84% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 85% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 82% 88% 88% 87% 88% 88% 86% 88% 88% 86% 88% 88% 88% 88% 88% 87% 85% 86% 88% 88% 88% 88% 86% 88% 88% 88% 88% 88% 88% 87% 88% 88% 87% 88% 88% 87% 85% 88% 87% 87% 88% 88% 88% 87% 88% 88% 88% 87% 88% 87%) -> (10k/10k) -> write( 7%)
last tile: 13/4329/2983 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/43.85037/10.26123
0:18:55 INF [archive] - features: [ 1.3B 41% 2.4M/s ] 233G tiles: [ 59M 1.5k/s ] 25G
cpus: 168.9 gc: 10% heap: 48G/214G direct: 54M postGC: 24G
read( 8% 7%) -> merge( 8%) -> (8.1k/10k) -> encode(87% 89% 89% 86% 89% 87% 89% 89% 89% 89% 87% 88% 89% 89% 87% 89% 89% 89% 89% 89% 88% 88% 85% 89% 89% 88% 89% 89% 89% 87% 89% 89% 89% 87% 89% 88% 88% 89% 89% 89% 88% 89% 86% 88% 89% 88% 87% 89% 89% 87% 89% 89% 89% 89% 87% 89% 88% 87% 86% 88% 88% 88% 89% 89% 88% 88% 89% 89% 89% 89% 86% 87% 89% 89% 89% 89% 88% 87% 89% 89% 89% 89% 87% 89% 88% 86% 88% 88% 89% 89% 87% 87% 89% 89% 88% 89% 88% 89% 89% 88% 89% 88% 87% 87% 89% 86% 88% 88% 88% 87% 89% 88% 88% 86% 89% 88% 88% 89% 89% 89% 88% 87% 88% 87% 86% 88% 88% 89% 87% 89% 87% 87% 88% 87% 89% 88% 89% 89% 85% 87% 88% 89% 88% 87% 89% 88% 88% 89% 89% 89% 88% 87% 88% 87% 88% 89% 89% 87% 87% 89% 88% 87% 87% 89% 89% 88% 88% 88% 89% 89% 87% 87% 89% 89% 89% 89% 89% 87%) -> (10k/10k) -> write( 1%)
last tile: 13/4146/3059 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/41.39329/2.21924
0:19:06 INF [archive] - features: [ 1.4B 42% 3.1M/s ] 233G tiles: [ 59M 4.1k/s ] 25G
cpus: 172.9 gc: 6% heap: 139G/214G direct: 54M postGC: 29G
read(54% 55%) -> merge(55%) -> (9.8k/10k) -> encode(93% 93% 92% 93% 92% 93% 92% 92% 93% 93% 91% 92% 93% 93% 93% 92% 92% 92% 93% 92% 93% 93% 92% 93% 93% 92% 91% 92% 92% 92% 91% 93% 92% 93% 90% 93% 93% 92% 93% 93% 93% 92% 93% 93% 93% 92% 93% 93% 93% 93% 93% 93% 93% 92% 93% 93% 93% 90% 93% 93% 93% 93% 93% 93% 92% 93% 93% 90% 92% 91% 93% 92% 93% 92% 93% 93% 93% 93% 93% 93% 89% 92% 92% 93% 88% 93% 93% 92% 92% 92% 91% 90% 92% 91% 92% 93% 91% 90% 93% 93% 92% 93% 93% 93% 93% 92% 93% 93% 92% 92% 92% 92% 93% 93% 93% 92% 92% 92% 89% 92% 93% 93% 93% 93% 93% 92% 93% 93% 93% 92% 92% 91% 93% 92% 91% 92% 93% 93% 92% 93% 92% 93% 93% 91% 92% 91% 92% 92% 92% 93% 92% 92% 92% 93% 93% 92% 92% 93% 92% 92% 92% 93% 93% 93% 93% 93% 92% 92% 93% 91% 92% 93% 92% 92% 91% 93% 92% 91%) -> (10k/10k) -> write( 6%)
last tile: 13/4293/2816 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/48.90806/8.6792
0:19:16 INF [archive] - features: [ 1.4B 43% 2.6M/s ] 233G tiles: [ 59M 1.2k/s ] 26G
cpus: 169.4 gc: 11% heap: 112G/214G direct: 54M postGC: 35G
read(32% 32%) -> merge(33%) -> (10k/10k) -> encode(89% 89% 89% 89% 89% 89% 88% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 88% 87% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 88% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88%) -> (10k/10k) -> write( 2%)
last tile: 13/4249/2696 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/52.25471/6.74561
0:19:26 INF [archive] - features: [ 1.4B 44% 2.2M/s ] 233G tiles: [ 59M 840/s ] 26G
cpus: 170.5 gc: 9% heap: 40G/214G direct: 54M postGC: 37G
read(19% 19%) -> merge(27%) -> (9.7k/10k) -> encode(91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 90% 91% 91% 90% 91% 91% 91% 91% 91% 90% 91% 90% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 90% 90% 90% 89% 90% 91% 91% 91% 91% 91% 90% 91% 91% 90% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 89% 90% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 90% 90% 91% 91% 91% 91% 90% 91% 91% 90% 91% 91% 90% 91% 90% 91% 91% 90% 91% 91% 91% 91% 90% 90% 90% 90% 91% 91% 91% 91% 90% 91% 90% 90% 90% 90% 91% 91% 90% 90% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 90% 91% 91% 90% 90% 91% 91% 90% 90% 91% 91% 91% 91% 90% 91% 90% 91% 91% 91% 91% 90% 90% 91% 91% 91%) -> (10k/10k) -> write( 1%)
last tile: 13/4168/2752 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/50.72254/3.18604
0:19:36 INF [archive] - features: [ 1.4B 44% 2.1M/s ] 233G tiles: [ 59M 1.3k/s ] 26G
cpus: 171.4 gc: 8% heap: 93G/214G direct: 54M postGC: 40G
read(22% 22%) -> merge(35%) -> (9.8k/10k) -> encode(92% 91% 91% 91% 91% 92% 91% 91% 91% 92% 92% 92% 91% 91% 91% 91% 91% 92% 91% 91% 91% 91% 91% 91% 92% 91% 92% 91% 91% 91% 91% 91% 91% 91% 91% 92% 91% 91% 91% 92% 92% 91% 91% 91% 91% 91% 91% 91% 92% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 92% 90% 91% 91% 92% 91% 92% 92% 91% 91% 91% 91% 91% 92% 91% 91% 91% 92% 91% 91% 91% 91% 92% 91% 92% 91% 91% 92% 91% 91% 92% 91% 92% 91% 91% 91% 91% 91% 92% 92% 92% 91% 91% 91% 91% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 91% 92% 91% 91% 91% 91% 91% 91% 92% 91% 92% 91% 91% 92% 92% 91% 91% 91% 91% 92% 91% 91% 91% 92% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 92% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 92% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 91% 92%) -> (10k/10k) -> write( 2%)
last tile: 13/4194/2703 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/52.066/4.32861
0:19:46 INF [archive] - features: [ 1.5B 46% 3.6M/s ] 233G tiles: [ 60M 6.8k/s ] 26G
cpus: 171.7 gc: 8% heap: 90G/214G direct: 54M postGC: 44G
read(23% 23%) -> merge(47%) -> (10k/10k) -> encode(92% 92% 92% 92% 92% 92% 92% 91% 92% 92% 92% 92% 92% 91% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 91% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 91% 92% 92% 91% 92% 92% 92% 92% 92% 91% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 91% 92% 92% 92% 92% 92% 92% 92% 92% 92% 91% 92% 92% 92% 92% 92% 91% 92% 92% 91% 92% 92% 92% 92% 92% 92% 92% 91% 92% 92% 92% 92% 92% 92% 91% 91% 92% 92% 91% 92% 92% 91% 92% 91% 92% 92% 91% 92% 91% 91% 92% 91% 92% 92% 91% 92% 92% 92% 91% 92% 92% 92% 92% 92% 92% 91% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 91% 92% 92% 92% 91% 92% 92% 92% 92% 92% 91% 91% 92% 92% 92% 92% 92%) -> (10k/10k) -> write( 6%)
last tile: 13/4482/2738 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/51.11042/16.98486
0:19:56 INF [archive] - features: [ 1.5B 47% 6.4M/s ] 233G tiles: [ 60M 64k/s ] 28G
cpus: 168.2 gc: 9% heap: 65G/214G direct: 54M postGC: 48G
read( 3% 3%) -> merge(11%) -> (9.6k/10k) -> encode(90% 90% 89% 90% 91% 89% 90% 90% 89% 89% 90% 89% 90% 90% 90% 89% 89% 89% 90% 90% 90% 90% 88% 87% 90% 90% 90% 89% 89% 89% 90% 89% 88% 89% 89% 90% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 90% 90% 90% 90% 89% 88% 91% 90% 89% 90% 89% 88% 90% 90% 89% 89% 89% 90% 90% 90% 89% 89% 90% 90% 89% 90% 90% 89% 89% 89% 89% 90% 90% 89% 89% 89% 90% 88% 90% 88% 90% 90% 90% 89% 88% 90% 89% 89% 90% 89% 90% 90% 89% 90% 89% 90% 91% 90% 90% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 90% 90% 89% 88% 89% 88% 88% 89% 90% 89% 90% 89% 90% 91% 89% 91% 89% 90% 89% 90% 90% 90% 89% 89% 90% 89% 89% 89% 89% 89% 89% 88% 90% 89% 89% 90% 89% 90% 90% 90% 90% 88% 89% 89% 89% 89% 90% 89% 88% 90% 89% 88% 90% 88% 89% 90% 90% 90% 90% 89% 90% 89% 89%) -> (10k/10k) -> write(27%)
last tile: 13/5463/2520 (z13 86%) https://onthegomap.github.io/planetiler-demo/#13.5/56.74067/60.09521
0:20:01 INF [archive:write] - Finished z13 in 5m29s cpu:15h8m57s gc:32s avg:165.9, now starting z14
0:20:06 INF [archive] - features: [ 1.6B 51% 9.9M/s ] 233G tiles: [ 100M 3.9M/s ] 30G
cpus: 69.3 gc: 4% heap: 49G/214G direct: 54M postGC: 48G
read(40% 43%) -> merge(52%) -> (1/10k) -> encode(33% 38% 35% 35% 36% 36% 34% 37% 34% 34% 35% 36% 34% 33% 36% 33% 37% 34% 33% 37% 37% 35% 34% 35% 33% 34% 34% 36% 34% 36% 33% 35% 33% 35% 36% 35% 36% 34% 34% 34% 35% 36% 35% 37% 36% 34% 37% 34% 36% 34% 35% 34% 36% 35% 33% 36% 33% 34% 35% 38% 33% 35% 36% 34% 34% 35% 35% 34% 38% 35% 37% 34% 34% 34% 37% 35% 35% 36% 34% 35% 37% 34% 37% 33% 35% 36% 39% 37% 36% 35% 35% 35% 37% 35% 34% 34% 37% 34% 36% 35% 35% 37% 33% 36% 38% 36% 35% 35% 34% 36% 37% 34% 37% 35% 34% 35% 35% 34% 34% 34% 36% 34% 37% 35% 35% 35% 35% 33% 33% 35% 34% 33% 37% 36% 34% 36% 37% 34% 34% 37% 35% 40% 35% 35% 33% 35% 37% 34% 36% 36% 36% 35% 37% 35% 34% 34% 36% 35% 36% 36% 35% 35% 39% 38% 34% 33% 37% 34% 36% 34% 35% 35% 38% 34% 35% 36% 34% 37%) -> (569/10k) -> write(84%)
last tile: 14/4696/5932 (z14 13%) https://onthegomap.github.io/planetiler-demo/#14.5/44.39454/-76.80542
0:20:16 INF [archive] - features: [ 1.8B 55% 13M/s ] 233G tiles: [ 109M 848k/s ] 34G
cpus: 43.6 gc: 2% heap: 97G/214G direct: 54M postGC: 47G
read(98% 98%) -> merge(98%) -> (0/10k) -> encode(23% 24% 22% 20% 22% 21% 21% 21% 22% 21% 21% 21% 21% 21% 22% 20% 21% 22% 22% 21% 23% 21% 23% 22% 20% 22% 23% 23% 22% 21% 21% 23% 22% 20% 24% 22% 20% 22% 24% 22% 23% 21% 22% 21% 21% 23% 21% 22% 21% 23% 22% 22% 22% 22% 24% 22% 22% 24% 23% 22% 21% 20% 21% 23% 23% 21% 23% 22% 22% 22% 22% 21% 22% 23% 21% 20% 21% 21% 22% 21% 21% 20% 21% 19% 23% 21% 21% 22% 22% 20% 21% 21% 20% 21% 23% 21% 20% 23% 22% 21% 20% 20% 24% 21% 22% 20% 20% 22% 20% 20% 22% 21% 22% 20% 21% 22% 21% 21% 20% 23% 23% 21% 23% 20% 23% 24% 18% 19% 22% 21% 23% 23% 23% 22% 22% 21% 21% 23% 18% 21% 22% 23% 21% 19% 22% 21% 22% 23% 23% 23% 21% 22% 21% 23% 21% 21% 19% 22% 23% 20% 22% 22% 22% 21% 23% 22% 20% 20% 24% 22% 21% 23% 19% 23% 21% 21% 23% 22%) -> (188/10k) -> write(44%)
last tile: 14/7476/7518 (z14 16%) https://onthegomap.github.io/planetiler-demo/#14.5/14.63674/-15.72144
0:20:26 INF [archive] - features: [ 1.9B 59% 13M/s ] 233G tiles: [ 118M 864k/s ] 37G
cpus: 42.6 gc: 2% heap: 144G/214G direct: 54M postGC: 47G
read(98% 98%) -> merge(98%) -> (0/10k) -> encode(19% 20% 20% 21% 22% 21% 20% 21% 22% 23% 22% 21% 20% 19% 23% 22% 25% 21% 21% 19% 20% 21% 22% 21% 21% 19% 23% 20% 23% 21% 22% 20% 19% 21% 22% 24% 21% 22% 23% 22% 21% 21% 19% 19% 20% 21% 24% 21% 23% 17% 21% 20% 21% 22% 19% 18% 21% 22% 21% 22% 20% 20% 22% 21% 23% 20% 19% 23% 20% 19% 22% 22% 22% 23% 19% 21% 21% 22% 21% 20% 21% 21% 20% 22% 24% 20% 21% 20% 21% 18% 21% 20% 21% 25% 21% 23% 21% 21% 24% 21% 23% 23% 19% 21% 23% 20% 20% 23% 22% 22% 20% 21% 21% 20% 21% 19% 22% 22% 21% 19% 22% 21% 22% 21% 20% 20% 20% 21% 21% 21% 21% 20% 22% 23% 21% 20% 21% 20% 20% 21% 23% 21% 21% 20% 21% 22% 20% 23% 22% 20% 20% 22% 21% 20% 20% 22% 21% 22% 21% 22% 20% 19% 21% 21% 21% 21% 22% 22% 23% 21% 20% 22% 20% 20% 22% 20% 21% 22%) -> (54/10k) -> write(41%)
last tile: 14/2527/6200 (z14 20%) https://onthegomap.github.io/planetiler-demo/#14.5/40.03603/-124.46411
0:20:36 INF [archive] - features: [ 2B 62% 11M/s ] 233G tiles: [ 121M 364k/s ] 40G
cpus: 48.7 gc: 2% heap: 63G/214G direct: 54M postGC: 54G
read(97% 83%) -> merge(94%) -> (8k/10k) -> encode(24% 23% 25% 24% 25% 25% 25% 23% 25% 25% 24% 25% 23% 24% 25% 23% 23% 24% 25% 25% 24% 22% 25% 25% 24% 27% 23% 25% 26% 23% 23% 23% 24% 25% 22% 22% 25% 23% 22% 23% 25% 27% 24% 26% 27% 24% 25% 22% 24% 24% 22% 25% 23% 24% 25% 23% 26% 25% 23% 23% 23% 23% 24% 24% 26% 23% 25% 24% 24% 24% 23% 23% 24% 22% 26% 26% 25% 25% 27% 26% 22% 25% 23% 25% 25% 24% 27% 23% 23% 26% 25% 24% 23% 26% 24% 22% 24% 22% 24% 26% 26% 25% 24% 23% 23% 23% 27% 23% 25% 22% 24% 25% 25% 24% 23% 24% 23% 24% 26% 23% 26% 22% 24% 25% 26% 24% 23% 26% 25% 26% 25% 23% 23% 24% 24% 23% 24% 24% 23% 24% 26% 23% 24% 24% 26% 26% 22% 24% 24% 24% 24% 23% 23% 23% 24% 25% 24% 24% 24% 23% 23% 23% 27% 24% 24% 24% 25% 22% 24% 27% 27% 26% 24% 23% 23% 25% 25% 23%) -> (9.7k/10k) -> write(62%)
last tile: 14/3009/5363 (z14 22%) https://onthegomap.github.io/planetiler-demo/#14.5/52.64973/-113.87329
0:20:47 INF [archive] - features: [ 2.2B 66% 13M/s ] 233G tiles: [ 178M 5.6M/s ] 43G
cpus: 43.5 gc: 1% heap: 143G/214G direct: 54M postGC: 51G
read(73% 73%) -> merge(85%) -> (648/10k) -> encode(21% 21% 22% 23% 21% 23% 22% 24% 21% 22% 21% 21% 19% 20% 21% 23% 22% 22% 24% 23% 24% 20% 21% 22% 20% 23% 21% 22% 21% 21% 22% 21% 24% 22% 23% 25% 21% 22% 23% 23% 22% 20% 22% 23% 22% 22% 22% 22% 20% 21% 21% 20% 23% 23% 24% 23% 21% 22% 19% 23% 20% 21% 20% 24% 23% 24% 21% 22% 23% 19% 20% 20% 22% 22% 23% 22% 21% 22% 23% 22% 21% 22% 23% 21% 23% 22% 22% 22% 24% 23% 23% 23% 22% 20% 21% 21% 22% 21% 23% 20% 22% 20% 21% 21% 23% 23% 21% 23% 24% 22% 20% 22% 23% 20% 22% 21% 21% 23% 23% 23% 21% 20% 23% 21% 19% 22% 20% 24% 22% 21% 20% 24% 24% 22% 21% 23% 22% 21% 21% 22% 22% 21% 21% 22% 20% 20% 24% 23% 22% 21% 23% 22% 21% 22% 22% 20% 19% 22% 23% 23% 23% 25% 22% 20% 21% 22% 23% 20% 25% 21% 20% 22% 21% 21% 22% 23% 20% 22%) -> (2.6k/10k) -> write(91%)
last tile: 14/8750/8445 (z14 50%) https://onthegomap.github.io/planetiler-demo/#14.5/-5.56132/12.27173
0:20:57 INF [archive] - features: [ 2.3B 72% 17M/s ] 233G tiles: [ 212M 3.3M/s ] 46G
cpus: 42.5 gc: 2% heap: 113G/214G direct: 54M postGC: 51G
read(92% 88%) -> merge(98%) -> (0/10k) -> encode(22% 20% 21% 20% 21% 19% 22% 21% 20% 19% 21% 20% 22% 23% 21% 22% 22% 21% 20% 21% 21% 23% 21% 21% 20% 18% 20% 21% 19% 21% 20% 22% 21% 23% 19% 21% 22% 20% 21% 22% 19% 19% 20% 20% 20% 21% 22% 25% 21% 24% 22% 22% 24% 20% 22% 22% 20% 20% 23% 20% 22% 20% 19% 22% 21% 20% 20% 22% 20% 22% 19% 22% 22% 22% 23% 23% 21% 20% 20% 22% 21% 22% 21% 21% 20% 21% 22% 21% 21% 20% 21% 21% 21% 21% 22% 22% 23% 22% 21% 19% 19% 20% 18% 23% 22% 20% 21% 20% 22% 18% 22% 21% 21% 19% 20% 20% 18% 19% 20% 21% 22% 20% 21% 18% 19% 22% 19% 23% 20% 21% 19% 20% 20% 21% 22% 19% 20% 24% 21% 21% 19% 21% 21% 21% 20% 20% 22% 19% 19% 24% 21% 22% 19% 20% 19% 20% 20% 19% 23% 22% 19% 22% 22% 21% 20% 22% 20% 22% 21% 21% 21% 23% 20% 22% 21% 21% 19% 19%) -> (2.1k/10k) -> write(66%)
last tile: 14/14924/10025 (z14 74%) https://onthegomap.github.io/planetiler-demo/#14.5/-37.32649/147.93091
0:20:58 WAR [archive:encode] - {x=14553 y=6450 z=14} 1303kb uncompressed
0:21:06 WAR [archive:encode] - {x=13722 y=7013 z=14} 1080kb uncompressed
0:21:07 INF [archive] - features: [ 2.5B 76% 13M/s ] 233G tiles: [ 225M 1.3M/s ] 49G
cpus: 61.5 gc: 4% heap: 59G/214G direct: 55M postGC: 53G
read(96% 93%) -> merge(96%) -> (0/10k) -> encode(31% 29% 30% 32% 32% 30% 31% 33% 31% 30% 30% 31% 31% 30% 30% 30% 31% 30% 29% 30% 29% 32% 30% 29% 30% 30% 29% 31% 28% 29% 29% 30% 31% 30% 30% 31% 30% 31% 29% 30% 29% 30% 29% 30% 30% 31% 31% 29% 30% 31% 31% 30% 31% 29% 31% 30% 30% 31% 30% 29% 33% 31% 32% 31% 31% 31% 28% 31% 29% 32% 30% 31% 29% 29% 30% 29% 30% 33% 31% 33% 31% 31% 31% 29% 30% 30% 32% 31% 30% 29% 34% 31% 30% 27% 31% 28% 29% 32% 31% 32% 31% 30% 31% 30% 30% 29% 29% 31% 30% 31% 30% 29% 30% 32% 31% 29% 29% 29% 31% 30% 32% 31% 31% 30% 30% 30% 29% 27% 30% 30% 28% 31% 30% 28% 32% 28% 30% 30% 29% 29% 30% 30% 31% 32% 29% 30% 32% 29% 32% 29% 32% 31% 33% 32% 32% 33% 30% 29% 33% 28% 30% 30% 30% 28% 30% 31% 30% 30% 29% 31% 28% 29% 30% 31% 28% 31% 30% 33%) -> (2.9k/10k) -> write(79%)
last tile: 14/13688/7494 (z14 81%) https://onthegomap.github.io/planetiler-demo/#14.5/15.14637/120.77271
0:21:17 INF [archive] - features: [ 2.6B 81% 16M/s ] 233G tiles: [ 232M 722k/s ] 53G
cpus: 51 gc: 1% heap: 143G/214G direct: 55M postGC: 50G
read(90% 94%) -> merge(99%) -> (0/10k) -> encode(25% 27% 26% 26% 28% 28% 27% 25% 25% 25% 25% 29% 25% 26% 27% 27% 27% 26% 27% 27% 24% 26% 27% 24% 23% 25% 26% 27% 23% 24% 27% 26% 27% 25% 26% 25% 26% 25% 25% 24% 26% 24% 27% 26% 24% 26% 27% 26% 25% 26% 27% 25% 23% 25% 26% 25% 24% 27% 29% 26% 28% 23% 25% 26% 25% 28% 23% 31% 24% 29% 27% 26% 26% 26% 24% 26% 28% 25% 26% 25% 25% 26% 28% 24% 27% 27% 31% 29% 24% 27% 26% 28% 27% 28% 28% 25% 27% 27% 25% 27% 28% 25% 27% 25% 26% 27% 24% 28% 27% 26% 25% 28% 27% 26% 27% 24% 26% 27% 25% 24% 24% 26% 27% 26% 25% 27% 26% 23% 27% 24% 26% 26% 26% 28% 26% 26% 26% 26% 26% 29% 28% 26% 23% 27% 27% 25% 26% 27% 24% 27% 26% 28% 24% 26% 26% 26% 26% 24% 26% 24% 24% 25% 26% 27% 25% 25% 28% 25% 24% 27% 27% 27% 26% 27% 26% 24% 27% 26%) -> (1.1k/10k) -> write(77%)
last tile: 14/8192/6915 (z14 84%) https://onthegomap.github.io/planetiler-demo/#14.5/26.99062/0.01099
0:21:27 INF [archive] - features: [ 2.8B 85% 13M/s ] 233G tiles: [ 235M 254k/s ] 57G
cpus: 44.5 gc: 1% heap: 68G/214G direct: 55M postGC: 49G
read(96% 99%) -> merge(97%) -> (0/10k) -> encode(24% 22% 24% 21% 21% 23% 23% 22% 23% 23% 23% 22% 23% 22% 22% 21% 22% 21% 22% 23% 21% 22% 20% 24% 22% 22% 21% 23% 21% 24% 23% 21% 21% 23% 23% 22% 20% 22% 21% 22% 22% 21% 24% 22% 25% 22% 24% 22% 22% 23% 22% 21% 21% 22% 22% 24% 22% 21% 22% 22% 24% 24% 23% 23% 23% 23% 23% 22% 22% 23% 22% 22% 22% 22% 24% 23% 23% 20% 24% 22% 21% 23% 24% 24% 22% 23% 21% 22% 22% 23% 22% 23% 24% 20% 21% 23% 22% 23% 21% 24% 22% 22% 24% 21% 24% 21% 26% 21% 24% 21% 22% 23% 20% 22% 23% 23% 22% 23% 24% 21% 23% 24% 21% 23% 22% 22% 22% 24% 22% 22% 22% 22% 24% 23% 26% 21% 24% 20% 26% 25% 22% 22% 21% 21% 22% 23% 23% 21% 23% 22% 23% 23% 24% 22% 20% 25% 23% 22% 25% 21% 23% 23% 21% 24% 22% 22% 21% 23% 22% 23% 22% 22% 23% 24% 22% 22% 21% 24%) -> (40/10k) -> write(51%)
last tile: 14/8869/5670 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/48.36355/14.88647
0:21:30 WAR [archive:encode] - {x=8290 y=6118 z=14} 1082kb uncompressed
0:21:30 WAR [archive:encode] - {x=8290 y=6119 z=14} 1067kb uncompressed
0:21:37 INF [archive] - features: [ 2.9B 89% 13M/s ] 233G tiles: [ 235M 36k/s ] 60G
cpus: 35.1 gc: 1% heap: 57G/214G direct: 55M postGC: 49G
read(98% 99%) -> merge(90%) -> (0/10k) -> encode(18% 18% 18% 18% 18% 17% 16% 17% 19% 17% 16% 19% 18% 17% 18% 19% 17% 17% 17% 19% 17% 18% 19% 17% 18% 18% 16% 16% 18% 18% 18% 16% 17% 19% 17% 18% 18% 18% 18% 18% 18% 19% 18% 18% 17% 17% 18% 16% 17% 18% 19% 18% 18% 19% 17% 17% 16% 17% 17% 18% 18% 19% 18% 17% 17% 16% 17% 18% 18% 16% 18% 19% 16% 17% 17% 18% 17% 17% 17% 17% 17% 18% 18% 18% 17% 17% 17% 17% 18% 20% 16% 18% 17% 18% 17% 16% 18% 16% 17% 14% 19% 16% 19% 17% 19% 16% 19% 16% 17% 17% 18% 18% 18% 18% 19% 17% 16% 18% 17% 17% 18% 18% 17% 19% 17% 19% 18% 16% 18% 18% 16% 18% 15% 17% 19% 17% 17% 17% 17% 17% 17% 16% 19% 20% 17% 18% 18% 17% 17% 18% 17% 18% 17% 18% 21% 17% 17% 18% 20% 20% 18% 18% 18% 15% 17% 17% 17% 17% 19% 17% 18% 17% 19% 20% 17% 19% 16% 17%) -> (42/10k) -> write(19%)
last tile: 14/8699/5576 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/49.71738/11.15112
0:21:47 INF [archive] - features: [ 3.1B 93% 14M/s ] 233G tiles: [ 235M 30k/s ] 63G
cpus: 30.1 gc: 1% heap: 113G/214G direct: 55M postGC: 49G
read(99% 99%) -> merge(90%) -> (0/10k) -> encode(15% 15% 14% 15% 15% 16% 15% 13% 15% 15% 14% 14% 14% 14% 14% 14% 17% 16% 15% 14% 16% 14% 16% 14% 14% 15% 16% 14% 16% 15% 16% 14% 13% 15% 15% 16% 14% 15% 14% 14% 17% 15% 16% 16% 15% 15% 16% 15% 17% 15% 14% 17% 15% 13% 14% 16% 16% 13% 15% 14% 14% 16% 14% 14% 16% 14% 15% 16% 15% 14% 15% 15% 13% 14% 15% 14% 14% 15% 15% 15% 15% 15% 14% 14% 15% 16% 15% 15% 16% 15% 15% 17% 17% 13% 14% 14% 15% 16% 15% 17% 14% 15% 16% 15% 15% 14% 16% 13% 15% 15% 15% 16% 16% 15% 16% 16% 17% 16% 15% 14% 15% 15% 15% 15% 17% 15% 15% 17% 14% 13% 15% 15% 14% 13% 15% 16% 14% 15% 15% 14% 15% 14% 15% 15% 15% 15% 16% 15% 16% 15% 15% 16% 15% 15% 16% 15% 14% 15% 15% 15% 15% 13% 15% 13% 15% 15% 14% 14% 16% 16% 14% 15% 17% 15% 16% 15% 14% 15%) -> (34/10k) -> write(14%)
last tile: 14/8922/5370 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/52.55632/16.05103
0:21:57 INF [archive] - features: [ 3.2B 97% 13M/s ] 233G tiles: [ 237M 173k/s ] 66G
cpus: 40.1 gc: 1% heap: 123G/214G direct: 55M postGC: 50G
read(97% 99%) -> merge(94%) -> (0/10k) -> encode(22% 22% 20% 19% 19% 21% 22% 18% 21% 18% 20% 20% 21% 19% 18% 22% 19% 19% 19% 21% 22% 19% 22% 23% 20% 22% 19% 21% 19% 20% 18% 17% 20% 22% 20% 22% 20% 21% 21% 17% 20% 21% 22% 21% 19% 22% 20% 20% 21% 18% 20% 22% 20% 23% 20% 20% 20% 20% 21% 22% 20% 20% 21% 19% 20% 20% 20% 19% 22% 20% 20% 18% 19% 19% 18% 21% 21% 21% 24% 21% 21% 20% 20% 22% 20% 22% 21% 20% 21% 19% 21% 20% 19% 19% 20% 21% 19% 21% 20% 20% 19% 20% 21% 20% 22% 20% 20% 20% 21% 20% 20% 21% 21% 21% 23% 19% 22% 19% 20% 21% 22% 21% 19% 21% 18% 23% 21% 22% 21% 19% 20% 19% 22% 20% 20% 20% 20% 22% 20% 21% 20% 21% 20% 19% 20% 19% 21% 20% 19% 21% 20% 19% 20% 21% 19% 19% 20% 19% 20% 19% 20% 20% 20% 19% 20% 20% 21% 21% 19% 20% 22% 20% 20% 21% 20% 21% 20% 19%) -> (72/10k) -> write(39%)
last tile: 14/9509/4714 (z14 86%) https://onthegomap.github.io/planetiler-demo/#14.5/60.47346/28.94897
0:22:07 INF [archive] - features: [ 3.3B 100% 8.1M/s ] 233G tiles: [ 264M 2.7M/s ] 69G
cpus: 31 gc: 1% heap: 166G/214G direct: 55M postGC: 53G
read(57% 67%) -> merge(55%) -> (0/10k) -> encode(16% 14% 15% 16% 14% 15% 14% 15% 17% 15% 16% 15% 14% 15% 17% 14% 15% 15% 16% 15% 14% 17% 18% 15% 17% 14% 14% 15% 17% 15% 15% 16% 15% 16% 15% 16% 16% 15% 14% 16% 15% 16% 15% 15% 15% 16% 16% 15% 15% 14% 16% 14% 17% 14% 15% 16% 14% 17% 16% 13% 16% 16% 14% 15% 17% 14% 15% 15% 16% 15% 16% 14% 14% 16% 16% 14% 16% 15% 15% 15% 16% 16% 15% 14% 16% 18% 17% 14% 15% 15% 15% 15% 14% 14% 16% 15% 15% 16% 12% 17% 16% 16% 15% 16% 16% 17% 14% 15% 16% 16% 15% 18% 17% 16% 15% 17% 15% 16% 15% 16% 17% 14% 17% 16% 15% 15% 17% 14% 16% 15% 16% 17% 16% 15% 14% 15% 15% 17% 14% 14% 17% 15% 15% 15% 17% 15% 14% 15% 14% 14% 15% 15% 15% 15% 13% 15% 17% 16% 15% 16% 16% 16% 18% 15% 13% 15% 14% 17% 16% 16% 15% 17% 16% 16% 16% 15% 16% 17%) -> (0/10k) -> write(83%)
last tile: 14/16333/3936 (z14 98%) https://onthegomap.github.io/planetiler-demo/#14.5/67.8714/178.89038
0:22:09 INF [archive:write] - Finished z14 in 2m9s cpu:1h30m36s gc:2s avg:42.3
0:22:09 INF [archive:write] - Building directories with 14085 entries per leaf, attempt 1...
0:22:15 INF [archive:write] - Built directories with 3501 leaves, 16467B root directory
0:22:15 INF [archive:write] - Building directories with 16902 entries per leaf, attempt 2...
0:22:17 INF [archive] - features: [ 3.3B 100% 571k/s ] 233G tiles: [ 270M 552k/s ] 69G
cpus: 1.4 gc: 0% heap: 176G/214G direct: 55M postGC: 53G
read( -% -%) -> merge( -%) -> (0/10k) -> encode( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/10k) -> write(78%)
last tile: 14/16383/0 (z14 100%) https://onthegomap.github.io/planetiler-demo/#14.5/85.05018/179.98901
0:22:20 INF [archive:write] - Built directories with 2917 leaves, 14102B root directory
0:22:20 INF [archive:write] - Writing metadata and leaf directories...
0:22:21 INF [archive:write] - Writing header...
0:22:21 INF [archive:write] - # addressed tiles: 270436913
0:22:21 INF [archive:write] - # of tile entries: 49299873
0:22:21 INF [archive:write] - # of tile contents: 40261320
0:22:21 INF [archive:write] - Root directory: 14kB
0:22:21 INF [archive:write] - # leaves: 2917
0:22:21 INF [archive:write] - Leaf directories: 87MB
0:22:21 INF [archive:write] - Avg leaf size: 29kB
0:22:21 INF [archive:write] - Total dir bytes: 87MB
0:22:21 INF [archive:write] - Average bytes per addressed tile: 0.323166223983632
0:22:21 INF [archive] - features: [ 3.3B 100% 0/s ] 233G tiles: [ 270M 0/s ] 69G
cpus: 1.1 gc: 0% heap: 178G/214G direct: 141M postGC: 53G
read( -% -%) -> merge( -%) -> (0/10k) -> encode( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/10k) -> write( -%)
last tile: 14/16383/0 (z14 100%) https://onthegomap.github.io/planetiler-demo/#14.5/85.05018/179.98901
0:22:21 DEB [archive] - Tile stats:
0:22:21 DEB [archive] - Biggest tiles (gzipped)
1. 14/14553/6450 (747k) https://onthegomap.github.io/planetiler-demo/#14.5/35.70192/139.77905 (poi:979k)
2. 14/8290/6118 (675k) https://onthegomap.github.io/planetiler-demo/#14.5/41.40154/2.16431 (poi:537k)
3. 14/8290/6119 (661k) https://onthegomap.github.io/planetiler-demo/#14.5/41.38505/2.16431 (poi:611k)
4. 14/13722/7013 (617k) https://onthegomap.github.io/planetiler-demo/#14.5/25.05574/121.51978 (poi:685k)
5. 14/6437/8362 (592k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.74367/-38.55103 (building:605k)
6. 14/7990/6392 (592k) https://onthegomap.github.io/planetiler-demo/#14.5/36.73008/-4.42749 (building:380k)
7. 14/13722/7014 (588k) https://onthegomap.github.io/planetiler-demo/#14.5/25.03584/121.51978 (poi:627k)
8. 14/14552/6450 (577k) https://onthegomap.github.io/planetiler-demo/#14.5/35.70192/139.75708 (poi:744k)
9. 14/6435/8361 (573k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.72175/-38.59497 (building:710k)
10. 14/6436/8361 (558k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.72175/-38.573 (building:607k)
0:22:21 INF [archive] - Other tiles with large layers
14/8414/5384 (313k) https://onthegomap.github.io/planetiler-demo/#14.5/52.36889/4.88892 (housenumber:313k)
14/3411/6216 (333k) https://onthegomap.github.io/planetiler-demo/#14.5/39.76632/-105.04028 (landcover:333k)
10/236/413 (176k) https://onthegomap.github.io/planetiler-demo/#10.5/32.69474/-96.85547 (landuse:176k)
13/1596/3157 (337k) https://onthegomap.github.io/planetiler-demo/#13.5/38.08269/-109.84131 (mountain_peak:337k)
5/5/11 (144k) https://onthegomap.github.io/planetiler-demo/#5.5/44.9512/-118.125 (park:144k)
3/5/3 (558k) https://onthegomap.github.io/planetiler-demo/#3.5/20.48995/67.5 (place:558k)
12/3229/2032 (313k) https://onthegomap.github.io/planetiler-demo/#12.5/1.36218/103.84277 (transportation:313k)
14/9618/6751 (179k) https://onthegomap.github.io/planetiler-demo/#14.5/30.15463/31.34399 (transportation_name:179k)
12/3415/1774 (165k) https://onthegomap.github.io/planetiler-demo/#12.5/23.36242/120.19043 (water:165k)
0:22:21 DEB [archive] - Max tile sizes
z0 z1 z2 z3 z4 z5 z6 z7 z8 z9 z10 z11 z12 z13 z14 all
boundary 5.4k 37k 43k 25k 19k 24k 18k 14k 14k 28k 23k 17k 31k 18k 9.4k 43k
landcover 1.5k 982 8k 4.6k 3.2k 31k 17k 271k 333k 235k 153k 175k 166k 111k 333k 333k
place 52k 145k 546k 558k 351k 183k 109k 58k 41k 52k 62k 69k 50k 122k 221k 558k
water 8.4k 4.1k 10k 9k 14k 13k 89k 113k 126k 109k 132k 94k 165k 115k 91k 165k
water_name 8.5k 19k 26k 14k 12k 7.4k 5k 4.7k 12k 8.6k 5.6k 3.8k 3.1k 9.4k 29k 29k
waterway 0 0 0 546 3.7k 1.6k 17k 13k 9.8k 28k 20k 16k 59k 75k 88k 88k
landuse 0 0 0 0 2.6k 1.5k 32k 66k 125k 113k 176k 129k 63k 124k 47k 176k
park 0 0 0 0 54k 144k 99k 76k 71k 82k 90k 55k 47k 19k 50k 144k
transportation 0 0 0 0 60k 107k 62k 122k 89k 135k 91k 67k 313k 187k 128k 313k
transportation_name 0 0 0 0 0 0 34k 20k 19k 15k 37k 22k 33k 27k 179k 179k
mountain_peak 0 0 0 0 0 0 0 12k 12k 10k 10k 9.5k 9.4k 337k 234k 337k
aerodrome_label 0 0 0 0 0 0 0 0 4.1k 2.8k 3.9k 2.9k 2.7k 2.7k 2.7k 4.1k
aeroway 0 0 0 0 0 0 0 0 0 0 16k 25k 35k 31k 18k 35k
poi 0 0 0 0 0 0 0 0 0 0 0 175 35k 17k 979k 979k
building 0 0 0 0 0 0 0 0 0 0 0 0 0 141k 710k 710k
housenumber 0 0 0 0 0 0 0 0 0 0 0 0 0 0 313k 313k
full tile 76k 204k 626k 590k 401k 349k 271k 396k 370k 343k 272k 204k 379k 341k 1.3M 1.3M
gzipped 46k 119k 334k 314k 238k 204k 172k 284k 268k 250k 182k 141k 188k 227k 747k 747k
0:22:21 DEB [archive] - Max tile: 1.3M (gzipped: 747k)
0:22:21 DEB [archive] - Avg tile: 99k (gzipped: 64k) using weighted average based on OSM traffic
0:22:21 DEB [archive] - # tiles: 270,436,913
0:22:21 DEB [archive] - # features: 3,338,872,773
0:22:21 INF [archive] - Finished in 9m1s cpu:18h41m14s gc:40s avg:124.4
0:22:21 INF [archive] - read 2x(51% 4m38s wait:3m40s done:11s)
0:22:21 INF [archive] - merge 1x(57% 5m8s wait:2m31s done:12s)
0:22:21 INF [archive] - encode 178x(64% 5m49s block:39s wait:1m40s done:12s)
0:22:21 INF [archive] - write 1x(24% 2m8s wait:6m29s done:12s)
0:22:21 INF - Finished in 22m21s cpu:44h34m7s gc:1m23s avg:119.7
0:22:21 INF - FINISHED!
0:22:21 INF -
0:22:21 INF - ----------------------------------------
0:22:21 INF - data errors:
0:22:21 INF - render_snap_fix_input 21,388,532
0:22:21 INF - merge_snap_fix_input 21,243
0:22:21 INF - feature_polygon_osm_invalid_multipolygon_empty_after_fix 254
0:22:21 INF - omt_park_area_osm_invalid_multipolygon_empty_after_fix 23
0:22:21 INF - feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix 17
0:22:21 INF - feature_point_on_surface_osm_invalid_multipolygon_empty_after_fix 4
0:22:21 INF - feature_centroid_osm_invalid_multipolygon_empty_after_fix 2
0:22:21 INF - omt_place_island_poly_osm_invalid_multipolygon_empty_after_fix 2
0:22:21 INF - merge_snap_fix_input2 1
0:22:21 INF - merge_snap_fix_input3 1
0:22:21 INF - ----------------------------------------
0:22:21 INF - overall 22m21s cpu:44h34m7s gc:1m23s avg:119.7
0:22:21 INF - lake_centerlines 3s cpu:9s avg:3.5
0:22:21 INF - read 2x(17% 0.4s done:2s)
0:22:21 INF - process 174x(0% 0s wait:2s)
0:22:21 INF - write 6x(0% 0s wait:2s)
0:22:21 INF - water_polygons 32s cpu:22m5s avg:40.9
0:22:21 INF - read 2x(16% 5s wait:9s done:18s)
0:22:21 INF - process 174x(20% 6s wait:25s)
0:22:21 INF - write 6x(74% 24s wait:8s)
0:22:21 INF - natural_earth 14s cpu:25s avg:1.7
0:22:21 INF - read 2x(24% 3s wait:2s done:9s)
0:22:21 INF - process 174x(0% 0.1s wait:11s done:3s)
0:22:21 INF - write 6x(0% 0s wait:11s done:3s)
0:22:21 INF - osm_pass1 58s cpu:1h30m37s gc:5s avg:94
0:22:21 INF - read 1x(65% 38s wait:2s done:13s)
0:22:21 INF - process 179x(45% 26s block:16s wait:11s done:1s)
0:22:21 INF - osm_pass2 9m19s cpu:22h48m33s gc:29s avg:147
0:22:21 INF - read 1x(11% 1m4s wait:7m20s done:49s)
0:22:21 INF - process 174x(76% 7m6s block:10s wait:1m6s done:2s)
0:22:21 INF - write 6x(70% 6m31s wait:2m6s)
0:22:21 INF - boundaries 8s cpu:10s avg:1.2
0:22:21 INF - agg_stop 0.3s cpu:0.9s avg:3.4
0:22:21 INF - sort 2m5s cpu:1h10m52s gc:8s avg:33.9
0:22:21 INF - worker 35x(8% 10s wait:1m28s done:6s)
0:22:21 INF - archive 9m1s cpu:18h41m14s gc:40s avg:124.4
0:22:21 INF - read 2x(51% 4m38s wait:3m40s done:11s)
0:22:21 INF - merge 1x(57% 5m8s wait:2m31s done:12s)
0:22:21 INF - encode 178x(64% 5m49s block:39s wait:1m40s done:12s)
0:22:21 INF - write 1x(24% 2m8s wait:6m29s done:12s)
0:22:21 INF - ----------------------------------------
0:22:21 INF - archive 69GB
0:22:21 INF - features 233GB

Wyświetl plik

@ -0,0 +1,907 @@
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=planet (name of the extract to download if osm_url/osm_path not specified (i.e. 'monaco' 'rhode island' 'australia' or 'planet'))
0:00:00 INF - 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=64 (num threads)
0:00:00 DEB - argument: write_threads=2 (number of threads to use when writing temp features)
0:00:00 DEB - argument: process_threads=62 (number of threads to use when processing input features)
0:00:00 DEB - argument: bounds=null (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=2 (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 [files, csv, tsv, proto, pbf, json])
0:00:00 DEB - argument: loginterval=10 seconds (time between logs)
0:00:00 DEB - argument: force=true (overwriting output file and ignore disk/RAM warnings)
0:00:00 DEB - argument: append=false (append to the output file - only supported by [files, 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=array (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=false (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=false (keep unzipped natural_earth after reading)
0:00:00 DEB - argument: osm_path=data/sources/planet.osm.pbf (osm OSM input file path)
0:00:00 DEB - argument: free_osm_after_read=false (delete osm input file after reading to make space for output (reduces peak disk usage))
0:00:00 DEB - argument: output=planet.pmtiles (output tile archive path)
0:00:00 DEB - argument: version=false (show version then exit)
0:00:00 INF - Planetiler build git hash: fdb9ea6e026e052b41fdaba069c3d743d50b08f3
0:00:00 INF - Planetiler build version: 0.7-SNAPSHOT
0:00:00 INF - Planetiler build timestamp: 2024-01-17T10:53:26.321Z
0:00:00 DEB - argument: transliterate=true (attempt to transliterate latin names)
0:00:00 DEB - argument: languages=am,ar,az,be,bg,bn,br,bs,ca,co,cs,cy,da,de,el,en,eo,es,et,eu,fa,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,pa,pnb,pl,pt,rm,ro,ru,sk,sl,sq,sr,sr-Latn,sv,ta,te,th,tr,uk,ur,vi,zh,zh-Hant,zh-Hans (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=false (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=/data/planet.pmtiles.layerstats.tsv.gz (layer stats output path)
0:00:00 INF - Building OpenMapTilesProfile profile into file:///data/planet.pmtiles 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=PMTILES, scheme=FILE, uri=file:///data/planet.pmtiles, options={}]
0:00:00 INF - no wikidata translations found, run with --fetch-wikidata to download
0:00:00 DEB - ✓ 360G storage on /data (/dev/md0) requested for read phase disk, 3.6T available
0:00:00 DEB - - 88G used for temporary node location cache
0:00:00 DEB - - 11G used for temporary multipolygon geometry cache
0:00:00 DEB - - 259G used for temporary feature storage
0:00:00 DEB - ✓ 389G storage on /data (/dev/md0) requested for write phase disk, 3.6T available
0:00:00 DEB - - 259G used for temporary feature storage
0:00:00 DEB - - 129G used for archive output
0:00:00 DEB - ✓ 100G storage on /data (/dev/md0) requested for read phase, 3.6T available
0:00:00 DEB - - 88G used for array node location cache (switch to sparsearray to reduce size)
0:00:00 DEB - - 11G used for multipolygon way geometries
0:00:00 DEB - ✓ 23G JVM heap requested for read phase, 32G available
0:00:00 DEB - - 23G used for temporary profile storage
0:00:00 WAR - Planetiler will use ~100G memory-mapped files for node locations and multipolygon geometries but the OS only
has 100G available to cache pages, this may slow the import down. To speed up, run on a machine with more
memory or reduce the -Xmx setting.
0:00:00 INF - Setting map bounds from input: Env[-180.0 : 180.0, -90.0 : 90.0]
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 INF - Using merge sort feature map, chunk size=2000mb max workers=64
0:00:00 INF [lake_centerlines] -
0:00:00 INF [lake_centerlines] - Starting...
0:00:03 INF [lake_centerlines] - read: [ 59k 100% 39k/s ] write: [ 0 0/s ] 0
cpus: 2.3 gc: 1% heap: 360M/32G direct: 262k postGC: 177M
-> (0/4) -> read( -% -%) -> (0/1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/114k) -> write( -% -%)
0:00:03 INF [lake_centerlines] - Finished in 2s cpu:8s avg:3.3
0:00:03 INF [lake_centerlines] - read 2x(27% 0.7s done:2s)
0:00:03 INF [lake_centerlines] - process 62x(0% 0s wait:1s done:1s)
0:00:03 INF [lake_centerlines] - write 2x(0% 0s wait:2s)
0:00:03 INF [water_polygons] -
0:00:03 INF [water_polygons] - Starting...
0:00:13 INF [water_polygons] - read: [ 4.2k 29% 427/s ] write: [ 25M 2.5M/s ] 4G
cpus: 57.2 gc: 7% heap: 11G/32G direct: 54M postGC: 4.5G
-> (0/4) -> read(91%) -> (151/1k) -> process(86% 86% 84% 85% 80% 85% 86% 80% 84% 82% 83% 87% 86% 84% 84% 86% 87% 85% 85% 88% 84% 81% 87% 80% 89% 87% 83% 84% 81% 79% 80% 82% 89% 83% 83% 87% 89% 86% 85% 84% 83% 85% 85% 84% 89% 81% 85% 85% 87% 83% 88% 84% 85% 85% 81% 80% 82% 88% 82% 84% 85% 81%) -> (35k/114k) -> write(18% 18%)
0:00:23 INF [water_polygons] - read: [ 8.6k 60% 440/s ] write: [ 88M 6.3M/s ] 7G
cpus: 42.4 gc: 5% heap: 10G/32G direct: 54M postGC: 6.4G
-> (0/4) -> read(38%) -> (1k/1k) -> process(94% 57% 59% 53% 54% 54% 60% 84% 54% 54% 54% 68% 78% 90% 55% 95% 54% 94% 56% 54% 53% 59% 57% 54% 53% 53% 62% 54% 54% 76% 55% 62% 80% 54% 93% 54% 54% 54% 76% 54% 57% 54% 65% 95% 61% 77% 56% 56% 53% 94% 54% 57% 58% 54% 55% 64% 53% 72% 55% 57% 56% 59%) -> (109k/114k) -> write(55% 55%)
0:00:33 INF [water_polygons] - read: [ 12k 89% 427/s ] write: [ 186M 9.7M/s ] 11G
cpus: 9.4 gc: 0% heap: 13G/32G direct: 54M postGC: 6.3G
-> (0/4) -> read( 0%) -> (1k/1k) -> process(26% 11% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 14% 10% 13% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 17% 10% 10% 10% 10% 10% 81% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10% 10%) -> (109k/114k) -> write(100% 100%)
0:00:36 INF [water_polygons] - read: [ 14k 100% 415/s ] write: [ 222M 9.7M/s ] 10G
cpus: 8.3 gc: 0% heap: 8.2G/32G direct: 54M postGC: 6.3G
-> (0/4) -> read( -%) -> (0/1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/114k) -> write( -% -%)
0:00:36 INF [water_polygons] - Finished in 34s cpu:18m42s gc:1s avg:33.2
0:00:36 INF [water_polygons] - read 2x(19% 6s wait:9s done:18s)
0:00:36 INF [water_polygons] - process 62x(48% 16s wait:16s)
0:00:36 INF [water_polygons] - write 2x(62% 21s wait:12s)
0:00:36 INF [natural_earth] -
0:00:36 INF [natural_earth] - Starting...
0:00:36 INF [natural_earth] - unzipping /data/data/sources/natural_earth_vector.sqlite.zip to data/tmp/%2Fnatural_earth_vector.sqlite%2Fpackages%2Fnatural_earth_vector.sqlite
0:00:40 INF [natural_earth] - unzipping /data/data/sources/natural_earth_vector.sqlite.zip to data/tmp/%2Fnatural_earth_vector.sqlite%2Fpackages%2Fnatural_earth_vector.sqlite
0:00:50 INF [natural_earth] - read: [ 269k 77% 26k/s ] write: [ 1k 99/s ] 14G
cpus: 2 gc: 0% heap: 13G/32G direct: 54M postGC: 6.3G
-> (0/4) -> read(99%) -> (0/1k) -> process( 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 2% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 1% 12% 1% 1% 1% 1% 1%) -> (26k/114k) -> write( 0% 0%)
0:00:52 INF [natural_earth] - read: [ 349k 100% 44k/s ] write: [ 33k 17k/s ] 10G
cpus: 1.6 gc: 0% heap: 14G/32G direct: 54M postGC: 6.3G
-> (0/4) -> read( -%) -> (0/1k) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/114k) -> write( -% -%)
0:00:52 INF [natural_earth] - Finished in 16s cpu:27s avg:1.7
0:00:52 INF [natural_earth] - read 2x(36% 6s done:10s)
0:00:52 INF [natural_earth] - process 62x(1% 0.1s wait:11s done:4s)
0:00:52 INF [natural_earth] - write 2x(0% 0s wait:12s done:4s)
0:00:52 INF [osm_pass1] -
0:00:52 INF [osm_pass1] - Starting...
0:01:02 INF [osm_pass1] - nodes: [ 1.5B 157M/s ] 17G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 6.6k 661/s ]
cpus: 58.7 gc: 3% heap: 15G/32G direct: 3.1G postGC: 7.1G hppc: 848
read( 3%) -> (127/190) -> process(91% 92% 91% 91% 92% 92% 91% 92% 92% 92% 91% 91% 91% 91% 92% 92% 91% 91% 91% 91% 92% 92% 91% 92% 91% 91% 91% 91% 92% 91% 92% 91% 91% 91% 91% 91% 92% 91% 91% 91% 92% 91% 91% 92% 91% 90% 91% 91% 91% 92% 91% 92% 92% 92% 90% 91% 91% 91% 91% 91% 91% 91% 91%)
0:01:12 INF [osm_pass1] - nodes: [ 3.4B 184M/s ] 35G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 12k 589/s ]
cpus: 58.8 gc: 5% heap: 9.1G/32G direct: 4.7G postGC: 8.5G hppc: 848
read( 3%) -> (127/190) -> process(91% 92% 90% 91% 91% 91% 92% 91% 90% 91% 91% 91% 91% 91% 91% 91% 91% 91% 90% 91% 92% 91% 92% 91% 91% 91% 90% 90% 91% 91% 91% 91% 91% 91% 91% 91% 90% 90% 91% 91% 91% 92% 91% 91% 91% 91% 91% 91% 92% 91% 91% 91% 90% 91% 90% 91% 91% 91% 91% 91% 91% 90% 92%)
0:01:22 INF [osm_pass1] - nodes: [ 5.4B 197M/s ] 54G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 18k 564/s ]
cpus: 59.4 gc: 3% heap: 21G/32G direct: 5.9G postGC: 8.9G hppc: 848
read( 4%) -> (127/190) -> process(93% 94% 85% 94% 90% 93% 92% 93% 92% 93% 93% 93% 93% 93% 93% 93% 93% 92% 93% 93% 93% 93% 93% 92% 92% 90% 93% 93% 93% 93% 93% 93% 92% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 92% 93% 94% 93% 93% 93% 93% 93% 92% 93% 93% 92% 93% 93% 93% 93% 93% 93% 92% 93%)
0:01:32 INF [osm_pass1] - nodes: [ 7.4B 199M/s ] 74G ways: [ 0 0/s ] rels: [ 0 0/s ] blocks: [ 23k 559/s ]
cpus: 60 gc: 3% heap: 22G/32G direct: 6.3G postGC: 9.1G hppc: 848
read( 5%) -> (127/190) -> process(94% 92% 82% 93% 94% 94% 94% 94% 93% 95% 94% 94% 95% 94% 93% 94% 94% 90% 95% 94% 94% 95% 94% 95% 95% 95% 95% 94% 95% 94% 95% 95% 95% 94% 94% 94% 94% 95% 92% 94% 94% 95% 93% 94% 95% 94% 94% 94% 95% 94% 95% 94% 94% 94% 94% 95% 94% 94% 95% 94% 94% 94% 94%)
0:01:41 INF [osm_pass1:process] - Finished nodes: 8,860,666,091 (179M/s) in 49s cpu:47m12s gc:2s avg:57.4
0:01:42 INF [osm_pass1] - nodes: [ 8.8B 145M/s ] 92G ways: [ 15M 1.5M/s ] rels: [ 0 0/s ] blocks: [ 28k 445/s ]
cpus: 50.2 gc: 6% heap: 9.8G/32G direct: 6.4G postGC: 7.8G hppc: 848
read( 4%) -> (124/190) -> process(77% 77% 79% 77% 75% 77% 76% 76% 77% 76% 77% 77% 77% 77% 77% 75% 77% 77% 77% 77% 77% 77% 75% 77% 76% 77% 75% 76% 77% 77% 76% 75% 74% 75% 77% 77% 75% 77% 77% 77% 77% 77% 75% 76% 75% 76% 77% 75% 77% 76% 75% 83% 76% 77% 77% 75% 76% 75% 77% 77% 73% 77% 76%)
0:01:52 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 460M 44M/s ] rels: [ 0 0/s ] blocks: [ 35k 703/s ]
cpus: 60.4 gc: 5% heap: 21G/32G direct: 6.4G postGC: 7.5G hppc: 848
read( 7%) -> (127/190) -> process(93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 94% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 94% 93% 93% 93% 94% 93% 93% 93% 93% 93% 93% 92% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93% 93%)
0:02:02 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 975M 51M/s ] rels: [ 0 0/s ] blocks: [ 42k 716/s ]
cpus: 61.3 gc: 4% heap: 18G/32G direct: 6.4G postGC: 7.6G hppc: 848
read( 8%) -> (127/190) -> process(94% 94% 95% 95% 95% 95% 95% 95% 95% 94% 94% 95% 94% 94% 94% 94% 95% 94% 95% 95% 94% 94% 94% 94% 95% 94% 94% 94% 94% 94% 94% 95% 95% 95% 94% 94% 94% 94% 95% 94% 94% 94% 95% 94% 95% 94% 94% 94% 94% 94% 95% 94% 95% 95% 95% 95% 94% 94% 95% 94% 94% 94% 94%)
0:02:03 INF [osm_pass1:process] - Finished ways: 992,064,323 (47M/s) in 21s cpu:21m18s avg:60.7
0:02:12 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 992M 1.6M/s ] rels: [ 8M 802k/s ] blocks: [ 42k 49/s ]
cpus: 12.1 gc: 3% heap: 4.2G/32G direct: 6.4G postGC: 4.2G hppc: 492M
read( -%) -> (71/190) -> process(12% 19% 17% 9% 11% 11% 12% 10% 10% 9% 10% 10% 14% 14% 13% 14% 16% 10% 14% 14% 12% 16% 10% 16% 16% 12% 14% 10% 14% 11% 14% 14% 14% 11% 16% 9% 12% 13% 9% 11% 11% 10% 10% 12% 15% 16% 9% 15% 12% 9% 13% 9% 10% 10% 12% 12% 11% 14% 15% 11% 14% 16% 14%)
0:02:16 INF [osm_pass1:process] - Finished relations: 11,728,203 (870k/s) in 13s cpu:2m16s avg:10.1
0:02:16 INF [osm_pass1] - nodes: [ 8.8B 0/s ] 92G ways: [ 992M 0/s ] rels: [ 11M 970k/s ] blocks: [ 43k 35/s ]
cpus: 9.3 gc: 1% heap: 4.1G/32G direct: 188M postGC: 3.5G hppc: 700M
read( -%) -> (0/190) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%)
0:02:16 DEB [osm_pass1] - Processed 43,112 blocks:
0:02:16 DEB [osm_pass1] - nodes: 8,860,666,091 (179M/s) in 49s cpu:47m12s gc:2s avg:57.4
0:02:16 DEB [osm_pass1] - ways: 992,064,323 (47M/s) in 21s cpu:21m18s avg:60.7
0:02:16 DEB [osm_pass1] - relations: 11,728,203 (870k/s) in 13s cpu:2m16s avg:10.1
0:02:16 INF [osm_pass1] - Finished in 1m24s cpu:1h10m52s gc:3s avg:50.7
0:02:16 INF [osm_pass1] - read 1x(4% 3s wait:1m6s done:6s)
0:02:16 INF [osm_pass1] - process 63x(77% 1m5s block:12s wait:2s)
0:02:16 INF [osm_pass2] -
0:02:16 INF [osm_pass2] - Starting...
0:02:26 INF [osm_pass2] - nodes: [ 559M 6% 55M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 271M 4.8M/s ] 19G blocks: [ 2.4k 6% 240/s ]
cpus: 51.7 gc: 7% heap: 8.4G/32G direct: 54M postGC: 4.6G relInfo: 700M mpGeoms: 277
read( 1%) -> (32/94) -> process(65% 67% 70% 71% 69% 70% 73% 69% 71% 70% 67% 68% 69% 70% 66% 68% 72% 67% 69% 73% 69% 72% 72% 73% 72% 74% 70% 71% 71% 70% 68% 72% 68% 71% 70% 70% 71% 70% 70% 71% 72% 71% 70% 71% 72% 68% 71% 72% 71% 71% 72% 71% 71% 72% 72% 71% 70% 70% 71% 69% 71% 72%) -> (42k/114k) -> write(54% 54%)
0:02:36 INF [osm_pass2] - nodes: [ 1.4B 16% 84M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 307M 3.5M/s ] 22G blocks: [ 5.9k 14% 355/s ]
cpus: 57.4 gc: 4% heap: 6.5G/32G direct: 54M postGC: 2.7G relInfo: 700M mpGeoms: 277
read( 2%) -> (32/94) -> process(84% 81% 80% 81% 84% 85% 84% 83% 84% 83% 83% 82% 82% 83% 82% 84% 79% 82% 83% 82% 83% 84% 83% 82% 83% 85% 82% 81% 82% 82% 83% 85% 84% 82% 81% 82% 83% 80% 87% 84% 82% 83% 84% 83% 83% 82% 83% 83% 83% 83% 81% 80% 83% 85% 83% 83% 83% 82% 81% 82% 83% 84%) -> (77k/114k) -> write(50% 52%)
0:02:46 INF [osm_pass2] - nodes: [ 2.2B 26% 88M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 351M 4.4M/s ] 27G blocks: [ 9.1k 21% 315/s ]
cpus: 54.6 gc: 4% heap: 10G/32G direct: 54M postGC: 2.6G relInfo: 700M mpGeoms: 277
read( 2%) -> (32/94) -> process(82% 81% 81% 82% 80% 81% 82% 81% 80% 83% 82% 82% 80% 81% 82% 82% 82% 79% 81% 81% 81% 81% 81% 82% 82% 81% 82% 82% 79% 82% 82% 81% 80% 82% 82% 82% 76% 81% 82% 82% 81% 79% 81% 82% 81% 82% 82% 80% 81% 82% 82% 80% 79% 82% 80% 82% 82% 82% 80% 82% 82% 81%) -> (90k/114k) -> write(69% 69%)
0:02:56 INF [osm_pass2] - nodes: [ 3.2B 37% 100M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 384M 3.2M/s ] 30G blocks: [ 12k 28% 298/s ]
cpus: 57.9 gc: 4% heap: 7.5G/32G direct: 54M postGC: 2.6G relInfo: 700M mpGeoms: 277
read( 2%) -> (32/94) -> process(87% 88% 86% 87% 87% 87% 87% 87% 87% 87% 87% 88% 87% 87% 87% 87% 88% 86% 87% 86% 87% 87% 86% 87% 87% 87% 87% 88% 84% 87% 88% 88% 87% 87% 87% 87% 87% 86% 88% 86% 87% 87% 88% 87% 87% 86% 88% 86% 87% 88% 87% 88% 88% 88% 87% 87% 87% 86% 86% 86% 88% 86%) -> (37k/114k) -> write(50% 51%)
0:03:06 INF [osm_pass2] - nodes: [ 4.3B 49% 105M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 419M 3.4M/s ] 33G blocks: [ 15k 35% 303/s ]
cpus: 60.3 gc: 3% heap: 14G/32G direct: 54M postGC: 2.6G relInfo: 700M mpGeoms: 277
read( 2%) -> (32/94) -> process(91% 93% 92% 92% 92% 92% 93% 92% 91% 92% 92% 91% 92% 91% 92% 92% 92% 92% 92% 92% 92% 91% 92% 92% 93% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 93% 92% 92% 92% 92% 91% 92% 91% 92% 92% 92% 92% 92% 91% 92% 92% 91% 92% 92% 92% 91% 92% 92% 92% 91% 92% 92%) -> (29k/114k) -> write(46% 46%)
0:03:16 INF [osm_pass2] - nodes: [ 5.4B 62% 109M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 448M 2.9M/s ] 35G blocks: [ 18k 43% 313/s ]
cpus: 59.9 gc: 3% heap: 7.8G/32G direct: 54M postGC: 2.5G relInfo: 700M mpGeoms: 277
read( 2%) -> (32/94) -> process(93% 92% 93% 93% 93% 92% 92% 92% 93% 93% 92% 93% 93% 93% 92% 92% 93% 93% 93% 93% 92% 93% 93% 93% 93% 93% 93% 93% 93% 92% 92% 92% 92% 93% 93% 93% 92% 93% 92% 93% 92% 92% 93% 93% 93% 92% 92% 93% 92% 92% 93% 93% 92% 92% 92% 93% 93% 92% 92% 92% 93% 92%) -> (50k/114k) -> write(41% 42%)
0:03:26 INF [osm_pass2] - nodes: [ 6.5B 74% 111M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 481M 3.2M/s ] 41G blocks: [ 21k 50% 312/s ]
cpus: 59.6 gc: 3% heap: 9.8G/32G direct: 54M postGC: 2.6G relInfo: 700M mpGeoms: 277
read( 2%) -> (32/94) -> process(92% 92% 92% 91% 92% 92% 92% 91% 91% 93% 93% 91% 92% 91% 92% 93% 92% 92% 92% 92% 92% 92% 91% 92% 92% 92% 93% 93% 92% 92% 93% 92% 92% 91% 92% 92% 92% 92% 92% 92% 92% 92% 92% 92% 93% 92% 92% 92% 91% 91% 92% 92% 92% 93% 92% 92% 92% 93% 92% 92% 93% 92%) -> (40k/114k) -> write(49% 50%)
0:03:36 INF [osm_pass2] - nodes: [ 7.6B 86% 106M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 514M 3.3M/s ] 43G blocks: [ 24k 57% 296/s ]
cpus: 59.2 gc: 3% heap: 4.8G/32G direct: 54M postGC: 2.5G relInfo: 700M mpGeoms: 277
read( 2%) -> (31/94) -> process(92% 92% 92% 93% 91% 92% 93% 91% 92% 92% 93% 91% 91% 91% 91% 92% 92% 93% 93% 92% 91% 91% 92% 93% 92% 92% 93% 92% 93% 91% 91% 92% 91% 93% 90% 91% 92% 91% 93% 93% 93% 91% 91% 92% 92% 91% 93% 92% 92% 91% 91% 90% 91% 92% 92% 90% 93% 93% 92% 92% 92% 91%) -> (49k/114k) -> write(48% 49%)
0:03:46 INF [osm_pass2] - nodes: [ 8.7B 98% 107M/s ] 92G ways: [ 0 0% 0/s ] rels: [ 0 0% 0/s ] features: [ 550M 3.5M/s ] 46G blocks: [ 27k 64% 306/s ]
cpus: 59.8 gc: 3% heap: 13G/32G direct: 54M postGC: 2.5G relInfo: 700M mpGeoms: 277
read( 2%) -> (32/94) -> process(92% 93% 92% 93% 93% 93% 93% 92% 94% 93% 93% 92% 93% 92% 93% 92% 93% 93% 93% 93% 94% 92% 93% 92% 92% 93% 92% 93% 93% 93% 93% 93% 93% 93% 92% 92% 94% 92% 93% 93% 93% 93% 93% 93% 93% 92% 92% 92% 92% 93% 93% 94% 93% 94% 94% 92% 94% 92% 93% 92% 93% 93%) -> (30k/114k) -> write(46% 46%)
0:03:48 DEB [osm_pass2:process] - Sorting long long multimap...
0:03:48 INF [osm_pass2:process] - Finished nodes: 8,860,666,091 (96M/s) in 1m32s cpu:1h28m19s gc:4s avg:57.8
0:03:54 DEB [osm_pass2:process] - Sorted long long multimap 6s cpu:14s avg:2.3
0:03:56 INF [osm_pass2] - nodes: [ 8.8B 100% 14M/s ] 92G ways: [ 608k 0% 60k/s ] rels: [ 0 0% 0/s ] features: [ 558M 867k/s ] 47G blocks: [ 27k 65% 44/s ]
cpus: 16.2 gc: 1% heap: 6.4G/32G direct: 55M postGC: 3G relInfo: 564M mpGeoms: 9.6M
read( 0%) -> (32/94) -> process(21% 21% 22% 23% 19% 22% 20% 22% 20% 21% 19% 20% 21% 21% 24% 22% 24% 20% 20% 21% 21% 22% 25% 22% 19% 20% 21% 21% 20% 22% 22% 19% 24% 20% 79% 21% 22% 21% 21% 21% 20% 21% 20% 21% 22% 20% 22% 20% 21% 21% 22% 20% 19% 20% 21% 23% 19% 19% 22% 21% 19% 24%) -> (36k/114k) -> write(11% 11%)
0:04:06 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 5.6M 1% 498k/s ] rels: [ 0 0% 0/s ] features: [ 591M 3.2M/s ] 51G blocks: [ 28k 65% 9/s ]
cpus: 30.1 gc: 4% heap: 3.6G/32G direct: 57M postGC: 3.4G relInfo: 564M mpGeoms: 65M
read( 0%) -> (32/94) -> process(49% 53% 52% 46% 37% 45% 44% 46% 38% 48% 35% 37% 46% 46% 46% 44% 41% 39% 39% 45% 48% 45% 44% 53% 38% 38% 44% 44% 50% 45% 46% 36% 47% 43% 41% 52% 43% 44% 45% 43% 39% 46% 37% 51% 47% 42% 49% 45% 48% 41% 50% 39% 40% 44% 45% 54% 40% 38% 44% 48% 36% 47%) -> (31k/114k) -> write(49% 49%)
0:04:16 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 13M 1% 758k/s ] rels: [ 0 0% 0/s ] features: [ 636M 4.4M/s ] 55G blocks: [ 28k 65% 18/s ]
cpus: 39.5 gc: 5% heap: 4.8G/32G direct: 57M postGC: 4.9G relInfo: 564M mpGeoms: 130M
read( 0%) -> (32/94) -> process(57% 61% 60% 53% 52% 60% 58% 61% 61% 58% 57% 55% 57% 59% 57% 60% 62% 59% 58% 52% 58% 56% 57% 53% 51% 56% 63% 59% 55% 57% 61% 58% 55% 56% 61% 55% 59% 59% 60% 61% 55% 58% 58% 57% 61% 61% 54% 61% 59% 61% 58% 60% 57% 53% 60% 60% 59% 58% 62% 60% 60% 56%) -> (34k/114k) -> write(81% 81%)
0:04:26 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 18M 2% 483k/s ] rels: [ 0 0% 0/s ] features: [ 663M 2.7M/s ] 57G blocks: [ 28k 66% 10/s ]
cpus: 38.2 gc: 4% heap: 6.8G/32G direct: 57M postGC: 4.5G relInfo: 564M mpGeoms: 261M
read( 0%) -> (32/94) -> process(57% 59% 67% 61% 54% 57% 56% 58% 54% 55% 56% 55% 58% 57% 61% 68% 58% 57% 63% 54% 55% 53% 58% 57% 55% 57% 61% 57% 56% 58% 56% 58% 61% 56% 64% 58% 57% 59% 56% 57% 57% 58% 57% 62% 55% 57% 56% 63% 55% 60% 57% 56% 53% 56% 57% 60% 55% 55% 61% 59% 55% 56%) -> (33k/114k) -> write(40% 40%)
0:04:36 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 24M 2% 659k/s ] rels: [ 0 0% 0/s ] features: [ 694M 3M/s ] 60G blocks: [ 28k 66% 14/s ]
cpus: 45.4 gc: 7% heap: 7.9G/32G direct: 57M postGC: 4.7G relInfo: 564M mpGeoms: 427M
read( 0%) -> (32/94) -> process(71% 66% 66% 74% 68% 66% 67% 62% 71% 64% 71% 65% 67% 75% 65% 67% 65% 74% 71% 66% 73% 67% 65% 65% 67% 64% 65% 77% 68% 67% 69% 71% 71% 74% 71% 67% 66% 74% 66% 70% 63% 75% 73% 69% 69% 69% 73% 67% 66% 66% 65% 70% 66% 67% 70% 68% 66% 58% 65% 66% 68% 70%) -> (31k/114k) -> write(48% 48%)
0:04:46 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 30M 3% 601k/s ] rels: [ 0 0% 0/s ] features: [ 720M 2.5M/s ] 63G blocks: [ 28k 66% 12/s ]
cpus: 51.5 gc: 6% heap: 7.9G/32G direct: 57M postGC: 4.8G relInfo: 564M mpGeoms: 620M
read( 0%) -> (32/94) -> process(82% 75% 76% 74% 75% 72% 76% 86% 74% 74% 74% 83% 76% 77% 85% 74% 79% 78% 73% 83% 84% 73% 76% 85% 75% 76% 83% 75% 75% 76% 76% 74% 78% 72% 84% 74% 84% 73% 76% 75% 73% 83% 78% 83% 77% 86% 75% 77% 78% 86% 73% 87% 74% 78% 76% 83% 76% 76% 83% 76% 77% 76%) -> (32k/114k) -> write(40% 40%)
0:04:56 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 38M 4% 804k/s ] rels: [ 0 0% 0/s ] features: [ 745M 2.5M/s ] 65G blocks: [ 28k 67% 16/s ]
cpus: 53.5 gc: 6% heap: 8.4G/32G direct: 57M postGC: 4.6G relInfo: 564M mpGeoms: 757M
read( 0%) -> (32/94) -> process(86% 79% 80% 78% 80% 78% 79% 82% 80% 76% 79% 85% 79% 80% 85% 80% 77% 79% 80% 90% 79% 79% 78% 78% 77% 82% 83% 79% 81% 81% 82% 79% 79% 81% 85% 83% 85% 84% 78% 80% 80% 83% 82% 83% 77% 86% 80% 78% 81% 88% 80% 87% 81% 81% 80% 81% 82% 78% 78% 79% 79% 82%) -> (31k/114k) -> write(47% 47%)
0:05:06 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 50M 5% 1.1M/s ] rels: [ 0 0% 0/s ] features: [ 770M 2.5M/s ] 66G blocks: [ 28k 67% 21/s ]
cpus: 54.9 gc: 6% heap: 6.6G/32G direct: 57M postGC: 4.5G relInfo: 564M mpGeoms: 878M
read( 0%) -> (32/94) -> process(84% 82% 81% 84% 82% 85% 84% 84% 83% 84% 84% 82% 83% 82% 81% 83% 81% 83% 84% 84% 83% 85% 83% 83% 82% 82% 83% 82% 83% 82% 84% 85% 83% 83% 84% 84% 82% 82% 83% 84% 84% 83% 83% 82% 84% 82% 84% 83% 84% 83% 84% 84% 82% 82% 84% 82% 84% 83% 84% 81% 84% 82%) -> (33k/114k) -> write(42% 42%)
0:05:16 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 59M 6% 898k/s ] rels: [ 0 0% 0/s ] features: [ 793M 2.2M/s ] 69G blocks: [ 29k 68% 17/s ]
cpus: 55.6 gc: 6% heap: 11G/32G direct: 57M postGC: 4.1G relInfo: 564M mpGeoms: 1G
read( 0%) -> (32/94) -> process(86% 84% 84% 85% 88% 83% 86% 83% 84% 86% 86% 83% 84% 85% 82% 84% 83% 83% 84% 84% 85% 81% 84% 84% 87% 83% 86% 81% 87% 86% 86% 85% 84% 83% 87% 85% 86% 83% 84% 86% 84% 84% 84% 86% 85% 83% 85% 82% 85% 82% 84% 87% 86% 83% 83% 83% 87% 85% 88% 83% 83% 86%) -> (29k/114k) -> write(37% 36%)
0:05:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 68M 7% 894k/s ] rels: [ 0 0% 0/s ] features: [ 817M 2.4M/s ] 70G blocks: [ 29k 68% 17/s ]
cpus: 55.4 gc: 6% heap: 7.6G/32G direct: 57M postGC: 3.5G relInfo: 564M mpGeoms: 1.1G
read( 0%) -> (32/94) -> process(82% 82% 82% 83% 84% 83% 84% 81% 83% 86% 83% 83% 84% 83% 84% 84% 82% 82% 83% 83% 83% 85% 83% 82% 84% 83% 85% 84% 84% 85% 84% 84% 83% 83% 85% 86% 86% 84% 83% 85% 82% 83% 84% 84% 86% 84% 84% 84% 85% 83% 84% 89% 84% 82% 83% 83% 85% 85% 86% 82% 86% 83%) -> (34k/114k) -> write(43% 43%)
0:05:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 79M 8% 1M/s ] rels: [ 0 0% 0/s ] features: [ 846M 2.8M/s ] 72G blocks: [ 29k 68% 18/s ]
cpus: 55.9 gc: 6% heap: 12G/32G direct: 57M postGC: 5.7G relInfo: 564M mpGeoms: 1.2G
read( 0%) -> (32/94) -> process(85% 85% 85% 85% 85% 86% 84% 86% 87% 86% 85% 84% 85% 84% 85% 85% 86% 85% 83% 84% 85% 85% 84% 85% 83% 84% 84% 85% 85% 85% 85% 83% 86% 84% 85% 84% 84% 85% 84% 84% 83% 85% 85% 84% 84% 85% 84% 86% 83% 83% 84% 84% 85% 84% 85% 84% 86% 84% 85% 85% 85% 85%) -> (31k/114k) -> write(50% 50%)
0:05:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 90M 9% 1.1M/s ] rels: [ 0 0% 0/s ] features: [ 876M 3M/s ] 75G blocks: [ 29k 69% 19/s ]
cpus: 55.4 gc: 6% heap: 13G/32G direct: 57M postGC: 4.9G relInfo: 564M mpGeoms: 1.4G
read( 0%) -> (32/94) -> process(84% 83% 83% 83% 83% 84% 83% 84% 84% 83% 84% 84% 83% 83% 82% 83% 83% 83% 83% 83% 82% 82% 84% 82% 85% 84% 84% 85% 85% 84% 83% 84% 84% 83% 84% 82% 84% 84% 84% 83% 84% 84% 82% 85% 83% 84% 82% 84% 85% 83% 83% 81% 83% 83% 84% 84% 85% 82% 83% 84% 84% 84%) -> (33k/114k) -> write(53% 53%)
0:05:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 100M 10% 1M/s ] rels: [ 0 0% 0/s ] features: [ 904M 2.7M/s ] 77G blocks: [ 29k 69% 15/s ]
cpus: 56.1 gc: 7% heap: 4.4G/32G direct: 57M postGC: 4.1G relInfo: 564M mpGeoms: 1.6G
read( 0%) -> (32/94) -> process(84% 85% 85% 85% 85% 85% 84% 84% 84% 85% 86% 85% 85% 86% 87% 83% 85% 85% 85% 84% 83% 85% 85% 85% 85% 86% 85% 86% 85% 85% 85% 85% 84% 84% 85% 86% 85% 85% 84% 85% 85% 86% 86% 85% 84% 85% 84% 84% 84% 86% 86% 85% 86% 85% 84% 86% 84% 85% 86% 85% 85% 86%) -> (30k/114k) -> write(47% 46%)
0:06:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 112M 11% 1.1M/s ] rels: [ 0 0% 0/s ] features: [ 934M 3M/s ] 80G blocks: [ 30k 70% 18/s ]
cpus: 56 gc: 6% heap: 8.3G/32G direct: 57M postGC: 6.2G relInfo: 564M mpGeoms: 1.7G
read( 0%) -> (32/94) -> process(84% 84% 85% 85% 85% 85% 85% 85% 84% 85% 83% 84% 86% 85% 85% 84% 85% 84% 84% 84% 85% 85% 84% 85% 85% 84% 84% 85% 85% 84% 85% 85% 86% 85% 85% 85% 85% 85% 85% 84% 85% 85% 86% 85% 85% 85% 85% 84% 85% 84% 84% 84% 85% 85% 85% 85% 86% 85% 85% 84% 84% 86%) -> (30k/114k) -> write(52% 52%)
0:06:17 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 124M 13% 1.1M/s ] rels: [ 0 0% 0/s ] features: [ 967M 3.2M/s ] 82G blocks: [ 30k 70% 20/s ]
cpus: 56.4 gc: 6% heap: 13G/32G direct: 57M postGC: 5.2G relInfo: 564M mpGeoms: 1.8G
read( 0%) -> (32/94) -> process(85% 85% 85% 84% 85% 85% 84% 85% 85% 86% 85% 86% 85% 85% 85% 85% 85% 85% 85% 85% 86% 85% 85% 84% 84% 84% 85% 85% 86% 85% 85% 85% 86% 85% 85% 84% 85% 85% 85% 86% 85% 85% 85% 86% 86% 87% 86% 85% 85% 84% 83% 85% 85% 86% 86% 84% 85% 85% 84% 86% 85% 85%) -> (33k/114k) -> write(55% 54%)
0:06:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 135M 14% 1M/s ] rels: [ 0 0% 0/s ] features: [ 996M 2.9M/s ] 85G blocks: [ 30k 71% 16/s ]
cpus: 56.8 gc: 6% heap: 12G/32G direct: 57M postGC: 3.7G relInfo: 564M mpGeoms: 1.9G
read( 0%) -> (32/94) -> process(86% 87% 85% 86% 86% 87% 84% 85% 87% 86% 86% 86% 87% 86% 86% 86% 86% 85% 86% 85% 85% 86% 86% 86% 86% 86% 86% 86% 85% 86% 87% 85% 86% 85% 86% 86% 86% 86% 86% 86% 86% 87% 86% 86% 85% 86% 87% 86% 86% 86% 86% 86% 85% 86% 86% 87% 85% 86% 87% 85% 86% 86%) -> (29k/114k) -> write(49% 48%)
0:06:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 146M 15% 1.1M/s ] rels: [ 0 0% 0/s ] features: [ 1B 2.9M/s ] 87G blocks: [ 30k 71% 18/s ]
cpus: 57.2 gc: 7% heap: 10G/32G direct: 57M postGC: 5.7G relInfo: 564M mpGeoms: 2.1G
read( 0%) -> (32/94) -> process(86% 86% 87% 86% 86% 87% 87% 87% 86% 87% 86% 87% 87% 87% 87% 86% 87% 86% 86% 87% 88% 86% 86% 86% 87% 86% 86% 86% 87% 86% 87% 86% 87% 86% 86% 85% 87% 86% 85% 87% 85% 86% 86% 87% 86% 87% 86% 86% 87% 86% 86% 86% 87% 85% 87% 87% 87% 86% 86% 86% 87% 86%) -> (31k/114k) -> write(52% 52%)
0:06:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 158M 16% 1.2M/s ] rels: [ 0 0% 0/s ] features: [ 1B 2.9M/s ] 89G blocks: [ 30k 71% 19/s ]
cpus: 57.4 gc: 7% heap: 12G/32G direct: 57M postGC: 4.5G relInfo: 564M mpGeoms: 2.2G
read( 0%) -> (32/94) -> process(86% 87% 86% 87% 86% 86% 87% 87% 86% 86% 86% 87% 87% 87% 87% 87% 87% 86% 86% 86% 86% 86% 85% 87% 86% 87% 87% 88% 86% 87% 86% 87% 86% 86% 87% 87% 87% 85% 86% 87% 87% 86% 86% 87% 86% 88% 88% 87% 86% 87% 87% 86% 86% 87% 86% 87% 88% 87% 87% 87% 86% 86%) -> (34k/114k) -> write(49% 49%)
0:06:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 170M 17% 1.1M/s ] rels: [ 0 0% 0/s ] features: [ 1B 2.9M/s ] 92G blocks: [ 30k 72% 18/s ]
cpus: 57.3 gc: 7% heap: 13G/32G direct: 57M postGC: 6.7G relInfo: 564M mpGeoms: 2.3G
read( 0%) -> (32/94) -> process(87% 86% 87% 87% 86% 87% 87% 87% 86% 87% 86% 86% 87% 85% 87% 87% 87% 86% 87% 87% 87% 89% 87% 87% 87% 87% 87% 86% 85% 86% 86% 87% 87% 87% 86% 87% 87% 87% 86% 86% 87% 87% 86% 86% 86% 87% 86% 87% 86% 87% 87% 87% 86% 87% 86% 87% 87% 87% 87% 86% 86% 87%) -> (33k/114k) -> write(52% 52%)
0:07:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 182M 18% 1.1M/s ] rels: [ 0 0% 0/s ] features: [ 1.1B 2.9M/s ] 94G blocks: [ 31k 72% 18/s ]
cpus: 57.3 gc: 7% heap: 5.5G/32G direct: 57M postGC: 5.6G relInfo: 564M mpGeoms: 2.5G
read( 0%) -> (32/94) -> process(87% 86% 86% 86% 87% 85% 86% 87% 86% 86% 86% 87% 86% 87% 86% 86% 86% 86% 86% 86% 85% 87% 86% 87% 86% 87% 87% 86% 86% 86% 87% 85% 85% 86% 85% 86% 87% 86% 90% 87% 86% 87% 86% 87% 86% 87% 87% 87% 87% 86% 87% 86% 86% 87% 86% 86% 86% 86% 86% 88% 86% 86%) -> (30k/114k) -> write(54% 54%)
0:07:17 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 194M 20% 1.2M/s ] rels: [ 0 0% 0/s ] features: [ 1.1B 2.8M/s ] 96G blocks: [ 31k 73% 19/s ]
cpus: 57.2 gc: 7% heap: 5G/32G direct: 57M postGC: 4.4G relInfo: 564M mpGeoms: 2.6G
read( 0%) -> (32/94) -> process(87% 86% 86% 87% 86% 86% 86% 86% 86% 86% 86% 85% 86% 86% 86% 87% 86% 86% 86% 86% 86% 87% 86% 86% 87% 86% 87% 87% 86% 86% 86% 86% 86% 85% 86% 86% 87% 86% 87% 85% 85% 87% 86% 86% 85% 86% 85% 86% 86% 85% 86% 86% 86% 86% 86% 86% 87% 87% 86% 86% 87% 87%) -> (31k/114k) -> write(52% 52%)
0:07:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 207M 21% 1.2M/s ] rels: [ 0 0% 0/s ] features: [ 1.1B 2.5M/s ] 98G blocks: [ 31k 73% 20/s ]
cpus: 57 gc: 7% heap: 7.2G/32G direct: 57M postGC: 6.8G relInfo: 564M mpGeoms: 2.8G
read( 0%) -> (32/94) -> process(87% 86% 86% 87% 86% 86% 85% 86% 87% 86% 86% 86% 87% 86% 86% 87% 87% 87% 86% 86% 85% 86% 87% 86% 87% 86% 86% 86% 86% 86% 86% 86% 86% 87% 87% 87% 87% 86% 87% 86% 86% 86% 85% 87% 86% 86% 85% 87% 87% 87% 85% 87% 87% 86% 86% 86% 87% 87% 86% 86% 86% 86%) -> (30k/114k) -> write(45% 44%)
0:07:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 220M 22% 1.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.1B 2.6M/s ] 100G blocks: [ 31k 74% 23/s ]
cpus: 57.3 gc: 7% heap: 16G/32G direct: 57M postGC: 6.2G relInfo: 564M mpGeoms: 2.9G
read( 0%) -> (32/94) -> process(87% 87% 87% 87% 87% 86% 87% 85% 87% 85% 87% 87% 87% 86% 87% 86% 87% 85% 86% 87% 86% 87% 86% 87% 86% 86% 86% 87% 87% 87% 86% 86% 87% 87% 86% 88% 87% 86% 86% 87% 86% 87% 87% 86% 87% 87% 86% 86% 86% 87% 85% 87% 87% 87% 86% 87% 85% 86% 87% 87% 86% 87%) -> (31k/114k) -> write(46% 46%)
0:07:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 232M 23% 1.2M/s ] rels: [ 0 0% 0/s ] features: [ 1.2B 2.6M/s ] 102G blocks: [ 31k 74% 18/s ]
cpus: 56.9 gc: 7% heap: 4.1G/32G direct: 57M postGC: 4.1G relInfo: 564M mpGeoms: 3.1G
read( 0%) -> (32/94) -> process(86% 86% 86% 86% 86% 87% 86% 87% 85% 86% 85% 86% 86% 86% 86% 86% 86% 86% 87% 85% 85% 86% 85% 87% 85% 86% 87% 86% 86% 85% 86% 86% 85% 87% 84% 86% 87% 86% 85% 86% 87% 85% 86% 86% 86% 86% 85% 87% 85% 85% 87% 86% 86% 86% 86% 86% 85% 86% 86% 87% 86% 86%) -> (28k/114k) -> write(48% 48%)
0:07:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 244M 25% 1.1M/s ] rels: [ 0 0% 0/s ] features: [ 1.2B 2.8M/s ] 103G blocks: [ 32k 75% 19/s ]
cpus: 57.2 gc: 5% heap: 5.8G/32G direct: 57M postGC: 4.2G relInfo: 564M mpGeoms: 3.2G
read( 0%) -> (32/94) -> process(88% 87% 87% 88% 86% 87% 87% 87% 87% 88% 87% 87% 86% 87% 87% 87% 87% 87% 87% 86% 88% 88% 88% 87% 86% 88% 88% 88% 87% 87% 87% 87% 87% 88% 87% 88% 88% 87% 87% 88% 87% 87% 86% 87% 87% 88% 87% 88% 87% 87% 86% 87% 88% 88% 88% 87% 87% 87% 88% 87% 87% 87%) -> (36k/114k) -> write(51% 50%)
0:08:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 256M 26% 1.2M/s ] rels: [ 0 0% 0/s ] features: [ 1.2B 2.7M/s ] 106G blocks: [ 32k 75% 18/s ]
cpus: 57.4 gc: 5% heap: 11G/32G direct: 57M postGC: 4.4G relInfo: 564M mpGeoms: 3.4G
read( 0%) -> (32/94) -> process(88% 87% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 87% 88% 88% 88% 87% 88% 88% 88% 89% 85% 88% 88% 88% 87% 88% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 87% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 89% 89% 88%) -> (32k/114k) -> write(49% 49%)
0:08:17 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 270M 27% 1.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.3B 2.7M/s ] 108G blocks: [ 32k 76% 19/s ]
cpus: 57.1 gc: 5% heap: 5.3G/32G direct: 57M postGC: 4.4G relInfo: 564M mpGeoms: 3.6G
read( 0%) -> (32/94) -> process(87% 87% 87% 87% 87% 87% 87% 88% 87% 87% 88% 87% 88% 87% 87% 88% 87% 88% 88% 88% 87% 87% 87% 88% 87% 87% 88% 88% 88% 87% 87% 87% 88% 87% 87% 87% 88% 87% 87% 88% 88% 87% 87% 88% 88% 87% 87% 87% 88% 87% 87% 88% 88% 88% 87% 87% 86% 87% 88% 88% 88% 87%) -> (43k/114k) -> write(48% 47%)
0:08:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 284M 29% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.3B 2.7M/s ] 109G blocks: [ 32k 76% 20/s ]
cpus: 57.2 gc: 5% heap: 10G/32G direct: 57M postGC: 4.4G relInfo: 564M mpGeoms: 3.7G
read( 0%) -> (32/94) -> process(88% 88% 87% 87% 88% 89% 88% 88% 87% 88% 88% 88% 88% 88% 88% 87% 87% 88% 88% 88% 87% 88% 88% 88% 87% 87% 88% 87% 88% 87% 87% 88% 88% 88% 87% 88% 89% 88% 87% 86% 88% 88% 88% 89% 89% 89% 88% 88% 88% 88% 88% 87% 87% 88% 87% 86% 88% 87% 88% 87% 89% 87%) -> (32k/114k) -> write(48% 48%)
0:08:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 297M 30% 1.2M/s ] rels: [ 0 0% 0/s ] features: [ 1.3B 2.8M/s ] 112G blocks: [ 32k 76% 19/s ]
cpus: 57 gc: 5% heap: 7.7G/32G direct: 57M postGC: 4.5G relInfo: 564M mpGeoms: 3.9G
read( 0%) -> (32/94) -> process(88% 87% 88% 87% 88% 88% 87% 88% 87% 87% 87% 87% 88% 86% 87% 87% 88% 88% 88% 88% 87% 87% 88% 87% 88% 87% 88% 87% 87% 86% 87% 87% 87% 86% 88% 88% 87% 87% 87% 87% 87% 88% 87% 87% 88% 88% 88% 88% 86% 88% 87% 87% 87% 87% 87% 89% 87% 88% 87% 86% 88% 87%) -> (30k/114k) -> write(49% 48%)
0:08:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 310M 31% 1.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.3B 2.7M/s ] 114G blocks: [ 33k 77% 19/s ]
cpus: 57.5 gc: 5% heap: 4.4G/32G direct: 57M postGC: 4.5G relInfo: 564M mpGeoms: 4.1G
read( 0%) -> (32/94) -> process(88% 88% 88% 88% 88% 88% 88% 89% 89% 88% 88% 87% 88% 88% 87% 88% 88% 88% 87% 89% 88% 89% 88% 88% 89% 89% 87% 89% 87% 88% 88% 88% 88% 89% 88% 89% 89% 88% 88% 88% 88% 87% 88% 88% 88% 88% 88% 88% 89% 88% 88% 87% 87% 89% 89% 88% 88% 87% 88% 88% 87% 87%) -> (31k/114k) -> write(47% 47%)
0:08:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 324M 33% 1.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.4B 2.7M/s ] 116G blocks: [ 33k 77% 20/s ]
cpus: 57.7 gc: 5% heap: 7.9G/32G direct: 57M postGC: 4.7G relInfo: 564M mpGeoms: 4.2G
read( 0%) -> (32/94) -> process(88% 89% 88% 89% 88% 88% 89% 88% 87% 89% 89% 88% 88% 88% 89% 88% 88% 89% 89% 88% 89% 88% 88% 87% 89% 88% 88% 89% 88% 88% 89% 89% 89% 88% 88% 88% 89% 89% 88% 88% 88% 89% 88% 88% 89% 89% 88% 89% 90% 89% 89% 89% 89% 88% 88% 88% 88% 89% 88% 89% 89% 86%) -> (31k/114k) -> write(48% 48%)
0:09:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 338M 34% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.4B 2.7M/s ] 118G blocks: [ 33k 78% 20/s ]
cpus: 57.4 gc: 5% heap: 6.3G/32G direct: 57M postGC: 4.8G relInfo: 564M mpGeoms: 4.3G
read( 0%) -> (32/94) -> process(87% 88% 88% 88% 87% 88% 89% 86% 88% 88% 90% 88% 88% 87% 87% 88% 88% 87% 88% 87% 87% 88% 88% 87% 88% 87% 88% 88% 86% 88% 87% 88% 88% 87% 87% 88% 88% 87% 88% 88% 89% 88% 87% 87% 88% 88% 88% 88% 87% 89% 87% 87% 89% 88% 88% 88% 87% 88% 88% 87% 88% 87%) -> (32k/114k) -> write(46% 46%)
0:09:17 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 352M 36% 1.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.4B 2.7M/s ] 118G blocks: [ 33k 78% 21/s ]
cpus: 57.4 gc: 5% heap: 14G/32G direct: 57M postGC: 5G relInfo: 564M mpGeoms: 4.5G
read( 0%) -> (32/94) -> process(88% 88% 88% 89% 87% 88% 88% 89% 88% 88% 88% 88% 88% 87% 87% 88% 88% 87% 87% 88% 89% 88% 88% 88% 87% 87% 87% 88% 88% 88% 87% 88% 88% 88% 88% 87% 88% 88% 89% 88% 88% 88% 88% 88% 88% 88% 88% 87% 87% 88% 88% 88% 88% 88% 88% 88% 87% 88% 88% 89% 88% 88%) -> (32k/114k) -> write(47% 47%)
0:09:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 366M 37% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.5B 2.7M/s ] 121G blocks: [ 34k 79% 21/s ]
cpus: 57.6 gc: 6% heap: 7.6G/32G direct: 57M postGC: 4.9G relInfo: 564M mpGeoms: 4.6G
read( 0%) -> (32/94) -> process(88% 89% 89% 89% 88% 89% 89% 88% 88% 89% 88% 88% 88% 89% 88% 89% 88% 89% 88% 88% 88% 89% 87% 88% 87% 89% 88% 88% 89% 88% 89% 89% 88% 89% 88% 88% 89% 89% 88% 89% 88% 88% 88% 88% 89% 88% 89% 89% 89% 88% 88% 89% 89% 89% 88% 88% 88% 88% 88% 89% 88% 88%) -> (32k/114k) -> write(45% 45%)
0:09:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 380M 38% 1.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.5B 2.6M/s ] 123G blocks: [ 34k 79% 20/s ]
cpus: 56.8 gc: 6% heap: 14G/32G direct: 57M postGC: 5.6G relInfo: 564M mpGeoms: 4.9G
read( 0%) -> (32/94) -> process(87% 87% 87% 87% 87% 87% 87% 87% 87% 86% 87% 86% 86% 87% 87% 86% 87% 86% 87% 87% 87% 87% 86% 85% 87% 86% 86% 87% 87% 87% 87% 86% 86% 87% 87% 86% 87% 86% 86% 87% 86% 87% 87% 87% 87% 87% 86% 87% 87% 88% 87% 87% 87% 86% 87% 87% 87% 86% 87% 87% 87% 86%) -> (32k/114k) -> write(44% 44%)
0:09:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 395M 40% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.5B 2.7M/s ] 125G blocks: [ 34k 80% 20/s ]
cpus: 57.9 gc: 5% heap: 9.9G/32G direct: 57M postGC: 5.6G relInfo: 564M mpGeoms: 5G
read( 0%) -> (32/94) -> process(89% 89% 89% 88% 89% 88% 90% 89% 89% 88% 89% 88% 89% 89% 89% 90% 89% 88% 89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 90% 88% 90% 89% 89% 89% 90% 89% 88% 89% 89% 89% 89% 90% 89% 89% 89% 89% 90% 89% 88% 89% 90% 89% 88% 89% 89% 89% 89%) -> (30k/114k) -> write(45% 45%)
0:09:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 411M 41% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.5B 2.7M/s ] 127G blocks: [ 34k 80% 21/s ]
cpus: 58.1 gc: 5% heap: 9.9G/32G direct: 57M postGC: 5.7G relInfo: 564M mpGeoms: 5.1G
read( 0%) -> (32/94) -> process(89% 90% 89% 90% 90% 89% 89% 89% 89% 90% 89% 89% 88% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 89% 87% 89% 89% 89% 90% 89% 89% 90% 89% 89% 89% 90% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89%) -> (33k/114k) -> write(45% 45%)
0:10:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 427M 43% 1.6M/s ] rels: [ 0 0% 0/s ] features: [ 1.6B 2.7M/s ] 129G blocks: [ 34k 81% 22/s ]
cpus: 58.2 gc: 5% heap: 12G/32G direct: 57M postGC: 5.7G relInfo: 564M mpGeoms: 5.2G
read( 0%) -> (32/94) -> process(90% 90% 90% 89% 89% 89% 90% 89% 89% 90% 90% 89% 90% 89% 89% 89% 89% 90% 90% 89% 89% 90% 89% 89% 90% 90% 90% 90% 90% 90% 90% 89% 89% 89% 89% 89% 89% 90% 89% 90% 90% 89% 89% 90% 90% 90% 89% 89% 89% 89% 90% 89% 89% 90% 89% 89% 89% 90% 89% 90% 90% 89%) -> (34k/114k) -> write(45% 45%)
0:10:17 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 442M 45% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.6B 2.8M/s ] 131G blocks: [ 35k 81% 20/s ]
cpus: 58.2 gc: 5% heap: 16G/32G direct: 57M postGC: 5.7G relInfo: 564M mpGeoms: 5.3G
read( 0%) -> (32/94) -> process(89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 90% 89% 90% 89% 90% 89% 89% 89% 89% 90% 90% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 90% 89% 88% 89% 89% 90%) -> (36k/114k) -> write(48% 48%)
0:10:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 457M 46% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.6B 2.9M/s ] 132G blocks: [ 35k 82% 21/s ]
cpus: 57.9 gc: 5% heap: 8.5G/32G direct: 57M postGC: 5.7G relInfo: 564M mpGeoms: 5.5G
read( 0%) -> (32/94) -> process(89% 89% 90% 90% 89% 89% 89% 89% 90% 89% 88% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 88% 88% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 89% 88% 88% 89% 89% 89% 89% 90% 89% 89% 88% 89% 88% 87% 89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89%) -> (35k/114k) -> write(51% 51%)
0:10:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 474M 48% 1.6M/s ] rels: [ 0 0% 0/s ] features: [ 1.6B 2.8M/s ] 134G blocks: [ 35k 82% 21/s ]
cpus: 58.2 gc: 5% heap: 8.6G/32G direct: 57M postGC: 5.7G relInfo: 564M mpGeoms: 5.6G
read( 0%) -> (32/94) -> process(90% 89% 89% 89% 89% 90% 89% 89% 90% 89% 89% 89% 90% 90% 89% 89% 90% 89% 89% 88% 90% 90% 89% 89% 90% 89% 90% 90% 88% 89% 89% 90% 89% 90% 89% 89% 90% 91% 89% 89% 89% 89% 90% 90% 90% 90% 90% 89% 89% 90% 90% 89% 90% 90% 89% 89% 89% 89% 89% 90% 89% 89%) -> (35k/114k) -> write(46% 47%)
0:10:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 491M 50% 1.7M/s ] rels: [ 0 0% 0/s ] features: [ 1.7B 2.8M/s ] 136G blocks: [ 35k 83% 23/s ]
cpus: 58.3 gc: 5% heap: 12G/32G direct: 57M postGC: 5.8G relInfo: 564M mpGeoms: 5.7G
read( 0%) -> (32/94) -> process(89% 89% 90% 90% 90% 90% 90% 90% 91% 89% 89% 90% 89% 90% 91% 90% 90% 90% 90% 89% 89% 90% 90% 90% 90% 90% 89% 90% 89% 90% 90% 90% 89% 90% 89% 89% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 89% 89% 90% 90% 90% 89% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90%) -> (33k/114k) -> write(46% 46%)
0:10:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 507M 51% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.7B 2.8M/s ] 137G blocks: [ 35k 83% 21/s ]
cpus: 58 gc: 5% heap: 15G/32G direct: 57M postGC: 5.8G relInfo: 564M mpGeoms: 5.8G
read( 0%) -> (32/94) -> process(89% 89% 90% 89% 89% 88% 89% 89% 89% 89% 88% 89% 89% 89% 88% 89% 89% 89% 89% 89% 88% 87% 88% 89% 88% 90% 89% 89% 89% 89% 89% 89% 88% 88% 89% 89% 89% 90% 89% 89% 89% 90% 89% 89% 89% 88% 87% 89% 89% 89% 89% 90% 89% 89% 89% 89% 89% 88% 88% 88% 89% 89%) -> (31k/114k) -> write(48% 48%)
0:11:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 523M 53% 1.6M/s ] rels: [ 0 0% 0/s ] features: [ 1.7B 2.8M/s ] 140G blocks: [ 36k 84% 21/s ]
cpus: 57.8 gc: 5% heap: 13G/32G direct: 57M postGC: 5.9G relInfo: 564M mpGeoms: 5.9G
read( 0%) -> (32/94) -> process(89% 88% 88% 89% 90% 89% 89% 89% 89% 88% 89% 88% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 88% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 88% 88% 89% 90% 89% 89% 89% 88% 89% 88% 88% 89% 88% 89% 88% 88% 88% 89% 88% 90% 88%) -> (37k/114k) -> write(47% 47%)
0:11:17 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 537M 54% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.8B 2.7M/s ] 142G blocks: [ 36k 84% 20/s ]
cpus: 58.3 gc: 5% heap: 10G/32G direct: 57M postGC: 6G relInfo: 564M mpGeoms: 6.1G
read( 0%) -> (32/94) -> process(89% 90% 89% 89% 89% 89% 89% 88% 89% 89% 90% 89% 90% 90% 90% 89% 90% 91% 89% 89% 90% 90% 90% 90% 90% 90% 88% 89% 90% 90% 90% 89% 89% 89% 89% 89% 89% 88% 90% 89% 90% 90% 89% 90% 89% 89% 90% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89%) -> (30k/114k) -> write(47% 46%)
0:11:27 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 552M 56% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.8B 2.8M/s ] 144G blocks: [ 36k 85% 19/s ]
cpus: 58 gc: 5% heap: 8.4G/32G direct: 57M postGC: 6.1G relInfo: 564M mpGeoms: 6.2G
read( 0%) -> (32/94) -> process(90% 88% 89% 89% 88% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 90% 89% 88% 89% 89% 89% 88% 89% 89% 88% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 88% 88% 89% 89% 89% 89% 88% 88% 89% 89% 89% 89%) -> (34k/114k) -> write(50% 50%)
0:11:37 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 565M 57% 1.3M/s ] rels: [ 0 0% 0/s ] features: [ 1.8B 2.8M/s ] 145G blocks: [ 36k 85% 20/s ]
cpus: 57.9 gc: 5% heap: 16G/32G direct: 57M postGC: 6.2G relInfo: 564M mpGeoms: 6.3G
read( 0%) -> (32/94) -> process(89% 88% 89% 90% 89% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 88% 88% 89% 89% 88% 89% 89% 89% 89% 87% 88% 88% 89% 88% 89% 88% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 88% 89% 88% 89%) -> (29k/114k) -> write(47% 47%)
0:11:47 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 581M 59% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.8B 2.8M/s ] 146G blocks: [ 36k 86% 21/s ]
cpus: 57.9 gc: 5% heap: 6.2G/32G direct: 57M postGC: 6.2G relInfo: 564M mpGeoms: 6.5G
read( 0%) -> (32/94) -> process(89% 89% 89% 90% 88% 89% 89% 90% 87% 89% 88% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 90% 89% 88% 88% 89% 89% 89% 89% 89% 89% 88% 89% 88% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 88% 89% 88% 89% 89% 88% 89% 89% 89% 89% 88% 89% 88% 89% 89% 89% 89%) -> (33k/114k) -> write(47% 47%)
0:11:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 596M 60% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.9B 3M/s ] 149G blocks: [ 37k 86% 21/s ]
cpus: 58 gc: 5% heap: 15G/32G direct: 57M postGC: 6.3G relInfo: 564M mpGeoms: 6.6G
read( 0%) -> (32/94) -> process(88% 89% 89% 88% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 90% 89% 88% 89% 88% 90% 90% 89% 89% 89% 89% 90% 89% 89% 90% 90% 89% 89% 89% 88% 89% 90% 89% 89% 89% 89% 89% 88% 90% 85% 90% 89% 89% 89% 88% 88% 89% 90% 89%) -> (30k/114k) -> write(51% 51%)
0:12:07 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 611M 62% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 1.9B 2.9M/s ] 151G blocks: [ 37k 87% 21/s ]
cpus: 58.1 gc: 5% heap: 6.3G/32G direct: 57M postGC: 6.3G relInfo: 564M mpGeoms: 6.8G
read( 0%) -> (32/94) -> process(89% 89% 89% 89% 90% 89% 90% 90% 90% 89% 87% 89% 88% 89% 89% 88% 90% 89% 89% 90% 89% 89% 89% 88% 89% 89% 89% 90% 88% 90% 89% 89% 88% 89% 90% 89% 90% 88% 88% 89% 89% 89% 89% 89% 90% 87% 90% 90% 90% 86% 89% 89% 90% 89% 90% 89% 88% 90% 89% 89% 90% 88%) -> (29k/114k) -> write(50% 50%)
0:12:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 625M 63% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 1.9B 2.8M/s ] 153G blocks: [ 37k 87% 20/s ]
cpus: 57.7 gc: 5% heap: 12G/32G direct: 57M postGC: 6.4G relInfo: 564M mpGeoms: 7G
read( 0%) -> (32/94) -> process(90% 89% 89% 88% 89% 89% 88% 89% 90% 85% 88% 90% 89% 89% 89% 88% 88% 87% 89% 88% 89% 89% 88% 89% 89% 89% 89% 88% 89% 86% 88% 89% 89% 89% 88% 88% 89% 88% 87% 89% 89% 89% 89% 87% 90% 89% 89% 89% 89% 89% 88% 89% 88% 90% 89% 89% 89% 89% 88% 88% 88% 89%) -> (31k/114k) -> write(48% 48%)
0:12:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 639M 64% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 2B 2.7M/s ] 155G blocks: [ 37k 88% 19/s ]
cpus: 57.7 gc: 5% heap: 9.8G/32G direct: 57M postGC: 6.5G relInfo: 564M mpGeoms: 7.2G
read( 0%) -> (32/94) -> process(89% 88% 89% 89% 88% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 88% 88% 89% 87% 89% 89% 89% 89% 89% 88% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 88% 86% 89% 88% 89% 89% 88% 89% 90% 89% 87% 90% 88% 88% 89% 89% 88% 88% 89% 89% 89% 88% 88% 89%) -> (32k/114k) -> write(45% 46%)
0:12:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 655M 66% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2B 2.9M/s ] 158G blocks: [ 38k 88% 23/s ]
cpus: 58.3 gc: 5% heap: 10G/32G direct: 57M postGC: 6.6G relInfo: 564M mpGeoms: 7.3G
read( 0%) -> (32/94) -> process(89% 90% 88% 90% 89% 89% 89% 89% 90% 90% 89% 89% 90% 90% 88% 90% 90% 90% 90% 90% 89% 89% 88% 90% 88% 90% 90% 90% 89% 89% 89% 89% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 89% 89% 90% 90% 89% 89% 89% 89% 88% 90% 89% 89% 90% 90% 90% 89% 89% 89% 90% 90%) -> (32k/114k) -> write(49% 48%)
0:12:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 671M 68% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2B 2.9M/s ] 159G blocks: [ 38k 89% 21/s ]
cpus: 58.1 gc: 5% heap: 15G/32G direct: 57M postGC: 6.6G relInfo: 564M mpGeoms: 7.4G
read( 0%) -> (32/94) -> process(89% 89% 89% 90% 89% 89% 89% 89% 89% 87% 89% 90% 89% 88% 89% 90% 89% 88% 89% 90% 89% 89% 89% 89% 90% 89% 90% 88% 90% 87% 89% 88% 89% 90% 89% 90% 88% 89% 89% 89% 89% 90% 89% 88% 89% 90% 89% 89% 89% 89% 90% 88% 89% 89% 89% 89% 89% 87% 90% 90% 90% 89%) -> (34k/114k) -> write(51% 51%)
0:12:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 686M 69% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.1B 2.9M/s ] 161G blocks: [ 38k 89% 21/s ]
cpus: 58.2 gc: 5% heap: 12G/32G direct: 57M postGC: 6.7G relInfo: 564M mpGeoms: 7.6G
read( 0%) -> (32/94) -> process(89% 89% 90% 89% 90% 90% 89% 89% 89% 90% 89% 88% 89% 90% 90% 89% 90% 90% 90% 90% 90% 89% 89% 90% 89% 89% 90% 90% 90% 90% 90% 90% 90% 87% 88% 89% 89% 88% 88% 90% 90% 90% 89% 90% 90% 90% 90% 89% 89% 90% 88% 90% 89% 90% 89% 89% 86% 88% 90% 90% 91% 89%) -> (33k/114k) -> write(48% 48%)
0:13:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 702M 71% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.1B 2.8M/s ] 162G blocks: [ 38k 90% 21/s ]
cpus: 58.3 gc: 5% heap: 7.3G/32G direct: 57M postGC: 6.7G relInfo: 564M mpGeoms: 7.7G
read( 0%) -> (32/94) -> process(89% 90% 90% 89% 90% 90% 90% 89% 89% 90% 90% 90% 90% 90% 90% 89% 90% 89% 90% 89% 89% 88% 90% 89% 90% 90% 89% 90% 89% 90% 90% 89% 89% 89% 90% 90% 89% 90% 89% 90% 90% 88% 90% 89% 89% 89% 90% 90% 90% 89% 89% 88% 89% 90% 90% 90% 89% 90% 90% 90% 90% 90%) -> (36k/114k) -> write(47% 47%)
0:13:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 718M 72% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.1B 2.8M/s ] 164G blocks: [ 38k 90% 21/s ]
cpus: 58.3 gc: 5% heap: 11G/32G direct: 57M postGC: 6.7G relInfo: 564M mpGeoms: 7.9G
read( 0%) -> (32/94) -> process(89% 90% 89% 90% 90% 90% 90% 88% 89% 89% 90% 90% 89% 89% 89% 90% 90% 90% 90% 89% 90% 90% 89% 89% 90% 89% 90% 89% 90% 89% 90% 89% 90% 89% 90% 90% 89% 89% 88% 88% 89% 89% 90% 89% 90% 90% 89% 89% 90% 89% 89% 90% 89% 89% 90% 89% 90% 90% 90% 90% 88% 90%) -> (36k/114k) -> write(51% 50%)
0:13:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 734M 74% 1.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.1B 2.9M/s ] 166G blocks: [ 39k 91% 22/s ]
cpus: 58.3 gc: 5% heap: 16G/32G direct: 57M postGC: 6.7G relInfo: 564M mpGeoms: 8G
read( 0%) -> (32/94) -> process(90% 89% 90% 90% 90% 89% 89% 89% 89% 88% 90% 90% 90% 89% 90% 90% 88% 90% 90% 90% 90% 90% 89% 90% 89% 90% 90% 89% 88% 90% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 88% 90% 89% 89% 90% 89% 89% 90% 90% 90% 90% 90% 89% 88% 90% 90% 90% 90% 90% 89% 90% 90%) -> (30k/114k) -> write(49% 49%)
0:13:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 751M 76% 1.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.2B 2.8M/s ] 167G blocks: [ 39k 91% 23/s ]
cpus: 58.2 gc: 5% heap: 11G/32G direct: 57M postGC: 6.8G relInfo: 564M mpGeoms: 8.1G
read( 0%) -> (32/94) -> process(89% 90% 89% 90% 90% 90% 89% 90% 89% 88% 90% 90% 90% 90% 90% 89% 89% 88% 89% 89% 89% 89% 89% 90% 90% 89% 90% 90% 90% 89% 90% 89% 89% 90% 89% 90% 89% 90% 90% 90% 90% 89% 89% 89% 89% 90% 89% 90% 90% 90% 89% 90% 90% 90% 89% 89% 89% 89% 89% 90% 90% 90%) -> (26k/114k) -> write(48% 49%)
0:13:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 768M 77% 1.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.2B 2.8M/s ] 170G blocks: [ 39k 92% 22/s ]
cpus: 58.1 gc: 5% heap: 13G/32G direct: 57M postGC: 6.7G relInfo: 564M mpGeoms: 8.3G
read( 0%) -> (32/94) -> process(90% 89% 89% 89% 89% 89% 89% 89% 89% 88% 89% 90% 89% 89% 89% 89% 89% 88% 89% 89% 89% 89% 90% 89% 89% 90% 89% 89% 89% 89% 90% 90% 89% 89% 89% 89% 88% 89% 89% 89% 88% 89% 89% 90% 90% 89% 88% 87% 90% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89%) -> (34k/114k) -> write(47% 47%)
0:13:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 784M 79% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.2B 2.8M/s ] 172G blocks: [ 39k 92% 21/s ]
cpus: 58.3 gc: 5% heap: 16G/32G direct: 57M postGC: 6.7G relInfo: 564M mpGeoms: 8.4G
read( 0%) -> (32/94) -> process(89% 90% 90% 90% 89% 90% 89% 89% 90% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 90% 89% 90% 89% 90% 88% 90% 89% 90% 89% 89% 89% 90% 90% 90% 90% 89% 89% 90% 89% 89% 90% 90% 90% 90% 89%) -> (31k/114k) -> write(48% 48%)
0:14:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 799M 81% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.3B 2.7M/s ] 173G blocks: [ 40k 93% 21/s ]
cpus: 58.1 gc: 5% heap: 10G/32G direct: 57M postGC: 6.8G relInfo: 564M mpGeoms: 8.5G
read( 0%) -> (32/94) -> process(90% 89% 90% 89% 88% 89% 89% 88% 89% 90% 89% 89% 89% 90% 90% 90% 88% 89% 89% 90% 89% 89% 88% 90% 88% 89% 88% 89% 89% 90% 89% 90% 90% 89% 90% 89% 89% 90% 89% 89% 89% 90% 89% 89% 90% 90% 89% 89% 89% 89% 88% 90% 90% 90% 90% 89% 89% 90% 89% 89% 89% 90%) -> (25k/114k) -> write(45% 45%)
0:14:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 815M 82% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.3B 2.6M/s ] 175G blocks: [ 40k 93% 21/s ]
cpus: 58.2 gc: 5% heap: 16G/32G direct: 57M postGC: 6.8G relInfo: 564M mpGeoms: 8.6G
read( 0%) -> (32/94) -> process(90% 89% 90% 90% 89% 90% 89% 89% 90% 90% 90% 89% 90% 90% 89% 90% 89% 89% 89% 89% 90% 89% 90% 90% 89% 89% 89% 90% 90% 89% 89% 90% 90% 89% 90% 90% 90% 89% 89% 89% 89% 90% 89% 89% 89% 89% 90% 90% 90% 89% 89% 90% 89% 89% 90% 90% 90% 90% 90% 89% 90% 89%) -> (32k/114k) -> write(44% 44%)
0:14:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 830M 84% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.3B 2.5M/s ] 176G blocks: [ 40k 94% 20/s ]
cpus: 56.9 gc: 5% heap: 14G/32G direct: 57M postGC: 7.2G relInfo: 564M mpGeoms: 9.2G
read( 0%) -> (32/94) -> process(87% 88% 87% 87% 87% 87% 87% 87% 87% 88% 88% 87% 87% 87% 88% 88% 87% 89% 87% 87% 88% 89% 87% 87% 87% 87% 88% 87% 88% 88% 88% 88% 88% 87% 87% 88% 87% 87% 87% 87% 87% 87% 87% 89% 87% 88% 88% 88% 87% 88% 87% 87% 87% 89% 87% 87% 87% 87% 87% 87% 87% 88%) -> (34k/114k) -> write(43% 42%)
0:14:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 846M 85% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.3B 2.6M/s ] 178G blocks: [ 40k 94% 22/s ]
cpus: 58.1 gc: 5% heap: 13G/32G direct: 57M postGC: 7.2G relInfo: 564M mpGeoms: 9.3G
read( 0%) -> (32/94) -> process(89% 90% 89% 90% 89% 90% 89% 89% 89% 89% 90% 89% 90% 90% 90% 89% 89% 90% 89% 89% 90% 89% 90% 89% 90% 89% 89% 89% 90% 90% 90% 89% 89% 89% 89% 89% 89% 90% 90% 89% 90% 89% 89% 89% 90% 89% 89% 90% 89% 89% 89% 89% 89% 90% 88% 90% 89% 88% 89% 89% 89% 88%) -> (34k/114k) -> write(44% 44%)
0:14:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 862M 87% 1.6M/s ] rels: [ 0 0% 0/s ] features: [ 2.4B 2.7M/s ] 181G blocks: [ 40k 95% 21/s ]
cpus: 58.1 gc: 5% heap: 17G/32G direct: 57M postGC: 7.2G relInfo: 564M mpGeoms: 9.4G
read( 0%) -> (32/94) -> process(90% 90% 90% 89% 90% 90% 90% 88% 90% 89% 90% 89% 89% 90% 90% 90% 89% 89% 90% 90% 89% 89% 90% 90% 90% 89% 89% 89% 89% 89% 89% 90% 90% 90% 90% 89% 89% 89% 89% 90% 90% 89% 89% 90% 90% 90% 90% 89% 90% 89% 90% 89% 89% 90% 87% 89% 90% 90% 89% 89% 89% 89%) -> (32k/114k) -> write(46% 45%)
0:14:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 878M 89% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.4B 2.7M/s ] 182G blocks: [ 41k 95% 20/s ]
cpus: 58 gc: 5% heap: 14G/32G direct: 57M postGC: 7.2G relInfo: 564M mpGeoms: 9.5G
read( 0%) -> (32/94) -> process(89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89% 90% 89% 89% 89% 90% 90% 89% 90% 90% 89% 90% 89% 90% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89% 88% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 89% 90% 89% 89% 89% 89% 89% 89% 89% 90% 89%) -> (29k/114k) -> write(45% 45%)
0:15:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 893M 90% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.4B 2.6M/s ] 183G blocks: [ 41k 96% 21/s ]
cpus: 57.3 gc: 5% heap: 10G/32G direct: 57M postGC: 7.3G relInfo: 564M mpGeoms: 9.7G
read( 0%) -> (32/94) -> process(88% 88% 87% 89% 87% 88% 88% 88% 88% 88% 86% 87% 88% 89% 88% 89% 89% 88% 89% 88% 87% 87% 89% 89% 88% 87% 89% 87% 88% 88% 88% 88% 89% 88% 88% 88% 89% 86% 89% 86% 89% 89% 89% 88% 88% 87% 88% 88% 88% 89% 88% 87% 87% 89% 89% 87% 88% 88% 86% 87% 88% 88%) -> (33k/114k) -> write(43% 43%)
0:15:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 907M 92% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 2.4B 2.5M/s ] 185G blocks: [ 41k 96% 20/s ]
cpus: 57.6 gc: 5% heap: 11G/32G direct: 57M postGC: 7.4G relInfo: 564M mpGeoms: 9.9G
read( 0%) -> (32/94) -> process(88% 90% 88% 89% 86% 89% 88% 89% 88% 88% 86% 89% 88% 89% 90% 89% 89% 89% 90% 90% 90% 89% 90% 89% 85% 89% 90% 89% 88% 89% 89% 88% 89% 88% 90% 90% 88% 89% 89% 89% 89% 89% 90% 90% 89% 86% 88% 89% 90% 87% 89% 89% 89% 89% 89% 90% 84% 89% 89% 89% 89% 90%) -> (26k/114k) -> write(43% 43%)
0:15:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 923M 93% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.5B 2.5M/s ] 187G blocks: [ 41k 97% 20/s ]
cpus: 58.1 gc: 5% heap: 11G/32G direct: 57M postGC: 7.5G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(91% 87% 89% 90% 91% 89% 89% 90% 92% 90% 89% 90% 90% 88% 90% 88% 89% 89% 90% 89% 90% 90% 90% 89% 89% 90% 89% 89% 91% 90% 90% 89% 89% 89% 89% 90% 90% 88% 90% 91% 89% 89% 88% 89% 89% 90% 90% 88% 90% 90% 88% 89% 90% 90% 90% 90% 89% 89% 89% 88% 90% 89%) -> (29k/114k) -> write(42% 42%)
0:15:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 937M 95% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 2.5B 2.5M/s ] 188G blocks: [ 41k 97% 21/s ]
cpus: 57.6 gc: 5% heap: 10G/32G direct: 57M postGC: 7.6G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(88% 88% 89% 88% 89% 89% 89% 88% 89% 90% 88% 90% 88% 88% 89% 88% 89% 88% 89% 88% 89% 89% 88% 89% 89% 89% 91% 89% 88% 88% 89% 89% 88% 88% 89% 88% 89% 88% 88% 89% 89% 89% 88% 88% 89% 89% 88% 89% 89% 87% 89% 88% 89% 90% 88% 89% 89% 89% 89% 87% 88% 87%) -> (31k/114k) -> write(41% 41%)
0:15:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 952M 96% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 2.5B 2.4M/s ] 189G blocks: [ 42k 98% 20/s ]
cpus: 57.7 gc: 5% heap: 11G/32G direct: 57M postGC: 4.2G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(87% 89% 89% 89% 88% 90% 89% 89% 88% 88% 89% 89% 88% 87% 89% 88% 89% 86% 88% 88% 89% 89% 89% 89% 89% 88% 88% 87% 88% 88% 89% 88% 89% 89% 88% 89% 89% 89% 89% 88% 89% 88% 89% 89% 89% 88% 89% 88% 88% 87% 89% 88% 87% 87% 90% 87% 89% 89% 88% 88% 88% 89%) -> (34k/114k) -> write(43% 43%)
0:15:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 967M 98% 1.5M/s ] rels: [ 0 0% 0/s ] features: [ 2.5B 2.5M/s ] 192G blocks: [ 42k 98% 20/s ]
cpus: 58.3 gc: 5% heap: 6.9G/32G direct: 57M postGC: 4.3G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(89% 90% 90% 90% 89% 90% 90% 89% 89% 89% 89% 90% 90% 90% 90% 90% 90% 91% 90% 90% 90% 90% 90% 89% 89% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 89% 89% 90% 90% 90% 89% 90% 90% 90% 90% 90% 90% 90% 89% 90% 90% 90% 90% 90% 89% 89% 90% 90% 90% 90% 89% 89%) -> (30k/114k) -> write(42% 43%)
0:16:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 982M 99% 1.4M/s ] rels: [ 0 0% 0/s ] features: [ 2.6B 2.5M/s ] 194G blocks: [ 42k 99% 21/s ]
cpus: 58.1 gc: 5% heap: 5.3G/32G direct: 57M postGC: 4.4G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(90% 90% 90% 89% 89% 90% 89% 89% 89% 89% 90% 89% 89% 90% 90% 90% 89% 90% 89% 89% 88% 90% 88% 89% 90% 88% 90% 90% 88% 89% 89% 89% 90% 90% 89% 89% 89% 90% 90% 90% 90% 90% 90% 88% 90% 90% 89% 89% 89% 89% 90% 89% 90% 89% 90% 89% 89% 90% 89% 90% 90% 90%) -> (28k/114k) -> write(43% 43%)
0:16:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 991M 100% 942k/s ] rels: [ 0 0% 0/s ] features: [ 2.6B 1.9M/s ] 194G blocks: [ 42k 99% 15/s ]
cpus: 51.4 gc: 5% heap: 7.2G/32G direct: 57M postGC: 5G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(78% 88% 76% 68% 88% 89% 82% 90% 77% 90% 75% 79% 66% 84% 90% 83% 80% 81% 83% 65% 83% 75% 66% 69% 66% 65% 82% 76% 78% 78% 69% 89% 82% 69% 88% 77% 82% 74% 89% 69% 87% 89% 74% 89% 66% 73% 67% 89% 75% 66% 88% 82% 82% 75% 72% 90% 89% 76% 89% 91% 72% 77%) -> (30k/114k) -> write(33% 33%)
0:16:21 INF [osm_pass2:process] - Finished ways: 992,064,323 (1.3M/s) in 12m34s cpu:11h36m56s gc:40s avg:55.5
0:16:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 16k/s ] rels: [ 307k 3% 30k/s ] features: [ 2.6B 227k/s ] 195G blocks: [ 42k 99% 1/s ]
cpus: 39.7 gc: 3% heap: 10G/32G direct: 57M postGC: 5.2G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(59% 59% 59% 61% 71% 91% 59% 66% 57% 59% 59% 59% 60% 58% 62% 59% 59% 58% 58% 58% 57% 60% 61% 62% 59% 59% 58% 57% 58% 62% 60% 68% 58% 58% 60% 59% 60% 62% 63% 61% 59% 64% 60% 73% 60% 60% 60% 69% 59% 60% 59% 58% 59% 61% 60% 63% 72% 59% 60% 67% 60% 60%) -> (28k/114k) -> write( 3% 4%)
0:16:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 670k 6% 36k/s ] features: [ 2.6B 291k/s ] 196G blocks: [ 42k 99% <1/s ]
cpus: 57.8 gc: 2% heap: 6.4G/32G direct: 57M postGC: 5.2G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(91% 91% 92% 91% 92% 92% 94% 91% 92% 93% 92% 92% 91% 93% 93% 90% 92% 92% 92% 92% 91% 93% 91% 90% 91% 93% 92% 91% 93% 93% 92% 92% 93% 93% 93% 92% 93% 93% 93% 93% 92% 92% 93% 92% 91% 93% 92% 91% 91% 92% 91% 92% 91% 93% 91% 93% 92% 92% 92% 92% 91% 93%) -> (35k/114k) -> write( 5% 5%)
0:16:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 1M 9% 36k/s ] features: [ 2.6B 260k/s ] 196G blocks: [ 42k 99% <1/s ]
cpus: 58.1 gc: 2% heap: 10G/32G direct: 57M postGC: 5.3G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(94% 92% 94% 92% 93% 93% 93% 92% 92% 93% 92% 93% 91% 94% 94% 93% 94% 92% 93% 93% 93% 94% 92% 93% 92% 91% 93% 91% 93% 93% 95% 93% 94% 95% 93% 94% 93% 93% 93% 92% 93% 94% 93% 94% 91% 94% 92% 93% 92% 92% 93% 94% 95% 92% 93% 93% 94% 93% 93% 93% 91% 94%) -> (29k/114k) -> write( 4% 4%)
0:16:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 1.3M 12% 36k/s ] features: [ 2.6B 303k/s ] 196G blocks: [ 42k 99% 1/s ]
cpus: 58.4 gc: 2% heap: 15G/32G direct: 57M postGC: 5.6G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(91% 94% 94% 92% 94% 94% 93% 93% 91% 94% 92% 94% 92% 94% 92% 92% 93% 93% 95% 92% 90% 94% 92% 92% 92% 93% 94% 93% 95% 93% 95% 93% 94% 94% 92% 94% 94% 93% 91% 93% 94% 93% 91% 94% 92% 92% 91% 94% 89% 94% 92% 94% 94% 91% 91% 91% 94% 92% 92% 92% 93% 94%) -> (36k/114k) -> write( 4% 4%)
0:17:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 1.7M 15% 39k/s ] features: [ 2.6B 1.5M/s ] 199G blocks: [ 42k 99% 1/s ]
cpus: 58.2 gc: 3% heap: 10G/32G direct: 57M postGC: 5.9G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(90% 89% 94% 93% 91% 93% 91% 94% 91% 92% 92% 95% 91% 92% 90% 93% 93% 95% 93% 87% 91% 95% 93% 92% 92% 95% 94% 93% 95% 94% 93% 91% 94% 94% 92% 90% 93% 93% 92% 92% 94% 92% 92% 94% 93% 90% 93% 93% 93% 93% 90% 85% 94% 93% 93% 92% 91% 91% 90% 91% 93% 93%) -> (28k/114k) -> write( 8% 8%)
0:17:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 2.2M 19% 43k/s ] features: [ 2.6B 443k/s ] 199G blocks: [ 42k 99% 1/s ]
cpus: 58.4 gc: 2% heap: 8G/32G direct: 57M postGC: 5.9G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(93% 93% 91% 94% 92% 93% 92% 95% 95% 93% 95% 94% 94% 91% 92% 95% 94% 95% 91% 91% 94% 92% 91% 90% 93% 95% 96% 93% 97% 95% 92% 92% 91% 95% 93% 92% 94% 92% 94% 91% 94% 92% 94% 95% 95% 90% 94% 95% 92% 95% 93% 88% 95% 94% 93% 94% 89% 93% 93% 94% 94% 94%) -> (28k/114k) -> write( 4% 4%)
0:17:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 2.7M 23% 48k/s ] features: [ 2.6B 306k/s ] 199G blocks: [ 42k 99% 1/s ]
cpus: 58.1 gc: 2% heap: 16G/32G direct: 57M postGC: 6.1G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(91% 93% 93% 96% 93% 92% 94% 93% 95% 93% 90% 92% 94% 94% 93% 92% 91% 95% 93% 91% 94% 92% 91% 92% 95% 92% 96% 92% 95% 95% 94% 94% 93% 95% 95% 95% 93% 93% 91% 93% 92% 93% 93% 93% 94% 92% 90% 92% 93% 93% 91% 92% 94% 94% 92% 95% 90% 91% 92% 92% 92% 92%) -> (29k/114k) -> write( 4% 4%)
0:17:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 3.2M 27% 50k/s ] features: [ 2.6B 400k/s ] 201G blocks: [ 42k 99% <1/s ]
cpus: 58.1 gc: 3% heap: 13G/32G direct: 57M postGC: 6.4G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(92% 92% 93% 95% 91% 92% 92% 91% 94% 92% 90% 94% 95% 93% 93% 90% 93% 95% 94% 93% 94% 92% 92% 93% 93% 90% 96% 93% 95% 91% 92% 92% 94% 94% 95% 92% 93% 93% 93% 94% 93% 93% 93% 89% 93% 93% 92% 93% 93% 90% 91% 88% 92% 91% 93% 94% 93% 93% 90% 92% 89% 91%) -> (31k/114k) -> write( 5% 5%)
0:17:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 3.7M 32% 53k/s ] features: [ 2.6B 286k/s ] 201G blocks: [ 42k 99% 1/s ]
cpus: 58.2 gc: 3% heap: 13G/32G direct: 57M postGC: 7G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(94% 92% 94% 91% 86% 89% 92% 89% 93% 91% 92% 94% 93% 92% 92% 93% 93% 90% 91% 94% 94% 93% 93% 92% 94% 90% 95% 93% 94% 97% 93% 93% 95% 93% 94% 89% 93% 91% 94% 94% 93% 92% 92% 90% 93% 94% 93% 93% 89% 92% 93% 90% 93% 92% 94% 91% 91% 92% 93% 93% 93% 92%) -> (29k/114k) -> write( 4% 4%)
0:17:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 4.3M 37% 56k/s ] features: [ 2.6B 327k/s ] 202G blocks: [ 42k 99% 1/s ]
cpus: 58.8 gc: 2% heap: 12G/32G direct: 57M postGC: 7G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(95% 95% 96% 93% 92% 98% 95% 93% 93% 94% 93% 96% 92% 94% 93% 92% 92% 93% 93% 95% 93% 94% 95% 93% 95% 93% 95% 92% 96% 97% 92% 93% 93% 94% 94% 94% 93% 95% 93% 95% 93% 93% 94% 93% 95% 95% 93% 96% 93% 94% 94% 94% 95% 95% 92% 93% 93% 95% 94% 93% 94% 93%) -> (30k/114k) -> write( 4% 4%)
0:18:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 4.9M 42% 63k/s ] features: [ 2.6B 543k/s ] 202G blocks: [ 42k 99% 2/s ]
cpus: 58.3 gc: 2% heap: 10G/32G direct: 57M postGC: 7.3G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(92% 94% 92% 93% 93% 95% 95% 92% 91% 93% 92% 96% 93% 93% 88% 92% 93% 93% 93% 92% 91% 91% 93% 93% 93% 93% 91% 94% 96% 95% 93% 92% 93% 91% 93% 94% 93% 93% 93% 93% 93% 93% 95% 91% 94% 90% 94% 94% 93% 91% 91% 93% 94% 93% 92% 94% 94% 93% 94% 90% 92% 92%) -> (31k/114k) -> write( 6% 6%)
0:18:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 5.5M 48% 62k/s ] features: [ 2.6B 501k/s ] 204G blocks: [ 42k 100% 1/s ]
cpus: 58.7 gc: 2% heap: 5.2G/32G direct: 57M postGC: 4.1G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(94% 93% 94% 92% 92% 95% 93% 93% 92% 92% 93% 93% 93% 93% 93% 94% 92% 94% 94% 93% 93% 93% 93% 92% 93% 94% 91% 94% 92% 96% 93% 91% 94% 93% 94% 92% 93% 94% 94% 94% 94% 94% 96% 91% 92% 93% 94% 93% 94% 93% 93% 95% 91% 93% 93% 93% 94% 92% 93% 93% 94% 93%) -> (34k/114k) -> write( 6% 6%)
0:18:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 6.1M 53% 61k/s ] features: [ 2.6B 362k/s ] 206G blocks: [ 42k 100% 1/s ]
cpus: 58.6 gc: 2% heap: 6.3G/32G direct: 57M postGC: 4.2G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(93% 93% 95% 93% 94% 93% 94% 94% 93% 94% 94% 93% 93% 95% 94% 92% 93% 93% 95% 92% 95% 93% 95% 94% 93% 94% 95% 94% 93% 95% 93% 94% 92% 95% 92% 92% 94% 95% 95% 95% 92% 94% 94% 95% 95% 94% 95% 94% 93% 94% 94% 95% 93% 95% 94% 94% 90% 94% 94% 94% 93% 95%) -> (31k/114k) -> write( 5% 4%)
0:18:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 6.7M 58% 57k/s ] features: [ 2.6B 341k/s ] 206G blocks: [ 42k 100% 2/s ]
cpus: 58.7 gc: 2% heap: 11G/32G direct: 57M postGC: 4.5G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(94% 94% 95% 94% 93% 94% 94% 94% 93% 94% 94% 95% 94% 94% 94% 94% 94% 94% 92% 93% 92% 93% 94% 94% 94% 94% 93% 94% 93% 94% 94% 92% 93% 94% 94% 94% 93% 94% 94% 94% 93% 93% 92% 95% 95% 94% 93% 95% 94% 92% 94% 94% 93% 93% 95% 95% 94% 94% 94% 90% 92% 95%) -> (30k/114k) -> write( 4% 4%)
0:18:48 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 7.3M 63% 58k/s ] features: [ 2.7B 876k/s ] 209G blocks: [ 42k 100% 1/s ]
cpus: 59.1 gc: 2% heap: 5.1G/32G direct: 57M postGC: 4.6G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(94% 94% 94% 94% 94% 95% 94% 94% 94% 94% 94% 95% 95% 95% 95% 95% 95% 95% 94% 94% 94% 93% 95% 94% 95% 94% 95% 95% 94% 94% 95% 94% 93% 94% 94% 93% 94% 94% 93% 94% 95% 94% 94% 95% 95% 94% 94% 94% 94% 94% 94% 94% 93% 95% 94% 93% 94% 93% 95% 93% 93% 94%) -> (30k/114k) -> write(11% 10%)
0:18:58 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 7.9M 68% 61k/s ] features: [ 2.7B 410k/s ] 209G blocks: [ 42k 100% 1/s ]
cpus: 59.4 gc: 2% heap: 13G/32G direct: 57M postGC: 4.7G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(95% 95% 95% 94% 94% 95% 95% 95% 94% 94% 95% 94% 94% 96% 95% 96% 95% 96% 94% 95% 96% 95% 94% 95% 95% 95% 94% 95% 96% 96% 94% 95% 95% 95% 95% 95% 95% 95% 96% 97% 94% 96% 95% 94% 94% 94% 95% 95% 95% 95% 94% 95% 95% 94% 94% 94% 94% 94% 96% 94% 97% 94%) -> (31k/114k) -> write( 6% 6%)
0:19:08 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 8.6M 74% 63k/s ] features: [ 2.7B 310k/s ] 211G blocks: [ 42k 100% 1/s ]
cpus: 59.5 gc: 2% heap: 10G/32G direct: 57M postGC: 4.8G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 96% 95% 95% 95% 95% 94% 94% 95% 95% 94% 96% 94% 95% 95% 94% 96% 96% 96% 96% 95% 95% 95% 95% 95% 95% 94% 94% 94% 96% 96% 95% 96% 96% 95% 95% 95% 96% 96% 95% 95% 95% 95% 95% 94% 95% 96% 94% 95% 95% 96% 96% 95%) -> (33k/114k) -> write( 5% 5%)
0:19:18 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 9.2M 79% 64k/s ] features: [ 2.7B 376k/s ] 211G blocks: [ 43k 100% 2/s ]
cpus: 59.3 gc: 2% heap: 6.4G/32G direct: 57M postGC: 5G relInfo: 564M mpGeoms: 10G
read( 0%) -> (32/94) -> process(95% 94% 94% 95% 94% 95% 94% 94% 95% 94% 95% 95% 96% 94% 95% 95% 95% 95% 95% 94% 95% 94% 95% 95% 95% 94% 94% 94% 96% 95% 96% 94% 95% 95% 94% 95% 95% 94% 94% 94% 95% 94% 95% 95% 95% 93% 94% 95% 96% 94% 94% 95% 94% 95% 94% 94% 95% 95% 95% 94% 96% 95%) -> (30k/114k) -> write( 5% 5%)
0:19:28 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 9.9M 84% 63k/s ] features: [ 2.7B 288k/s ] 212G blocks: [ 43k 100% 1/s ]
cpus: 59.6 gc: 2% heap: 5.2G/32G direct: 57M postGC: 5.2G relInfo: 564M mpGeoms: 10G
read( -%) -> (19/94) -> process(96% 96% 94% 94% 95% 95% 93% 95% 95% 96% 95% 96% 95% 93% 95% 96% 96% 96% 95% 95% 95% 96% 95% 96% 96% 95% 94% 95% 95% 95% 95% 95% 94% 96% 96% 96% 96% 96% 96% 95% 96% 96% 95% 95% 94% 95% 95% 95% 95% 95% 95% 94% 95% 95% 95% 96% 96% 94% 96% 94% 95% 95%) -> (31k/114k) -> write( 5% 5%)
0:19:38 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 10M 90% 68k/s ] features: [ 2.7B 296k/s ] 212G blocks: [ 43k 100% 1/s ]
cpus: 59.9 gc: 2% heap: 7.6G/32G direct: 57M postGC: 5.3G relInfo: 564M mpGeoms: 10G
read( -%) -> (1/94) -> process(96% 96% 94% 95% 96% 95% 98% 95% 96% 95% 95% 96% 95% 95% 96% 96% 96% 96% 96% 96% 96% 96% 96% 96% 94% 96% 96% 96% 96% 96% 96% 97% 95% 96% 96% 96% 96% 95% 96% 95% 96% 95% 96% 95% 96% 96% 96% 96% 95% 95% 96% 95% 96% 96% 96% 95% 96% 96% 96% 96% 94% 96%) -> (31k/114k) -> write( 5% 5%)
0:19:49 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 11M 96% 67k/s ] features: [ 2.7B 326k/s ] 212G blocks: [ 43k 100% 2/s ]
cpus: 60.8 gc: 2% heap: 9.8G/32G direct: 57M postGC: 5.4G relInfo: 564M mpGeoms: 10G
read( -%) -> (0/94) -> process(97% 97% 97% 98% 97% 97% 97% 97% 97% 97% 98% 97% 97% 97% 97% 97% 98% 98% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 98% 98% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 97% 98% 98% 97% 97% 97% 97% 97% 97% 97% 97%) -> (29k/114k) -> write( 6% 5%)
0:19:57 INF [osm_pass2:process] - Finished relations: 11,728,203 (54k/s) in 3m35s cpu:3h31m4s gc:5s avg:58.8
0:19:57 INF [osm_pass2] - nodes: [ 8.8B 100% 0/s ] 92G ways: [ 992M 100% 0/s ] rels: [ 11M 100% 55k/s ] features: [ 2.7B 376k/s ] 212G blocks: [ 43k 100% 4/s ]
cpus: 59.9 gc: 1% heap: 10G/32G direct: 54M postGC: 5.3G relInfo: 564M mpGeoms: 10G
read( -%) -> (0/94) -> process( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/114k) -> write( -% -%)
0:19:57 DEB [osm_pass2] - Processed 43,112 blocks:
0:19:57 DEB [osm_pass2] - nodes: 8,860,666,091 (96M/s) in 1m32s cpu:1h28m19s gc:4s avg:57.8
0:19:57 DEB [osm_pass2] - ways: 992,064,323 (1.3M/s) in 12m34s cpu:11h36m56s gc:40s avg:55.5
0:19:57 DEB [osm_pass2] - relations: 11,728,203 (54k/s) in 3m35s cpu:3h31m4s gc:5s avg:58.8
0:19:57 INF [osm_pass2] - Finished in 17m41s cpu:16h36m26s gc:48s avg:56.4
0:19:57 INF [osm_pass2] - read 1x(0% 3s wait:16m59s done:37s)
0:19:57 INF [osm_pass2] - process 62x(87% 15m20s block:7s wait:6s)
0:19:57 INF [osm_pass2] - write 2x(38% 6m48s wait:10m18s)
0:19:57 INF [boundaries] -
0:19:57 INF [boundaries] - Starting...
0:19:57 INF [boundaries] - Creating polygons for 218 boundaries
0:20:03 INF [boundaries] - Finished creating 218 country polygons
0:20:04 WAR [boundaries] - no left or right country for border between OSM country relations: [148838] around https://www.openstreetmap.org/#map=10/37.50088/-122.77084
0:20:04 WAR [boundaries] - no left or right country for border between OSM country relations: [148838] around https://www.openstreetmap.org/#map=10/25.02075/-80.14817
0:20:04 WAR [boundaries] - no left or right country for border between OSM country relations: [148838] around https://www.openstreetmap.org/#map=10/44.39315/-67.03956
0:20:04 WAR [boundaries] - no left or right country for border between OSM country relations: [148838] around https://www.openstreetmap.org/#map=10/44.63496/-66.98339
0:20:05 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/54.19118/7.52130
0:20:05 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/54.61356/12.41358
0:20:05 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/69.82292/-141.00275
0:20:05 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/54.69762/-131.07388
0:20:05 WAR [boundaries] - no left or right country for border between OSM country relations: [148838] around https://www.openstreetmap.org/#map=10/44.47493/-67.05737
0:20:06 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/44.31380/-67.20427
0:20:06 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/48.22766/-123.52594
0:20:06 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/49.00208/-122.90137
0:20:06 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/44.85574/-66.97773
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/69.68036/-141.00235
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/76.04680/-123.91190
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/50.91588/-129.68001
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/64.08494/-63.79846
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/79.49433/-71.58243
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/44.58597/-67.14976
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [1428125] around https://www.openstreetmap.org/#map=10/44.99522/-61.11677
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/50.01340/6.13601
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/49.77642/6.51023
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/49.00207/-123.07119
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/45.26378/-71.36098
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/47.25611/-68.59617
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/47.35492/-68.36202
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/47.22749/-68.00727
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/47.16858/-67.93795
0:20:08 WAR [boundaries] - no left or right country for border between OSM country relations: [148838, 1428125] around https://www.openstreetmap.org/#map=10/45.91031/-67.76265
0:20:09 WAR [boundaries] - no left or right country for border between OSM country relations: [51477, 16239] around https://www.openstreetmap.org/#map=10/47.38554/10.16937
0:20:09 WAR [boundaries] - no left or right country for border between OSM country relations: [51477, 16239] around https://www.openstreetmap.org/#map=10/47.67866/12.16969
0:20:09 WAR [boundaries] - no left or right country for border between OSM country relations: [51477] around https://www.openstreetmap.org/#map=10/53.42387/6.88641
0:20:09 INF [boundaries] - Finished in 13s cpu:16s avg:1.3
0:20:09 INF [agg_stop] -
0:20:09 INF [agg_stop] - Starting...
0:20:09 INF [agg_stop] - Processing 28681 agg_stop sets
0:20:10 INF [agg_stop] - Finished in 0.7s cpu:1s avg:2.1
0:20:25 INF - Deleting node.db to make room for output file
0:20:25 INF [sort] -
0:20:25 INF [sort] - Starting...
0:20:25 INF [sort] - Grouped 187 chunks into 178
0:20:35 INF [sort] - chunks: [ 16 / 178 9% ] 212G
cpus: 29.8 gc: 14% heap: 21G/32G direct: 54M postGC: 19G
-> (157/184) -> worker(47% 45% 60% 47% 53%)
0:20:45 INF [sort] - chunks: [ 29 / 178 16% ] 214G
cpus: 27.1 gc: 7% heap: 12G/32G direct: 54M postGC: 10G
-> (144/184) -> worker(53% 41% 40% 41% 39%)
0:20:55 INF [sort] - chunks: [ 43 / 178 24% ] 215G
cpus: 29.1 gc: 8% heap: 12G/32G direct: 54M postGC: 10G
-> (130/184) -> worker(46% 47% 44% 45% 53%)
0:21:05 INF [sort] - chunks: [ 61 / 178 34% ] 212G
cpus: 27.4 gc: 10% heap: 9.8G/32G direct: 54M postGC: 9G
-> (112/184) -> worker(46% 38% 47% 44% 40%)
0:21:15 INF [sort] - chunks: [ 76 / 178 43% ] 212G
cpus: 28.6 gc: 8% heap: 14G/32G direct: 54M postGC: 12G
-> (97/184) -> worker(44% 46% 38% 50% 43%)
0:21:26 INF [sort] - chunks: [ 89 / 178 50% ] 215G
cpus: 29.9 gc: 8% heap: 13G/32G direct: 54M postGC: 9.5G
-> (84/184) -> worker(42% 52% 55% 41% 42%)
0:21:36 INF [sort] - chunks: [ 106 / 178 60% ] 212G
cpus: 26.8 gc: 10% heap: 10G/32G direct: 54M postGC: 10G
-> (67/184) -> worker(52% 41% 43% 49% 41%)
0:21:46 INF [sort] - chunks: [ 122 / 178 69% ] 212G
cpus: 27.9 gc: 9% heap: 19G/32G direct: 54M postGC: 18G
-> (51/184) -> worker(44% 47% 46% 57% 47%)
0:21:57 INF [sort] - chunks: [ 137 / 178 77% ] 213G
cpus: 27.8 gc: 7% heap: 19G/32G direct: 54M postGC: 19G
-> (36/184) -> worker(37% 35% 47% 43% 42%)
0:22:07 INF [sort] - chunks: [ 149 / 178 84% ] 213G
cpus: 29.8 gc: 7% heap: 11G/32G direct: 54M postGC: 11G
-> (24/184) -> worker(34% 40% 44% 41% 32%)
0:22:18 INF [sort] - chunks: [ 164 / 178 92% ] 216G
cpus: 28 gc: 8% heap: 10G/32G direct: 54M postGC: 10G
-> (9/184) -> worker(46% 43% 39% 42% 41%)
0:22:25 INF [sort] - chunks: [ 178 / 178 100% ] 212G
cpus: 22.6 gc: 8% heap: 6.3G/32G direct: 54M postGC: 6.3G
-> (0/184) -> worker( -% -% -% -% -%)
0:22:25 INF [sort] - Finished in 2m cpu:56m gc:10s avg:28.1
0:22:25 INF [sort] - worker 5x(44% 53s wait:32s done:2s)
0:22:25 INF - read:258s write:162s sort:169s
0:22:25 INF [archive] -
0:22:25 INF [archive] - Starting...
0:22:27 INF [archive:write] - Starting z0
0:22:27 INF [archive:write] - Finished z0 in 0s cpu:0s avg:4.2, now starting z1
0:22:27 INF [archive:write] - Finished z1 in 0s cpu:1s avg:1,653.3, now starting z2
0:22:27 INF [archive:write] - Finished z2 in 0s cpu:0.1s avg:12.2, now starting z3
0:22:27 INF [archive:write] - Finished z3 in 0s cpu:2s avg:71.3, now starting z4
0:22:28 INF [archive:write] - Finished z4 in 1s cpu:1m14s avg:55.4, now starting z5
0:22:28 INF [archive:write] - Finished z5 in 0s cpu:0.1s avg:6.8, now starting z6
0:22:31 INF [archive:write] - Finished z6 in 3s cpu:2m50s avg:59.1, now starting z7
0:22:36 INF [archive] - features: [ 27M 1% 2.7M/s ] 212G tiles: [ 16k 1.6k/s ] 142M
cpus: 58.9 gc: 12% heap: 21G/32G direct: 54M postGC: 7.5G
read(33% 33%) -> merge(50%) -> (1.2k/1.6k) -> encode(81% 79% 80% 78% 82% 81% 79% 81% 82% 79% 78% 76% 79% 82% 78% 81% 83% 76% 81% 73% 81% 82% 77% 82% 81% 82% 81% 76% 79% 82% 78% 79% 79% 78% 82% 80% 79% 77% 78% 79% 79% 78% 78% 81% 80% 78% 83% 79% 80% 79% 81% 80% 78% 82% 79% 79% 79% 78% 77% 75% 79% 75%) -> (1.3k/1.6k) -> write( 1%)
last tile: 7/77/41 (z7 85%) https://onthegomap.github.io/planetiler-demo/#7.5/53.32261/37.96875
0:22:38 INF [archive:write] - Finished z7 in 8s cpu:7m42s avg:60.7, now starting z8
0:22:46 INF [archive] - features: [ 62M 2% 3.4M/s ] 212G tiles: [ 31k 1.4k/s ] 223M
cpus: 60.6 gc: 7% heap: 16G/32G direct: 54M postGC: 5.9G
read(11% 11%) -> merge(18%) -> (25/1.6k) -> encode(92% 90% 89% 92% 91% 92% 91% 91% 91% 92% 91% 90% 91% 89% 89% 91% 90% 91% 86% 88% 90% 89% 91% 88% 90% 88% 91% 91% 88% 92% 89% 91% 91% 88% 90% 89% 89% 86% 92% 89% 90% 90% 90% 92% 91% 90% 92% 89% 89% 92% 91% 91% 88% 90% 90% 91% 89% 88% 90% 88% 91% 90%) -> (1.6k/1.6k) -> write( 0%)
last tile: 8/70/107 (z8 18%) https://onthegomap.github.io/planetiler-demo/#8.5/27.68175/-80.85938
0:22:49 INF [archive:write] - Finished z8 in 10s cpu:10m29s avg:60.7, now starting z9
0:22:56 INF [archive] - features: [ 89M 3% 2.7M/s ] 212G tiles: [ 122k 9k/s ] 610M
cpus: 60.7 gc: 7% heap: 6.4G/32G direct: 54M postGC: 6G
read(20% 20%) -> merge(31%) -> (130/1.6k) -> encode(92% 88% 91% 91% 91% 91% 85% 88% 90% 91% 90% 89% 90% 89% 90% 90% 88% 85% 92% 91% 87% 88% 91% 90% 89% 92% 90% 92% 87% 90% 87% 91% 88% 92% 91% 91% 92% 92% 87% 89% 92% 91% 84% 91% 90% 90% 89% 86% 91% 89% 90% 88% 90% 89% 90% 88% 91% 92% 92% 90% 87% 90%) -> (1.6k/1.6k) -> write( 2%)
last tile: 9/138/215 (z9 18%) https://onthegomap.github.io/planetiler-demo/#9.5/27.37133/-82.61719
0:23:06 INF [archive] - features: [ 119M 4% 2.9M/s ] 212G tiles: [ 258k 13k/s ] 1.2G
cpus: 60.3 gc: 7% heap: 17G/32G direct: 54M postGC: 13G
read(26% 26%) -> merge(41%) -> (1.2k/1.6k) -> encode(92% 88% 90% 91% 88% 88% 88% 87% 89% 88% 87% 89% 91% 90% 90% 90% 88% 89% 87% 91% 86% 89% 91% 89% 89% 91% 89% 88% 90% 90% 91% 90% 88% 90% 90% 90% 91% 90% 88% 88% 90% 89% 89% 90% 89% 89% 90% 90% 88% 88% 91% 89% 91% 86% 88% 91% 91% 89% 91% 90% 87% 89%) -> (1.6k/1.6k) -> write( 4%)
last tile: 9/377/170 (z9 87%) https://onthegomap.github.io/planetiler-demo/#9.5/51.39868/85.42969
0:23:06 INF [archive:write] - Finished z9 in 18s cpu:17m38s gc:1s avg:60.4, now starting z10
0:23:16 INF [archive] - features: [ 141M 5% 2.2M/s ] 212G tiles: [ 495k 23k/s ] 1.6G
cpus: 41.6 gc: 5% heap: 17G/32G direct: 54M postGC: 10G
read( 7% 7%) -> merge(11%) -> (0/1.6k) -> encode(61% 60% 61% 61% 60% 61% 61% 58% 61% 60% 60% 60% 62% 61% 61% 61% 94% 61% 61% 58% 61% 92% 57% 59% 61% 61% 87% 57% 60% 55% 61% 61% 59% 59% 59% 61% 60% 63% 58% 61% 58% 61% 60% 59% 60% 60% 61% 61% 58% 61% 60% 60% 60% 59% 62% 55% 60% 61% 61% 61% 62% 61%) -> (1.6k/1.6k) -> write( 2%)
last tile: 10/172/399 (z10 20%) https://onthegomap.github.io/planetiler-demo/#10.5/36.73875/-119.35547
0:23:26 INF [archive] - features: [ 144M 5% 270k/s ] 212G tiles: [ 552k 5.7k/s ] 1.7G
cpus: 2.7 gc: 0% heap: 6.4G/32G direct: 54M postGC: 5.9G
read( 2% 2%) -> merge( 4%) -> (0/1.6k) -> encode( 2% 2% 2% 3% 2% 2% 2% 2% 2% 2% 2% 3% 2% 2% 3% 2% 99% 2% 3% 2% 3% 21% 2% 2% 2% 3% 3% 2% 2% 2% 2% 3% 2% 3% 2% 2% 2% 2% 2% 2% 2% 2% 2% 3% 2% 3% 3% 2% 2% 3% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2% 2%) -> (1.3k/1.6k) -> write( 1%)
last tile: 10/59/719 (z10 31%) https://onthegomap.github.io/planetiler-demo/#10.5/-58.72248/-159.08203
0:23:35 INF [archive:write] - Finished z10 in 29s cpu:16m26s gc:1s avg:34.1, now starting z11
0:23:36 INF [archive] - features: [ 180M 7% 3.5M/s ] 212G tiles: [ 1.6M 110k/s ] 3G
cpus: 60.7 gc: 7% heap: 16G/32G direct: 54M postGC: 5.3G
read(30% 30%) -> merge(49%) -> (975/1.6k) -> encode(89% 91% 91% 88% 90% 90% 90% 90% 90% 91% 86% 86% 91% 88% 87% 89% 88% 88% 90% 89% 87% 90% 90% 90% 91% 88% 90% 91% 91% 89% 87% 90% 91% 87% 88% 90% 88% 90% 91% 88% 90% 89% 90% 90% 91% 91% 88% 86% 86% 86% 90% 88% 90% 87% 90% 87% 88% 88% 87% 86% 87% 89%) -> (1.1k/1.6k) -> write( 9%)
last tile: 11/564/765 (z11 13%) https://onthegomap.github.io/planetiler-demo/#11.5/41.31079/-80.77148
0:23:46 INF [archive] - features: [ 210M 8% 2.9M/s ] 212G tiles: [ 2.9M 124k/s ] 3.9G
cpus: 42 gc: 5% heap: 10G/32G direct: 54M postGC: 5.6G
read(13% 13%) -> merge(24%) -> (47/1.6k) -> encode(60% 83% 60% 60% 59% 57% 60% 60% 60% 56% 62% 57% 84% 60% 59% 61% 59% 59% 82% 60% 58% 60% 58% 60% 60% 60% 58% 62% 60% 57% 60% 60% 59% 56% 59% 59% 61% 59% 59% 61% 57% 60% 60% 59% 59% 59% 62% 60% 59% 81% 60% 62% 59% 60% 61% 60% 60% 60% 93% 60% 60% 60%) -> (797/1.6k) -> write( 7%)
last tile: 11/1140/1024 (z11 50%) https://onthegomap.github.io/planetiler-demo/#11.5/-0.08789/20.47852
0:23:56 INF [archive] - features: [ 262M 10% 5.2M/s ] 212G tiles: [ 3.9M 98k/s ] 5.7G
cpus: 60.9 gc: 8% heap: 7.4G/32G direct: 54M postGC: 6.2G
read(38% 38%) -> merge(68%) -> (1.4k/1.6k) -> encode(90% 90% 88% 89% 90% 90% 88% 88% 89% 90% 88% 91% 90% 87% 88% 89% 88% 85% 89% 88% 88% 89% 89% 89% 89% 90% 90% 87% 91% 90% 91% 87% 89% 88% 89% 87% 89% 91% 88% 88% 89% 90% 86% 91% 90% 90% 88% 89% 88% 88% 88% 89% 89% 90% 87% 89% 89% 89% 88% 88% 90% 89%) -> (1.6k/1.6k) -> write(11%)
last tile: 11/1147/611 (z11 85%) https://onthegomap.github.io/planetiler-demo/#11.5/58.49366/21.70898
0:23:59 INF [archive:write] - Finished z11 in 23s cpu:20m28s gc:2s avg:52.7, now starting z12
0:24:06 INF [archive] - features: [ 326M 12% 6.3M/s ] 212G tiles: [ 7.4M 355k/s ] 7.6G
cpus: 60.6 gc: 9% heap: 8.9G/32G direct: 54M postGC: 7.7G
read(40% 40%) -> merge(62%) -> (1.1k/1.6k) -> encode(88% 90% 90% 88% 90% 88% 90% 90% 90% 89% 88% 90% 88% 88% 89% 89% 89% 87% 89% 89% 89% 90% 89% 89% 89% 87% 89% 89% 89% 90% 88% 89% 90% 89% 89% 88% 87% 89% 89% 89% 89% 88% 90% 88% 87% 90% 89% 90% 89% 88% 89% 88% 89% 87% 90% 89% 88% 90% 88% 89% 90% 87%) -> (1.3k/1.6k) -> write(18%)
last tile: 12/942/1810 (z12 19%) https://onthegomap.github.io/planetiler-demo/#12.5/20.42701/-97.16309
0:24:16 INF [archive] - features: [ 396M 15% 6.9M/s ] 212G tiles: [ 13M 628k/s ] 9.3G
cpus: 56.9 gc: 9% heap: 10G/32G direct: 54M postGC: 7.4G
read(38% 39%) -> merge(58%) -> (229/1.6k) -> encode(84% 83% 81% 82% 83% 82% 82% 83% 82% 81% 84% 83% 82% 83% 83% 84% 82% 83% 82% 80% 83% 82% 84% 83% 84% 83% 81% 81% 82% 81% 80% 83% 84% 83% 83% 83% 82% 82% 81% 82% 80% 81% 82% 80% 80% 82% 83% 82% 83% 80% 82% 82% 81% 83% 82% 83% 81% 80% 82% 82% 82% 82%) -> (769/1.6k) -> write(21%)
last tile: 12/3857/2166 (z12 75%) https://onthegomap.github.io/planetiler-demo/#12.5/-10.35815/159.03809
0:24:26 INF [archive] - features: [ 474M 17% 7.8M/s ] 212G tiles: [ 15M 143k/s ] 11G
cpus: 61 gc: 10% heap: 8G/32G direct: 54M postGC: 5.2G
read(48% 48%) -> merge(81%) -> (698/1.6k) -> encode(89% 87% 87% 87% 88% 88% 88% 90% 89% 89% 89% 88% 89% 89% 87% 89% 89% 88% 89% 89% 89% 89% 87% 90% 88% 89% 85% 87% 88% 88% 89% 88% 88% 88% 89% 89% 89% 88% 88% 90% 88% 89% 88% 87% 88% 89% 90% 89% 87% 88% 88% 90% 89% 88% 89% 89% 88% 89% 89% 87% 89% 89%) -> (785/1.6k) -> write(19%)
last tile: 12/2356/1280 (z12 85%) https://onthegomap.github.io/planetiler-demo/#12.5/55.75184/27.11426
0:24:36 INF [archive] - features: [ 536M 20% 6.1M/s ] 212G tiles: [ 15M 21k/s ] 13G
cpus: 60.9 gc: 9% heap: 21G/32G direct: 54M postGC: 7.2G
read(44% 45%) -> merge(59%) -> (1.3k/1.6k) -> encode(90% 88% 90% 89% 90% 89% 89% 90% 89% 89% 90% 89% 90% 90% 88% 90% 89% 89% 90% 90% 90% 90% 87% 89% 90% 88% 88% 88% 89% 88% 88% 88% 88% 88% 89% 88% 90% 89% 89% 89% 90% 89% 90% 89% 88% 89% 87% 88% 89% 87% 90% 87% 90% 89% 90% 89% 88% 90% 88% 90% 88% 89%) -> (1.6k/1.6k) -> write( 9%)
last tile: 12/2438/1107 (z12 86%) https://onthegomap.github.io/planetiler-demo/#12.5/63.41119/34.32129
0:24:38 INF [archive:write] - Finished z12 in 39s cpu:38m58s gc:4s avg:59.6, now starting z13
0:24:46 INF [archive] - features: [ 620M 23% 8.4M/s ] 212G tiles: [ 28M 1.3M/s ] 16G
cpus: 58.3 gc: 7% heap: 13G/32G direct: 54M postGC: 5.8G
read(47% 44%) -> merge(72%) -> (33/1.6k) -> encode(86% 86% 87% 86% 86% 87% 87% 86% 85% 86% 86% 86% 86% 86% 87% 86% 86% 87% 87% 86% 86% 85% 85% 87% 86% 87% 87% 86% 86% 86% 85% 85% 86% 86% 86% 86% 87% 86% 87% 85% 86% 87% 86% 87% 85% 87% 86% 87% 86% 86% 87% 85% 86% 87% 87% 86% 86% 86% 87% 85% 86% 87%) -> (129/1.6k) -> write(42%)
last tile: 13/2261/3091 (z13 18%) https://onthegomap.github.io/planetiler-demo/#13.5/40.32979/-80.61768
0:24:56 INF [archive] - features: [ 705M 26% 8.4M/s ] 212G tiles: [ 43M 1.4M/s ] 18G
cpus: 53.4 gc: 7% heap: 10G/32G direct: 54M postGC: 5.4G
read(50% 53%) -> merge(78%) -> (23/1.6k) -> encode(78% 78% 77% 79% 77% 77% 77% 78% 77% 79% 78% 78% 79% 77% 78% 78% 78% 77% 78% 78% 78% 77% 78% 79% 79% 77% 78% 78% 78% 77% 77% 78% 78% 78% 78% 77% 78% 78% 78% 78% 78% 77% 77% 77% 78% 77% 78% 78% 78% 79% 77% 78% 79% 77% 78% 78% 78% 78% 78% 79% 78% 78%) -> (163/1.6k) -> write(36%)
last tile: 13/3001/4658 (z13 47%) https://onthegomap.github.io/planetiler-demo/#13.5/-23.98625/-48.09814
0:25:06 INF [archive] - features: [ 781M 29% 7.5M/s ] 212G tiles: [ 56M 1.3M/s ] 20G
cpus: 56.8 gc: 8% heap: 8.4G/32G direct: 54M postGC: 6.2G
read(48% 49%) -> merge(79%) -> (1.3k/1.6k) -> encode(81% 82% 81% 82% 80% 82% 81% 82% 82% 83% 80% 82% 83% 83% 83% 79% 81% 84% 81% 83% 82% 82% 81% 81% 82% 81% 80% 83% 82% 82% 81% 81% 82% 84% 82% 82% 81% 82% 82% 83% 82% 82% 82% 82% 82% 81% 82% 84% 83% 82% 81% 82% 82% 81% 82% 82% 82% 83% 81% 83% 81% 81%) -> (1.4k/1.6k) -> write(45%)
last tile: 13/6588/3342 (z13 80%) https://onthegomap.github.io/planetiler-demo/#13.5/31.40991/109.53369
0:25:16 INF [archive] - features: [ 870M 32% 8.9M/s ] 212G tiles: [ 59M 268k/s ] 23G
cpus: 59.7 gc: 6% heap: 15G/32G direct: 54M postGC: 4.6G
read(53% 56%) -> merge(66%) -> (52/1.6k) -> encode(88% 89% 89% 88% 88% 87% 89% 88% 89% 90% 89% 88% 88% 89% 88% 90% 86% 89% 90% 88% 89% 89% 89% 89% 88% 86% 86% 89% 90% 89% 89% 88% 89% 89% 89% 89% 89% 88% 90% 89% 89% 89% 88% 88% 87% 90% 86% 84% 90% 89% 86% 90% 89% 88% 88% 90% 89% 89% 89% 89% 89% 89%) -> (182/1.6k) -> write(35%)
last tile: 13/4865/2602 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/54.71193/33.81592
0:25:26 INF [archive] - features: [ 957M 35% 8.6M/s ] 212G tiles: [ 60M 39k/s ] 26G
cpus: 57.6 gc: 5% heap: 20G/32G direct: 54M postGC: 4.4G
read(69% 69%) -> merge(78%) -> (4/1.6k) -> encode(86% 85% 87% 87% 85% 87% 86% 86% 87% 86% 87% 86% 86% 88% 87% 86% 86% 86% 85% 87% 86% 86% 85% 85% 86% 86% 86% 85% 86% 84% 86% 86% 87% 86% 86% 86% 87% 86% 86% 86% 84% 86% 87% 86% 87% 86% 85% 87% 86% 86% 87% 87% 87% 86% 86% 86% 86% 87% 86% 87% 86% 86%) -> (70/1.6k) -> write(16%)
last tile: 13/4578/2628 (z13 85%) https://onthegomap.github.io/planetiler-demo/#13.5/54.04649/21.20361
0:25:34 INF [archive:write] - Finished z13 in 56s cpu:53m22s gc:4s avg:57.1, now starting z14
0:25:36 INF [archive] - features: [ 1B 37% 6.2M/s ] 212G tiles: [ 85M 2.5M/s ] 28G
cpus: 49.6 gc: 6% heap: 7G/32G direct: 54M postGC: 5.7G
read(37% 29%) -> merge(60%) -> (585/1.6k) -> encode(73% 73% 73% 72% 73% 72% 74% 72% 73% 73% 71% 73% 73% 74% 73% 73% 73% 73% 72% 73% 72% 73% 73% 74% 73% 74% 73% 72% 73% 72% 73% 73% 73% 73% 73% 72% 74% 72% 72% 71% 73% 73% 73% 71% 74% 74% 73% 73% 73% 71% 74% 73% 72% 74% 73% 73% 73% 73% 73% 73% 73% 73%) -> (780/1.6k) -> write(50%)
last tile: 14/4453/1160 (z14 7%) https://onthegomap.github.io/planetiler-demo/#14.5/82.28386/-82.14478
0:25:46 INF [archive] - features: [ 1.1B 41% 9.7M/s ] 212G tiles: [ 105M 2M/s ] 31G
cpus: 45.3 gc: 5% heap: 18G/32G direct: 54M postGC: 7G
read(51% 52%) -> merge(90%) -> (0/1.6k) -> encode(66% 66% 66% 66% 67% 65% 66% 66% 64% 67% 66% 64% 66% 64% 66% 65% 66% 66% 66% 65% 67% 67% 66% 66% 66% 66% 65% 66% 66% 66% 66% 66% 66% 66% 66% 64% 67% 65% 66% 65% 67% 66% 66% 67% 65% 66% 65% 66% 66% 67% 66% 65% 65% 66% 67% 66% 65% 65% 66% 66% 66% 67%) -> (53/1.6k) -> write(47%)
last tile: 14/7840/5268 (z14 15%) https://onthegomap.github.io/planetiler-demo/#14.5/53.89786/-7.72339
0:25:56 INF [archive] - features: [ 1.2B 45% 10M/s ] 212G tiles: [ 109M 405k/s ] 33G
cpus: 41 gc: 5% heap: 20G/32G direct: 54M postGC: 7.2G
read(58% 57%) -> merge(95%) -> (0/1.6k) -> encode(59% 60% 60% 59% 60% 58% 59% 59% 59% 59% 59% 59% 59% 59% 59% 60% 60% 60% 59% 60% 60% 59% 61% 60% 60% 60% 60% 60% 58% 59% 59% 60% 58% 59% 59% 59% 60% 60% 60% 60% 59% 59% 61% 58% 60% 59% 60% 60% 59% 60% 58% 60% 59% 58% 60% 59% 59% 60% 58% 60% 60% 59%) -> (83/1.6k) -> write(20%)
last tile: 14/7869/7671 (z14 17%) https://onthegomap.github.io/planetiler-demo/#14.5/11.36157/-7.08618
0:26:06 INF [archive] - features: [ 1.3B 49% 10M/s ] 212G tiles: [ 114M 480k/s ] 35G
cpus: 44.8 gc: 5% heap: 12G/32G direct: 54M postGC: 7.2G
read(57% 56%) -> merge(94%) -> (0/1.6k) -> encode(64% 65% 65% 64% 66% 64% 65% 63% 65% 65% 66% 65% 65% 64% 66% 64% 66% 65% 66% 64% 64% 66% 63% 66% 65% 66% 65% 64% 66% 66% 66% 66% 64% 65% 67% 65% 65% 66% 64% 65% 66% 64% 65% 66% 67% 65% 65% 64% 65% 66% 66% 65% 66% 65% 65% 65% 66% 65% 64% 65% 66% 65%) -> (212/1.6k) -> write(23%)
last tile: 14/4277/7627 (z14 18%) https://onthegomap.github.io/planetiler-demo/#14.5/12.3078/-86.01196
0:26:16 INF [archive] - features: [ 1.4B 52% 10M/s ] 212G tiles: [ 119M 500k/s ] 38G
cpus: 48.9 gc: 5% heap: 25G/32G direct: 54M postGC: 7.9G
read(58% 58%) -> merge(93%) -> (16/1.6k) -> encode(69% 73% 72% 71% 73% 70% 72% 71% 72% 71% 73% 71% 71% 71% 71% 71% 72% 71% 71% 70% 72% 72% 72% 71% 73% 69% 72% 72% 72% 71% 71% 71% 71% 72% 72% 71% 72% 71% 71% 73% 73% 72% 71% 70% 72% 72% 72% 70% 71% 73% 70% 71% 72% 70% 72% 70% 71% 69% 70% 71% 71% 71%) -> (102/1.6k) -> write(32%)
last tile: 14/4009/6240 (z14 20%) https://onthegomap.github.io/planetiler-demo/#14.5/39.35978/-91.90063
0:26:26 INF [archive] - features: [ 1.5B 55% 8.4M/s ] 212G tiles: [ 155M 3.6M/s ] 40G
cpus: 42.5 gc: 5% heap: 9.4G/32G direct: 54M postGC: 3.9G
read(38% 32%) -> merge(81%) -> (0/1.6k) -> encode(60% 59% 61% 62% 62% 60% 62% 61% 60% 61% 58% 61% 61% 61% 60% 61% 60% 60% 61% 61% 61% 61% 59% 61% 61% 61% 59% 61% 61% 59% 60% 61% 59% 61% 61% 60% 61% 60% 59% 61% 61% 62% 60% 59% 60% 61% 60% 59% 60% 60% 61% 60% 60% 61% 61% 61% 62% 61% 61% 61% 61% 61%) -> (73/1.6k) -> write(61%)
last tile: 14/6103/13203 (z14 38%) https://onthegomap.github.io/planetiler-demo/#14.5/-73.34991/-45.88989
0:26:36 INF [archive] - features: [ 1.6B 59% 9.3M/s ] 212G tiles: [ 179M 2.3M/s ] 42G
cpus: 48.3 gc: 6% heap: 13G/32G direct: 54M postGC: 6G
read(54% 53%) -> merge(90%) -> (0/1.6k) -> encode(70% 70% 68% 71% 70% 69% 68% 68% 70% 71% 68% 69% 70% 68% 69% 70% 70% 68% 70% 70% 71% 70% 70% 68% 67% 70% 71% 70% 70% 70% 69% 70% 69% 70% 70% 70% 71% 70% 69% 69% 68% 69% 69% 69% 68% 70% 70% 69% 70% 68% 71% 71% 70% 72% 71% 70% 69% 70% 68% 70% 69% 70%) -> (60/1.6k) -> write(54%)
last tile: 14/9599/9457 (z14 51%) https://onthegomap.github.io/planetiler-demo/#14.5/-26.77504/30.92651
0:26:46 INF [archive] - features: [ 1.7B 63% 10M/s ] 212G tiles: [ 208M 2.8M/s ] 44G
cpus: 29.5 gc: 4% heap: 11G/32G direct: 54M postGC: 8G
read(45% 46%) -> merge(95%) -> (0/1.6k) -> encode(40% 42% 42% 43% 39% 42% 41% 40% 40% 41% 40% 40% 40% 41% 41% 41% 41% 40% 40% 41% 42% 41% 41% 40% 42% 42% 41% 41% 41% 42% 39% 41% 41% 41% 42% 41% 41% 40% 41% 40% 40% 43% 41% 42% 40% 41% 41% 41% 41% 39% 42% 41% 42% 42% 41% 40% 42% 42% 41% 41% 43% 41%) -> (701/1.6k) -> write(34%)
last tile: 14/13069/8830 (z14 73%) https://onthegomap.github.io/planetiler-demo/#14.5/-13.89141/107.17163
0:26:56 WAR [archive:encode] - {x=14553 y=6450 z=14} 1312kb uncompressed
0:26:57 INF [archive] - features: [ 1.8B 66% 10M/s ] 212G tiles: [ 217M 865k/s ] 46G
cpus: 36.2 gc: 6% heap: 9.5G/32G direct: 55M postGC: 4.8G
read(54% 53%) -> merge(92%) -> (0/1.6k) -> encode(52% 50% 50% 50% 51% 50% 50% 51% 50% 51% 49% 50% 49% 52% 50% 50% 51% 50% 49% 51% 52% 50% 50% 50% 48% 50% 48% 49% 49% 49% 50% 51% 50% 50% 53% 51% 50% 51% 50% 51% 49% 49% 51% 51% 50% 49% 50% 51% 50% 51% 50% 49% 51% 49% 51% 49% 49% 52% 49% 49% 51% 52%) -> (96/1.6k) -> write(24%)
last tile: 14/14519/6368 (z14 76%) https://onthegomap.github.io/planetiler-demo/#14.5/37.15156/139.03198
0:27:06 WAR [archive:encode] - {x=13722 y=7013 z=14} 1078kb uncompressed
0:27:07 INF [archive] - features: [ 1.8B 70% 8.4M/s ] 212G tiles: [ 225M 800k/s ] 48G
cpus: 54.9 gc: 8% heap: 20G/32G direct: 55M postGC: 7.6G
read(52% 48%) -> merge(82%) -> (75/1.6k) -> encode(79% 76% 80% 74% 77% 78% 74% 79% 77% 72% 78% 79% 79% 79% 78% 76% 77% 79% 79% 79% 75% 77% 76% 79% 77% 75% 74% 79% 80% 77% 77% 76% 79% 75% 77% 75% 74% 80% 73% 76% 78% 79% 77% 77% 74% 77% 80% 73% 80% 74% 76% 80% 76% 78% 74% 76% 76% 77% 75% 77% 80% 75%) -> (396/1.6k) -> write(52%)
last tile: 14/13359/7156 (z14 80%) https://onthegomap.github.io/planetiler-demo/#14.5/22.17723/113.5437
0:27:17 INF [archive] - features: [ 2B 73% 10M/s ] 212G tiles: [ 229M 381k/s ] 51G
cpus: 43.2 gc: 6% heap: 14G/32G direct: 55M postGC: 6.9G
read(53% 54%) -> merge(92%) -> (87/1.6k) -> encode(63% 61% 61% 61% 63% 59% 61% 61% 60% 61% 62% 60% 62% 64% 62% 60% 63% 61% 61% 63% 62% 62% 63% 63% 62% 62% 62% 63% 61% 61% 63% 60% 61% 61% 63% 61% 60% 62% 63% 60% 60% 63% 62% 62% 63% 63% 61% 60% 62% 61% 63% 62% 63% 63% 61% 63% 62% 63% 62% 61% 62% 61%) -> (190/1.6k) -> write(30%)
last tile: 14/11587/6784 (z14 82%) https://onthegomap.github.io/planetiler-demo/#14.5/29.52567/74.60815
0:27:27 INF [archive] - features: [ 2.1B 77% 10M/s ] 212G tiles: [ 233M 424k/s ] 53G
cpus: 46.4 gc: 5% heap: 22G/32G direct: 55M postGC: 6G
read(54% 54%) -> merge(94%) -> (0/1.6k) -> encode(69% 69% 67% 67% 68% 69% 68% 67% 67% 66% 69% 67% 69% 68% 66% 66% 68% 68% 68% 69% 67% 68% 69% 65% 67% 65% 66% 67% 68% 67% 66% 67% 68% 69% 68% 68% 67% 68% 67% 68% 67% 68% 69% 68% 67% 68% 66% 66% 68% 67% 67% 68% 67% 67% 68% 68% 68% 69% 66% 68% 67% 67%) -> (46/1.6k) -> write(43%)
last tile: 14/9617/6753 (z14 84%) https://onthegomap.github.io/planetiler-demo/#14.5/30.11662/31.32202
0:27:37 INF [archive] - features: [ 2.2B 81% 10M/s ] 212G tiles: [ 234M 157k/s ] 56G
cpus: 48.4 gc: 5% heap: 9.9G/32G direct: 55M postGC: 6.6G
read(73% 75%) -> merge(94%) -> (0/1.6k) -> encode(72% 71% 70% 70% 70% 70% 72% 71% 69% 70% 71% 71% 70% 69% 70% 70% 69% 72% 71% 70% 70% 70% 68% 71% 70% 70% 70% 69% 70% 70% 70% 71% 68% 70% 70% 70% 70% 71% 71% 70% 70% 71% 70% 70% 71% 71% 72% 71% 71% 70% 69% 71% 69% 71% 71% 69% 70% 70% 70% 70% 70% 70%) -> (53/1.6k) -> write(34%)
last tile: 14/9080/5877 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/45.25169/19.52271
0:27:42 WAR [archive:encode] - {x=8290 y=6119 z=14} 1067kb uncompressed
0:27:42 WAR [archive:encode] - {x=8290 y=6118 z=14} 1081kb uncompressed
0:27:47 INF [archive] - features: [ 2.3B 85% 10M/s ] 212G tiles: [ 235M 31k/s ] 59G
cpus: 39.7 gc: 5% heap: 19G/32G direct: 55M postGC: 6.7G
read(75% 77%) -> merge(95%) -> (0/1.6k) -> encode(56% 57% 57% 56% 56% 57% 57% 57% 57% 57% 58% 57% 58% 57% 58% 58% 56% 55% 57% 57% 58% 57% 57% 57% 56% 57% 56% 55% 56% 57% 56% 57% 57% 57% 57% 57% 56% 57% 56% 55% 57% 56% 58% 58% 57% 57% 57% 56% 56% 56% 57% 58% 57% 57% 57% 56% 57% 57% 57% 56% 57% 56%) -> (139/1.6k) -> write(13%)
last tile: 14/8298/5636 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/48.85749/2.34009
0:27:57 INF [archive] - features: [ 2.4B 89% 10M/s ] 212G tiles: [ 235M 13k/s ] 61G
cpus: 35 gc: 4% heap: 12G/32G direct: 55M postGC: 6.7G
read(67% 70%) -> merge(96%) -> (0/1.6k) -> encode(50% 50% 49% 50% 50% 51% 49% 49% 50% 49% 50% 49% 50% 50% 50% 50% 51% 50% 50% 51% 49% 49% 51% 50% 49% 49% 50% 49% 50% 50% 50% 49% 50% 50% 50% 50% 49% 49% 50% 50% 50% 50% 49% 48% 50% 49% 49% 50% 50% 49% 50% 50% 50% 49% 51% 50% 51% 50% 51% 51% 49% 50%) -> (34/1.6k) -> write(10%)
last tile: 14/8547/5523 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/50.4645/7.81128
0:28:07 INF [archive] - features: [ 2.5B 92% 10M/s ] 212G tiles: [ 235M 28k/s ] 62G
cpus: 33 gc: 4% heap: 20G/32G direct: 55M postGC: 6.8G
read(63% 66%) -> merge(96%) -> (0/1.6k) -> encode(47% 47% 47% 46% 47% 47% 48% 48% 47% 47% 47% 46% 47% 46% 46% 46% 48% 47% 46% 46% 47% 47% 47% 47% 47% 46% 46% 45% 47% 49% 48% 47% 46% 46% 47% 47% 46% 47% 47% 48% 48% 48% 46% 47% 46% 47% 47% 48% 48% 47% 48% 47% 48% 45% 47% 48% 47% 47% 47% 47% 47% 47%) -> (36/1.6k) -> write(10%)
last tile: 14/8734/5460 (z14 85%) https://onthegomap.github.io/planetiler-demo/#14.5/51.33748/11.92017
0:28:17 INF [archive] - features: [ 2.6B 96% 10M/s ] 212G tiles: [ 236M 126k/s ] 65G
cpus: 43.2 gc: 5% heap: 23G/32G direct: 55M postGC: 8.3G
read(61% 63%) -> merge(94%) -> (343/1.6k) -> encode(62% 63% 62% 64% 64% 63% 62% 63% 62% 63% 62% 64% 62% 63% 63% 63% 62% 63% 63% 63% 62% 62% 63% 63% 64% 62% 63% 63% 63% 63% 62% 62% 62% 63% 60% 62% 63% 63% 62% 62% 63% 62% 62% 62% 62% 63% 62% 62% 62% 62% 64% 62% 62% 63% 64% 63% 63% 63% 62% 63% 62% 63%) -> (507/1.6k) -> write(23%)
last tile: 14/9423/4203 (z14 86%) https://onthegomap.github.io/planetiler-demo/#14.5/65.55391/27.05933
0:28:27 INF [archive] - features: [ 2.7B 100% 9.3M/s ] 212G tiles: [ 258M 2.1M/s ] 68G
cpus: 48.8 gc: 5% heap: 16G/32G direct: 55M postGC: 9.7G
read(47% 51%) -> merge(85%) -> (0/1.6k) -> encode(70% 72% 70% 71% 72% 72% 71% 72% 72% 70% 72% 70% 69% 72% 72% 72% 72% 72% 73% 72% 71% 72% 70% 72% 71% 73% 72% 72% 70% 73% 71% 72% 71% 72% 71% 72% 72% 70% 72% 71% 71% 70% 71% 71% 71% 71% 72% 72% 70% 71% 72% 72% 72% 72% 70% 72% 72% 72% 72% 69% 72% 73%) -> (21/1.6k) -> write(69%)
last tile: 14/13710/1873 (z14 95%) https://onthegomap.github.io/planetiler-demo/#14.5/79.8685/121.2561
0:28:29 INF [archive:write] - Finished z14 in 2m55s cpu:2h3m45s gc:9s avg:42.5
0:28:29 INF [archive:write] - Building directories with 14066 entries per leaf, attempt 1...
0:28:36 INF [archive:write] - Built directories with 3501 leaves, 16460B root directory
0:28:36 INF [archive:write] - Building directories with 16879 entries per leaf, attempt 2...
0:28:37 INF [archive] - features: [ 2.7B 100% 1.2M/s ] 212G tiles: [ 270M 1.1M/s ] 68G
cpus: 5.8 gc: 0% heap: 9G/32G direct: 55M postGC: 8.9G
read( -% -%) -> merge( -%) -> (0/1.6k) -> encode( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/1.6k) -> write(97%)
last tile: 14/16383/0 (z14 100%) https://onthegomap.github.io/planetiler-demo/#14.5/85.05018/179.98901
0:28:44 INF [archive:write] - Built directories with 2917 leaves, 14091B root directory
0:28:44 INF [archive:write] - Writing metadata and leaf directories...
0:28:44 INF [archive:write] - Writing header...
0:28:44 INF [archive:write] - # addressed tiles: 270230645
0:28:44 INF [archive:write] - # of tile entries: 49231864
0:28:44 INF [archive:write] - # of tile contents: 40212132
0:28:44 INF [archive:write] - Root directory: 14kB
0:28:44 INF [archive:write] - # leaves: 2917
0:28:44 INF [archive:write] - Leaf directories: 87MB
0:28:44 INF [archive:write] - Avg leaf size: 29kB
0:28:44 INF [archive:write] - Total dir bytes: 87MB
0:28:44 INF [archive:write] - Average bytes per addressed tile: 0.3225992077989526
0:28:44 INF [archive] - features: [ 2.7B 100% 0/s ] 212G tiles: [ 270M 0/s ] 68G
cpus: 1.1 gc: 0% heap: 8.9G/32G direct: 141M postGC: 8.9G
read( -% -%) -> merge( -%) -> (0/1.6k) -> encode( -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -% -%) -> (0/1.6k) -> write( -%)
last tile: 14/16383/0 (z14 100%) https://onthegomap.github.io/planetiler-demo/#14.5/85.05018/179.98901
0:28:44 DEB [archive] - Tile stats:
0:28:44 DEB [archive] - Biggest tiles (gzipped)
1. 14/14553/6450 (751k) https://onthegomap.github.io/planetiler-demo/#14.5/35.70192/139.77905 (poi:988k)
2. 14/8290/6118 (675k) https://onthegomap.github.io/planetiler-demo/#14.5/41.40154/2.16431 (poi:536k)
3. 14/8290/6119 (661k) https://onthegomap.github.io/planetiler-demo/#14.5/41.38505/2.16431 (poi:611k)
4. 14/13722/7013 (616k) https://onthegomap.github.io/planetiler-demo/#14.5/25.05574/121.51978 (poi:684k)
5. 14/6437/8362 (592k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.74367/-38.55103 (building:605k)
6. 14/7990/6392 (591k) https://onthegomap.github.io/planetiler-demo/#14.5/36.73008/-4.42749 (building:380k)
7. 14/13722/7014 (587k) https://onthegomap.github.io/planetiler-demo/#14.5/25.03584/121.51978 (poi:625k)
8. 14/14552/6450 (578k) https://onthegomap.github.io/planetiler-demo/#14.5/35.70192/139.75708 (poi:746k)
9. 14/6435/8361 (573k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.72175/-38.59497 (building:710k)
10. 14/6436/8361 (558k) https://onthegomap.github.io/planetiler-demo/#14.5/-3.72175/-38.573 (building:607k)
0:28:44 INF [archive] - Other tiles with large layers
14/8414/5384 (313k) https://onthegomap.github.io/planetiler-demo/#14.5/52.36889/4.88892 (housenumber:313k)
14/3411/6216 (333k) https://onthegomap.github.io/planetiler-demo/#14.5/39.76632/-105.04028 (landcover:333k)
10/236/413 (176k) https://onthegomap.github.io/planetiler-demo/#10.5/32.69474/-96.85547 (landuse:176k)
13/1596/3157 (337k) https://onthegomap.github.io/planetiler-demo/#13.5/38.08269/-109.84131 (mountain_peak:337k)
5/5/11 (143k) https://onthegomap.github.io/planetiler-demo/#5.5/44.9512/-118.125 (park:143k)
3/5/3 (558k) https://onthegomap.github.io/planetiler-demo/#3.5/20.48995/67.5 (place:558k)
12/3229/2032 (313k) https://onthegomap.github.io/planetiler-demo/#12.5/1.36218/103.84277 (transportation:313k)
14/9618/6751 (179k) https://onthegomap.github.io/planetiler-demo/#14.5/30.15463/31.34399 (transportation_name:179k)
12/3415/1774 (166k) https://onthegomap.github.io/planetiler-demo/#12.5/23.36242/120.19043 (water:166k)
0:28:44 DEB [archive] - Max tile sizes
z0 z1 z2 z3 z4 z5 z6 z7 z8 z9 z10 z11 z12 z13 z14 all
boundary 5.4k 37k 43k 25k 19k 24k 18k 14k 14k 28k 23k 17k 31k 18k 9.4k 43k
landcover 1.5k 982 8k 4.6k 3.2k 31k 17k 271k 333k 235k 153k 175k 166k 111k 333k 333k
place 51k 144k 545k 558k 352k 183k 109k 58k 41k 52k 62k 69k 50k 122k 221k 558k
water 8.4k 4.1k 10k 9k 14k 13k 89k 113k 126k 109k 132k 94k 166k 115k 91k 166k
water_name 4.5k 15k 22k 14k 12k 7.4k 5k 4.7k 12k 8.6k 5.6k 3.8k 3.1k 9.4k 29k 29k
waterway 0 0 0 546 3.7k 1.6k 17k 13k 9.8k 28k 20k 16k 59k 75k 88k 88k
landuse 0 0 0 0 2.6k 1.5k 32k 66k 125k 113k 176k 129k 63k 124k 47k 176k
park 0 0 0 0 54k 143k 98k 76k 71k 82k 90k 55k 47k 19k 50k 143k
transportation 0 0 0 0 60k 107k 62k 122k 88k 135k 91k 67k 313k 187k 128k 313k
transportation_name 0 0 0 0 0 0 34k 20k 19k 15k 37k 22k 33k 27k 179k 179k
mountain_peak 0 0 0 0 0 0 0 12k 12k 10k 10k 9.5k 9.4k 337k 234k 337k
aerodrome_label 0 0 0 0 0 0 0 0 4.1k 2.8k 3.9k 2.9k 2.7k 2.7k 2.7k 4.1k
aeroway 0 0 0 0 0 0 0 0 0 0 16k 25k 35k 31k 18k 35k
poi 0 0 0 0 0 0 0 0 0 0 0 175 35k 17k 988k 988k
building 0 0 0 0 0 0 0 0 0 0 0 0 0 66k 710k 710k
housenumber 0 0 0 0 0 0 0 0 0 0 0 0 0 0 313k 313k
full tile 71k 200k 623k 591k 401k 349k 270k 396k 370k 343k 272k 204k 378k 341k 1.3M 1.3M
gzipped 44k 117k 332k 315k 238k 204k 171k 284k 268k 250k 182k 141k 188k 227k 751k 751k
0:28:44 DEB [archive] - Max tile: 1.3M (gzipped: 751k)
0:28:44 DEB [archive] - Avg tile: 98k (gzipped: 63k) using weighted average based on OSM traffic
0:28:44 DEB [archive] - # tiles: 270,230,645
0:28:44 DEB [archive] - # features: 2,727,652,745
0:28:44 INF [archive] - Finished in 6m20s cpu:4h54m3s gc:22s avg:46.5
0:28:44 INF [archive] - read 2x(43% 2m43s wait:2m9s done:17s)
0:28:44 INF [archive] - merge 1x(68% 4m17s wait:1m12s done:17s)
0:28:44 INF [archive] - encode 62x(67% 4m16s block:5s wait:1m17s done:17s)
0:28:44 INF [archive] - write 1x(24% 1m33s wait:4m11s done:17s)
0:28:44 INF - Finished in 28m44s cpu:23h57m11s gc:1m25s avg:50
0:28:44 INF - FINISHED!
0:28:44 INF -
0:28:44 INF - ----------------------------------------
0:28:44 INF - data errors:
0:28:44 INF - render_snap_fix_input 21,235,795
0:28:44 INF - merge_snap_fix_input 2,946
0:28:44 INF - feature_polygon_osm_invalid_multipolygon_empty_after_fix 273
0:28:44 INF - omt_park_area_osm_invalid_multipolygon_empty_after_fix 26
0:28:44 INF - feature_centroid_if_convex_osm_invalid_multipolygon_empty_after_fix 19
0:28:44 INF - feature_point_on_surface_osm_invalid_multipolygon_empty_after_fix 5
0:28:44 INF - omt_place_island_poly_osm_invalid_multipolygon_empty_after_fix 3
0:28:44 INF - feature_centroid_osm_invalid_multipolygon_empty_after_fix 2
0:28:44 INF - merge_snap_fix_input2 1
0:28:44 INF - merge_snap_fix_input3 1
0:28:44 INF - ----------------------------------------
0:28:44 INF - overall 28m44s cpu:23h57m11s gc:1m25s avg:50
0:28:44 INF - lake_centerlines 2s cpu:8s avg:3.3
0:28:44 INF - read 2x(27% 0.7s done:2s)
0:28:44 INF - process 62x(0% 0s wait:1s done:1s)
0:28:44 INF - write 2x(0% 0s wait:2s)
0:28:44 INF - water_polygons 34s cpu:18m42s gc:1s avg:33.2
0:28:44 INF - read 2x(19% 6s wait:9s done:18s)
0:28:44 INF - process 62x(48% 16s wait:16s)
0:28:44 INF - write 2x(62% 21s wait:12s)
0:28:44 INF - natural_earth 16s cpu:27s avg:1.7
0:28:44 INF - read 2x(36% 6s done:10s)
0:28:44 INF - process 62x(1% 0.1s wait:11s done:4s)
0:28:44 INF - write 2x(0% 0s wait:12s done:4s)
0:28:44 INF - osm_pass1 1m24s cpu:1h10m52s gc:3s avg:50.7
0:28:44 INF - read 1x(4% 3s wait:1m6s done:6s)
0:28:44 INF - process 63x(77% 1m5s block:12s wait:2s)
0:28:44 INF - osm_pass2 17m41s cpu:16h36m26s gc:48s avg:56.4
0:28:44 INF - read 1x(0% 3s wait:16m59s done:37s)
0:28:44 INF - process 62x(87% 15m20s block:7s wait:6s)
0:28:44 INF - write 2x(38% 6m48s wait:10m18s)
0:28:44 INF - boundaries 13s cpu:16s avg:1.3
0:28:44 INF - agg_stop 0.7s cpu:1s avg:2.1
0:28:44 INF - sort 2m cpu:56m gc:10s avg:28.1
0:28:44 INF - worker 5x(44% 53s wait:32s done:2s)
0:28:44 INF - archive 6m20s cpu:4h54m3s gc:22s avg:46.5
0:28:44 INF - read 2x(43% 2m43s wait:2m9s done:17s)
0:28:44 INF - merge 1x(68% 4m17s wait:1m12s done:17s)
0:28:44 INF - encode 62x(67% 4m16s block:5s wait:1m17s done:17s)
0:28:44 INF - write 1x(24% 1m33s wait:4m11s done:17s)
0:28:44 INF - ----------------------------------------
0:28:44 INF - archive 68GB
0:28:44 INF - features 212GB

Wyświetl plik

@ -1,58 +0,0 @@
# Planetiler Basemap Profile
This basemap profile is based on [OpenMapTiles](https://github.com/openmaptiles/openmaptiles) v3.12.2.
See [README.md](../README.md) in the parent directory for instructions on how to run.
## Differences from OpenMapTiles
- Road name abbreviations are not implemented yet in the `transportation_name` layer
- `agg_stop` tag not implemented yet in the `poi` layer
- Paths are visible at z13 and z14 in `transportation` and `transportation_name` layers instead of just z14 in
OpenMapTiles, to revert this behavior set `--transportation-z13-paths=false`
- `brunnel` tag is excluded from `transportation_name` layer to avoid breaking apart long `transportation_name`
lines, to revert this behavior set `--transportation-name-brunnel=true`
## Code Layout
[Generate.java](./src/main/java/com/onthegomap/planetiler/basemap/Generate.java) generates code in
the [generated](./src/main/java/com/onthegomap/planetiler/basemap/generated) package from an OpenMapTiles tag in GitHub:
- [OpenMapTilesSchema](./src/main/java/com/onthegomap/planetiler/basemap/generated/OpenMapTilesSchema.java)
contains an interface for each layer with constants for the name, attributes, and allowed values for each tag in that
layer
- [Tables](./src/main/java/com/onthegomap/planetiler/basemap/generated/Tables.java)
contains a record for each table that OpenMapTiles [imposm3](https://github.com/omniscale/imposm3) configuration
generates (along with the tag-filtering expression) so layers can listen on instances of those records instead of
doing the tag filtering and parsing themselves
The [layers](./src/main/java/com/onthegomap/planetiler/basemap/layers) package contains a port of the SQL logic to
generate each layer from OpenMapTiles. Layers define how source features (or parsed imposm3 table rows) map to vector
tile features, and logic for post-processing tile geometries.
[BasemapProfile](./src/main/java/com/onthegomap/planetiler/basemap/BasemapProfile.java) dispatches source features to
layer handlers and merges the results.
[BasemapMain](./src/main/java/com/onthegomap/planetiler/basemap/BasemapMain.java) is the main driver that registers
source data and output location.
## Regenerating Code
To run `Generate.java`, use [scripts/regenerate-openmaptiles.sh](../scripts/regenerate-openmaptiles.sh) script with the
OpenMapTiles release tag:
```bash
./scripts/regenerate-openmaptiles.sh v3.12.2
```
Then follow the instructions it prints for reformatting generated code.
## License and Attribution
OpenMapTiles code is licensed under the BSD 3-Clause License, which appears at the top of any file ported from
OpenMapTiles.
The OpenMapTiles schema (or "look and feel") is licensed under [CC-BY 4.0](http://creativecommons.org/licenses/by/4.0/),
so any map derived from that schema
must [visibly credit OpenMapTiles](https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md#design-license-cc-by-40)
. It also uses OpenStreetMap data, so you
must [visibly credit OpenStreetMap contributors](https://www.openstreetmap.org/copyright).

Wyświetl plik

@ -1,52 +0,0 @@
package com.onthegomap.planetiler.basemap;
import com.onthegomap.planetiler.Planetiler;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.config.Arguments;
import java.nio.file.Path;
/**
* Main entrypoint for generating a map using the basemap schema.
*/
public class BasemapMain {
public static void main(String[] args) throws Exception {
run(Arguments.fromArgsOrConfigFile(args));
}
static void run(Arguments arguments) throws Exception {
Path dataDir = Path.of("data");
Path sourcesDir = dataDir.resolve("sources");
// use --area=... argument, AREA=... env var or area=... in config to set the region of the world to use
// will be ignored if osm_path or osm_url are set
String area = arguments.getString(
"area",
"name of the extract to download if osm_url/osm_path not specified (i.e. 'monaco' 'rhode island' 'australia' or 'planet')",
"monaco"
);
Planetiler.create(arguments)
.setDefaultLanguages(OpenMapTilesSchema.LANGUAGES)
.fetchWikidataNameTranslations(sourcesDir.resolve("wikidata_names.json"))
// defer creation of the profile because it depends on data from the runner
.setProfile(BasemapProfile::new)
// override any of these with arguments: --osm_path=... or --osm_url=...
// or OSM_PATH=... OSM_URL=... environmental argument
// or osm_path=... osm_url=... in a config file
.addShapefileSource("EPSG:3857", BasemapProfile.LAKE_CENTERLINE_SOURCE,
sourcesDir.resolve("lake_centerline.shp.zip"),
"https://github.com/lukasmartinelli/osm-lakelines/releases/download/v0.9/lake_centerline.shp.zip")
.addShapefileSource(BasemapProfile.WATER_POLYGON_SOURCE,
sourcesDir.resolve("water-polygons-split-3857.zip"),
"https://osmdata.openstreetmap.de/download/water-polygons-split-3857.zip")
.addNaturalEarthSource(BasemapProfile.NATURAL_EARTH_SOURCE,
sourcesDir.resolve("natural_earth_vector.sqlite.zip"),
"https://naciscdn.org/naturalearth/packages/natural_earth_vector.sqlite.zip")
.addOsmSource(BasemapProfile.OSM_SOURCE,
sourcesDir.resolve(area.replaceAll("[^a-zA-Z]+", "_") + ".osm.pbf"),
"planet".equalsIgnoreCase(area) ? ("aws:latest") : ("geofabrik:" + area))
// override with --mbtiles=... argument or MBTILES=... env var or mbtiles=... in a config file
.setOutput("mbtiles", dataDir.resolve("output.mbtiles"))
.run();
}
}

Wyświetl plik

@ -1,232 +0,0 @@
package com.onthegomap.planetiler.basemap;
import static com.onthegomap.planetiler.geo.GeoUtils.EMPTY_LINE;
import static com.onthegomap.planetiler.geo.GeoUtils.EMPTY_POINT;
import static com.onthegomap.planetiler.geo.GeoUtils.EMPTY_POLYGON;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.ForwardingProfile;
import com.onthegomap.planetiler.Planetiler;
import com.onthegomap.planetiler.Profile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.reader.SimpleFeature;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
import java.util.ArrayList;
import java.util.List;
/**
* Delegates the logic for generating a map to individual implementations in the {@code layers} package.
* <p>
* Layer implementations extend these interfaces to subscribe to elements from different sources:
* <ul>
* <li>{@link LakeCenterlineProcessor}</li>
* <li>{@link NaturalEarthProcessor}</li>
* <li>{@link OsmWaterPolygonProcessor}</li>
* <li>{@link OsmAllProcessor} to process every OSM feature</li>
* <li>{@link OsmRelationPreprocessor} to process every OSM relation during first pass through OSM file</li>
* <li>A {@link Tables.RowHandler} implementation in {@code Tables.java} to process input features filtered and parsed
* according to the imposm3 mappings defined in the OpenMapTiles schema. Each element corresponds to a row in the
* table that imposm3 would have generated, with generated methods for accessing the data that would have been in each
* column</li>
* </ul>
* Layers can also subscribe to notifications when we finished processing an input source by implementing
* {@link FinishHandler} or post-process features in that layer before rendering the output tile by implementing
* {@link FeaturePostProcessor}.
*/
public class BasemapProfile extends ForwardingProfile {
// IDs used in stats and logs for each input source, as well as argument/config file overrides to source locations
public static final String LAKE_CENTERLINE_SOURCE = "lake_centerlines";
public static final String WATER_POLYGON_SOURCE = "water_polygons";
public static final String NATURAL_EARTH_SOURCE = "natural_earth";
public static final String OSM_SOURCE = "osm";
/** Index to efficiently find the imposm3 "table row" constructor from an OSM element based on its tags. */
private final MultiExpression.Index<RowDispatch> osmMappings;
/** Index variant that filters out any table only used by layers that implement IgnoreWikidata class. */
private final MultiExpression.Index<Boolean> wikidataMappings;
public BasemapProfile(Planetiler runner) {
this(runner.translations(), runner.config(), runner.stats());
}
public BasemapProfile(Translations translations, PlanetilerConfig config, Stats stats) {
List<String> onlyLayers = config.arguments().getList("only_layers", "Include only certain layers", List.of());
List<String> excludeLayers = config.arguments().getList("exclude_layers", "Exclude certain layers", List.of());
// register release/finish/feature postprocessor/osm relationship handler methods...
List<Handler> layers = new ArrayList<>();
for (Layer layer : OpenMapTilesSchema.createInstances(translations, config, stats)) {
if ((onlyLayers.isEmpty() || onlyLayers.contains(layer.name())) && !excludeLayers.contains(layer.name())) {
layers.add(layer);
registerHandler(layer);
}
}
// register per-source input element handlers
for (Handler handler : layers) {
if (handler instanceof NaturalEarthProcessor processor) {
registerSourceHandler(NATURAL_EARTH_SOURCE,
(source, features) -> processor.processNaturalEarth(source.getSourceLayer(), source, features));
}
if (handler instanceof OsmWaterPolygonProcessor processor) {
registerSourceHandler(WATER_POLYGON_SOURCE, processor::processOsmWater);
}
if (handler instanceof LakeCenterlineProcessor processor) {
registerSourceHandler(LAKE_CENTERLINE_SOURCE, processor::processLakeCenterline);
}
if (handler instanceof OsmAllProcessor processor) {
registerSourceHandler(OSM_SOURCE, processor::processAllOsm);
}
}
// pre-process layers to build efficient indexes for matching OSM elements based on matching expressions
// Map from imposm3 table row class to the layers that implement its handler.
var handlerMap = Tables.generateDispatchMap(layers);
osmMappings = Tables.MAPPINGS
.mapResults(constructor -> {
var handlers = handlerMap.getOrDefault(constructor.rowClass(), List.of()).stream()
.map(r -> {
@SuppressWarnings("unchecked") var handler = (Tables.RowHandler<Tables.Row>) r.handler();
return handler;
})
.toList();
return new RowDispatch(constructor.create(), handlers);
}).simplify().index();
wikidataMappings = Tables.MAPPINGS
.mapResults(constructor ->
handlerMap.getOrDefault(constructor.rowClass(), List.of()).stream()
.anyMatch(handler -> !IgnoreWikidata.class.isAssignableFrom(handler.handlerClass()))
).filterResults(b -> b).simplify().index();
// register a handler for all OSM elements that forwards to imposm3 "table row" handler methods
// based on efficient pre-processed index
if (!osmMappings.isEmpty()) {
registerSourceHandler(OSM_SOURCE, (source, features) -> {
for (var match : getTableMatches(source)) {
RowDispatch rowDispatch = match.match();
var row = rowDispatch.constructor.create(source, match.keys().get(0));
for (Tables.RowHandler<Tables.Row> handler : rowDispatch.handlers()) {
handler.process(row, features);
}
}
});
}
}
/** Returns the imposm3 table row constructors that match an input element's tags. */
public List<MultiExpression.Match<RowDispatch>> getTableMatches(SourceFeature input) {
return osmMappings.getMatchesWithTriggers(input);
}
@Override
public boolean caresAboutWikidataTranslation(OsmElement elem) {
var tags = elem.tags();
if (elem instanceof OsmElement.Node) {
return wikidataMappings.getOrElse(SimpleFeature.create(EMPTY_POINT, tags), false);
} else if (elem instanceof OsmElement.Way) {
return wikidataMappings.getOrElse(SimpleFeature.create(EMPTY_POLYGON, tags), false)
|| wikidataMappings.getOrElse(SimpleFeature.create(EMPTY_LINE, tags), false);
} else if (elem instanceof OsmElement.Relation) {
return wikidataMappings.getOrElse(SimpleFeature.create(EMPTY_POLYGON, tags), false);
} else {
return false;
}
}
/*
* Pass-through constants generated from the OpenMapTiles vector schema
*/
@Override
public String name() {
return OpenMapTilesSchema.NAME;
}
@Override
public String description() {
return OpenMapTilesSchema.DESCRIPTION;
}
@Override
public String attribution() {
return OpenMapTilesSchema.ATTRIBUTION;
}
@Override
public String version() {
return OpenMapTilesSchema.VERSION;
}
/**
* Layers should implement this interface to subscribe to elements from <a href="https://www.naturalearthdata.com/">natural
* earth</a>.
*/
public interface NaturalEarthProcessor {
/**
* Process an element from {@code table} in the<a href="https://www.naturalearthdata.com/">natural earth
* source</a>.
*
* @see Profile#processFeature(SourceFeature, FeatureCollector)
*/
void processNaturalEarth(String table, SourceFeature feature, FeatureCollector features);
}
/**
* Layers should implement this interface to subscribe to elements from <a href="https://github.com/lukasmartinelli/osm-lakelines">OSM
* lake centerlines source</a>.
*/
public interface LakeCenterlineProcessor {
/**
* Process an element from the <a href="https://github.com/lukasmartinelli/osm-lakelines">OSM lake centerlines
* source</a>
*
* @see Profile#processFeature(SourceFeature, FeatureCollector)
*/
void processLakeCenterline(SourceFeature feature, FeatureCollector features);
}
/**
* Layers should implement this interface to subscribe to elements from <a href="https://osmdata.openstreetmap.de/data/water-polygons.html">OSM
* water polygons source</a>.
*/
public interface OsmWaterPolygonProcessor {
/**
* Process an element from the <a href="https://osmdata.openstreetmap.de/data/water-polygons.html">OSM water
* polygons source</a>
*
* @see Profile#processFeature(SourceFeature, FeatureCollector)
*/
void processOsmWater(SourceFeature feature, FeatureCollector features);
}
/** Layers should implement this interface to subscribe to every OSM element. */
public interface OsmAllProcessor {
/**
* Process an OSM element during the second pass through the OSM data file.
*
* @see Profile#processFeature(SourceFeature, FeatureCollector)
*/
void processAllOsm(SourceFeature feature, FeatureCollector features);
}
/**
* Layers should implement to indicate they do not need wikidata name translations to avoid downloading more
* translations than are needed.
*/
public interface IgnoreWikidata {}
private static record RowDispatch(
Tables.Constructor constructor,
List<Tables.RowHandler<Tables.Row>> handlers
) {}
}

Wyświetl plik

@ -1,757 +0,0 @@
package com.onthegomap.planetiler.basemap;
import static com.onthegomap.planetiler.expression.Expression.*;
import static java.util.stream.Collectors.joining;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.CaseFormat;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.expression.Expression;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.util.Downloader;
import com.onthegomap.planetiler.util.FileUtils;
import com.onthegomap.planetiler.util.Format;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Stream;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
/**
* Generates code in the {@code generated} package from the OpenMapTiles schema crawled from a tag or branch in the <a
* href="https://github.com/openmaptiles/openmaptiles">OpenMapTiles GitHub repo</a>.
* <p>
* {@code OpenMapTilesSchema.java} contains the output layer definitions (i.e. attributes and allowed values) so that
* layer implementations in {@code layers} package can reference them instead of hard-coding.
* <p>
* {@code Tables.java} contains the <a href="https://github.com/omniscale/imposm3">imposm3</a> table definitions from
* mapping.yaml files in the OpenMapTiles repo. Layers in the {@code layer} package can extend the {@code Handler}
* nested class for a table definition to "subscribe" to OSM elements that imposm3 would put in that table.
* <p>
* To run use {@code ./scripts/regenerate-openmaptiles.sh}
*/
public class Generate {
private static final Logger LOGGER = LoggerFactory.getLogger(Generate.class);
private static final ObjectMapper mapper = new ObjectMapper();
private static final Yaml yaml;
private static final String LINE_SEPARATOR = System.lineSeparator();
private static final String GENERATED_FILE_HEADER = """
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
// AUTOGENERATED BY Generate.java -- DO NOT MODIFY
""";
private static final Parser parser = Parser.builder().build();
private static final HtmlRenderer renderer = HtmlRenderer.builder().build();
static {
// bump the default limit of 50
var options = new LoaderOptions();
options.setMaxAliasesForCollections(1_000);
yaml = new Yaml(options);
}
private static <T> T loadAndParseYaml(String url, PlanetilerConfig config, Class<T> clazz) throws IOException {
LOGGER.info("reading " + url);
try (var stream = Downloader.openStream(url, config)) {
// Jackson yaml parsing does not handle anchors and references, so first parse the input
// using SnakeYAML, then parse SnakeYAML's output using Jackson to get it into our records.
Map<String, Object> parsed = yaml.load(stream);
return mapper.convertValue(parsed, clazz);
}
}
static <T> T parseYaml(String string, Class<T> clazz) {
// Jackson yaml parsing does not handle anchors and references, so first parse the input
// using SnakeYAML, then parse SnakeYAML's output using Jackson to get it into our records.
Map<String, Object> parsed = yaml.load(string);
return mapper.convertValue(parsed, clazz);
}
static JsonNode parseYaml(String string) {
return string == null ? null : parseYaml(string, JsonNode.class);
}
public static void main(String[] args) throws IOException {
Arguments arguments = Arguments.fromArgsOrConfigFile(args);
PlanetilerConfig planetilerConfig = PlanetilerConfig.from(arguments);
String tag = arguments.getString("tag", "openmaptiles tag to use", "v3.12.2");
String base = "https://raw.githubusercontent.com/openmaptiles/openmaptiles/" + tag + "/";
// start crawling from openmaptiles.yaml
// then crawl schema from each layers/<layer>/<layer>.yaml file that it references
// then crawl table definitions from each layers/<layer>/mapping.yaml file that the layer references
String rootUrl = base + "openmaptiles.yaml";
OpenmaptilesConfig config = loadAndParseYaml(rootUrl, planetilerConfig, OpenmaptilesConfig.class);
List<LayerConfig> layers = new ArrayList<>();
Set<String> imposm3MappingFiles = new LinkedHashSet<>();
for (String layerFile : config.tileset.layers) {
String layerURL = base + layerFile;
LayerConfig layer = loadAndParseYaml(layerURL, planetilerConfig, LayerConfig.class);
layers.add(layer);
for (Datasource datasource : layer.datasources) {
if ("imposm3".equals(datasource.type)) {
String mappingPath = Path.of(layerFile).resolveSibling(datasource.mapping_file).normalize().toString();
imposm3MappingFiles.add(base + mappingPath);
} else {
LOGGER.warn("Unknown datasource type: " + datasource.type);
}
}
}
Map<String, Imposm3Table> tables = new LinkedHashMap<>();
for (String uri : imposm3MappingFiles) {
Imposm3Mapping layer = loadAndParseYaml(uri, planetilerConfig, Imposm3Mapping.class);
tables.putAll(layer.tables);
}
String packageName = "com.onthegomap.planetiler.basemap.generated";
String[] packageParts = packageName.split("\\.");
Path output = Path.of("planetiler-basemap", "src", "main", "java")
.resolve(Path.of(packageParts[0], Arrays.copyOfRange(packageParts, 1, packageParts.length)));
FileUtils.deleteDirectory(output);
Files.createDirectories(output);
emitLayerSchemaDefinitions(config.tileset, layers, packageName, output, tag);
emitTableDefinitions(tables, packageName, output, tag);
LOGGER.info(
"Done generating code in 'generated' package, now run IntelliJ 'Reformat Code' operation with 'Optimize imports' and 'Cleanup code' options selected.");
}
/** Generates {@code OpenMapTilesSchema.java} */
private static void emitLayerSchemaDefinitions(OpenmaptilesTileSet info, List<LayerConfig> layers, String packageName,
Path output, String tag)
throws IOException {
StringBuilder schemaClass = new StringBuilder();
schemaClass.append("""
%s
package %s;
import static com.onthegomap.planetiler.expression.Expression.*;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.basemap.Layer;
import com.onthegomap.planetiler.util.Translations;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* All vector tile layer definitions, attributes, and allowed values generated from the
* <a href="https://github.com/openmaptiles/openmaptiles/blob/%s/openmaptiles.yaml">OpenMapTiles vector tile schema %s</a>.
*/
@SuppressWarnings("unused")
public class OpenMapTilesSchema {
public static final String NAME = %s;
public static final String DESCRIPTION = %s;
public static final String VERSION = %s;
public static final String ATTRIBUTION = %s;
public static final List<String> LANGUAGES = List.of(%s);
/** Returns a list of expected layer implementation instances from the {@code layers} package. */
public static List<Layer> createInstances(Translations translations, PlanetilerConfig config, Stats stats) {
return List.of(
%s
);
}
"""
.formatted(
GENERATED_FILE_HEADER,
packageName,
escapeJavadoc(tag),
escapeJavadoc(tag),
Format.quote(info.name),
Format.quote(info.description),
Format.quote(info.version),
Format.quote(info.attribution),
info.languages.stream().map(Format::quote).collect(joining(", ")),
layers.stream()
.map(
l -> "new com.onthegomap.planetiler.basemap.layers.%s(translations, config, stats)"
.formatted(lowerUnderscoreToUpperCamel(l.layer.id)))
.collect(joining("," + LINE_SEPARATOR))
.indent(6).trim()
));
for (var layer : layers) {
String layerCode = generateCodeForLayer(tag, layer);
schemaClass.append(layerCode);
}
schemaClass.append("}");
Files.writeString(output.resolve("OpenMapTilesSchema.java"), schemaClass);
}
private static String generateCodeForLayer(String tag, LayerConfig layer) {
String layerName = layer.layer.id;
String className = lowerUnderscoreToUpperCamel(layerName);
StringBuilder fields = new StringBuilder();
StringBuilder fieldValues = new StringBuilder();
StringBuilder fieldMappings = new StringBuilder();
layer.layer.fields.forEach((name, value) -> {
JsonNode valuesNode = value.get("values");
List<String> valuesForComment = valuesNode == null ? List.of() : valuesNode.isArray() ?
iterToList(valuesNode.elements()).stream().map(Objects::toString).toList() :
iterToList(valuesNode.fieldNames());
String javadocDescription = markdownToJavadoc(getFieldDescription(value));
fields.append("""
%s
public static final String %s = %s;
""".formatted(
valuesForComment.isEmpty() ? "/** %s */".formatted(javadocDescription) : """
/**
* %s
* <p>
* allowed values:
* <ul>
* %s
* </ul>
*/
""".stripTrailing().formatted(javadocDescription,
valuesForComment.stream().map(v -> "<li>" + v).collect(joining(LINE_SEPARATOR + " * "))),
name.toUpperCase(Locale.ROOT),
Format.quote(name)
).indent(4));
List<String> values = valuesNode == null ? List.of() : valuesNode.isArray() ?
iterToList(valuesNode.elements()).stream().filter(JsonNode::isTextual).map(JsonNode::textValue)
.map(t -> t.replaceAll(" .*", "")).toList() :
iterToList(valuesNode.fieldNames());
if (values.size() > 0) {
fieldValues.append(values.stream()
.map(v -> "public static final String %s = %s;"
.formatted(name.toUpperCase(Locale.ROOT) + "_" + v.toUpperCase(Locale.ROOT).replace('-', '_'),
Format.quote(v)))
.collect(joining(LINE_SEPARATOR)).indent(2).strip()
.indent(4));
fieldValues.append("public static final Set<String> %s = Set.of(%s);".formatted(
name.toUpperCase(Locale.ROOT) + "_VALUES",
values.stream().map(Format::quote).collect(joining(", "))
).indent(4));
}
if (valuesNode != null && valuesNode.isObject()) {
MultiExpression<String> mapping = generateFieldMapping(valuesNode);
fieldMappings.append(" public static final MultiExpression<String> %s = %s;%n"
.formatted(lowerUnderscoreToUpperCamel(name), generateJavaCode(mapping)));
}
});
return """
/**
* %s
*
* Generated from <a href="https://github.com/openmaptiles/openmaptiles/blob/%s/layers/%s/%s.yaml">%s.yaml</a>
*/
public interface %s extends Layer {
double BUFFER_SIZE = %s;
String LAYER_NAME = %s;
@Override
default String name() {
return LAYER_NAME;
}
/** Attribute names for map elements in the %s layer. */
final class Fields {
%s
}
/** Attribute values for map elements in the %s layer. */
final class FieldValues {
%s
}
/** Complex mappings to generate attribute values from OSM element tags in the %s layer. */
final class FieldMappings {
%s
}
}
""".formatted(
markdownToJavadoc(layer.layer.description),
escapeJavadoc(tag),
escapeJavadoc(layerName),
escapeJavadoc(layerName),
escapeJavadoc(layerName),
className,
layer.layer.buffer_size,
Format.quote(layerName),
escapeJavadoc(layerName),
fields.toString().strip(),
escapeJavadoc(layerName),
fieldValues.toString().strip(),
escapeJavadoc(layerName),
fieldMappings.toString().strip()
).indent(2);
}
/** Generates {@code Tables.java} */
private static void emitTableDefinitions(Map<String, Imposm3Table> tables, String packageName, Path output,
String tag)
throws IOException {
StringBuilder tablesClass = new StringBuilder();
tablesClass.append("""
%s
package %s;
import static com.onthegomap.planetiler.expression.Expression.*;
import com.onthegomap.planetiler.expression.Expression;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.reader.SourceFeature;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* OSM element parsers generated from the <a href="https://github.com/omniscale/imposm3">imposm3</a> table definitions
* in the <a href="https://github.com/openmaptiles/openmaptiles/blob/%s/openmaptiles.yaml">OpenMapTiles vector tile schema</a>.
*
* These filter and parse the raw OSM key/value attribute pairs on tags into records with fields that match the
* columns in the tables that imposm3 would generate. Layer implementations can "subscribe" to elements from each
* "table" but implementing the table's {@code Handler} interface and use the element's typed API to access
* attributes.
*/
@SuppressWarnings("unused")
public class Tables {
/** A parsed OSM element that would appear in a "row" of the imposm3 table. */
public interface Row {
/** Returns the original OSM element. */
SourceFeature source();
}
/** A functional interface that the constructor of a new table row can be coerced to. */
@FunctionalInterface
public interface Constructor {
Row create(SourceFeature source, String mappingKey);
}
/** The {@code rowClass} of an imposm3 table row and its constructor coerced to a {@link Constructor}. */
public static record RowClassAndConstructor(
Class<? extends Row> rowClass,
Constructor create
) {}
/** A functional interface that the typed handler method that a layer implementation can be coerced to. */
@FunctionalInterface
public interface RowHandler<T extends Row> {
/** Process a typed element according to the profile. */
void process(T element, FeatureCollector features);
}
/** The {@code handlerClass} of a layer handler and it's {@code process} method coerced to a {@link RowHandler}. */
public static record RowHandlerAndClass<T extends Row>(
Class<?> handlerClass,
RowHandler<T> handler
) {}
""".formatted(GENERATED_FILE_HEADER, packageName, escapeJavadoc(tag)));
List<String> classNames = new ArrayList<>();
Map<String, String> fieldNameToType = new TreeMap<>();
for (var entry : tables.entrySet()) {
String key = entry.getKey();
Imposm3Table table = entry.getValue();
List<OsmTableField> fields = parseTableFields(table);
for (var field : fields) {
String existing = fieldNameToType.get(field.name);
if (existing == null) {
fieldNameToType.put(field.name, field.clazz);
} else if (!existing.equals(field.clazz)) {
throw new IllegalArgumentException(
"Field " + field.name + " has both " + existing + " and " + field.clazz + " types");
}
}
Expression mappingExpression = parseImposm3MappingExpression(table);
String mapping = """
/** Imposm3 "mapping" to filter OSM elements that should appear in this "table". */
public static final Expression MAPPING = %s;
""".formatted(
mappingExpression
);
String tableName = "osm_" + key;
String className = lowerUnderscoreToUpperCamel(tableName);
if (!"relation_member".equals(table.type)) {
classNames.add(className);
tablesClass.append("""
/** An OSM element that would appear in the {@code %s} table generated by imposm3. */
public static record %s(%s) implements Row, %s {
public %s(SourceFeature source, String mappingKey) {
this(%s);
}
%s
/**
* Interface for layer implementations to extend to subscribe to OSM elements filtered and parsed as
* {@link %s}.
*/
public interface Handler {
void process(%s element, FeatureCollector features);
}
}
""".formatted(
tableName,
escapeJavadoc(className),
fields.stream().map(c -> "@Override " + c.clazz + " " + lowerUnderscoreToLowerCamel(c.name))
.collect(joining(", ")),
fields.stream().map(c -> lowerUnderscoreToUpperCamel("with_" + c.name))
.collect(joining(", ")),
className,
fields.stream().map(c -> c.extractCode).collect(joining(", ")),
mapping,
escapeJavadoc(className),
className
).indent(2));
}
}
tablesClass.append(fieldNameToType.entrySet().stream().map(e -> {
String attrName = lowerUnderscoreToLowerCamel(e.getKey());
String type = e.getValue();
String interfaceName = lowerUnderscoreToUpperCamel("with_" + e.getKey());
return """
/** Rows with a %s %s attribute. */
public interface %s {
%s %s();
}
""".formatted(
escapeJavadoc(type),
escapeJavadoc(attrName),
interfaceName,
type,
attrName);
}).collect(joining(LINE_SEPARATOR)).indent(2));
tablesClass.append("""
/** Index to efficiently choose which imposm3 "tables" an element should appear in based on its attributes. */
public static final MultiExpression<RowClassAndConstructor> MAPPINGS = MultiExpression.of(List.of(
%s
));
""".formatted(
classNames.stream().map(
className -> "MultiExpression.entry(new RowClassAndConstructor(%s.class, %s::new), %s.MAPPING)".formatted(
className, className, className))
.collect(joining("," + LINE_SEPARATOR)).indent(2).strip()
).indent(2));
String handlerCondition = classNames.stream().map(className ->
"""
if (handler instanceof %s.Handler typedHandler) {
result.computeIfAbsent(%s.class, cls -> new ArrayList<>()).add(new RowHandlerAndClass<>(typedHandler.getClass(), typedHandler::process));
}""".formatted(className, className)
).collect(joining(LINE_SEPARATOR));
tablesClass.append("""
/**
* Returns a map from imposm3 "table row" class to the layers that have a handler for it from a list of layer
* implementations.
*/
public static Map<Class<? extends Row>, List<RowHandlerAndClass<?>>> generateDispatchMap(List<?> handlers) {
Map<Class<? extends Row>, List<RowHandlerAndClass<?>>> result = new HashMap<>();
for (var handler : handlers) {
%s
}
return result;
}
}
""".formatted(handlerCondition.indent(6).trim()));
Files.writeString(output.resolve("Tables.java"), tablesClass);
}
/**
* Returns an {@link Expression} that implements the same logic as the <a href="https://imposm.org/docs/imposm3/latest/mapping.html">Imposm3
* Data Mapping</a> definition for a table.
*/
static Expression parseImposm3MappingExpression(Imposm3Table table) {
if (table.type_mappings != null) {
return or(
table.type_mappings.entrySet().stream().map(entry ->
parseImposm3MappingExpression(entry.getKey(), entry.getValue(), table.filters)
).toList()
).simplify();
} else {
return parseImposm3MappingExpression(table.type, table.mapping, table.filters);
}
}
/**
* Returns an {@link Expression} that implements the same logic as the <a href="https://imposm.org/docs/imposm3/latest/mapping.html#filters">Imposm3
* Data Mapping filters</a> for a table.
*/
static Expression parseImposm3MappingExpression(String type, JsonNode mapping, Imposm3Filters filters) {
return and(
or(parseFieldMappingExpression(mapping).toList()),
and(
filters == null || filters.require == null ? List.of() : parseFieldMappingExpression(filters.require).toList()),
not(or(
filters == null || filters.reject == null ? List.of() : parseFieldMappingExpression(filters.reject).toList())),
matchType(type.replaceAll("s$", ""))
).simplify();
}
private static List<OsmTableField> parseTableFields(Imposm3Table tableDefinition) {
List<OsmTableField> result = new ArrayList<>();
boolean relationMember = "relation_member".equals(tableDefinition.type);
for (Imposm3Column col : tableDefinition.columns) {
if (relationMember && col.from_member) {
// layers process relation info that they need manually
continue;
}
switch (col.type) {
case "id", "validated_geometry", "area", "hstore_tags", "geometry" -> {
// do nothing - already on source feature
}
case "member_id", "member_role", "member_type", "member_index" -> {
// do nothing
}
case "mapping_key" -> result
.add(new OsmTableField("String", col.name, "mappingKey"));
case "mapping_value" -> result
.add(new OsmTableField("String", col.name, "source.getString(mappingKey)"));
case "string" -> result
.add(new OsmTableField("String", col.name,
"source.getString(\"%s\")".formatted(Objects.requireNonNull(col.key, col.toString()))));
case "bool" -> result
.add(new OsmTableField("boolean", col.name,
"source.getBoolean(\"%s\")".formatted(Objects.requireNonNull(col.key, col.toString()))));
case "integer" -> result
.add(new OsmTableField("long", col.name,
"source.getLong(\"%s\")".formatted(Objects.requireNonNull(col.key, col.toString()))));
case "wayzorder" -> result.add(new OsmTableField("int", col.name, "source.getWayZorder()"));
case "direction" -> result.add(new OsmTableField("int", col.name,
"source.getDirection(\"%s\")".formatted(Objects.requireNonNull(col.key, col.toString()))));
default -> throw new IllegalArgumentException("Unhandled column: " + col.type);
}
}
result.add(new OsmTableField("SourceFeature", "source", "source"));
return result;
}
/**
* Returns a {@link MultiExpression} to efficiently determine the value for an output vector tile feature (i.e.
* "class") based on the "field mapping" defined in the layer schema definition.
*/
static MultiExpression<String> generateFieldMapping(JsonNode valuesNode) {
MultiExpression<String> mapping = MultiExpression.of(new ArrayList<>());
valuesNode.fields().forEachRemaining(entry -> {
String field = entry.getKey();
JsonNode node = entry.getValue();
Expression expression = or(parseFieldMappingExpression(node).toList()).simplify();
if (!expression.equals(or()) && !expression.equals(and())) {
mapping.expressions().add(MultiExpression.entry(field, expression));
}
});
return mapping;
}
private static Stream<Expression> parseFieldMappingExpression(JsonNode node) {
if (node.isObject()) {
List<String> keys = iterToList(node.fieldNames());
if (keys.contains("__AND__")) {
if (keys.size() > 1) {
throw new IllegalArgumentException("Cannot combine __AND__ with others");
}
return Stream.of(and(parseFieldMappingExpression(node.get("__AND__")).toList()));
} else if (keys.contains("__OR__")) {
if (keys.size() > 1) {
throw new IllegalArgumentException("Cannot combine __OR__ with others");
}
return Stream.of(or(parseFieldMappingExpression(node.get("__OR__")).toList()));
} else {
return iterToList(node.fields()).stream().map(entry -> {
String field = entry.getKey();
List<String> value = toFlatList(entry.getValue()).map(JsonNode::textValue).filter(Objects::nonNull).toList();
return value.isEmpty() || value.contains("__any__") ? matchField(field) : matchAny(field, value);
});
}
} else if (node.isArray()) {
return iterToList(node.elements()).stream().flatMap(Generate::parseFieldMappingExpression);
} else if (node.isNull()) {
return Stream.empty();
} else {
throw new IllegalArgumentException("parseExpression input not handled: " + node);
}
}
/**
* Returns a flattened list of all the elements in nested arrays from {@code node}.
* <p>
* For example: {@code [[[a, b], c], [d]} becomes {@code [a, b, c, d]}
* <p>
* And {@code a} becomes {@code [a]}
*/
private static Stream<JsonNode> toFlatList(JsonNode node) {
return node.isArray() ? iterToList(node.elements()).stream().flatMap(Generate::toFlatList) : Stream.of(node);
}
/** Returns java code that will recreate an {@link MultiExpression} identical to {@code mapping}. */
private static String generateJavaCode(MultiExpression<String> mapping) {
return "MultiExpression.of(List.of(" + mapping.expressions().stream()
.map(s -> "MultiExpression.entry(%s, %s)".formatted(Format.quote(s.result()), s.expression()))
.collect(joining(", ")) + "))";
}
private static String lowerUnderscoreToLowerCamel(String name) {
return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name);
}
private static String lowerUnderscoreToUpperCamel(String name) {
return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name);
}
private static <T> List<T> iterToList(Iterator<T> iter) {
List<T> result = new ArrayList<>();
iter.forEachRemaining(result::add);
return result;
}
/** Renders {@code markdown} as HTML and returns comment text safe to insert in generated javadoc. */
private static String markdownToJavadoc(String markdown) {
return Stream.of(markdown.strip().split("[\r\n][\r\n]+"))
.map(p -> parser.parse(p.strip()))
.map(node -> escapeJavadoc(renderer.render(node)))
.map(p -> p.replaceAll("(^<p>|</p>$)", "").strip())
.collect(joining(LINE_SEPARATOR + "<p>" + LINE_SEPARATOR));
}
/** Returns {@code comment} text safe to insert in generated javadoc. */
private static String escapeJavadoc(String comment) {
return comment.strip().replaceAll("[\n\r*\\s]+", " ");
}
private static String getFieldDescription(JsonNode value) {
if (value.isTextual()) {
return value.textValue();
} else {
return value.get("description").textValue();
}
}
/*
* Models for deserializing yaml into:
*/
private static record OpenmaptilesConfig(
OpenmaptilesTileSet tileset
) {}
@JsonIgnoreProperties(ignoreUnknown = true)
private static record OpenmaptilesTileSet(
List<String> layers,
String version,
String attribution,
String name,
String description,
List<String> languages
) {}
@JsonIgnoreProperties(ignoreUnknown = true)
private static record LayerDetails(
String id,
String description,
Map<String, JsonNode> fields,
double buffer_size
) {}
private static record Datasource(
String type,
String mapping_file
) {}
@JsonIgnoreProperties(ignoreUnknown = true)
private static record LayerConfig(
LayerDetails layer,
List<Datasource> datasources
) {}
private static record Imposm3Column(
String type,
String name,
String key,
boolean from_member
) {}
static record Imposm3Filters(
JsonNode reject,
JsonNode require
) {}
static record Imposm3Table(
String type,
@JsonProperty("_resolve_wikidata") boolean resolveWikidata,
List<Imposm3Column> columns,
Imposm3Filters filters,
JsonNode mapping,
Map<String, JsonNode> type_mappings
) {}
@JsonIgnoreProperties(ignoreUnknown = true)
private static record Imposm3Mapping(
Map<String, Imposm3Table> tables
) {}
private static record OsmTableField(
String clazz,
String name,
String extractCode
) {}
}

Wyświetl plik

@ -1,8 +0,0 @@
package com.onthegomap.planetiler.basemap;
import com.onthegomap.planetiler.ForwardingProfile;
/** Interface for all vector tile layer implementations that {@link BasemapProfile} delegates to. */
public interface Layer extends
ForwardingProfile.Handler,
ForwardingProfile.HandlerForLayer {}

Wyświetl plik

@ -1,79 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.LanguageUtils;
import com.onthegomap.planetiler.basemap.util.Utils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
/**
* Defines the logic for generating map elements in the {@code aerodrome_label} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/aerodrome_label">OpenMapTiles
* aerodrome_layer sql files</a>.
*/
public class AerodromeLabel implements
OpenMapTilesSchema.AerodromeLabel,
Tables.OsmAerodromeLabelPoint.Handler {
private final MultiExpression.Index<String> classLookup;
private final Translations translations;
public AerodromeLabel(Translations translations, PlanetilerConfig config, Stats stats) {
this.classLookup = FieldMappings.Class.index();
this.translations = translations;
}
@Override
public void process(Tables.OsmAerodromeLabelPoint element, FeatureCollector features) {
features.centroid(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.setMinZoom(10)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.putAttrs(Utils.elevationTags(element.ele()))
.setAttr(Fields.IATA, nullIfEmpty(element.iata()))
.setAttr(Fields.ICAO, nullIfEmpty(element.icao()))
.setAttr(Fields.CLASS, classLookup.getOrElse(element.source(), FieldValues.CLASS_OTHER));
}
}

Wyświetl plik

@ -1,84 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
/**
* Defines the logic for generating map elements in the {@code aeroway} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/aeroway">OpenMapTiles
* aeroway sql files</a>.
*/
public class Aeroway implements
OpenMapTilesSchema.Aeroway,
Tables.OsmAerowayLinestring.Handler,
Tables.OsmAerowayPolygon.Handler,
Tables.OsmAerowayPoint.Handler {
public Aeroway(Translations translations, PlanetilerConfig config, Stats stats) {
}
@Override
public void process(Tables.OsmAerowayPolygon element, FeatureCollector features) {
features.polygon(LAYER_NAME)
.setMinZoom(10)
.setMinPixelSize(2)
.setAttr(Fields.CLASS, element.aeroway())
.setAttr(Fields.REF, element.ref());
}
@Override
public void process(Tables.OsmAerowayLinestring element, FeatureCollector features) {
features.line(LAYER_NAME)
.setMinZoom(10)
.setAttr(Fields.CLASS, element.aeroway())
.setAttr(Fields.REF, element.ref());
}
@Override
public void process(Tables.OsmAerowayPoint element, FeatureCollector features) {
features.point(LAYER_NAME)
.setMinZoom(14)
.setAttr(Fields.CLASS, element.aeroway())
.setAttr(Fields.REF, element.ref());
}
}

Wyświetl plik

@ -1,470 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.util.MemoryEstimator.CLASS_HEADER_BYTES;
import static com.onthegomap.planetiler.util.MemoryEstimator.POINTER_BYTES;
import static com.onthegomap.planetiler.util.MemoryEstimator.estimateSize;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
import com.carrotsearch.hppc.LongObjectMap;
import com.graphhopper.coll.GHLongObjectHashMap;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.FeatureMerge;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SimpleFeature;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.reader.osm.OsmRelationInfo;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Format;
import com.onthegomap.planetiler.util.MemoryEstimator;
import com.onthegomap.planetiler.util.Parse;
import com.onthegomap.planetiler.util.Translations;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.TopologyException;
import org.locationtech.jts.geom.prep.PreparedGeometry;
import org.locationtech.jts.geom.prep.PreparedGeometryFactory;
import org.locationtech.jts.operation.linemerge.LineMerger;
import org.locationtech.jts.operation.polygonize.Polygonizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Defines the logic for generating map elements for country, state, and town boundaries in the {@code boundary} layer
* from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/boundary">OpenMapTiles
* boundary sql files</a>.
*/
public class Boundary implements
OpenMapTilesSchema.Boundary,
BasemapProfile.NaturalEarthProcessor,
BasemapProfile.OsmRelationPreprocessor,
BasemapProfile.OsmAllProcessor,
BasemapProfile.FeaturePostProcessor,
BasemapProfile.FinishHandler {
/*
* Uses natural earth at lower zoom levels and OpenStreetMap at higher zoom levels.
*
* For OpenStreetMap data at higher zoom levels:
* 1) Preprocess relations on the first pass to extract info for relations where
* type=boundary and boundary=administrative and store the admin_level for
* later.
* 2) When processing individual ways, take the minimum (most important) admin
* level of every relation they are a part of and use that as the admin level
* for the way.
* 3) If boundary_country_names argument is true and the way is part of a country
* (admin_level=2) boundary, then hold onto it for later
* 4) When we finish processing the OSM source, build country polygons from the
* saved ways and use that to determine which country is on the left and right
* side of each way, then emit the way with ADM0_L and ADM0_R keys set.
* 5) Before emitting boundary lines, merge linestrings with the same tags.
*/
private static final Logger LOGGER = LoggerFactory.getLogger(Boundary.class);
private static final double COUNTRY_TEST_OFFSET = GeoUtils.metersToPixelAtEquator(0, 10) / 256d;
private final Stats stats;
private final boolean addCountryNames;
// may be updated concurrently by multiple threads
private final Map<Long, String> regionNames = new ConcurrentHashMap<>();
// need to synchronize updates to these shared data structures:
private final Map<Long, List<Geometry>> regionGeometries = new HashMap<>();
private final Map<CountryBoundaryComponent, List<Geometry>> boundariesToMerge = new HashMap<>();
private final PlanetilerConfig config;
public Boundary(Translations translations, PlanetilerConfig config, Stats stats) {
this.config = config;
this.addCountryNames = config.arguments().getBoolean(
"boundary_country_names",
"boundary layer: add left/right codes of neighboring countries",
true
);
this.stats = stats;
}
private static boolean isDisputed(Map<String, Object> tags) {
return Parse.bool(tags.get("disputed")) ||
Parse.bool(tags.get("dispute")) ||
"dispute".equals(tags.get("border_status")) ||
tags.containsKey("disputed_by") ||
tags.containsKey("claimed_by");
}
private static String editName(String name) {
return name == null ? null : name.replace(" at ", "")
.replaceAll("\\s+", "")
.replace("Extentof", "");
}
@Override
public void release() {
regionGeometries.clear();
boundariesToMerge.clear();
regionNames.clear();
}
@Override
public void processNaturalEarth(String table, SourceFeature feature, FeatureCollector features) {
boolean disputed = feature.getString("featurecla", "").startsWith("Disputed");
record BoundaryInfo(int adminLevel, int minzoom, int maxzoom) {}
BoundaryInfo info = switch (table) {
case "ne_110m_admin_0_boundary_lines_land" -> new BoundaryInfo(2, 0, 0);
case "ne_50m_admin_0_boundary_lines_land" -> new BoundaryInfo(2, 1, 3);
case "ne_10m_admin_0_boundary_lines_land" -> feature.hasTag("featurecla", "Lease Limit") ? null
: new BoundaryInfo(2, 4, 4);
case "ne_10m_admin_1_states_provinces_lines" -> {
Double minZoom = Parse.parseDoubleOrNull(feature.getTag("min_zoom"));
yield minZoom != null && minZoom <= 7 ? new BoundaryInfo(4, 1, 4) : null;
}
default -> null;
};
if (info != null) {
features.line(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setZoomRange(info.minzoom, info.maxzoom)
.setMinPixelSizeAtAllZooms(0)
.setAttr(Fields.ADMIN_LEVEL, info.adminLevel)
.setAttr(Fields.MARITIME, 0)
.setAttr(Fields.DISPUTED, disputed ? 1 : 0);
}
}
@Override
public List<OsmRelationInfo> preprocessOsmRelation(OsmElement.Relation relation) {
if (relation.hasTag("type", "boundary") &&
relation.hasTag("admin_level") &&
relation.hasTag("boundary", "administrative")) {
Integer adminLevelValue = Parse.parseRoundInt(relation.getTag("admin_level"));
String code = relation.getString("ISO3166-1:alpha3");
if (adminLevelValue != null && adminLevelValue >= 2 && adminLevelValue <= 10) {
boolean disputed = isDisputed(relation.tags());
if (code != null) {
regionNames.put(relation.id(), code);
}
return List.of(new BoundaryRelation(
relation.id(),
adminLevelValue,
disputed,
relation.getString("name"),
disputed ? relation.getString("claimed_by") : null,
code
));
}
}
return null;
}
@Override
public void processAllOsm(SourceFeature feature, FeatureCollector features) {
if (!feature.canBeLine()) {
return;
}
var relationInfos = feature.relationInfo(BoundaryRelation.class);
if (!relationInfos.isEmpty()) {
int minAdminLevel = Integer.MAX_VALUE;
String disputedName = null, claimedBy = null;
Set<Long> regionIds = new HashSet<>();
boolean disputed = false;
// aggregate all borders this way is a part of - take the lowest
// admin level, and assume it is disputed if any relation is disputed.
for (var info : relationInfos) {
BoundaryRelation rel = info.relation();
disputed |= rel.disputed;
if (rel.adminLevel < minAdminLevel) {
minAdminLevel = rel.adminLevel;
}
if (rel.disputed) {
disputedName = disputedName == null ? rel.name : disputedName;
claimedBy = claimedBy == null ? rel.claimedBy : claimedBy;
}
if (minAdminLevel == 2 && regionNames.containsKey(info.relation().id)) {
regionIds.add(info.relation().id);
}
}
if (minAdminLevel <= 10) {
boolean wayIsDisputed = isDisputed(feature.tags());
disputed |= wayIsDisputed;
if (wayIsDisputed) {
disputedName = disputedName == null ? feature.getString("name") : disputedName;
claimedBy = claimedBy == null ? feature.getString("claimed_by") : claimedBy;
}
boolean maritime = feature.getBoolean("maritime") ||
feature.hasTag("natural", "coastline") ||
feature.hasTag("boundary_type", "maritime");
int minzoom =
(maritime && minAdminLevel == 2) ? 4 :
minAdminLevel <= 4 ? 5 :
minAdminLevel <= 6 ? 9 :
minAdminLevel <= 8 ? 11 : 12;
if (addCountryNames && !regionIds.isEmpty()) {
// save for later
try {
CountryBoundaryComponent component = new CountryBoundaryComponent(
minAdminLevel,
disputed,
maritime,
minzoom,
feature.line(),
regionIds,
claimedBy,
disputedName
);
// multiple threads may update this concurrently
synchronized (this) {
boundariesToMerge.computeIfAbsent(component.groupingKey(), key -> new ArrayList<>()).add(component.line);
for (var info : relationInfos) {
var rel = info.relation();
if (rel.adminLevel <= 2) {
regionGeometries.computeIfAbsent(rel.id, id -> new ArrayList<>()).add(component.line);
}
}
}
} catch (GeometryException e) {
LOGGER.warn("Cannot extract boundary line from " + feature);
}
} else {
features.line(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.ADMIN_LEVEL, minAdminLevel)
.setAttr(Fields.DISPUTED, disputed ? 1 : 0)
.setAttr(Fields.MARITIME, maritime ? 1 : 0)
.setMinPixelSizeAtAllZooms(0)
.setMinZoom(minzoom)
.setAttr(Fields.CLAIMED_BY, claimedBy)
.setAttr(Fields.DISPUTED_NAME, editName(disputedName));
}
}
}
}
@Override
public void finish(String sourceName, FeatureCollector.Factory featureCollectors,
Consumer<FeatureCollector.Feature> emit) {
if (BasemapProfile.OSM_SOURCE.equals(sourceName)) {
var timer = stats.startStage("boundaries");
LongObjectMap<PreparedGeometry> countryBoundaries = prepareRegionPolygons();
for (var entry : boundariesToMerge.entrySet()) {
CountryBoundaryComponent key = entry.getKey();
LineMerger merger = new LineMerger();
for (Geometry geom : entry.getValue()) {
merger.add(geom);
}
entry.getValue().clear();
for (Object merged : merger.getMergedLineStrings()) {
if (merged instanceof LineString lineString) {
BorderingRegions borderingRegions = getBorderingRegions(countryBoundaries, key.regions, lineString);
var features = featureCollectors.get(SimpleFeature.fromWorldGeometry(lineString));
features.line(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.ADMIN_LEVEL, key.adminLevel)
.setAttr(Fields.DISPUTED, key.disputed ? 1 : 0)
.setAttr(Fields.MARITIME, key.maritime ? 1 : 0)
.setAttr(Fields.CLAIMED_BY, key.claimedBy)
.setAttr(Fields.DISPUTED_NAME, key.disputed ? editName(key.name) : null)
.setAttr(Fields.ADM0_L, borderingRegions.left == null ? null : regionNames.get(borderingRegions.left))
.setAttr(Fields.ADM0_R, borderingRegions.right == null ? null : regionNames.get(borderingRegions.right))
.setMinPixelSizeAtAllZooms(0)
.setMinZoom(key.minzoom);
for (var feature : features) {
emit.accept(feature);
}
}
}
}
timer.stop();
}
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) {
double minLength = config.minFeatureSize(zoom);
double tolerance = config.tolerance(zoom);
return FeatureMerge.mergeLineStrings(items, attrs -> minLength, tolerance, BUFFER_SIZE);
}
/** Returns the left and right country for {@code lineString}. */
private BorderingRegions getBorderingRegions(
LongObjectMap<PreparedGeometry> countryBoundaries,
Set<Long> allRegions,
LineString lineString
) {
Set<Long> validRegions = allRegions.stream()
.filter(countryBoundaries::containsKey)
.collect(Collectors.toSet());
if (validRegions.isEmpty()) {
return BorderingRegions.empty();
}
List<Long> rights = new ArrayList<>();
List<Long> lefts = new ArrayList<>();
int steps = 10;
for (int i = 0; i < steps; i++) {
double ratio = (double) (i + 1) / (steps + 2);
Point right = GeoUtils.pointAlongOffset(lineString, ratio, COUNTRY_TEST_OFFSET);
Point left = GeoUtils.pointAlongOffset(lineString, ratio, -COUNTRY_TEST_OFFSET);
for (Long regionId : validRegions) {
PreparedGeometry geom = countryBoundaries.get(regionId);
if (geom != null) {
if (geom.contains(right)) {
rights.add(regionId);
} else if (geom.contains(left)) {
lefts.add(regionId);
}
}
}
}
var right = mode(rights);
if (right != null) {
lefts.removeAll(List.of(right));
}
var left = mode(lefts);
if (left == null && right == null) {
Coordinate point = GeoUtils.worldToLatLonCoords(GeoUtils.pointAlongOffset(lineString, 0.5, 0)).getCoordinate();
LOGGER.warn("no left or right country for border between OSM country relations: %s around %s"
.formatted(
validRegions,
Format.osmDebugUrl(10, point)
));
}
return new BorderingRegions(left, right);
}
/** Returns a map from region ID to prepared geometry optimized for {@code contains} queries. */
private LongObjectMap<PreparedGeometry> prepareRegionPolygons() {
LOGGER.info("Creating polygons for " + regionGeometries.size() + " boundaries");
LongObjectMap<PreparedGeometry> countryBoundaries = new GHLongObjectHashMap<>();
for (var entry : regionGeometries.entrySet()) {
Long regionId = entry.getKey();
Polygonizer polygonizer = new Polygonizer();
polygonizer.add(entry.getValue());
try {
Geometry combined = polygonizer.getGeometry().union();
if (combined.isEmpty()) {
LOGGER.warn("Unable to form closed polygon for OSM relation " + regionId
+ " (likely missing edges)");
} else {
countryBoundaries.put(regionId, PreparedGeometryFactory.prepare(combined));
}
} catch (TopologyException e) {
LOGGER
.warn("Unable to build boundary polygon for OSM relation " + regionId + ": " + e.getMessage());
}
}
LOGGER.info("Finished creating " + countryBoundaries.size() + " country polygons");
return countryBoundaries;
}
/** Returns most frequently-occurring element in {@code list}. */
private static Long mode(List<Long> list) {
return list.stream()
.collect(groupingBy(Function.identity(), counting())).entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse(null);
}
private static record BorderingRegions(Long left, Long right) {
public static BorderingRegions empty() {
return new BorderingRegions(null, null);
}
}
/**
* Minimal set of information extracted from a boundary relation to be used when processing each way in that
* relation.
*/
private static record BoundaryRelation(
long id,
int adminLevel,
boolean disputed,
String name,
String claimedBy,
String iso3166alpha3
) implements OsmRelationInfo {
@Override
public long estimateMemoryUsageBytes() {
return CLASS_HEADER_BYTES
+ MemoryEstimator.estimateSizeLong(id)
+ MemoryEstimator.estimateSizeInt(adminLevel)
+ estimateSize(disputed)
+ POINTER_BYTES + estimateSize(name)
+ POINTER_BYTES + estimateSize(claimedBy)
+ POINTER_BYTES + estimateSize(iso3166alpha3);
}
}
/** Information to hold onto from processing a way in a boundary relation to determine the left/right region ID later. */
private static record CountryBoundaryComponent(
int adminLevel,
boolean disputed,
boolean maritime,
int minzoom,
Geometry line,
Set<Long> regions,
String claimedBy,
String name
) {
CountryBoundaryComponent groupingKey() {
return new CountryBoundaryComponent(adminLevel, disputed, maritime, minzoom, null, regions, claimedBy, name);
}
}
}

Wyświetl plik

@ -1,192 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.coalesce;
import static com.onthegomap.planetiler.util.MemoryEstimator.CLASS_HEADER_BYTES;
import static com.onthegomap.planetiler.util.Parse.parseDoubleOrNull;
import static java.util.Map.entry;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.FeatureMerge;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.reader.osm.OsmRelationInfo;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.MemoryEstimator;
import com.onthegomap.planetiler.util.Translations;
import java.util.List;
import java.util.Locale;
import java.util.Map;
/**
* Defines the logic for generating map elements for buildings in the {@code building} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/building">OpenMapTiles
* building sql files</a>.
*/
public class Building implements
OpenMapTilesSchema.Building,
Tables.OsmBuildingPolygon.Handler,
BasemapProfile.FeaturePostProcessor,
BasemapProfile.OsmRelationPreprocessor {
/*
* Emit all buildings from OSM data at z14.
*
* At z13, emit all buildings at process-time, but then at tile render-time,
* merge buildings that are overlapping or almost touching into combined
* buildings so that entire city blocks show up as a single building polygon.
*
* THIS IS VERY EXPENSIVE! Merging buildings at z13 adds about 50% to the
* total map generation time. To disable it, set building_merge_z13 argument
* to false.
*/
private static final Map<String, String> MATERIAL_COLORS = Map.ofEntries(
entry("cement_block", "#6a7880"),
entry("brick", "#bd8161"),
entry("plaster", "#dadbdb"),
entry("wood", "#d48741"),
entry("concrete", "#d3c2b0"),
entry("metal", "#b7b1a6"),
entry("stone", "#b4a995"),
entry("mud", "#9d8b75"),
entry("steel", "#b7b1a6"), // same as metal
entry("glass", "#5a81a0"),
entry("traditional", "#bd8161"), // same as brick
entry("masonry", "#bd8161"), // same as brick
entry("Brick", "#bd8161"), // same as brick
entry("tin", "#b7b1a6"), // same as metal
entry("timber_framing", "#b3b0a9"),
entry("sandstone", "#b4a995"), // same as stone
entry("clay", "#9d8b75") // same as mud
);
private final boolean mergeZ13Buildings;
public Building(Translations translations, PlanetilerConfig config, Stats stats) {
this.mergeZ13Buildings = config.arguments().getBoolean(
"building_merge_z13",
"building layer: merge nearby buildings at z13",
true
);
}
@Override
public List<OsmRelationInfo> preprocessOsmRelation(OsmElement.Relation relation) {
if (relation.hasTag("type", "building")) {
return List.of(new BuildingRelationInfo(relation.id()));
}
return null;
}
@Override
public void process(Tables.OsmBuildingPolygon element, FeatureCollector features) {
Boolean hide3d = null;
var relations = element.source().relationInfo(BuildingRelationInfo.class);
for (var relation : relations) {
if ("outline".equals(relation.role())) {
hide3d = true;
break;
}
}
String color = element.colour();
if (color == null && element.material() != null) {
color = MATERIAL_COLORS.get(element.material());
}
if (color != null) {
color = color.toLowerCase(Locale.ROOT);
}
Double height = coalesce(
parseDoubleOrNull(element.height()),
parseDoubleOrNull(element.buildingheight())
);
Double minHeight = coalesce(
parseDoubleOrNull(element.minHeight()),
parseDoubleOrNull(element.buildingminHeight())
);
Double levels = coalesce(
parseDoubleOrNull(element.levels()),
parseDoubleOrNull(element.buildinglevels())
);
Double minLevels = coalesce(
parseDoubleOrNull(element.minLevel()),
parseDoubleOrNull(element.buildingminLevel())
);
int renderHeight = (int) Math.ceil(height != null ? height
: levels != null ? (levels * 3.66) : 5);
int renderMinHeight = (int) Math.floor(minHeight != null ? minHeight
: minLevels != null ? (minLevels * 3.66) : 0);
if (renderHeight < 3660 && renderMinHeight < 3660) {
var feature = features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setMinZoom(13)
.setMinPixelSize(2)
.setAttrWithMinzoom(Fields.RENDER_HEIGHT, renderHeight, 14)
.setAttrWithMinzoom(Fields.RENDER_MIN_HEIGHT, renderMinHeight, 14)
.setAttrWithMinzoom(Fields.COLOUR, color, 14)
.setAttrWithMinzoom(Fields.HIDE_3D, hide3d, 14)
.setSortKey(renderHeight);
if (mergeZ13Buildings) {
feature
.setMinPixelSize(0.1)
.setPixelTolerance(0.25);
}
}
}
@Override
public List<VectorTile.Feature> postProcess(int zoom,
List<VectorTile.Feature> items) throws GeometryException {
return (mergeZ13Buildings && zoom == 13) ? FeatureMerge.mergeNearbyPolygons(items, 4, 4, 0.5, 0.5) : items;
}
private static record BuildingRelationInfo(long id) implements OsmRelationInfo {
@Override
public long estimateMemoryUsageBytes() {
return CLASS_HEADER_BYTES + MemoryEstimator.estimateSizeLong(id);
}
}
}

Wyświetl plik

@ -1,65 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
/**
* Defines the logic for generating map elements in the {@code housenumber} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/housenumber">OpenMapTiles
* housenumber sql files</a>.
*/
public class Housenumber implements
OpenMapTilesSchema.Housenumber,
Tables.OsmHousenumberPoint.Handler {
public Housenumber(Translations translations, PlanetilerConfig config, Stats stats) {
}
@Override
public void process(Tables.OsmHousenumberPoint element, FeatureCollector features) {
features.centroidIfConvex(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.HOUSENUMBER, element.housenumber())
.setMinZoom(14);
}
}

Wyświetl plik

@ -1,182 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.FeatureMerge;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.ZoomFunction;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Defines the logic for generating map elements for natural land cover polygons like ice, sand, and forest in the
* {@code landcover} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/landcover">OpenMapTiles
* landcover sql files</a>.
*/
public class Landcover implements
OpenMapTilesSchema.Landcover,
BasemapProfile.NaturalEarthProcessor,
Tables.OsmLandcoverPolygon.Handler,
BasemapProfile.FeaturePostProcessor {
/*
* Large ice areas come from natural earth and the rest come from OpenStreetMap at higher zoom
* levels. At render-time, postProcess() merges polygons into larger connected area based
* on the number of points in the original area. Since postProcess() only has visibility into
* features on a single tile, process() needs to pass the number of points the original feature
* had through using a temporary "_numpoints" attribute.
*/
public static final ZoomFunction<Number> MIN_PIXEL_SIZE_THRESHOLDS = ZoomFunction.fromMaxZoomThresholds(Map.of(
13, 8,
10, 4,
9, 2
));
private static final String TEMP_NUM_POINTS_ATTR = "_numpoints";
private static final Set<String> WOOD_OR_FOREST = Set.of(
FieldValues.SUBCLASS_WOOD,
FieldValues.SUBCLASS_FOREST
);
private final MultiExpression.Index<String> classMapping;
public Landcover(Translations translations, PlanetilerConfig config, Stats stats) {
this.classMapping = FieldMappings.Class.index();
}
private String getClassFromSubclass(String subclass) {
return subclass == null ? null : classMapping.getOrElse(Map.of(Fields.SUBCLASS, subclass), null);
}
@Override
public void processNaturalEarth(String table, SourceFeature feature,
FeatureCollector features) {
record LandcoverInfo(String subclass, int minzoom, int maxzoom) {}
LandcoverInfo info = switch (table) {
case "ne_110m_glaciated_areas" -> new LandcoverInfo(FieldValues.SUBCLASS_GLACIER, 0, 1);
case "ne_50m_glaciated_areas" -> new LandcoverInfo(FieldValues.SUBCLASS_GLACIER, 2, 4);
case "ne_10m_glaciated_areas" -> new LandcoverInfo(FieldValues.SUBCLASS_GLACIER, 5, 6);
case "ne_50m_antarctic_ice_shelves_polys" -> new LandcoverInfo("ice_shelf", 2, 4);
case "ne_10m_antarctic_ice_shelves_polys" -> new LandcoverInfo("ice_shelf", 5, 6);
default -> null;
};
if (info != null) {
String clazz = getClassFromSubclass(info.subclass);
if (clazz != null) {
features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, clazz)
.setAttr(Fields.SUBCLASS, info.subclass)
.setZoomRange(info.minzoom, info.maxzoom);
}
}
}
@Override
public void process(Tables.OsmLandcoverPolygon element, FeatureCollector features) {
String subclass = element.subclass();
String clazz = getClassFromSubclass(subclass);
if (clazz != null) {
features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setMinPixelSizeOverrides(MIN_PIXEL_SIZE_THRESHOLDS)
.setAttr(Fields.CLASS, clazz)
.setAttr(Fields.SUBCLASS, subclass)
.setNumPointsAttr(TEMP_NUM_POINTS_ATTR)
.setMinZoom(WOOD_OR_FOREST.contains(subclass) ? 9 : 7);
}
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) throws GeometryException {
if (zoom < 7 || zoom > 13) {
for (var item : items) {
item.attrs().remove(TEMP_NUM_POINTS_ATTR);
}
return items;
} else { // z7-13
// merging only merges polygons with the same attributes, so use this temporary key
// to separate features into layers that will be merged separately
String tempGroupKey = "_group";
List<VectorTile.Feature> result = new ArrayList<>();
List<VectorTile.Feature> toMerge = new ArrayList<>();
for (var item : items) {
Map<String, Object> attrs = item.attrs();
Object numPointsObj = attrs.remove(TEMP_NUM_POINTS_ATTR);
Object subclassObj = attrs.get(Fields.SUBCLASS);
if (numPointsObj instanceof Number num && subclassObj instanceof String subclass) {
long numPoints = num.longValue();
if (zoom >= 10) {
if (WOOD_OR_FOREST.contains(subclass) && numPoints < 300) {
attrs.put(tempGroupKey, numPoints < 50 ? "<50" : "<300");
toMerge.add(item);
} else { // don't merge
result.add(item);
}
} else if (zoom == 9) {
if (WOOD_OR_FOREST.contains(subclass)) {
attrs.put(tempGroupKey, numPoints < 50 ? "<50" : numPoints < 300 ? "<300" : ">300");
toMerge.add(item);
} else { // don't merge
result.add(item);
}
} else { // zoom between 7 and 8
toMerge.add(item);
}
} else {
result.add(item);
}
}
var merged = FeatureMerge.mergeOverlappingPolygons(toMerge, 4);
for (var item : merged) {
item.attrs().remove(tempGroupKey);
}
result.addAll(merged);
return result;
}
}
}

Wyświetl plik

@ -1,110 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.coalesce;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Parse;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.ZoomFunction;
import java.util.Map;
import java.util.Set;
/**
* Defines the logic for generating map elements for man-made land use polygons like cemeteries, zoos, and hospitals in
* the {@code landuse} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/landuse">OpenMapTiles
* landuse sql files</a>.
*/
public class Landuse implements
OpenMapTilesSchema.Landuse,
BasemapProfile.NaturalEarthProcessor,
Tables.OsmLandusePolygon.Handler {
private static final ZoomFunction<Number> MIN_PIXEL_SIZE_THRESHOLDS = ZoomFunction.fromMaxZoomThresholds(Map.of(
13, 4,
7, 2,
6, 1
));
private static final Set<String> Z6_CLASSES = Set.of(
FieldValues.CLASS_RESIDENTIAL,
FieldValues.CLASS_SUBURB,
FieldValues.CLASS_QUARTER,
FieldValues.CLASS_NEIGHBOURHOOD
);
public Landuse(Translations translations, PlanetilerConfig config, Stats stats) {
}
@Override
public void processNaturalEarth(String table, SourceFeature feature, FeatureCollector features) {
if ("ne_50m_urban_areas".equals(table)) {
Double scalerank = Parse.parseDoubleOrNull(feature.getTag("scalerank"));
if (scalerank != null && scalerank <= 2) {
features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, FieldValues.CLASS_RESIDENTIAL)
.setZoomRange(4, 5);
}
}
}
@Override
public void process(Tables.OsmLandusePolygon element, FeatureCollector features) {
String clazz = coalesce(
nullIfEmpty(element.landuse()),
nullIfEmpty(element.amenity()),
nullIfEmpty(element.leisure()),
nullIfEmpty(element.tourism()),
nullIfEmpty(element.place()),
nullIfEmpty(element.waterway())
);
if (clazz != null) {
features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, clazz)
.setMinPixelSizeOverrides(MIN_PIXEL_SIZE_THRESHOLDS)
.setMinZoom(Z6_CLASSES.contains(clazz) ? 6 : 9);
}
}
}

Wyświetl plik

@ -1,137 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.elevationTags;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import com.carrotsearch.hppc.LongIntHashMap;
import com.carrotsearch.hppc.LongIntMap;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.LanguageUtils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Parse;
import com.onthegomap.planetiler.util.Translations;
import java.util.List;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;
/**
* Defines the logic for generating map elements for mountain peak label points in the {@code mountain_peak} layer from
* source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/mountain_peak">OpenMapTiles
* mountain_peak sql files</a>.
*/
public class MountainPeak implements
OpenMapTilesSchema.MountainPeak,
Tables.OsmPeakPoint.Handler,
BasemapProfile.FeaturePostProcessor {
/*
* Mountain peaks come from OpenStreetMap data and are ranked by importance (based on if they
* have a name or wikipedia page) then by elevation. Uses the "label grid" feature to limit
* label density by only taking the top 5 most important mountain peaks within each 100x100px
* square.
*/
private final Translations translations;
private final Stats stats;
public MountainPeak(Translations translations, PlanetilerConfig config, Stats stats) {
this.translations = translations;
this.stats = stats;
}
@Override
public void process(Tables.OsmPeakPoint element, FeatureCollector features) {
Integer meters = Parse.parseIntSubstring(element.ele());
if (meters != null && Math.abs(meters) < 10_000) {
features.point(LAYER_NAME)
.setAttr(Fields.CLASS, element.source().getTag("natural"))
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.putAttrs(elevationTags(meters))
.setSortKeyDescending(
meters +
(nullIfEmpty(element.wikipedia()) != null ? 10_000 : 0) +
(nullIfEmpty(element.name()) != null ? 10_000 : 0)
)
.setMinZoom(7)
// need to use a larger buffer size to allow enough points through to not cut off
// any label grid squares which could lead to inconsistent label ranks for a feature
// in adjacent tiles. postProcess() will remove anything outside the desired buffer.
.setBufferPixels(100)
.setPointLabelGridSizeAndLimit(13, 100, 5);
}
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) {
LongIntMap groupCounts = new LongIntHashMap();
for (int i = 0; i < items.size(); i++) {
VectorTile.Feature feature = items.get(i);
int gridrank = groupCounts.getOrDefault(feature.group(), 1);
groupCounts.put(feature.group(), gridrank + 1);
// now that we have accurate ranks, remove anything outside the desired buffer
if (!insideTileBuffer(feature)) {
items.set(i, null);
} else if (!feature.attrs().containsKey(Fields.RANK)) {
feature.attrs().put(Fields.RANK, gridrank);
}
}
return items;
}
private static boolean insideTileBuffer(double xOrY) {
return xOrY >= -BUFFER_SIZE && xOrY <= 256 + BUFFER_SIZE;
}
private boolean insideTileBuffer(VectorTile.Feature feature) {
try {
Geometry geom = feature.geometry().decode();
return !(geom instanceof Point point) || (insideTileBuffer(point.getX()) && insideTileBuffer(point.getY()));
} catch (GeometryException e) {
e.log(stats, "mountain_peak_decode_point", "Error decoding mountain peak point: " + feature.attrs());
return false;
}
}
}

Wyświetl plik

@ -1,152 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.coalesce;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import static com.onthegomap.planetiler.collection.FeatureGroup.SORT_KEY_BITS;
import com.carrotsearch.hppc.LongIntHashMap;
import com.carrotsearch.hppc.LongIntMap;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.LanguageUtils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.geo.GeometryType;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.SortKey;
import com.onthegomap.planetiler.util.Translations;
import java.util.List;
import java.util.Locale;
/**
* Defines the logic for generating map elements for designated parks polygons and their label points in the {@code
* park} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/park">OpenMapTiles
* park sql files</a>.
*/
public class Park implements
OpenMapTilesSchema.Park,
Tables.OsmParkPolygon.Handler,
BasemapProfile.FeaturePostProcessor {
// constants for packing the minimum zoom ordering of park labels into the sort-key field
private static final int PARK_NATIONAL_PARK_BOOST = 1 << (SORT_KEY_BITS - 1);
private static final int PARK_WIKIPEDIA_BOOST = 1 << (SORT_KEY_BITS - 2);
// constants for determining the minimum zoom level for a park label based on its area
private static final double WORLD_AREA_FOR_70K_SQUARE_METERS =
Math.pow(GeoUtils.metersToPixelAtEquator(0, Math.sqrt(70_000)) / 256d, 2);
private static final double LOG2 = Math.log(2);
private static final int PARK_AREA_RANGE = 1 << (SORT_KEY_BITS - 3);
private static final double SMALLEST_PARK_WORLD_AREA = Math.pow(4, -26); // 2^14 tiles, 2^12 pixels per tile
private final Translations translations;
private final Stats stats;
public Park(Translations translations, PlanetilerConfig config, Stats stats) {
this.stats = stats;
this.translations = translations;
}
@Override
public void process(Tables.OsmParkPolygon element, FeatureCollector features) {
String protectionTitle = element.protectionTitle();
if (protectionTitle != null) {
protectionTitle = protectionTitle.replace(' ', '_').toLowerCase(Locale.ROOT);
}
String clazz = coalesce(
nullIfEmpty(protectionTitle),
nullIfEmpty(element.boundary()),
nullIfEmpty(element.leisure())
);
// park shape
features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, clazz)
.setMinPixelSize(2)
.setMinZoom(6);
// park name label point (if it has one)
if (element.name() != null) {
try {
double area = element.source().area();
int minzoom = getMinZoomForArea(area);
features.centroid(LAYER_NAME).setBufferPixels(256)
.setAttr(Fields.CLASS, clazz)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setPointLabelGridPixelSize(14, 100)
.setSortKey(SortKey
.orderByTruesFirst("national_park".equals(clazz))
.thenByTruesFirst(element.source().hasTag("wikipedia") || element.source().hasTag("wikidata"))
.thenByLog(area, 1d, SMALLEST_PARK_WORLD_AREA, 1 << (SORT_KEY_BITS - 2) - 1)
.get()
).setMinZoom(minzoom);
} catch (GeometryException e) {
e.log(stats, "omt_park_area", "Unable to get park area for " + element.source().id());
}
}
}
private int getMinZoomForArea(double area) {
// sql filter: area > 70000*2^(20-zoom_level)
// simplifies to: zoom_level > 20 - log(area / 70000) / log(2)
int minzoom = (int) Math.floor(20 - Math.log(area / WORLD_AREA_FOR_70K_SQUARE_METERS) / LOG2);
minzoom = Math.min(14, Math.max(6, minzoom));
return minzoom;
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) {
// infer the "rank" attribute from point ordering within each label grid square
LongIntMap counts = new LongIntHashMap();
for (VectorTile.Feature feature : items) {
if (feature.geometry().geomType() == GeometryType.POINT && feature.hasGroup()) {
int count = counts.getOrDefault(feature.group(), 0) + 1;
feature.attrs().put("rank", count);
counts.put(feature.group(), count);
}
}
return items;
}
}

Wyświetl plik

@ -1,428 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.coalesce;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import static com.onthegomap.planetiler.basemap.util.Utils.nullOrEmpty;
import static com.onthegomap.planetiler.collection.FeatureGroup.SORT_KEY_BITS;
import com.carrotsearch.hppc.LongIntHashMap;
import com.carrotsearch.hppc.LongIntMap;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.LanguageUtils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.geo.PointIndex;
import com.onthegomap.planetiler.geo.PolygonIndex;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Parse;
import com.onthegomap.planetiler.util.SortKey;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.ZoomFunction;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.locationtech.jts.geom.Point;
/**
* Defines the logic for generating label points for populated places like continents, countries, cities, and towns in
* the {@code place} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/place">OpenMapTiles
* place sql files</a>.
*/
public class Place implements
OpenMapTilesSchema.Place,
BasemapProfile.NaturalEarthProcessor,
Tables.OsmContinentPoint.Handler,
Tables.OsmCountryPoint.Handler,
Tables.OsmStatePoint.Handler,
Tables.OsmIslandPoint.Handler,
Tables.OsmIslandPolygon.Handler,
Tables.OsmCityPoint.Handler,
BasemapProfile.FeaturePostProcessor {
/*
* Place labels locations and names come from OpenStreetMap, but we also join with natural
* earth state/country geographic areas and city point labels to give a hint for what rank
* and minimum zoom level to use for those points.
*/
private static final TreeMap<Double, Integer> ISLAND_AREA_RANKS = new TreeMap<>(Map.of(
Double.MAX_VALUE, 3,
squareMetersToWorldArea(40_000_000), 4,
squareMetersToWorldArea(15_000_000), 5,
squareMetersToWorldArea(1_000_000), 6
));
private static final double MIN_ISLAND_WORLD_AREA = Math.pow(4, -26); // 2^14 tiles, 2^12 pixels per tile
private static final double CITY_JOIN_DISTANCE = GeoUtils.metersToPixelAtEquator(0, 50_000) / 256d;
// constants for packing place label precedence into the sort-key field
private static final double MAX_CITY_POPULATION = 100_000_000d;
private static final Set<String> MAJOR_CITY_PLACES = Set.of("city", "town", "village");
private static final ZoomFunction<Number> LABEL_GRID_LIMITS = ZoomFunction.fromMaxZoomThresholds(Map.of(
8, 4,
9, 8,
10, 12,
12, 14
), 0);
private final Translations translations;
private final Stats stats;
// spatial indexes for joining natural earth place labels with their corresponding points
// from openstreetmap
private PolygonIndex<NaturalEarthRegion> countries = PolygonIndex.create();
private PolygonIndex<NaturalEarthRegion> states = PolygonIndex.create();
private PointIndex<NaturalEarthPoint> cities = PointIndex.create();
public Place(Translations translations, PlanetilerConfig config, Stats stats) {
this.translations = translations;
this.stats = stats;
}
/** Returns the portion of the world that {@code squareMeters} covers where 1 is the entire planet. */
private static double squareMetersToWorldArea(double squareMeters) {
double oneSideMeters = Math.sqrt(squareMeters);
double oneSideWorld = GeoUtils.metersToPixelAtEquator(0, oneSideMeters) / 256d;
return Math.pow(oneSideWorld, 2);
}
/**
* Packs place precedence ordering ({@code rank asc, place asc, population desc, name.length asc}) into an integer for
* the sort-key field.
*/
static int getSortKey(Integer rank, PlaceType place, long population, String name) {
return SortKey
// ORDER BY "rank" ASC NULLS LAST,
.orderByInt(rank == null ? 15 : rank, 0, 15) // 4 bits
// place ASC NULLS LAST,
.thenByInt(place == null ? 15 : place.ordinal(), 0, 15) // 4 bits
// population DESC NULLS LAST,
.thenByLog(population, MAX_CITY_POPULATION, 1, 1 << (SORT_KEY_BITS - 13) - 1)
// length(name) ASC
.thenByInt(name == null ? 0 : name.length(), 0, 31) // 5 bits
.get();
}
@Override
public void release() {
countries = null;
states = null;
cities = null;
}
@Override
public void processNaturalEarth(String table, SourceFeature feature, FeatureCollector features) {
// store data from natural earth to help with ranks and min zoom levels when actually
// emitting features from openstreetmap data.
try {
switch (table) {
case "ne_10m_admin_0_countries" -> countries.put(feature.worldGeometry(), new NaturalEarthRegion(
feature.getString("name"), 6,
feature.getLong("scalerank"),
feature.getLong("labelrank")
));
case "ne_10m_admin_1_states_provinces" -> {
Double scalerank = Parse.parseDoubleOrNull(feature.getTag("scalerank"));
Double labelrank = Parse.parseDoubleOrNull(feature.getTag("labelrank"));
if (scalerank != null && scalerank <= 3 && labelrank != null && labelrank <= 2) {
states.put(feature.worldGeometry(), new NaturalEarthRegion(
feature.getString("name"), 6,
scalerank,
labelrank,
feature.getLong("datarank")
));
}
}
case "ne_10m_populated_places" -> cities.put(feature.worldGeometry(), new NaturalEarthPoint(
feature.getString("name"),
feature.getString("wikidataid"),
(int) feature.getLong("scalerank"),
Stream.of("name", "namealt", "meganame", "gn_ascii", "nameascii").map(feature::getString)
.filter(Objects::nonNull)
.map(s -> s.toLowerCase(Locale.ROOT))
.collect(Collectors.toSet())
));
}
} catch (GeometryException e) {
e.log(stats, "omt_place_ne",
"Error getting geometry for natural earth feature " + table + " " + feature.getTag("ogc_fid"));
}
}
@Override
public void process(Tables.OsmContinentPoint element, FeatureCollector features) {
if (!nullOrEmpty(element.name())) {
features.point(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setAttr(Fields.CLASS, FieldValues.CLASS_CONTINENT)
.setAttr(Fields.RANK, 1)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setZoomRange(0, 3);
}
}
@Override
public void process(Tables.OsmCountryPoint element, FeatureCollector features) {
if (nullOrEmpty(element.name())) {
return;
}
String isoA2 = coalesce(
nullIfEmpty(element.countryCodeIso31661Alpha2()),
nullIfEmpty(element.iso31661Alpha2()),
nullIfEmpty(element.iso31661())
);
if (isoA2 == null) {
return;
}
try {
// set country rank to 6, unless there is a match in natural earth that indicates it
// should be lower
int rank = 7;
NaturalEarthRegion country = countries.get(element.source().worldGeometry().getCentroid());
var names = LanguageUtils.getNames(element.source().tags(), translations);
if (country != null) {
if (nullOrEmpty(names.get(Fields.NAME_EN))) {
names.put(Fields.NAME_EN, country.name);
}
rank = country.rank;
}
rank = Math.min(6, Math.max(1, rank));
features.point(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.putAttrs(names)
.setAttr(Fields.ISO_A2, isoA2)
.setAttr(Fields.CLASS, FieldValues.CLASS_COUNTRY)
.setAttr(Fields.RANK, rank)
.setMinZoom(rank - 1)
.setSortKey(rank);
} catch (GeometryException e) {
e.log(stats, "omt_place_country",
"Unable to get point for OSM country " + element.source().id());
}
}
@Override
public void process(Tables.OsmStatePoint element, FeatureCollector features) {
try {
// want the containing (not nearest) state polygon since we pre-filter the states in the polygon index
// use natural earth to filter out any spurious states, and to set the rank field
NaturalEarthRegion state = states.getOnlyContaining(element.source().worldGeometry().getCentroid());
if (state != null) {
var names = LanguageUtils.getNames(element.source().tags(), translations);
if (nullOrEmpty(names.get(Fields.NAME_EN))) {
names.put(Fields.NAME_EN, state.name);
}
int rank = Math.min(6, Math.max(1, state.rank));
features.point(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.putAttrs(names)
.setAttr(Fields.CLASS, FieldValues.CLASS_STATE)
.setAttr(Fields.RANK, rank)
.setMinZoom(2)
.setSortKey(rank);
}
} catch (GeometryException e) {
e.log(stats, "omt_place_state",
"Unable to get point for OSM state " + element.source().id());
}
}
@Override
public void process(Tables.OsmIslandPolygon element, FeatureCollector features) {
try {
double area = element.source().area();
int rank = ISLAND_AREA_RANKS.ceilingEntry(area).getValue();
int minzoom = rank <= 3 ? 8 : rank <= 4 ? 9 : 10;
features.pointOnSurface(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setAttr(Fields.CLASS, "island")
.setAttr(Fields.RANK, rank)
.setMinZoom(minzoom)
.setSortKey(SortKey.orderByLog(area, 1d, MIN_ISLAND_WORLD_AREA).get());
} catch (GeometryException e) {
e.log(stats, "omt_place_island_poly",
"Unable to get point for OSM island polygon " + element.source().id());
}
}
@Override
public void process(Tables.OsmIslandPoint element, FeatureCollector features) {
features.point(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setAttr(Fields.CLASS, "island")
.setAttr(Fields.RANK, 7)
.setMinZoom(12);
}
@Override
public void process(Tables.OsmCityPoint element, FeatureCollector features) {
Integer rank = null;
if (MAJOR_CITY_PLACES.contains(element.place())) {
// only for major cities, attempt to find a nearby natural earth label with a similar
// name and use that to set a rank from OSM that causes the label to be shown at lower
// zoom levels
try {
Point point = element.source().worldGeometry().getCentroid();
List<NaturalEarthPoint> neCities = cities.getWithin(point, CITY_JOIN_DISTANCE);
String rawName = coalesce(element.name(), "");
String name = coalesce(rawName, "").toLowerCase(Locale.ROOT);
String nameEn = coalesce(element.nameEn(), "").toLowerCase(Locale.ROOT);
String normalizedName = StringUtils.stripAccents(rawName);
String wikidata = element.source().getString("wikidata", "");
for (var neCity : neCities) {
if (wikidata.equals(neCity.wikidata) ||
neCity.names.contains(name) ||
neCity.names.contains(nameEn) ||
normalizedName.equals(neCity.name)) {
rank = neCity.scaleRank <= 5 ? neCity.scaleRank + 1 : neCity.scaleRank;
break;
}
}
} catch (GeometryException e) {
e.log(stats, "omt_place_city",
"Unable to get point for OSM city " + element.source().id());
}
}
String capital = element.capital();
PlaceType placeType = PlaceType.forName(element.place());
int minzoom = rank != null && rank == 1 ? 2 :
rank != null && rank <= 8 ? Math.max(3, rank - 1) :
placeType.ordinal() <= PlaceType.TOWN.ordinal() ? 7 :
placeType.ordinal() <= PlaceType.VILLAGE.ordinal() ? 8 :
placeType.ordinal() <= PlaceType.SUBURB.ordinal() ? 11 : 14;
var feature = features.point(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setAttr(Fields.CLASS, element.place())
.setAttr(Fields.RANK, rank)
.setMinZoom(minzoom)
.setSortKey(getSortKey(rank, placeType, element.population(), element.name()))
.setPointLabelGridPixelSize(12, 128);
if (rank == null) {
feature.setPointLabelGridLimit(LABEL_GRID_LIMITS);
}
if ("2".equals(capital) || "yes".equals(capital)) {
feature.setAttr(Fields.CAPITAL, 2);
} else if ("4".equals(capital)) {
feature.setAttr(Fields.CAPITAL, 4);
}
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) {
// infer the rank field from ordering of the place labels with each label grid square
LongIntMap groupCounts = new LongIntHashMap();
for (VectorTile.Feature feature : items) {
int gridrank = groupCounts.getOrDefault(feature.group(), 1);
groupCounts.put(feature.group(), gridrank + 1);
if (!feature.attrs().containsKey(Fields.RANK)) {
feature.attrs().put(Fields.RANK, 10 + gridrank);
}
}
return items;
}
/** Ordering defines the precedence of place classes. */
enum PlaceType {
CITY("city"),
TOWN("town"),
VILLAGE("village"),
HAMLET("hamlet"),
SUBURB("suburb"),
QUARTER("quarter"),
NEIGHBORHOOD("neighbourhood"),
ISOLATED_DWELLING("isolated_dwelling"),
UNKNOWN("unknown");
private static final Map<String, PlaceType> byName = new HashMap<>();
static {
for (PlaceType place : values()) {
byName.put(place.name, place);
}
}
private final String name;
PlaceType(String name) {
this.name = name;
}
public static PlaceType forName(String name) {
return byName.getOrDefault(name, UNKNOWN);
}
}
/**
* Information extracted from a natural earth geographic region that will be inspected when joining with OpenStreetMap
* data.
*/
private static record NaturalEarthRegion(String name, int rank) {
NaturalEarthRegion(String name, int maxRank, double... ranks) {
this(name, (int) Math.ceil(DoubleStream.of(ranks).average().orElse(maxRank)));
}
}
/**
* Information extracted from a natural earth place label that will be inspected when joining with OpenStreetMap
* data.
*/
private static record NaturalEarthPoint(String name, String wikidata, int scaleRank, Set<String> names) {}
}

Wyświetl plik

@ -1,195 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.coalesce;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIf;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import static com.onthegomap.planetiler.basemap.util.Utils.nullOrEmpty;
import static java.util.Map.entry;
import com.carrotsearch.hppc.LongIntHashMap;
import com.carrotsearch.hppc.LongIntMap;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.LanguageUtils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Parse;
import com.onthegomap.planetiler.util.Translations;
import java.util.List;
import java.util.Map;
/**
* Defines the logic for generating map elements for things like shops, parks, and schools in the {@code poi} layer from
* source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/poi">OpenMapTiles
* poi sql files</a>.
*/
public class Poi implements
OpenMapTilesSchema.Poi,
Tables.OsmPoiPoint.Handler,
Tables.OsmPoiPolygon.Handler,
BasemapProfile.FeaturePostProcessor {
/*
* process() creates the raw POI feature from OSM elements and postProcess()
* assigns the feature rank from order in the tile at render-time.
*/
private static final Map<String, Integer> CLASS_RANKS = Map.ofEntries(
entry(FieldValues.CLASS_HOSPITAL, 20),
entry(FieldValues.CLASS_RAILWAY, 40),
entry(FieldValues.CLASS_BUS, 50),
entry(FieldValues.CLASS_ATTRACTION, 70),
entry(FieldValues.CLASS_HARBOR, 75),
entry(FieldValues.CLASS_COLLEGE, 80),
entry(FieldValues.CLASS_SCHOOL, 85),
entry(FieldValues.CLASS_STADIUM, 90),
entry("zoo", 95),
entry(FieldValues.CLASS_TOWN_HALL, 100),
entry(FieldValues.CLASS_CAMPSITE, 110),
entry(FieldValues.CLASS_CEMETERY, 115),
entry(FieldValues.CLASS_PARK, 120),
entry(FieldValues.CLASS_LIBRARY, 130),
entry("police", 135),
entry(FieldValues.CLASS_POST, 140),
entry(FieldValues.CLASS_GOLF, 150),
entry(FieldValues.CLASS_SHOP, 400),
entry(FieldValues.CLASS_GROCERY, 500),
entry(FieldValues.CLASS_FAST_FOOD, 600),
entry(FieldValues.CLASS_CLOTHING_STORE, 700),
entry(FieldValues.CLASS_BAR, 800)
);
private final MultiExpression.Index<String> classMapping;
private final Translations translations;
public Poi(Translations translations, PlanetilerConfig config, Stats stats) {
this.classMapping = FieldMappings.Class.index();
this.translations = translations;
}
static int poiClassRank(String clazz) {
return CLASS_RANKS.getOrDefault(clazz, 1_000);
}
private String poiClass(String subclass, String mappingKey) {
subclass = coalesce(subclass, "");
return classMapping.getOrElse(Map.of(
"subclass", subclass,
"mapping_key", coalesce(mappingKey, "")
), subclass);
}
private int minzoom(String subclass, String mappingKey) {
boolean lowZoom = ("station".equals(subclass) && "railway".equals(mappingKey)) ||
"halt".equals(subclass) || "ferry_terminal".equals(subclass);
return lowZoom ? 12 : 14;
}
@Override
public void process(Tables.OsmPoiPoint element, FeatureCollector features) {
// TODO handle uic_ref => agg_stop
setupPoiFeature(element, features.point(LAYER_NAME));
}
@Override
public void process(Tables.OsmPoiPolygon element, FeatureCollector features) {
setupPoiFeature(element, features.centroidIfConvex(LAYER_NAME));
}
private <T extends
Tables.WithSubclass &
Tables.WithStation &
Tables.WithFunicular &
Tables.WithSport &
Tables.WithInformation &
Tables.WithReligion &
Tables.WithMappingKey &
Tables.WithName &
Tables.WithIndoor &
Tables.WithLayer &
Tables.WithSource>
void setupPoiFeature(T element, FeatureCollector.Feature output) {
String rawSubclass = element.subclass();
if ("station".equals(rawSubclass) && "subway".equals(element.station())) {
rawSubclass = "subway";
}
if ("station".equals(rawSubclass) && "yes".equals(element.funicular())) {
rawSubclass = "halt";
}
String subclass = switch (rawSubclass) {
case "information" -> nullIfEmpty(element.information());
case "place_of_worship" -> nullIfEmpty(element.religion());
case "pitch" -> nullIfEmpty(element.sport());
default -> rawSubclass;
};
String poiClass = poiClass(rawSubclass, element.mappingKey());
int poiClassRank = poiClassRank(poiClass);
int rankOrder = poiClassRank + ((nullOrEmpty(element.name())) ? 2000 : 0);
output.setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, poiClass)
.setAttr(Fields.SUBCLASS, subclass)
.setAttr(Fields.LAYER, nullIf(element.layer(), 0))
.setAttr(Fields.LEVEL, Parse.parseLongOrNull(element.source().getTag("level")))
.setAttr(Fields.INDOOR, element.indoor() ? 1 : null)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setPointLabelGridPixelSize(14, 64)
.setSortKey(rankOrder)
.setMinZoom(minzoom(element.subclass(), element.mappingKey()));
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) {
// infer the "rank" field from the order of features within each label grid square
LongIntMap groupCounts = new LongIntHashMap();
for (VectorTile.Feature feature : items) {
int gridrank = groupCounts.getOrDefault(feature.group(), 1);
groupCounts.put(feature.group(), gridrank + 1);
if (!feature.attrs().containsKey(Fields.RANK)) {
feature.attrs().put(Fields.RANK, gridrank);
}
}
return items;
}
}

Wyświetl plik

@ -1,336 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.*;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.FeatureMerge;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Parse;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.ZoomFunction;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.locationtech.jts.geom.LineString;
/**
* Defines the logic for generating map elements for roads, shipways, railroads, and paths in the {@code transportation}
* layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/transportation">OpenMapTiles
* transportation sql files</a>.
*/
public class Transportation implements
OpenMapTilesSchema.Transportation,
Tables.OsmAerialwayLinestring.Handler,
Tables.OsmHighwayLinestring.Handler,
Tables.OsmRailwayLinestring.Handler,
Tables.OsmShipwayLinestring.Handler,
Tables.OsmHighwayPolygon.Handler,
BasemapProfile.FeaturePostProcessor,
BasemapProfile.IgnoreWikidata {
/*
* Generates the shape for roads, trails, ferries, railways with detailed
* attributes for rendering, but not any names. The transportation_name
* layer includes names, but less detailed attributes.
*/
private static final MultiExpression.Index<String> classMapping = FieldMappings.Class.index();
private static final Set<String> RAILWAY_RAIL_VALUES = Set.of(
FieldValues.SUBCLASS_RAIL,
FieldValues.SUBCLASS_NARROW_GAUGE,
FieldValues.SUBCLASS_PRESERVED,
FieldValues.SUBCLASS_FUNICULAR
);
private static final Set<String> RAILWAY_TRANSIT_VALUES = Set.of(
FieldValues.SUBCLASS_SUBWAY,
FieldValues.SUBCLASS_LIGHT_RAIL,
FieldValues.SUBCLASS_MONORAIL,
FieldValues.SUBCLASS_TRAM
);
private static final Set<String> SERVICE_VALUES = Set.of(
FieldValues.SERVICE_SPUR,
FieldValues.SERVICE_YARD,
FieldValues.SERVICE_SIDING,
FieldValues.SERVICE_CROSSOVER,
FieldValues.SERVICE_DRIVEWAY,
FieldValues.SERVICE_ALLEY,
FieldValues.SERVICE_PARKING_AISLE
);
private static final Set<String> SURFACE_UNPAVED_VALUES = Set.of(
"unpaved", "compacted", "dirt", "earth", "fine_gravel", "grass", "grass_paver", "gravel", "gravel_turf", "ground",
"ice", "mud", "pebblestone", "salt", "sand", "snow", "woodchips"
);
private static final Set<String> SURFACE_PAVED_VALUES = Set.of(
"paved", "asphalt", "cobblestone", "concrete", "concrete:lanes", "concrete:plates", "metal",
"paving_stones", "sett", "unhewn_cobblestone", "wood"
);
private static final ZoomFunction.MeterToPixelThresholds MIN_LENGTH = ZoomFunction.meterThresholds()
.put(7, 50)
.put(6, 100)
.put(5, 500)
.put(4, 1_000);
private final Map<String, Integer> MINZOOMS;
private final Stats stats;
private final PlanetilerConfig config;
public Transportation(Translations translations, PlanetilerConfig config, Stats stats) {
this.config = config;
this.stats = stats;
boolean z13Paths = config.arguments().getBoolean(
"transportation_z13_paths",
"transportation(_name) layer: show paths on z13",
true
);
MINZOOMS = Map.of(
FieldValues.CLASS_TRACK, 14,
FieldValues.CLASS_PATH, z13Paths ? 13 : 14,
FieldValues.CLASS_MINOR, 13,
FieldValues.CLASS_RACEWAY, 12,
FieldValues.CLASS_TERTIARY, 11,
FieldValues.CLASS_SECONDARY, 9,
FieldValues.CLASS_PRIMARY, 7,
FieldValues.CLASS_TRUNK, 5,
FieldValues.CLASS_MOTORWAY, 4
);
}
/** Returns a value for {@code surface} tag constrained to a small set of known values from raw OSM data. */
private static String surface(String value) {
return value == null ? null : SURFACE_PAVED_VALUES.contains(value) ? FieldValues.SURFACE_PAVED :
SURFACE_UNPAVED_VALUES.contains(value) ? FieldValues.SURFACE_UNPAVED : null;
}
/** Returns a value for {@code service} tag constrained to a small set of known values from raw OSM data. */
private static String service(String value) {
return (value == null || !SERVICE_VALUES.contains(value)) ? null : value;
}
private static String railwayClass(String value) {
return value == null ? null :
RAILWAY_RAIL_VALUES.contains(value) ? "rail" :
RAILWAY_TRANSIT_VALUES.contains(value) ? "transit" : null;
}
static String highwayClass(String highway, String publicTransport, String construction, String manMade) {
return (!nullOrEmpty(highway) || !nullOrEmpty(publicTransport)) ? classMapping.getOrElse(Map.of(
"highway", coalesce(highway, ""),
"public_transport", coalesce(publicTransport, ""),
"construction", coalesce(construction, "")
), manMade) : manMade;
}
static String highwaySubclass(String highwayClass, String publicTransport, String highway) {
return FieldValues.CLASS_PATH.equals(highwayClass) ? coalesce(nullIfEmpty(publicTransport), highway) : null;
}
static boolean isFootwayOrSteps(String highway) {
return "footway".equals(highway) || "steps".equals(highway);
}
private static boolean isResidentialOrUnclassified(String highway) {
return "residential".equals(highway) || "unclassified".equals(highway);
}
private static boolean isBridgeOrPier(String manMade) {
return "bridge".equals(manMade) || "pier".equals(manMade);
}
@Override
public void process(Tables.OsmHighwayLinestring element, FeatureCollector features) {
if (element.isArea()) {
return;
}
String highway = element.highway();
String highwayClass = highwayClass(element.highway(), element.publicTransport(), element.construction(),
element.manMade());
if (highwayClass != null) {
int minzoom;
if ("pier".equals(element.manMade())) {
try {
if (element.source().worldGeometry() instanceof LineString lineString && lineString.isClosed()) {
// ignore this because it's a polygon
return;
}
} catch (GeometryException e) {
e.log(stats, "omt_transportation_pier",
"Unable to decode pier geometry for " + element.source().id());
return;
}
minzoom = 13;
} else if (isResidentialOrUnclassified(highway)) {
minzoom = 12;
} else {
String baseClass = highwayClass.replace("_construction", "");
minzoom = MINZOOMS.getOrDefault(baseClass, 12);
}
boolean highwayIsLink = coalesce(highway, "").endsWith("_link");
if (highwayIsLink) {
minzoom = Math.max(minzoom, 9);
}
boolean highwayRamp = highwayIsLink || "steps".equals(highway);
int rampAboveZ12 = (highwayRamp || element.isRamp()) ? 1 : 0;
int rampBelowZ12 = highwayRamp ? 1 : 0;
FeatureCollector.Feature feature = features.line(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
// main attributes at all zoom levels (used for grouping <= z8)
.setAttr(Fields.CLASS, highwayClass)
.setAttr(Fields.SUBCLASS, highwaySubclass(highwayClass, element.publicTransport(), highway))
.setAttr(Fields.BRUNNEL, brunnel(element.isBridge(), element.isTunnel(), element.isFord()))
// rest at z9+
.setAttrWithMinzoom(Fields.SERVICE, service(element.service()), 12)
.setAttrWithMinzoom(Fields.ONEWAY, element.isOneway(), 12)
.setAttr(Fields.RAMP, minzoom >= 12 ? rampAboveZ12 :
((ZoomFunction<Integer>) z -> z < 9 ? null : z >= 12 ? rampAboveZ12 : rampBelowZ12))
.setAttrWithMinzoom(Fields.LAYER, nullIf(element.layer(), 0), 9)
.setAttrWithMinzoom(Fields.BICYCLE, nullIfEmpty(element.bicycle()), 9)
.setAttrWithMinzoom(Fields.FOOT, nullIfEmpty(element.foot()), 9)
.setAttrWithMinzoom(Fields.HORSE, nullIfEmpty(element.horse()), 9)
.setAttrWithMinzoom(Fields.MTB_SCALE, nullIfEmpty(element.mtbScale()), 9)
.setAttrWithMinzoom(Fields.SURFACE, surface(element.surface()), 12)
.setMinPixelSize(0) // merge during post-processing, then limit by size
.setSortKey(element.zOrder())
.setMinZoom(minzoom);
if (isFootwayOrSteps(highway)) {
feature
.setAttr(Fields.LEVEL, Parse.parseLongOrNull(element.source().getTag("level")))
.setAttr(Fields.INDOOR, element.indoor() ? 1 : null);
}
}
}
@Override
public void process(Tables.OsmRailwayLinestring element, FeatureCollector features) {
String railway = element.railway();
String clazz = railwayClass(railway);
if (clazz != null) {
String service = nullIfEmpty(element.service());
int minzoom;
if (service != null) {
minzoom = 14;
} else if (FieldValues.SUBCLASS_RAIL.equals(railway)) {
minzoom = "main".equals(element.usage()) ? 8 : 10;
} else if (FieldValues.SUBCLASS_NARROW_GAUGE.equals(railway)) {
minzoom = 10;
} else if (FieldValues.SUBCLASS_LIGHT_RAIL.equals(railway)) {
minzoom = 11;
} else {
minzoom = 14;
}
features.line(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, clazz)
.setAttr(Fields.SUBCLASS, railway)
.setAttr(Fields.SERVICE, service(service))
.setAttr(Fields.ONEWAY, element.isOneway())
.setAttr(Fields.RAMP, element.isRamp() ? 1 : 0)
.setAttrWithMinzoom(Fields.BRUNNEL, brunnel(element.isBridge(), element.isTunnel(), element.isFord()), 10)
.setAttrWithMinzoom(Fields.LAYER, nullIf(element.layer(), 0), 9)
.setSortKey(element.zOrder())
.setMinPixelSize(0) // merge during post-processing, then limit by size
.setMinZoom(minzoom);
}
}
@Override
public void process(Tables.OsmAerialwayLinestring element, FeatureCollector features) {
features.line(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, "aerialway")
.setAttr(Fields.SUBCLASS, element.aerialway())
.setAttr(Fields.SERVICE, service(element.service()))
.setAttr(Fields.ONEWAY, element.isOneway())
.setAttr(Fields.RAMP, element.isRamp() ? 1 : 0)
.setAttr(Fields.BRUNNEL, brunnel(element.isBridge(), element.isTunnel(), element.isFord()))
.setAttr(Fields.LAYER, nullIf(element.layer(), 0))
.setSortKey(element.zOrder())
.setMinPixelSize(0) // merge during post-processing, then limit by size
.setMinZoom(12);
}
@Override
public void process(Tables.OsmShipwayLinestring element, FeatureCollector features) {
features.line(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, element.shipway()) // "ferry"
// no subclass
.setAttr(Fields.SERVICE, service(element.service()))
.setAttr(Fields.ONEWAY, element.isOneway())
.setAttr(Fields.RAMP, element.isRamp() ? 1 : 0)
.setAttr(Fields.BRUNNEL, brunnel(element.isBridge(), element.isTunnel(), element.isFord()))
.setAttr(Fields.LAYER, nullIf(element.layer(), 0))
.setSortKey(element.zOrder())
.setMinPixelSize(0) // merge during post-processing, then limit by size
.setMinZoom(11);
}
@Override
public void process(Tables.OsmHighwayPolygon element, FeatureCollector features) {
String manMade = element.manMade();
if (isBridgeOrPier(manMade) ||
// ignore underground pedestrian areas
(element.isArea() && element.layer() >= 0)) {
String highwayClass = highwayClass(element.highway(), element.publicTransport(), null, element.manMade());
if (highwayClass != null) {
features.polygon(LAYER_NAME).setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, highwayClass)
.setAttr(Fields.SUBCLASS, highwaySubclass(highwayClass, element.publicTransport(), element.highway()))
.setAttr(Fields.BRUNNEL, brunnel("bridge".equals(manMade), false, false))
.setAttr(Fields.LAYER, nullIf(element.layer(), 0))
.setSortKey(element.zOrder())
.setMinZoom(13);
}
}
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) {
double tolerance = config.tolerance(zoom);
double minLength = coalesce(MIN_LENGTH.apply(zoom), config.minFeatureSize(zoom)).doubleValue();
return FeatureMerge.mergeLineStrings(items, minLength, tolerance, BUFFER_SIZE);
}
}

Wyświetl plik

@ -1,375 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.layers.Transportation.highwayClass;
import static com.onthegomap.planetiler.basemap.layers.Transportation.highwaySubclass;
import static com.onthegomap.planetiler.basemap.layers.Transportation.isFootwayOrSteps;
import static com.onthegomap.planetiler.basemap.util.Utils.brunnel;
import static com.onthegomap.planetiler.basemap.util.Utils.coalesce;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIf;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import static com.onthegomap.planetiler.util.MemoryEstimator.CLASS_HEADER_BYTES;
import static com.onthegomap.planetiler.util.MemoryEstimator.POINTER_BYTES;
import static com.onthegomap.planetiler.util.MemoryEstimator.estimateSize;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.FeatureMerge;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.LanguageUtils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.reader.osm.OsmReader;
import com.onthegomap.planetiler.reader.osm.OsmRelationInfo;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.MemoryEstimator;
import com.onthegomap.planetiler.util.Parse;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.ZoomFunction;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.prep.PreparedGeometry;
import org.locationtech.jts.geom.prep.PreparedGeometryFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Defines the logic for generating map elements for road, shipway, rail, and path names in the {@code
* transportation_name} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/transportation_name">OpenMapTiles
* transportation_name sql files</a>.
*/
public class TransportationName implements
OpenMapTilesSchema.TransportationName,
Tables.OsmHighwayLinestring.Handler,
BasemapProfile.NaturalEarthProcessor,
BasemapProfile.FeaturePostProcessor,
BasemapProfile.OsmRelationPreprocessor,
BasemapProfile.IgnoreWikidata {
/*
* Generate road names from OSM data. Route network and ref are copied
* from relations that roads are a part of - except in Great Britain which
* uses a naming convention instead of relations.
*
* The goal is to make name linestrings as long as possible to give clients
* the best chance of showing road names at different zoom levels, so do not
* limit linestrings by length at process time and merge them at tile
* render-time.
*
* Any 3-way nodes and intersections break line merging so set the
* transportation_name_limit_merge argument to true to add temporary
* "is link" and "relation" keys to prevent opposite directions of a
* divided highway or on/off ramps from getting merged for main highways.
*/
// extra temp key used to group on/off-ramps separately from main highways
private static final String LINK_TEMP_KEY = "__islink";
private static final String RELATION_ID_TEMP_KEY = "__relid";
private static final Logger LOGGER = LoggerFactory.getLogger(TransportationName.class);
private static final Pattern GREAT_BRITAIN_REF_NETWORK_PATTERN = Pattern.compile("^[AM][0-9AM()]+");
private static final ZoomFunction.MeterToPixelThresholds MIN_LENGTH = ZoomFunction.meterThresholds()
.put(6, 20_000)
.put(7, 20_000)
.put(8, 14_000)
.put(9, 8_000)
.put(10, 8_000)
.put(11, 8_000);
private static final Comparator<RouteRelation> RELATION_ORDERING = Comparator
.<RouteRelation>comparingInt(r -> r.network.ordinal())
// TODO also compare network string?
.thenComparingInt(r -> r.ref.length())
.thenComparing(RouteRelation::ref);
private final Map<String, Integer> MINZOOMS;
private final boolean brunnel;
private final boolean sizeForShield;
private final boolean limitMerge;
private final Stats stats;
private final PlanetilerConfig config;
private final AtomicBoolean loggedNoGb = new AtomicBoolean(false);
private PreparedGeometry greatBritain = null;
public TransportationName(Translations translations, PlanetilerConfig config, Stats stats) {
this.config = config;
this.stats = stats;
this.brunnel = config.arguments().getBoolean(
"transportation_name_brunnel",
"transportation_name layer: set to false to omit brunnel and help merge long highways",
false
);
this.sizeForShield = config.arguments().getBoolean(
"transportation_name_size_for_shield",
"transportation_name layer: allow road names on shorter segments (ie. they will have a shield)",
false
);
this.limitMerge = config.arguments().getBoolean(
"transportation_name_limit_merge",
"transportation_name layer: limit merge so we don't combine different relations to help merge long highways",
false
);
boolean z13Paths = config.arguments().getBoolean(
"transportation_z13_paths",
"transportation(_name) layer: show paths on z13",
true
);
MINZOOMS = Map.of(
FieldValues.CLASS_TRACK, 14,
FieldValues.CLASS_PATH, z13Paths ? 13 : 14,
FieldValues.CLASS_MINOR, 13,
FieldValues.CLASS_TRUNK, 8,
FieldValues.CLASS_MOTORWAY, 6
// default: 12
);
}
@Override
public void processNaturalEarth(String table, SourceFeature feature,
FeatureCollector features) {
if ("ne_10m_admin_0_countries".equals(table) && feature.hasTag("iso_a2", "GB")) {
// multiple threads call this method concurrently, GB polygon *should* only be found
// once, but just to be safe synchronize updates to that field
synchronized (this) {
try {
Geometry boundary = feature.polygon().buffer(GeoUtils.metersToPixelAtEquator(0, 10_000) / 256d);
greatBritain = PreparedGeometryFactory.prepare(boundary);
} catch (GeometryException e) {
LOGGER.error("Failed to get Great Britain Polygon: " + e);
}
}
}
}
@Override
public List<OsmRelationInfo> preprocessOsmRelation(OsmElement.Relation relation) {
if (relation.hasTag("route", "road")) {
RouteNetwork networkType = null;
String network = relation.getString("network");
String ref = relation.getString("ref");
if ("US:I".equals(network)) {
networkType = RouteNetwork.US_INTERSTATE;
} else if ("US:US".equals(network)) {
networkType = RouteNetwork.US_HIGHWAY;
} else if (network != null && network.length() == 5 && network.startsWith("US:")) {
networkType = RouteNetwork.US_STATE;
} else if (network != null && network.startsWith("CA:transcanada")) {
networkType = RouteNetwork.CA_TRANSCANADA;
}
if (networkType != null) {
return List.of(new RouteRelation(coalesce(ref, ""), networkType, relation.id()));
}
}
return null;
}
@Override
public void process(Tables.OsmHighwayLinestring element, FeatureCollector features) {
List<OsmReader.RelationMember<RouteRelation>> relations = element.source()
.relationInfo(RouteRelation.class);
String ref = element.ref();
RouteRelation relation = getRouteRelation(element, relations, ref);
if (relation != null && nullIfEmpty(relation.ref) != null) {
ref = relation.ref;
}
String name = nullIfEmpty(element.name());
ref = nullIfEmpty(ref);
String highway = nullIfEmpty(element.highway());
String highwayClass = highwayClass(element.highway(), null, element.construction(), element.manMade());
if (element.isArea() || highway == null || highwayClass == null || (name == null && ref == null)) {
return;
}
String baseClass = highwayClass.replace("_construction", "");
int minzoom = MINZOOMS.getOrDefault(baseClass, 12);
boolean isLink = highway.endsWith("_link");
if (isLink) {
minzoom = Math.max(13, minzoom);
}
FeatureCollector.Feature feature = features.line(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.setBufferPixelOverrides(MIN_LENGTH)
// TODO abbreviate road names - can't port osml10n because it is AGPL
.putAttrs(LanguageUtils.getNamesWithoutTranslations(element.source().tags()))
.setAttr(Fields.REF, ref)
.setAttr(Fields.REF_LENGTH, ref != null ? ref.length() : null)
.setAttr(Fields.NETWORK,
(relation != null && relation.network != null) ? relation.network.name : ref != null ? "road" : null)
.setAttr(Fields.CLASS, highwayClass)
.setAttr(Fields.SUBCLASS, highwaySubclass(highwayClass, null, highway))
.setMinPixelSize(0)
.setSortKey(element.zOrder())
.setMinZoom(minzoom);
if (brunnel) {
feature.setAttr(Fields.BRUNNEL, brunnel(element.isBridge(), element.isTunnel(), element.isFord()));
}
/*
* to help group roads into longer segments, add temporary tags to limit which segments get grouped together. Since
* a divided highway typically has a separate relation for each direction, this ends up keeping segments going
* opposite directions group getting grouped together and confusing the line merging process
*/
if (limitMerge) {
feature
.setAttr(LINK_TEMP_KEY, isLink ? 1 : 0)
.setAttr(RELATION_ID_TEMP_KEY, relation == null ? null : relation.id);
}
if (isFootwayOrSteps(highway)) {
feature
.setAttrWithMinzoom(Fields.LAYER, nullIf(element.layer(), 0), 12)
.setAttrWithMinzoom(Fields.LEVEL, Parse.parseLongOrNull(element.source().getTag("level")), 12)
.setAttrWithMinzoom(Fields.INDOOR, element.indoor() ? 1 : null, 12);
}
}
private RouteRelation getRouteRelation(Tables.OsmHighwayLinestring element,
List<OsmReader.RelationMember<RouteRelation>> relations, String ref) {
RouteRelation relation = relations.stream()
.map(OsmReader.RelationMember::relation)
.min(RELATION_ORDERING)
.orElse(null);
if (relation == null && ref != null) {
// GB doesn't use regular relations like everywhere else, so if we are
// in GB then use a naming convention instead.
Matcher refMatcher = GREAT_BRITAIN_REF_NETWORK_PATTERN.matcher(ref);
if (refMatcher.find()) {
if (greatBritain == null) {
if (!loggedNoGb.get() && loggedNoGb.compareAndSet(false, true)) {
LOGGER.warn("No GB polygon for inferring route network types");
}
} else {
try {
Geometry wayGeometry = element.source().worldGeometry();
if (greatBritain.intersects(wayGeometry)) {
RouteNetwork networkType =
"motorway".equals(element.highway()) ? RouteNetwork.GB_MOTORWAY : RouteNetwork.GB_TRUNK;
relation = new RouteRelation(refMatcher.group(), networkType, 0);
}
} catch (GeometryException e) {
e.log(stats, "omt_transportation_name_gb_test",
"Unable to test highway against GB route network: " + element.source().id());
}
}
}
}
return relation;
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) {
double tolerance = config.tolerance(zoom);
double minLength = coalesce(MIN_LENGTH.apply(zoom), 0).doubleValue();
// TODO tolerances:
// z6: (tolerance: 500)
// z7: (tolerance: 200)
// z8: (tolerance: 120)
// z9-11: (tolerance: 50)
Function<Map<String, Object>, Double> lengthLimitCalculator =
zoom >= 14 ? (p -> 0d) :
minLength > 0 ? (p -> minLength) :
this::getMinLengthForName;
var result = FeatureMerge.mergeLineStrings(items, lengthLimitCalculator, tolerance, BUFFER_SIZE);
if (limitMerge) {
// remove temp keys that were just used to improve line merging
for (var feature : result) {
feature.attrs().remove(LINK_TEMP_KEY);
feature.attrs().remove(RELATION_ID_TEMP_KEY);
}
}
return result;
}
/** Returns the minimum pixel length that a name will fit into. */
private double getMinLengthForName(Map<String, Object> attrs) {
Object ref = attrs.get(Fields.REF);
Object name = coalesce(attrs.get(Fields.NAME), ref);
return (sizeForShield && ref instanceof String) ? 6 :
name instanceof String str ? str.length() * 6 : Double.MAX_VALUE;
}
private enum RouteNetwork {
US_INTERSTATE("us-interstate"),
US_HIGHWAY("us-highway"),
US_STATE("us-state"),
CA_TRANSCANADA("ca-transcanada"),
GB_MOTORWAY("gb-motorway"),
GB_TRUNK("gb-trunk");
final String name;
RouteNetwork(String name) {
this.name = name;
}
}
/** Information extracted from route relations to use when processing ways in that relation. */
private static record RouteRelation(
String ref,
RouteNetwork network,
@Override long id
) implements OsmRelationInfo {
@Override
public long estimateMemoryUsageBytes() {
return CLASS_HEADER_BYTES +
POINTER_BYTES + estimateSize(ref) +
POINTER_BYTES + // network
MemoryEstimator.estimateSizeLong(id);
}
}
}

Wyświetl plik

@ -1,115 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.Utils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
/**
* Defines the logic for generating map elements for oceans and lakes in the {@code water} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/water">OpenMapTiles
* water sql files</a>.
*/
public class Water implements
OpenMapTilesSchema.Water,
Tables.OsmWaterPolygon.Handler,
BasemapProfile.NaturalEarthProcessor,
BasemapProfile.OsmWaterPolygonProcessor {
/*
* At low zoom levels, use natural earth for oceans and major lakes, and at high zoom levels
* use OpenStreetMap data. OpenStreetMap data contains smaller bodies of water, but not
* large ocean polygons. For oceans, use https://osmdata.openstreetmap.de/data/water-polygons.html
* which infers ocean polygons by preprocessing all coastline elements.
*/
private final MultiExpression.Index<String> classMapping;
public Water(Translations translations, PlanetilerConfig config, Stats stats) {
this.classMapping = FieldMappings.Class.index();
}
@Override
public void processNaturalEarth(String table, SourceFeature feature, FeatureCollector features) {
record WaterInfo(int minZoom, int maxZoom, String clazz) {}
WaterInfo info = switch (table) {
case "ne_110m_ocean" -> new WaterInfo(0, 1, FieldValues.CLASS_OCEAN);
case "ne_50m_ocean" -> new WaterInfo(2, 4, FieldValues.CLASS_OCEAN);
case "ne_10m_ocean" -> new WaterInfo(5, 5, FieldValues.CLASS_OCEAN);
case "ne_110m_lakes" -> new WaterInfo(0, 1, FieldValues.CLASS_LAKE);
case "ne_50m_lakes" -> new WaterInfo(2, 3, FieldValues.CLASS_LAKE);
case "ne_10m_lakes" -> new WaterInfo(4, 5, FieldValues.CLASS_LAKE);
default -> null;
};
if (info != null) {
features.polygon(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.setZoomRange(info.minZoom, info.maxZoom)
.setAttr(Fields.CLASS, info.clazz);
}
}
@Override
public void processOsmWater(SourceFeature feature, FeatureCollector features) {
features.polygon(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, FieldValues.CLASS_OCEAN)
.setMinZoom(6);
}
@Override
public void process(Tables.OsmWaterPolygon element, FeatureCollector features) {
if (!"bay".equals(element.natural())) {
features.polygon(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.setMinPixelSizeBelowZoom(11, 2)
.setMinZoom(6)
.setAttr(Fields.INTERMITTENT, element.isIntermittent() ? 1 : 0)
.setAttrWithMinzoom(Fields.BRUNNEL, Utils.brunnel(element.isBridge(), element.isTunnel()), 12)
.setAttr(Fields.CLASS, classMapping.getOrElse(element.source(), FieldValues.CLASS_RIVER));
}
}
}

Wyświetl plik

@ -1,195 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import com.carrotsearch.hppc.LongObjectMap;
import com.graphhopper.coll.GHLongObjectHashMap;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.LanguageUtils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Parse;
import com.onthegomap.planetiler.util.Translations;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;
import org.locationtech.jts.geom.Geometry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Defines the logic for generating map elements for ocean and lake names in the {@code water_name} layer from source
* features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/water_name">OpenMapTiles
* water_name sql files</a>.
*/
public class WaterName implements
OpenMapTilesSchema.WaterName,
Tables.OsmMarinePoint.Handler,
Tables.OsmWaterPolygon.Handler,
BasemapProfile.NaturalEarthProcessor,
BasemapProfile.LakeCenterlineProcessor {
/*
* Labels for lakes and oceans come primarily from OpenStreetMap data, but we also join
* with the lake centerlines source to get linestring geometries for prominent lakes.
* We also join with natural earth to make certain important lake/ocean labels visible
* at lower zoom levels.
*/
private static final Logger LOGGER = LoggerFactory.getLogger(WaterName.class);
private static final double WORLD_AREA_FOR_70K_SQUARE_METERS =
Math.pow(GeoUtils.metersToPixelAtEquator(0, Math.sqrt(70_000)) / 256d, 2);
private static final double LOG2 = Math.log(2);
private final Translations translations;
// need to synchronize updates from multiple threads
private final LongObjectMap<Geometry> lakeCenterlines = new GHLongObjectHashMap<>();
// may be updated concurrently by multiple threads
private final ConcurrentSkipListMap<String, Integer> importantMarinePoints = new ConcurrentSkipListMap<>();
private final Stats stats;
public WaterName(Translations translations, PlanetilerConfig config, Stats stats) {
this.translations = translations;
this.stats = stats;
}
@Override
public void release() {
lakeCenterlines.release();
importantMarinePoints.clear();
}
@Override
public void processLakeCenterline(SourceFeature feature, FeatureCollector features) {
// TODO pull lake centerline computation into planetiler?
long osmId = Math.abs(feature.getLong("OSM_ID"));
if (osmId == 0L) {
LOGGER.warn("Bad lake centerline. Tags: " + feature.tags());
} else {
try {
// multiple threads call this concurrently
synchronized (this) {
lakeCenterlines.put(osmId, feature.worldGeometry());
}
} catch (GeometryException e) {
e.log(stats, "omt_water_name_lakeline", "Bad lake centerline: " + feature);
}
}
}
@Override
public void processNaturalEarth(String table, SourceFeature feature, FeatureCollector features) {
// use natural earth named polygons just as a source of name to zoom-level mappings for later
if ("ne_10m_geography_marine_polys".equals(table)) {
String name = feature.getString("name");
Integer scalerank = Parse.parseIntOrNull(feature.getTag("scalerank"));
if (name != null && scalerank != null) {
name = name.replaceAll("\\s+", " ").trim().toLowerCase();
importantMarinePoints.put(name, scalerank);
}
}
}
@Override
public void process(Tables.OsmMarinePoint element, FeatureCollector features) {
if (!element.name().isBlank()) {
String place = element.place();
var source = element.source();
// use name from OSM, but get min zoom from natural earth based on fuzzy name match...
Integer rank = Parse.parseIntOrNull(source.getTag("rank"));
String name = element.name().toLowerCase();
Integer nerank;
if ((nerank = importantMarinePoints.get(name)) != null) {
rank = nerank;
} else if ((nerank = importantMarinePoints.get(source.getString("name:en", "").toLowerCase())) != null) {
rank = nerank;
} else if ((nerank = importantMarinePoints.get(source.getString("name:es", "").toLowerCase())) != null) {
rank = nerank;
} else {
Map.Entry<String, Integer> next = importantMarinePoints.ceilingEntry(name);
if (next != null && next.getKey().startsWith(name)) {
rank = next.getValue();
}
}
int minZoom = "ocean".equals(place) ? 0 : rank != null ? rank : 8;
features.point(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.putAttrs(LanguageUtils.getNames(source.tags(), translations))
.setAttr(Fields.CLASS, place)
.setAttr(Fields.INTERMITTENT, element.isIntermittent() ? 1 : 0)
.setMinZoom(minZoom);
}
}
@Override
public void process(Tables.OsmWaterPolygon element, FeatureCollector features) {
if (nullIfEmpty(element.name()) != null) {
try {
Geometry centerlineGeometry = lakeCenterlines.get(element.source().id());
FeatureCollector.Feature feature;
int minzoom = 9;
if (centerlineGeometry != null) {
// prefer lake centerline if it exists
feature = features.geometry(LAYER_NAME, centerlineGeometry)
.setMinPixelSizeBelowZoom(13, 6 * element.name().length());
} else {
// otherwise just use a label point inside the lake
feature = features.pointOnSurface(LAYER_NAME);
Geometry geometry = element.source().worldGeometry();
double area = geometry.getArea();
minzoom = (int) Math.floor(20 - Math.log(area / WORLD_AREA_FOR_70K_SQUARE_METERS) / LOG2);
minzoom = Math.min(14, Math.max(9, minzoom));
}
feature
.setAttr(Fields.CLASS, FieldValues.CLASS_LAKE)
.setBufferPixels(BUFFER_SIZE)
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setAttr(Fields.INTERMITTENT, element.isIntermittent() ? 1 : 0)
.setMinZoom(minzoom);
} catch (GeometryException e) {
e.log(stats, "omt_water_polygon", "Unable to get geometry for water polygon " + element.source().id());
}
}
}
}

Wyświetl plik

@ -1,150 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.FeatureMerge;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.basemap.generated.OpenMapTilesSchema;
import com.onthegomap.planetiler.basemap.generated.Tables;
import com.onthegomap.planetiler.basemap.util.LanguageUtils;
import com.onthegomap.planetiler.basemap.util.Utils;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.ZoomFunction;
import java.util.List;
import java.util.Map;
/**
* Defines the logic for generating river map elements in the {@code waterway} layer from source features.
* <p>
* This class is ported to Java from <a href="https://github.com/openmaptiles/openmaptiles/tree/master/layers/waterway">OpenMapTiles
* waterway sql files</a>.
*/
public class Waterway implements
OpenMapTilesSchema.Waterway,
Tables.OsmWaterwayLinestring.Handler,
BasemapProfile.FeaturePostProcessor,
BasemapProfile.NaturalEarthProcessor {
/*
* Uses Natural Earth at lower zoom-levels and OpenStreetMap at higher zoom levels.
*
* For OpenStreetMap, attempts to merge disconnected linestrings with the same name
* at lower zoom levels so that clients can more easily render the name. We also
* limit their length at merge-time which only has visibilty into that feature in a
* single tile, so at render-time we need to allow through features far enough outside
* the tile boundary enough to not accidentally filter out a long river only because a
* short segment of it goes through this tile.
*/
private final Translations translations;
private final PlanetilerConfig config;
public Waterway(Translations translations, PlanetilerConfig config, Stats stats) {
this.config = config;
this.translations = translations;
}
private static final Map<String, Integer> CLASS_MINZOOM = Map.of(
"river", 12,
"canal", 12,
"stream", 13,
"drain", 13,
"ditch", 13
);
private static final ZoomFunction.MeterToPixelThresholds MIN_PIXEL_LENGTHS = ZoomFunction.meterThresholds()
.put(9, 8_000)
.put(10, 4_000)
.put(11, 1_000);
@Override
public void processNaturalEarth(String table, SourceFeature feature, FeatureCollector features) {
if (feature.hasTag("featurecla", "River")) {
record ZoomRange(int min, int max) {}
ZoomRange zoom = switch (table) {
case "ne_110m_rivers_lake_centerlines" -> new ZoomRange(3, 3);
case "ne_50m_rivers_lake_centerlines" -> new ZoomRange(4, 5);
case "ne_10m_rivers_lake_centerlines" -> new ZoomRange(6, 8);
default -> null;
};
if (zoom != null) {
features.line(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, FieldValues.CLASS_RIVER)
.setZoomRange(zoom.min, zoom.max);
}
}
}
@Override
public void process(Tables.OsmWaterwayLinestring element, FeatureCollector features) {
String waterway = element.waterway();
String name = nullIfEmpty(element.name());
boolean important = "river".equals(waterway) && name != null;
int minzoom = important ? 9 : CLASS_MINZOOM.getOrDefault(element.waterway(), 14);
features.line(LAYER_NAME)
.setBufferPixels(BUFFER_SIZE)
.setAttr(Fields.CLASS, element.waterway())
.putAttrs(LanguageUtils.getNames(element.source().tags(), translations))
.setMinZoom(minzoom)
// details only at higher zoom levels so that named rivers can be merged more aggressively
.setAttrWithMinzoom(Fields.BRUNNEL, Utils.brunnel(element.isBridge(), element.isTunnel()), 12)
.setAttrWithMinzoom(Fields.INTERMITTENT, element.isIntermittent() ? 1 : 0, 12)
// at lower zoom levels, we'll merge linestrings and limit length/clip afterwards
.setBufferPixelOverrides(MIN_PIXEL_LENGTHS).setMinPixelSizeBelowZoom(11, 0);
}
@Override
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) {
if (zoom >= 9 && zoom <= 11) {
return FeatureMerge.mergeLineStrings(
items,
MIN_PIXEL_LENGTHS.apply(zoom).doubleValue(),
config.tolerance(zoom),
BUFFER_SIZE
);
}
return items;
}
}

Wyświetl plik

@ -1,170 +0,0 @@
/*
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
All rights reserved.
Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Design license: CC-BY 4.0
See https://github.com/openmaptiles/openmaptiles/blob/master/LICENSE.md for details on usage
*/
package com.onthegomap.planetiler.basemap.util;
import static com.onthegomap.planetiler.basemap.util.Utils.coalesce;
import static com.onthegomap.planetiler.basemap.util.Utils.nullIfEmpty;
import com.onthegomap.planetiler.util.Translations;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Stream;
/**
* Utilities to extract common name fields (name, name_en, name_de, name:latin, name:nonlatin, name_int) that the
* OpenMapTiles schema uses across any map element with a name.
* <p>
* Ported from <a href="https://github.com/openmaptiles/openmaptiles-tools/blob/master/sql/zzz_language.sql">openmaptiles-tools</a>.
*/
public class LanguageUtils {
private static final Pattern NONLATIN = Pattern
.compile("[^\\x{0000}-\\x{024f}\\x{1E00}-\\x{1EFF}\\x{0300}-\\x{036f}\\x{0259}]");
private static final Pattern LETTER = Pattern.compile("[A-Za-zÀ-ÖØ-öø-ÿĀ-ɏ]+");
private static final Pattern EMPTY_PARENS = Pattern.compile("(\\([ -.]*\\)|\\[[ -.]*])");
private static final Pattern LEADING_TRAILING_JUNK = Pattern.compile("(^\\s*([./-]\\s*)*|(\\s+[./-])*\\s*$)");
private static final Pattern WHITESPACE = Pattern.compile("\\s+");
private static final Set<String> EN_DE_NAME_KEYS = Set.of("name:en", "name:de");
private static void putIfNotEmpty(Map<String, Object> dest, String key, Object value) {
if (value != null && !value.equals("")) {
dest.put(key, value);
}
}
private static String string(Object obj) {
return nullIfEmpty(obj == null ? null : obj.toString());
}
static boolean containsOnlyLatinCharacters(String string) {
return string != null && !NONLATIN.matcher(string).find();
}
private static String transliteratedName(Map<String, Object> tags) {
return Translations.transliterate(string(tags.get("name")));
}
static String removeLatinCharacters(String name) {
if (name == null) {
return null;
}
var matcher = LETTER.matcher(name);
if (matcher.find()) {
String result = matcher.replaceAll("");
// if the name was "<nonlatin text> (<latin description)"
// or "<nonlatin text> - <latin description>"
// then remove any of those extra characters now
result = EMPTY_PARENS.matcher(result).replaceAll("");
result = LEADING_TRAILING_JUNK.matcher(result).replaceAll("");
return WHITESPACE.matcher(result).replaceAll(" ");
}
return name.trim();
}
/**
* Returns a map with default name attributes (name, name_en, name_de, name:latin, name:nonlatin, name_int) that every
* element should have, derived from name, int_name, name:en, and name:de tags on the input element.
*
* <ul>
* <li>name is the original name value from the element</li>
* <li>name_en is the original name:en value from the element, or name if missing</li>
* <li>name_de is the original name:de value from the element, or name/ name_en if missing</li>
* <li>name:latin is the first of name, int_name, or any name: attribute that contains only latin characters</li>
* <li>name:nonlatin is any nonlatin part of name if present</li>
* <li>name_int is the first of int_name name:en name:latin name</li>
* </ul>
*/
public static Map<String, Object> getNamesWithoutTranslations(Map<String, Object> tags) {
return getNames(tags, null);
}
/**
* Returns a map with default name attributes that {@link #getNamesWithoutTranslations(Map)} adds, but also
* translations for every language that {@code translations} is configured to handle.
*/
public static Map<String, Object> getNames(Map<String, Object> tags, Translations translations) {
Map<String, Object> result = new HashMap<>();
String name = string(tags.get("name"));
String intName = string(tags.get("int_name"));
String nameEn = string(tags.get("name:en"));
String nameDe = string(tags.get("name:de"));
boolean isLatin = containsOnlyLatinCharacters(name);
String latin = isLatin ? name
: Stream.concat(Stream.of(nameEn, intName, nameDe), getAllNameTranslationsBesidesEnglishAndGerman(tags))
.filter(LanguageUtils::containsOnlyLatinCharacters)
.findFirst().orElse(null);
if (latin == null && translations != null && translations.getShouldTransliterate()) {
latin = transliteratedName(tags);
}
String nonLatin = isLatin ? null : removeLatinCharacters(name);
if (coalesce(nonLatin, "").equals(latin)) {
nonLatin = null;
}
putIfNotEmpty(result, "name", name);
putIfNotEmpty(result, "name_en", coalesce(nameEn, name));
putIfNotEmpty(result, "name_de", coalesce(nameDe, name, nameEn));
putIfNotEmpty(result, "name:latin", latin);
putIfNotEmpty(result, "name:nonlatin", nonLatin);
putIfNotEmpty(result, "name_int", coalesce(
intName,
nameEn,
latin,
name
));
if (translations != null) {
translations.addTranslations(result, tags);
}
return result;
}
private static Stream<String> getAllNameTranslationsBesidesEnglishAndGerman(Map<String, Object> tags) {
return tags.entrySet().stream()
.filter(e -> {
String key = e.getKey();
return key.startsWith("name:") && !EN_DE_NAME_KEYS.contains(key);
})
.map(Map.Entry::getValue)
.map(LanguageUtils::string);
}
}

Wyświetl plik

@ -1,73 +0,0 @@
package com.onthegomap.planetiler.basemap.util;
import com.onthegomap.planetiler.util.Parse;
import java.util.Map;
/**
* Common utilities for working with data and the OpenMapTiles schema in {@code layers} implementations.
*/
public class Utils {
public static <T> T coalesce(T a, T b) {
return a != null ? a : b;
}
public static <T> T coalesce(T a, T b, T c) {
return a != null ? a : b != null ? b : c;
}
public static <T> T coalesce(T a, T b, T c, T d) {
return a != null ? a : b != null ? b : c != null ? c : d;
}
public static <T> T coalesce(T a, T b, T c, T d, T e) {
return a != null ? a : b != null ? b : c != null ? c : d != null ? d : e;
}
public static <T> T coalesce(T a, T b, T c, T d, T e, T f) {
return a != null ? a : b != null ? b : c != null ? c : d != null ? d : e != null ? e : f;
}
/** Returns {@code a} or {@code nullValue} if {@code a} is null. */
public static <T> T nullIf(T a, T nullValue) {
return nullValue.equals(a) ? null : a;
}
/** Returns {@code a}, or null if {@code a} is "". */
public static String nullIfEmpty(String a) {
return (a == null || a.isEmpty()) ? null : a;
}
/** Returns true if {@code a} is null, or its {@link Object#toString()} value is "". */
public static boolean nullOrEmpty(Object a) {
return a == null || a.toString().isEmpty();
}
/** Returns a map with {@code ele} (meters) and {ele_ft} attributes from an elevation in meters. */
public static Map<String, Object> elevationTags(int meters) {
return Map.of(
"ele", meters,
"ele_ft", (int) Math.round(meters * 3.2808399)
);
}
/**
* Returns a map with {@code ele} (meters) and {ele_ft} attributes from an elevation string in meters, if {@code
* meters} can be parsed as a valid number.
*/
public static Map<String, Object> elevationTags(String meters) {
Integer ele = Parse.parseIntSubstring(meters);
return ele == null ? Map.of() : elevationTags(ele);
}
/** Returns "bridge" or "tunnel" string used for "brunnel" attribute by OpenMapTiles schema. */
public static String brunnel(boolean isBridge, boolean isTunnel) {
return brunnel(isBridge, isTunnel, false);
}
/** Returns "bridge" or "tunnel" or "ford" string used for "brunnel" attribute by OpenMapTiles schema. */
public static String brunnel(boolean isBridge, boolean isTunnel, boolean isFord) {
return isBridge ? "bridge" : isTunnel ? "tunnel" : isFord ? "ford" : null;
}
}

Wyświetl plik

@ -1,38 +0,0 @@
package com.onthegomap.planetiler.basemap;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.Wikidata;
import java.util.List;
import org.junit.jupiter.api.Test;
public class BasemapProfileTest {
private final Wikidata.WikidataTranslations wikidataTranslations = new Wikidata.WikidataTranslations();
private final Translations translations = Translations.defaultProvider(List.of("en", "es", "de"))
.addTranslationProvider(wikidataTranslations);
private final BasemapProfile profile = new BasemapProfile(translations, PlanetilerConfig.defaults(),
Stats.inMemory());
@Test
public void testCaresAboutWikidata() {
var node = new OsmElement.Node(1, 1, 1);
node.setTag("aeroway", "gate");
assertTrue(profile.caresAboutWikidataTranslation(node));
node.setTag("aeroway", "other");
assertFalse(profile.caresAboutWikidataTranslation(node));
}
@Test
public void testDoesntCareAboutWikidataForRoads() {
var way = new OsmElement.Way(1);
way.setTag("highway", "footway");
assertFalse(profile.caresAboutWikidataTranslation(way));
}
}

Wyświetl plik

@ -1,225 +0,0 @@
package com.onthegomap.planetiler.basemap;
import static com.onthegomap.planetiler.TestUtils.assertContains;
import static com.onthegomap.planetiler.TestUtils.assertFeatureNear;
import static com.onthegomap.planetiler.basemap.util.VerifyMonaco.MONACO_BOUNDS;
import static com.onthegomap.planetiler.util.Gzip.gunzip;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
import com.onthegomap.planetiler.TestUtils;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.util.VerifyMonaco;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.mbtiles.Mbtiles;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.io.TempDir;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
/**
* End-to-end tests for basemap generation.
* <p>
* Generates an entire map for the smallest openstreetmap extract available (Monaco) and asserts that expected output
* features exist
*/
public class BasemapTest {
@TempDir
static Path tmpDir;
private static Mbtiles mbtiles;
@BeforeAll
public static void runPlanetiler() throws Exception {
Path dbPath = tmpDir.resolve("output.mbtiles");
BasemapMain.run(Arguments.of(
// Override input source locations
"osm_path", TestUtils.pathToResource("monaco-latest.osm.pbf"),
"natural_earth_path", TestUtils.pathToResource("natural_earth_vector.sqlite.zip"),
"water_polygons_path", TestUtils.pathToResource("water-polygons-split-3857.zip"),
// no centerlines in monaco - so fake it out with an empty source
"lake_centerlines_path", TestUtils.pathToResource("water-polygons-split-3857.zip"),
// Override temp dir location
"tmp", tmpDir.toString(),
// Override output location
"mbtiles", dbPath.toString()
));
mbtiles = Mbtiles.newReadOnlyDatabase(dbPath);
}
@AfterAll
public static void close() throws IOException {
mbtiles.close();
}
@Test
public void testMetadata() {
Map<String, String> metadata = mbtiles.metadata().getAll();
assertEquals("OpenMapTiles", metadata.get("name"));
assertEquals("0", metadata.get("minzoom"));
assertEquals("14", metadata.get("maxzoom"));
assertEquals("baselayer", metadata.get("type"));
assertEquals("pbf", metadata.get("format"));
assertEquals("7.40921,43.72335,7.44864,43.75169", metadata.get("bounds"));
assertEquals("7.42892,43.73752,14", metadata.get("center"));
assertContains("openmaptiles.org", metadata.get("description"));
assertContains("openmaptiles.org", metadata.get("attribution"));
assertContains("www.openstreetmap.org/copyright", metadata.get("attribution"));
}
@Test
public void ensureValidGeometries() throws Exception {
Set<Mbtiles.TileEntry> parsedTiles = TestUtils.getAllTiles(mbtiles);
for (var tileEntry : parsedTiles) {
var decoded = VectorTile.decode(gunzip(tileEntry.bytes()));
for (VectorTile.Feature feature : decoded) {
TestUtils.validateGeometry(feature.geometry().decode());
}
}
}
@Test
public void testContainsOceanPolyons() {
assertFeatureNear(mbtiles, "water", Map.of(
"class", "ocean"
), 7.4484, 43.70783, 0, 14);
}
@Test
public void testContainsCountryName() {
assertFeatureNear(mbtiles, "place", Map.of(
"class", "country",
"iso_a2", "MC",
"name", "Monaco"
), 7.42769, 43.73235, 2, 14);
}
@Test
public void testContainsSuburb() {
assertFeatureNear(mbtiles, "place", Map.of(
"name", "Les Moneghetti",
"class", "suburb"
), 7.41746, 43.73638, 11, 14);
}
@Test
public void testContainsBuildings() {
assertFeatureNear(mbtiles, "building", Map.of(), 7.41919, 43.73401, 13, 14);
assertNumFeatures("building", Map.of(), 14, 1316, Polygon.class);
assertNumFeatures("building", Map.of(), 13, 196, Polygon.class);
}
@Test
public void testContainsHousenumber() {
assertFeatureNear(mbtiles, "housenumber", Map.of(
"housenumber", "27"
), 7.42117, 43.73652, 14, 14);
assertNumFeatures("housenumber", Map.of(), 14, 274, Point.class);
}
@Test
public void testBoundary() {
assertFeatureNear(mbtiles, "boundary", Map.of(
"admin_level", 2L,
"maritime", 1L,
"disputed", 0L
), 7.41884, 43.72396, 4, 14);
}
@Test
public void testAeroway() {
assertNumFeatures("aeroway", Map.of(
"class", "heliport"
), 14, 1, Polygon.class);
assertNumFeatures("aeroway", Map.of(
"class", "helipad"
), 14, 11, Polygon.class);
}
@Test
public void testLandcover() {
assertNumFeatures("landcover", Map.of(
"class", "grass",
"subclass", "park"
), 14, 20, Polygon.class);
assertNumFeatures("landcover", Map.of(
"class", "grass",
"subclass", "garden"
), 14, 33, Polygon.class);
}
@Test
public void testPoi() {
assertNumFeatures("poi", Map.of(
"class", "restaurant",
"subclass", "restaurant"
), 14, 217, Point.class);
assertNumFeatures("poi", Map.of(
"class", "art_gallery",
"subclass", "artwork"
), 14, 132, Point.class);
}
@Test
public void testLanduse() {
assertNumFeatures("landuse", Map.of(
"class", "residential"
), 14, 8, Polygon.class);
assertNumFeatures("landuse", Map.of(
"class", "hospital"
), 14, 4, Polygon.class);
}
@Test
public void testTransportation() {
assertNumFeatures("transportation", Map.of(
"class", "path",
"subclass", "footway"
), 14, 909, LineString.class);
assertNumFeatures("transportation", Map.of(
"class", "primary"
), 14, 170, LineString.class);
}
@Test
public void testTransportationName() {
assertNumFeatures("transportation_name", Map.of(
"name", "Boulevard du Larvotto",
"class", "primary"
), 14, 12, LineString.class);
}
@Test
public void testWaterway() {
assertNumFeatures("waterway", Map.of(
"class", "stream"
), 14, 6, LineString.class);
}
@TestFactory
public Stream<DynamicTest> testVerifyChecks() {
return VerifyMonaco.verify(mbtiles).results().stream()
.map(check -> dynamicTest(check.name(), () -> {
check.error().ifPresent(Assertions::fail);
}));
}
private static void assertNumFeatures(String layer, Map<String, Object> attrs, int zoom,
int expected, Class<? extends Geometry> clazz) {
TestUtils.assertNumFeatures(mbtiles, layer, zoom, attrs, MONACO_BOUNDS, expected, clazz);
}
}

Wyświetl plik

@ -1,227 +0,0 @@
package com.onthegomap.planetiler.basemap;
import static com.onthegomap.planetiler.basemap.Generate.parseYaml;
import static com.onthegomap.planetiler.expression.Expression.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
import com.fasterxml.jackson.databind.JsonNode;
import com.onthegomap.planetiler.expression.Expression;
import com.onthegomap.planetiler.expression.MultiExpression;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;
public class GenerateTest {
@Test
public void testParseSimple() {
MultiExpression<String> parsed = Generate.generateFieldMapping(parseYaml("""
output:
key: value
key2:
- value2
- '%value3%'
"""));
assertEquals(MultiExpression.of(List.of(
MultiExpression.entry("output", or(
matchAny("key", "value"),
matchAny("key2", "value2", "%value3%")
))
)), parsed);
}
@Test
public void testParseAnd() {
MultiExpression<String> parsed = Generate.generateFieldMapping(parseYaml("""
output:
__AND__:
key1: val1
key2: val2
"""));
assertEquals(MultiExpression.of(List.of(
MultiExpression.entry("output", and(
matchAny("key1", "val1"),
matchAny("key2", "val2")
))
)), parsed);
}
@Test
public void testParseAndWithOthers() {
MultiExpression<String> parsed = Generate.generateFieldMapping(parseYaml("""
output:
- key0: val0
- __AND__:
key1: val1
key2: val2
"""));
assertEquals(MultiExpression.of(List.of(
MultiExpression.entry("output", or(
matchAny("key0", "val0"),
and(
matchAny("key1", "val1"),
matchAny("key2", "val2")
)
))
)), parsed);
}
@Test
public void testParseAndContainingOthers() {
MultiExpression<String> parsed = Generate.generateFieldMapping(parseYaml("""
output:
__AND__:
- key1: val1
- __OR__:
key2: val2
key3: val3
"""));
assertEquals(MultiExpression.of(List.of(
MultiExpression.entry("output", and(
matchAny("key1", "val1"),
or(
matchAny("key2", "val2"),
matchAny("key3", "val3")
)
))
)), parsed);
}
@Test
public void testParseContainsKey() {
MultiExpression<String> parsed = Generate.generateFieldMapping(parseYaml("""
output:
key1: val1
key2:
"""));
assertEquals(MultiExpression.of(List.of(
MultiExpression.entry("output", or(
matchAny("key1", "val1"),
matchField("key2")
))
)), parsed);
}
@TestFactory
public Stream<DynamicTest> testParseImposm3Mapping() {
record TestCase(String name, String mapping, String require, String reject, Expression expected) {
TestCase(String mapping, Expression expected) {
this(mapping, mapping, null, null, expected);
}
}
return Stream.of(
new TestCase(
"key: val", matchAny("key", "val")
),
new TestCase(
"key: [val1, val2]", matchAny("key", "val1", "val2")
),
new TestCase(
"key: [\"__any__\"]", matchField("key")
),
new TestCase("reject",
"key: val",
"mustkey: mustval",
null,
and(
matchAny("key", "val"),
matchAny("mustkey", "mustval")
)
),
new TestCase("require",
"key: val",
null,
"badkey: badval",
and(
matchAny("key", "val"),
not(matchAny("badkey", "badval"))
)
),
new TestCase("require and reject complex",
"""
key: val
key2:
- val1
- val2
""",
"""
mustkey: mustval
mustkey2:
- mustval1
- mustval2
""",
"""
notkey: notval
notkey2:
- notval1
- notval2
""",
and(
or(
matchAny("key", "val"),
matchAny("key2", "val1", "val2")
),
matchAny("mustkey", "mustval"),
matchAny("mustkey2", "mustval1", "mustval2"),
not(matchAny("notkey", "notval")),
not(matchAny("notkey2", "notval1", "notval2"))
)
)
).map(test -> dynamicTest(test.name, () -> {
Expression parsed = Generate
.parseImposm3MappingExpression("point", parseYaml(test.mapping), new Generate.Imposm3Filters(
parseYaml(test.reject),
parseYaml(test.require)
));
assertEquals(test.expected, parsed.replace(matchType("point"), TRUE).simplify());
}));
}
@Test
public void testTypeMappingTopLevelType() {
Expression parsed = Generate
.parseImposm3MappingExpression("point", parseYaml("""
key: val
"""), new Generate.Imposm3Filters(null, null));
assertEquals(and(
matchAny("key", "val"),
matchType("point")
), parsed);
}
@Test
public void testTypeMappings() {
Map<String, JsonNode> props = new LinkedHashMap<>();
props.put("points", parseYaml("""
key: val
"""));
props.put("polygons", parseYaml("""
key2: val2
"""));
Expression parsed = Generate
.parseImposm3MappingExpression(new Generate.Imposm3Table(
"geometry",
false,
List.of(),
null,
null,
props
));
assertEquals(or(
and(
matchAny("key", "val"),
matchType("point")
),
and(
matchAny("key2", "val2"),
matchType("polygon")
)
), parsed);
}
}

Wyświetl plik

@ -1,214 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.assertSubmap;
import static com.onthegomap.planetiler.TestUtils.newLineString;
import static com.onthegomap.planetiler.TestUtils.newPoint;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.OSM_SOURCE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.TestUtils;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SimpleFeature;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.reader.osm.OsmReader;
import com.onthegomap.planetiler.reader.osm.OsmRelationInfo;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.Wikidata;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.StreamSupport;
public abstract class AbstractLayerTest {
final Wikidata.WikidataTranslations wikidataTranslations = new Wikidata.WikidataTranslations();
final Translations translations = Translations.defaultProvider(List.of("en", "es", "de"))
.addTranslationProvider(wikidataTranslations);
final PlanetilerConfig params = PlanetilerConfig.defaults();
final BasemapProfile profile = new BasemapProfile(translations, PlanetilerConfig.defaults(),
Stats.inMemory());
final Stats stats = Stats.inMemory();
final FeatureCollector.Factory featureCollectorFactory = new FeatureCollector.Factory(params, stats);
static void assertFeatures(int zoom, List<Map<String, Object>> expected, Iterable<FeatureCollector.Feature> actual) {
List<FeatureCollector.Feature> actualList = StreamSupport.stream(actual.spliterator(), false).toList();
assertEquals(expected.size(), actualList.size(), () -> "size: " + actualList);
for (int i = 0; i < expected.size(); i++) {
assertSubmap(expected.get(i), TestUtils.toMap(actualList.get(i), zoom));
}
}
static void assertDescending(int... vals) {
for (int i = 1; i < vals.length; i++) {
if (vals[i - 1] < vals[i]) {
fail("element at " + (i - 1) + " is less than element at " + i);
}
}
}
static void assertAscending(int... vals) {
for (int i = 1; i < vals.length; i++) {
if (vals[i - 1] > vals[i]) {
fail(
Arrays.toString(vals) +
System.lineSeparator() + "element at " + (i - 1) + " (" + vals[i - 1] + ") is greater than element at " + i
+ " (" + vals[i] + ")");
}
}
}
VectorTile.Feature pointFeature(String layer, Map<String, Object> map, int group) {
return new VectorTile.Feature(
layer,
1,
VectorTile.encodeGeometry(newPoint(0, 0)),
new HashMap<>(map),
group
);
}
FeatureCollector process(SourceFeature feature) {
var collector = featureCollectorFactory.get(feature);
profile.processFeature(feature, collector);
return collector;
}
void assertCoversZoomRange(int minzoom, int maxzoom, String layer, FeatureCollector... featureCollectors) {
Map<?, ?>[] zooms = new Map[Math.max(15, maxzoom + 1)];
for (var features : featureCollectors) {
for (var feature : features) {
if (feature.getLayer().equals(layer)) {
for (int zoom = feature.getMinZoom(); zoom <= feature.getMaxZoom(); zoom++) {
Map<String, Object> map = TestUtils.toMap(feature, zoom);
if (zooms[zoom] != null) {
fail("Multiple features at z" + zoom + ":" + System.lineSeparator() + zooms[zoom] + "\n" + map);
}
zooms[zoom] = map;
}
}
}
}
for (int zoom = 0; zoom <= 14; zoom++) {
if (zoom < minzoom || zoom > maxzoom) {
if (zooms[zoom] != null) {
fail("Expected nothing at z" + zoom + " but found: " + zooms[zoom]);
}
} else {
if (zooms[zoom] == null) {
fail("No feature at z" + zoom);
}
}
}
}
SourceFeature pointFeature(Map<String, Object> props) {
return SimpleFeature.create(
newPoint(0, 0),
new HashMap<>(props),
OSM_SOURCE,
null,
0
);
}
SourceFeature lineFeature(Map<String, Object> props) {
return SimpleFeature.create(
newLineString(0, 0, 1, 1),
new HashMap<>(props),
OSM_SOURCE,
null,
0
);
}
SourceFeature polygonFeatureWithArea(double area, Map<String, Object> props) {
return SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(area))),
new HashMap<>(props),
OSM_SOURCE,
null,
0
);
}
SourceFeature polygonFeature(Map<String, Object> props) {
return polygonFeatureWithArea(1, props);
}
protected SimpleFeature lineFeatureWithRelation(List<OsmRelationInfo> relationInfos,
Map<String, Object> map) {
return SimpleFeature.createFakeOsmFeature(
newLineString(0, 0, 1, 1),
map,
OSM_SOURCE,
null,
0,
(relationInfos == null ? List.<OsmRelationInfo>of() : relationInfos).stream()
.map(r -> new OsmReader.RelationMember<>("", r)).toList()
);
}
protected void testMergesLinestrings(Map<String, Object> attrs, String layer,
double length, int zoom) throws GeometryException {
var line1 = new VectorTile.Feature(
layer,
1,
VectorTile.encodeGeometry(newLineString(0, 0, length / 2, 0)),
attrs,
0
);
var line2 = new VectorTile.Feature(
layer,
1,
VectorTile.encodeGeometry(newLineString(length / 2, 0, length, 0)),
attrs,
0
);
var connected = new VectorTile.Feature(
layer,
1,
VectorTile.encodeGeometry(newLineString(0, 0, length, 0)),
attrs,
0
);
assertEquals(
List.of(connected),
profile.postProcessLayerFeatures(layer, zoom, List.of(line1, line2))
);
}
protected void testDoesNotMergeLinestrings(Map<String, Object> attrs, String layer,
double length, int zoom) throws GeometryException {
var line1 = new VectorTile.Feature(
layer,
1,
VectorTile.encodeGeometry(newLineString(0, 0, length / 2, 0)),
attrs,
0
);
var line2 = new VectorTile.Feature(
layer,
1,
VectorTile.encodeGeometry(newLineString(length / 2, 0, length, 0)),
attrs,
0
);
assertEquals(
List.of(line1, line2),
profile.postProcessLayerFeatures(layer, zoom, List.of(line1, line2))
);
}
}

Wyświetl plik

@ -1,121 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class AerodromeLabelTest extends AbstractLayerTest {
@BeforeEach
public void setupWikidataTranslation() {
wikidataTranslations.put(123, "es", "es wd name");
}
@Test
public void testHappyPathPoint() {
assertFeatures(14, List.of(Map.of(
"class", "international",
"ele", 100,
"ele_ft", 328,
"name", "osm name",
"name:es", "es wd name",
"_layer", "aerodrome_label",
"_type", "point",
"_minzoom", 10,
"_maxzoom", 14,
"_buffer", 64d
)), process(pointFeature(Map.of(
"aeroway", "aerodrome",
"name", "osm name",
"wikidata", "Q123",
"ele", "100",
"aerodrome", "international",
"iata", "123",
"icao", "1234"
))));
}
@Test
public void testInternational() {
assertFeatures(14, List.of(Map.of(
"class", "international",
"_layer", "aerodrome_label"
)), process(pointFeature(Map.of(
"aeroway", "aerodrome",
"aerodrome_type", "international"
))));
}
@Test
public void testPublic() {
assertFeatures(14, List.of(Map.of(
"class", "public",
"_layer", "aerodrome_label"
)), process(pointFeature(Map.of(
"aeroway", "aerodrome",
"aerodrome_type", "public airport"
))));
assertFeatures(14, List.of(Map.of(
"class", "public",
"_layer", "aerodrome_label"
)), process(pointFeature(Map.of(
"aeroway", "aerodrome",
"aerodrome_type", "civil"
))));
}
@Test
public void testMilitary() {
assertFeatures(14, List.of(Map.of(
"class", "military",
"_layer", "aerodrome_label"
)), process(pointFeature(Map.of(
"aeroway", "aerodrome",
"aerodrome_type", "military airport"
))));
assertFeatures(14, List.of(Map.of(
"class", "military",
"_layer", "aerodrome_label"
)), process(pointFeature(Map.of(
"aeroway", "aerodrome",
"military", "airfield"
))));
}
@Test
public void testPrivate() {
assertFeatures(14, List.of(Map.of(
"class", "private",
"_layer", "aerodrome_label"
)), process(pointFeature(Map.of(
"aeroway", "aerodrome",
"aerodrome_type", "private"
))));
assertFeatures(14, List.of(Map.of(
"class", "private",
"_layer", "aerodrome_label"
)), process(pointFeature(Map.of(
"aeroway", "aerodrome",
"aerodrome", "private"
))));
}
@Test
public void testOther() {
assertFeatures(14, List.of(Map.of(
"class", "other",
"_layer", "aerodrome_label"
)), process(pointFeature(Map.of(
"aeroway", "aerodrome"
))));
}
@Test
public void testIgnoreNonPoints() {
assertFeatures(14, List.of(), process(lineFeature(Map.of(
"aeroway", "aerodrome"
))));
}
}

Wyświetl plik

@ -1,92 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class AerowayTest extends AbstractLayerTest {
@Test
public void aerowayGate() {
assertFeatures(14, List.of(Map.of(
"class", "gate",
"ref", "123",
"_layer", "aeroway",
"_type", "point",
"_minzoom", 14,
"_maxzoom", 14,
"_buffer", 4d
)), process(pointFeature(Map.of(
"aeroway", "gate",
"ref", "123"
))));
assertFeatures(14, List.of(), process(lineFeature(Map.of(
"aeroway", "gate"
))));
assertFeatures(14, List.of(), process(polygonFeature(Map.of(
"aeroway", "gate"
))));
}
@Test
public void aerowayLine() {
assertFeatures(14, List.of(Map.of(
"class", "runway",
"ref", "123",
"_layer", "aeroway",
"_type", "line",
"_minzoom", 10,
"_maxzoom", 14,
"_buffer", 4d
)), process(lineFeature(Map.of(
"aeroway", "runway",
"ref", "123"
))));
assertFeatures(14, List.of(), process(pointFeature(Map.of(
"aeroway", "runway"
))));
}
@Test
public void aerowayPolygon() {
assertFeatures(14, List.of(Map.of(
"class", "runway",
"ref", "123",
"_layer", "aeroway",
"_type", "polygon",
"_minzoom", 10,
"_maxzoom", 14,
"_buffer", 4d
)), process(polygonFeature(Map.of(
"aeroway", "runway",
"ref", "123"
))));
assertFeatures(14, List.of(Map.of(
"class", "runway",
"ref", "123",
"_layer", "aeroway",
"_type", "polygon"
)), process(polygonFeature(Map.of(
"area:aeroway", "runway",
"ref", "123"
))));
assertFeatures(14, List.of(Map.of(
"class", "heliport",
"ref", "123",
"_layer", "aeroway",
"_type", "polygon"
)), process(polygonFeature(Map.of(
"aeroway", "heliport",
"ref", "123"
))));
assertFeatures(14, List.of(), process(lineFeature(Map.of(
"aeroway", "heliport"
))));
assertFeatures(14, List.of(), process(pointFeature(Map.of(
"aeroway", "heliport"
))));
}
}

Wyświetl plik

@ -1,622 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.newLineString;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.NATURAL_EARTH_SOURCE;
import static com.onthegomap.planetiler.basemap.BasemapProfile.OSM_SOURCE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SimpleFeature;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.reader.osm.OsmReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
public class BoundaryTest extends AbstractLayerTest {
@Test
public void testNaturalEarthCountryBoundaries() {
assertCoversZoomRange(
0, 4, "boundary",
process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_110m_admin_0_boundary_lines_land",
0
)),
process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_50m_admin_0_boundary_lines_land",
1
)),
process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_0_boundary_lines_land",
2
))
);
assertFeatures(0, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 0,
"maritime", 0,
"admin_level", 2,
"_minzoom", 0,
"_buffer", 4d
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"featurecla", "International boundary (verify)"
),
NATURAL_EARTH_SOURCE,
"ne_110m_admin_0_boundary_lines_land",
0
)));
assertFeatures(0, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 1,
"maritime", 0,
"admin_level", 2,
"_buffer", 4d
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"featurecla", "Disputed (please verify)"
),
NATURAL_EARTH_SOURCE,
"ne_110m_admin_0_boundary_lines_land",
0
)));
assertFeatures(0, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"admin_level", 2
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"featurecla", "International boundary (verify)"
),
NATURAL_EARTH_SOURCE,
"ne_50m_admin_0_boundary_lines_land",
0
)));
assertFeatures(0, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"admin_level", 2
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"featurecla", "International boundary (verify)"
),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_0_boundary_lines_land",
0
)));
assertFeatures(0, List.of(), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"featurecla", "Lease Limit"
),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_0_boundary_lines_land",
0
)));
}
@Test
public void testNaturalEarthStateBoundaries() {
assertFeatures(0, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 0,
"maritime", 0,
"admin_level", 4,
"_minzoom", 1,
"_maxzoom", 4,
"_buffer", 4d
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"min_zoom", 7d
),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_1_states_provinces_lines",
0
)));
assertFeatures(0, List.of(), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"min_zoom", 7.1d
),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_1_states_provinces_lines",
0
)));
assertFeatures(0, List.of(), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_1_states_provinces_lines",
0
)));
}
@Test
public void testMergesDisconnectedLineFeatures() throws GeometryException {
testMergesLinestrings(Map.of("admin_level", 2), Boundary.LAYER_NAME, 10, 13);
testMergesLinestrings(Map.of("admin_level", 2), Boundary.LAYER_NAME, 10, 14);
}
@Test
public void testOsmTownBoundary() {
var relation = new OsmElement.Relation(1);
relation.setTag("type", "boundary");
relation.setTag("admin_level", "10");
relation.setTag("boundary", "administrative");
assertFeatures(14, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 0,
"maritime", 0,
"admin_level", 10,
"_minzoom", 12,
"_maxzoom", 14,
"_buffer", 4d,
"_minpixelsize", 0d
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation),
Map.of())));
}
@Test
public void testOsmBoundaryLevelTwoAndAHalf() {
var relation = new OsmElement.Relation(1);
relation.setTag("type", "boundary");
relation.setTag("admin_level", "2.5");
relation.setTag("boundary", "administrative");
assertFeatures(14, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 0,
"maritime", 0,
"admin_level", 3,
"_minzoom", 5,
"_maxzoom", 14,
"_buffer", 4d,
"_minpixelsize", 0d
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation),
Map.of())));
}
@Test
public void testOsmBoundaryTakesMinAdminLevel() {
var relation1 = new OsmElement.Relation(1);
relation1.setTag("type", "boundary");
relation1.setTag("admin_level", "10");
relation1.setTag("name", "Town");
relation1.setTag("boundary", "administrative");
var relation2 = new OsmElement.Relation(2);
relation2.setTag("type", "boundary");
relation2.setTag("admin_level", "4");
relation2.setTag("name", "State");
relation2.setTag("boundary", "administrative");
assertFeatures(14, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 0,
"maritime", 0,
"admin_level", 4
)), process(lineFeatureWithRelation(
Stream.concat(
profile.preprocessOsmRelation(relation2).stream(),
profile.preprocessOsmRelation(relation1).stream()
).toList(),
Map.of())));
}
@Test
public void testOsmBoundarySetsMaritimeFromWay() {
var relation1 = new OsmElement.Relation(1);
relation1.setTag("type", "boundary");
relation1.setTag("admin_level", "10");
relation1.setTag("boundary", "administrative");
assertFeatures(14, List.of(Map.of(
"maritime", 1
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation1),
Map.of(
"maritime", "yes"
))
));
assertFeatures(14, List.of(Map.of(
"maritime", 1
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation1),
Map.of(
"natural", "coastline"
))
));
assertFeatures(14, List.of(Map.of(
"maritime", 1
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation1),
Map.of(
"boundary_type", "maritime"
))
));
}
@Test
public void testIgnoresProtectedAreas() {
var relation1 = new OsmElement.Relation(1);
relation1.setTag("type", "boundary");
relation1.setTag("admin_level", "10");
relation1.setTag("boundary", "protected_area");
assertNull(profile.preprocessOsmRelation(relation1));
}
@Test
public void testIgnoresProtectedAdminLevelOver10() {
var relation1 = new OsmElement.Relation(1);
relation1.setTag("type", "boundary");
relation1.setTag("admin_level", "11");
relation1.setTag("boundary", "administrative");
assertNull(profile.preprocessOsmRelation(relation1));
}
@Test
public void testOsmBoundaryDisputed() {
var relation = new OsmElement.Relation(1);
relation.setTag("type", "boundary");
relation.setTag("admin_level", "5");
relation.setTag("boundary", "administrative");
relation.setTag("disputed", "yes");
relation.setTag("name", "Border A - B");
relation.setTag("claimed_by", "A");
assertFeatures(14, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed_name", "BorderA-B",
"claimed_by", "A",
"disputed", 1,
"maritime", 0,
"admin_level", 5
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation),
Map.of())
));
}
@Test
public void testOsmBoundaryDisputedFromWay() {
var relation = new OsmElement.Relation(1);
relation.setTag("type", "boundary");
relation.setTag("admin_level", "5");
relation.setTag("boundary", "administrative");
assertFeatures(14, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 1,
"maritime", 0,
"admin_level", 5
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation),
Map.of(
"disputed", "yes"
))
));
assertFeatures(14, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 1,
"maritime", 0,
"admin_level", 5,
"claimed_by", "A",
"disputed_name", "AB"
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation),
Map.of(
"disputed", "yes",
"claimed_by", "A",
"name", "AB"
))
));
}
@Test
public void testCountryBoundaryEmittedIfNoName() {
var relation = new OsmElement.Relation(1);
relation.setTag("type", "boundary");
relation.setTag("admin_level", "2");
relation.setTag("boundary", "administrative");
assertFeatures(14, List.of(Map.of(
"_layer", "boundary",
"_type", "line",
"disputed", 0,
"maritime", 0,
"admin_level", 2
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relation),
Map.of())
));
}
@Test
public void testCountryLeftRightName() {
var country1 = new OsmElement.Relation(1);
country1.setTag("type", "boundary");
country1.setTag("admin_level", "2");
country1.setTag("boundary", "administrative");
country1.setTag("ISO3166-1:alpha3", "C1");
var country2 = new OsmElement.Relation(2);
country2.setTag("type", "boundary");
country2.setTag("admin_level", "2");
country2.setTag("boundary", "administrative");
country2.setTag("ISO3166-1:alpha3", "C2");
// shared edge
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
newLineString(0, 0, 0, 10),
Map.of(),
OSM_SOURCE,
null,
3,
Stream.concat(
profile.preprocessOsmRelation(country1).stream(),
profile.preprocessOsmRelation(country2).stream()
).map(r -> new OsmReader.RelationMember<>("", r)).toList()
)
));
// other 2 edges of country 1
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
newLineString(0, 0, 5, 10),
Map.of(),
OSM_SOURCE,
null,
4,
profile.preprocessOsmRelation(country1).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)
));
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
newLineString(0, 10, 5, 10),
Map.of(),
OSM_SOURCE,
null,
4,
profile.preprocessOsmRelation(country1).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)
));
// other 2 edges of country 2
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
newLineString(0, 0, -5, 10),
Map.of(),
OSM_SOURCE,
null,
4,
profile.preprocessOsmRelation(country2).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)
));
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
newLineString(0, 10, -5, 10),
Map.of(),
OSM_SOURCE,
null,
4,
profile.preprocessOsmRelation(country2).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)
));
List<FeatureCollector.Feature> features = new ArrayList<>();
profile.finish(OSM_SOURCE, new FeatureCollector.Factory(params, stats), features::add);
assertEquals(3, features.size());
// ensure shared edge has country labels on right sides
var sharedEdge = features.stream()
.filter(c -> c.getAttrsAtZoom(0).containsKey("adm0_l") && c.getAttrsAtZoom(0).containsKey("adm0_r")).findFirst()
.get();
if (sharedEdge.getGeometry().getCoordinate().y == 0.5) { // going up
assertEquals("C1", sharedEdge.getAttrsAtZoom(0).get("adm0_r"));
assertEquals("C2", sharedEdge.getAttrsAtZoom(0).get("adm0_l"));
} else { // going down
assertEquals("C2", sharedEdge.getAttrsAtZoom(0).get("adm0_r"));
assertEquals("C1", sharedEdge.getAttrsAtZoom(0).get("adm0_l"));
}
var c1 = features.stream()
.filter(c -> c.getGeometry().getEnvelopeInternal().getMaxX() > 0.5).findFirst()
.get();
if (c1.getGeometry().getCoordinate().y == 0.5) { // going up
assertEquals("C1", c1.getAttrsAtZoom(0).get("adm0_l"));
} else { // going down
assertEquals("C1", c1.getAttrsAtZoom(0).get("adm0_r"));
}
var c2 = features.stream()
.filter(c -> c.getGeometry().getEnvelopeInternal().getMinX() < 0.5).findFirst()
.get();
if (c2.getGeometry().getCoordinate().y == 0.5) { // going up
assertEquals("C2", c2.getAttrsAtZoom(0).get("adm0_r"));
} else { // going down
assertEquals("C2", c2.getAttrsAtZoom(0).get("adm0_l"));
}
}
@Test
public void testCountryBoundaryNotClosed() {
var country1 = new OsmElement.Relation(1);
country1.setTag("type", "boundary");
country1.setTag("admin_level", "2");
country1.setTag("boundary", "administrative");
country1.setTag("ISO3166-1:alpha3", "C1");
// shared edge
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
newLineString(0, 0, 0, 10, 5, 5),
Map.of(),
OSM_SOURCE,
null,
3,
profile.preprocessOsmRelation(country1).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)));
List<FeatureCollector.Feature> features = new ArrayList<>();
profile.finish(OSM_SOURCE, new FeatureCollector.Factory(params, stats), features::add);
assertFeatures(0, List.of(Map.of(
"adm0_r", "<null>",
"adm0_l", "<null>",
"maritime", 0,
"disputed", 0,
"admin_level", 2,
"_layer", "boundary"
)), features);
}
@Test
public void testNestedCountry() throws GeometryException {
var country1 = new OsmElement.Relation(1);
country1.setTag("type", "boundary");
country1.setTag("admin_level", "2");
country1.setTag("boundary", "administrative");
country1.setTag("ISO3166-1:alpha3", "C1");
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
GeoUtils.polygonToLineString(rectangle(0, 10)),
Map.of(),
OSM_SOURCE,
null,
3,
profile.preprocessOsmRelation(country1).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)));
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
GeoUtils.polygonToLineString(rectangle(1, 9)),
Map.of(),
OSM_SOURCE,
null,
3,
profile.preprocessOsmRelation(country1).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)));
List<FeatureCollector.Feature> features = new ArrayList<>();
profile.finish(OSM_SOURCE, new FeatureCollector.Factory(params, stats), features::add);
assertFeatures(0, List.of(Map.of(
"adm0_l", "C1",
"adm0_r", "<null>"
), Map.of(
"adm0_r", "C1",
"adm0_l", "<null>"
)), features);
}
@Test
public void testDontLabelBadPolygon() {
var country1 = new OsmElement.Relation(1);
country1.setTag("type", "boundary");
country1.setTag("admin_level", "2");
country1.setTag("boundary", "administrative");
country1.setTag("ISO3166-1:alpha3", "C1");
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
GeoUtils.worldToLatLonCoords(newLineString(0, 0, 0.1, 0, 0.1, 0.1, 0.02, 0.1, 0.02, -0.02)),
Map.of(),
OSM_SOURCE,
null,
3,
profile.preprocessOsmRelation(country1).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)));
List<FeatureCollector.Feature> features = new ArrayList<>();
profile.finish(OSM_SOURCE, new FeatureCollector.Factory(params, stats), features::add);
assertFeatures(0, List.of(Map.of(
"adm0_l", "<null>",
"adm0_r", "<null>"
)), features);
}
@Test
public void testIgnoreBadPolygonAndLabelGoodPart() throws GeometryException {
var country1 = new OsmElement.Relation(1);
country1.setTag("type", "boundary");
country1.setTag("admin_level", "2");
country1.setTag("boundary", "administrative");
country1.setTag("ISO3166-1:alpha3", "C1");
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
GeoUtils.worldToLatLonCoords(newLineString(0, 0, 0.1, 0, 0.1, 0.1, 0.2, 0.1, 0.2, -0.2)),
Map.of(),
OSM_SOURCE,
null,
3,
profile.preprocessOsmRelation(country1).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)));
assertFeatures(14, List.of(), process(SimpleFeature.createFakeOsmFeature(
GeoUtils.worldToLatLonCoords(GeoUtils.polygonToLineString(rectangle(0.2, 0.3))),
Map.of(),
OSM_SOURCE,
null,
3,
profile.preprocessOsmRelation(country1).stream().map(r -> new OsmReader.RelationMember<>("", r))
.toList()
)));
List<FeatureCollector.Feature> features = new ArrayList<>();
profile.finish(OSM_SOURCE, new FeatureCollector.Factory(params, stats), features::add);
assertFeatures(0, List.of(Map.of(
"adm0_l", "<null>",
"adm0_r", "<null>"
), Map.of(
"adm0_l", "<null>",
"adm0_r", "C1"
)), features);
}
}

Wyświetl plik

@ -1,171 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.OSM_SOURCE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SimpleFeature;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.reader.osm.OsmReader;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class BuildingTest extends AbstractLayerTest {
@Test
public void testBuilding() {
assertFeatures(13, List.of(Map.of(
"colour", "<null>",
"hide_3d", "<null>",
"_layer", "building",
"_type", "polygon",
"_minzoom", 13,
"_maxzoom", 14,
"_buffer", 4d,
"_minpixelsize", 0.1d
)), process(polygonFeature(Map.of(
"building", "yes"
))));
assertFeatures(13, List.of(Map.of(
"_layer", "building",
"_type", "polygon"
)), process(polygonFeature(Map.of(
"building:part", "yes"
))));
assertFeatures(13, List.of(), process(polygonFeature(Map.of(
"building", "no"
))));
}
@Test
public void testAirportBuildings() {
assertFeatures(13, List.of(Map.of(
"_layer", "building",
"_type", "polygon"
)), process(polygonFeature(Map.of(
"aeroway", "terminal"
))));
assertFeatures(13, List.of(Map.of(
"_layer", "building",
"_type", "polygon"
)), process(polygonFeature(Map.of(
"aeroway", "hangar"
))));
}
@Test
public void testRenderHeights() {
assertFeatures(13, List.of(Map.of(
"render_height", "<null>",
"render_min_height", "<null>"
)), process(polygonFeature(Map.of(
"building", "yes"
))));
assertFeatures(14, List.of(Map.of(
"render_height", 5,
"render_min_height", 0
)), process(polygonFeature(Map.of(
"building", "yes"
))));
assertFeatures(14, List.of(Map.of(
"render_height", 12,
"render_min_height", 3
)), process(polygonFeature(Map.of(
"building", "yes",
"building:min_height", "3",
"building:height", "12"
))));
assertFeatures(14, List.of(Map.of(
"render_height", 44,
"render_min_height", 10
)), process(polygonFeature(Map.of(
"building", "yes",
"building:min_level", "3",
"building:levels", "12"
))));
assertFeatures(14, List.of(), process(polygonFeature(Map.of(
"building", "yes",
"building:min_level", "1500",
"building:levels", "1500"
))));
}
@Test
public void testOutlineHides3d() {
var relation = new OsmElement.Relation(1);
relation.setTag("type", "building");
var relationInfos = profile.preprocessOsmRelation(relation).stream()
.map(i -> new OsmReader.RelationMember<>("outline", i)).toList();
assertFeatures(14, List.of(Map.of(
"_layer", "building",
"hide_3d", true
)), process(SimpleFeature.createFakeOsmFeature(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
Map.of(
"building", "yes"
),
OSM_SOURCE,
null,
0,
relationInfos
)));
}
@Test
public void testMergePolygonsZ13() throws GeometryException {
var poly1 = new VectorTile.Feature(
Building.LAYER_NAME,
1,
VectorTile.encodeGeometry(rectangle(10, 20)),
Map.of(),
0
);
var poly2 = new VectorTile.Feature(
Building.LAYER_NAME,
1,
VectorTile.encodeGeometry(rectangle(20, 10, 22, 20)),
Map.of(),
0
);
assertEquals(
2,
profile.postProcessLayerFeatures(Building.LAYER_NAME, 14, List.of(poly1, poly2)).size()
);
assertEquals(
1,
profile.postProcessLayerFeatures(Building.LAYER_NAME, 13, List.of(poly1, poly2)).size()
);
}
@Test
public void testColor() {
assertFeatures(14, List.of(Map.of(
"colour", "#ff0000"
)), process(polygonFeature(Map.of(
"building", "yes",
"building:colour", "#ff0000",
"building:material", "brick"
))));
assertFeatures(14, List.of(Map.of(
"colour", "#bd8161"
)), process(polygonFeature(Map.of(
"building", "yes",
"building:building", "yes",
"building:material", "brick"
))));
assertFeatures(13, List.of(Map.of(
"colour", "<null>"
)), process(polygonFeature(Map.of(
"building", "yes",
"building:building", "yes",
"building:colour", "#ff0000"
))));
}
}

Wyświetl plik

@ -1,30 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class HousenumberTest extends AbstractLayerTest {
@Test
public void testHousenumber() {
assertFeatures(14, List.of(Map.of(
"_layer", "housenumber",
"_type", "point",
"_minzoom", 14,
"_maxzoom", 14,
"_buffer", 8d
)), process(pointFeature(Map.of(
"addr:housenumber", "10"
))));
assertFeatures(14, List.of(Map.of(
"_layer", "housenumber",
"_type", "point",
"_minzoom", 14,
"_maxzoom", 14,
"_buffer", 8d
)), process(polygonFeature(Map.of(
"addr:housenumber", "10"
))));
}
}

Wyświetl plik

@ -1,201 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.NATURAL_EARTH_SOURCE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SimpleFeature;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class LandcoverTest extends AbstractLayerTest {
@Test
public void testNaturalEarthGlaciers() {
var glacier1 = process(SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_110m_glaciated_areas",
0
));
var glacier2 = process(SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_50m_glaciated_areas",
0
));
var glacier3 = process(SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_10m_glaciated_areas",
0
));
assertFeatures(0, List.of(Map.of(
"_layer", "landcover",
"subclass", "glacier",
"class", "ice",
"_buffer", 4d
)), glacier1);
assertFeatures(0, List.of(Map.of(
"_layer", "landcover",
"subclass", "glacier",
"class", "ice",
"_buffer", 4d
)), glacier2);
assertFeatures(0, List.of(Map.of(
"_layer", "landcover",
"subclass", "glacier",
"class", "ice",
"_buffer", 4d
)), glacier3);
assertCoversZoomRange(0, 6, "landcover",
glacier1,
glacier2,
glacier3
);
}
@Test
public void testNaturalEarthAntarcticIceShelves() {
var ice1 = process(SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_50m_antarctic_ice_shelves_polys",
0
));
var ice2 = process(SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_10m_antarctic_ice_shelves_polys",
0
));
assertFeatures(0, List.of(Map.of(
"_layer", "landcover",
"subclass", "ice_shelf",
"class", "ice",
"_buffer", 4d
)), ice1);
assertFeatures(0, List.of(Map.of(
"_layer", "landcover",
"subclass", "ice_shelf",
"class", "ice",
"_buffer", 4d
)), ice2);
assertCoversZoomRange(2, 6, "landcover",
ice1,
ice2
);
}
@Test
public void testOsmLandcover() {
assertFeatures(13, List.of(Map.of(
"_layer", "landcover",
"subclass", "wood",
"class", "wood",
"_minpixelsize", 8d,
"_numpointsattr", "_numpoints",
"_minzoom", 9,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"natural", "wood"
))));
assertFeatures(12, List.of(Map.of(
"_layer", "landcover",
"subclass", "forest",
"class", "wood",
"_minpixelsize", 8d,
"_minzoom", 9,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"landuse", "forest"
))));
assertFeatures(10, List.of(Map.of(
"_layer", "landcover",
"subclass", "dune",
"class", "sand",
"_minpixelsize", 4d,
"_minzoom", 7,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"natural", "dune"
))));
}
@Test
public void testMergeForestsBuNumPointsZ9to13() throws GeometryException {
Map<String, Object> map = Map.of("subclass", "wood");
assertMerges(List.of(map, map, map, map, map, map), List.of(
feature(rectangle(10, 20), Map.of("_numpoints", 48, "subclass", "wood")),
feature(rectangle(10, 20), Map.of("_numpoints", 49, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 50, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 299, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 300, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 301, "subclass", "wood"))
), 14);
assertMerges(List.of(map, map, map, map), List.of(
feature(rectangle(10, 20), Map.of("_numpoints", 48, "subclass", "wood")),
feature(rectangle(10, 20), Map.of("_numpoints", 49, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 50, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 299, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 300, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 301, "subclass", "wood"))
), 13);
assertMerges(List.of(map, map, map), List.of(
feature(rectangle(10, 20), Map.of("_numpoints", 48, "subclass", "wood")),
feature(rectangle(10, 20), Map.of("_numpoints", 49, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 50, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 299, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 300, "subclass", "wood")),
feature(rectangle(12, 18), Map.of("_numpoints", 301, "subclass", "wood"))
), 9);
}
@Test
public void testMergeNonForestsBelowZ9() throws GeometryException {
Map<String, Object> map = Map.of("subclass", "dune");
assertMerges(List.of(map, map), List.of(
feature(rectangle(10, 20), Map.of("_numpoints", 48, "subclass", "dune")),
feature(rectangle(12, 18), Map.of("_numpoints", 301, "subclass", "dune"))
), 9);
assertMerges(List.of(map), List.of(
feature(rectangle(10, 20), Map.of("_numpoints", 48, "subclass", "dune")),
feature(rectangle(12, 18), Map.of("_numpoints", 301, "subclass", "dune"))
), 8);
assertMerges(List.of(map, map), List.of(
feature(rectangle(10, 20), Map.of("_numpoints", 48, "subclass", "dune")),
feature(rectangle(12, 18), Map.of("_numpoints", 301, "subclass", "dune"))
), 6);
}
private VectorTile.Feature feature(org.locationtech.jts.geom.Polygon geom, Map<String, Object> m) {
return new VectorTile.Feature(
"landcover",
1,
VectorTile.encodeGeometry(geom),
new HashMap<>(m),
0
);
}
private void assertMerges(List<Map<String, Object>> expected, List<VectorTile.Feature> in, int zoom)
throws GeometryException {
assertEquals(expected,
profile.postProcessLayerFeatures("landcover", zoom, in).stream().map(
VectorTile.Feature::attrs)
.toList());
}
}

Wyświetl plik

@ -1,82 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.NATURAL_EARTH_SOURCE;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.reader.SimpleFeature;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class LanduseTest extends AbstractLayerTest {
@Test
public void testNaturalEarthUrbanAreas() {
assertFeatures(0, List.of(Map.of(
"_layer", "landuse",
"class", "residential",
"_buffer", 4d
)), process(SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
Map.of("scalerank", 1.9),
NATURAL_EARTH_SOURCE,
"ne_50m_urban_areas",
0
)));
assertFeatures(0, List.of(), process(SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
Map.of("scalerank", 2.1),
NATURAL_EARTH_SOURCE,
"ne_50m_urban_areas",
0
)));
}
@Test
public void testOsmLanduse() {
assertFeatures(13, List.of(
Map.of("_layer", "poi"),
Map.of(
"_layer", "landuse",
"class", "railway",
"_minpixelsize", 4d,
"_minzoom", 9,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"landuse", "railway",
"amenity", "school"
))));
assertFeatures(13, List.of(Map.of("_layer", "poi"), Map.of(
"_layer", "landuse",
"class", "school",
"_minpixelsize", 4d,
"_minzoom", 9,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"amenity", "school"
))));
}
@Test
public void testOsmLanduseLowerZoom() {
assertFeatures(6, List.of(Map.of(
"_layer", "landuse",
"class", "suburb",
"_minzoom", 6,
"_maxzoom", 14,
"_minpixelsize", 1d
)), process(polygonFeature(Map.of(
"place", "suburb"
))));
assertFeatures(7, List.of(Map.of(
"_layer", "landuse",
"class", "residential",
"_minzoom", 6,
"_maxzoom", 14,
"_minpixelsize", 2d
)), process(polygonFeature(Map.of(
"landuse", "residential"
))));
}
}

Wyświetl plik

@ -1,222 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.newPoint;
import static org.junit.jupiter.api.Assertions.assertEquals;
import com.google.common.collect.Lists;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.geo.GeometryException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class MountainPeakTest extends AbstractLayerTest {
@BeforeEach
public void setupWikidataTranslation() {
wikidataTranslations.put(123, "es", "es wd name");
}
@Test
public void testHappyPath() {
var peak = process(pointFeature(Map.of(
"natural", "peak",
"name", "test",
"ele", "100",
"wikidata", "Q123"
)));
assertFeatures(14, List.of(Map.of(
"class", "peak",
"ele", 100,
"ele_ft", 328,
"_layer", "mountain_peak",
"_type", "point",
"_minzoom", 7,
"_maxzoom", 14,
"_buffer", 100d
)), peak);
assertFeatures(14, List.of(Map.of(
"name:latin", "test",
"name", "test",
"name:es", "es wd name"
)), peak);
}
@Test
public void testLabelGrid() {
var peak = process(pointFeature(Map.of(
"natural", "peak",
"ele", "100"
)));
assertFeatures(14, List.of(Map.of(
"_labelgrid_limit", 0
)), peak);
assertFeatures(13, List.of(Map.of(
"_labelgrid_limit", 5,
"_labelgrid_size", 100d
)), peak);
}
@Test
public void testVolcano() {
assertFeatures(14, List.of(Map.of(
"class", "volcano"
)), process(pointFeature(Map.of(
"natural", "volcano",
"ele", "100"
))));
}
@Test
public void testNoElevation() {
assertFeatures(14, List.of(), process(pointFeature(Map.of(
"natural", "volcano"
))));
}
@Test
public void testBogusElevation() {
assertFeatures(14, List.of(), process(pointFeature(Map.of(
"natural", "volcano",
"ele", "11000"
))));
}
@Test
public void testIgnoreLines() {
assertFeatures(14, List.of(), process(lineFeature(Map.of(
"natural", "peak",
"name", "name",
"ele", "100"
))));
}
private int getSortKey(Map<String, Object> tags) {
return process(pointFeature(Map.of(
"natural", "peak",
"ele", "100"
))).iterator().next().getSortKey();
}
@Test
public void testSortKey() {
assertAscending(
getSortKey(Map.of(
"natural", "peak",
"name", "name",
"wikipedia", "wikilink",
"ele", "100"
)),
getSortKey(Map.of(
"natural", "peak",
"name", "name",
"ele", "100"
)),
getSortKey(Map.of(
"natural", "peak",
"ele", "100"
))
);
}
@Test
public void testMountainPeakPostProcessing() throws GeometryException {
assertEquals(List.of(), profile.postProcessLayerFeatures(MountainPeak.LAYER_NAME, 13, List.of()));
assertEquals(List.of(pointFeature(
MountainPeak.LAYER_NAME,
Map.of("rank", 1),
1
)), profile.postProcessLayerFeatures(MountainPeak.LAYER_NAME, 13, List.of(pointFeature(
MountainPeak.LAYER_NAME,
Map.of(),
1
))));
assertEquals(List.of(
pointFeature(
MountainPeak.LAYER_NAME,
Map.of("rank", 1, "name", "a"),
1
), pointFeature(
MountainPeak.LAYER_NAME,
Map.of("rank", 2, "name", "b"),
1
), pointFeature(
MountainPeak.LAYER_NAME,
Map.of("rank", 1, "name", "c"),
2
)
), profile.postProcessLayerFeatures(MountainPeak.LAYER_NAME, 13, List.of(
pointFeature(
MountainPeak.LAYER_NAME,
Map.of("name", "a"),
1
),
pointFeature(
MountainPeak.LAYER_NAME,
Map.of("name", "b"),
1
),
pointFeature(
MountainPeak.LAYER_NAME,
Map.of("name", "c"),
2
)
)));
}
@Test
public void testMountainPeakPostProcessingLimitsFeaturesOutsideZoom() throws GeometryException {
assertEquals(Lists.newArrayList(
new VectorTile.Feature(
MountainPeak.LAYER_NAME,
1,
VectorTile.encodeGeometry(newPoint(-64, -64)),
Map.of("rank", 1),
1
),
null,
new VectorTile.Feature(
MountainPeak.LAYER_NAME,
3,
VectorTile.encodeGeometry(newPoint(256 + 64, 256 + 64)),
Map.of("rank", 1),
2
),
null
), profile.postProcessLayerFeatures(MountainPeak.LAYER_NAME, 13, Lists.newArrayList(
new VectorTile.Feature(
MountainPeak.LAYER_NAME,
1,
VectorTile.encodeGeometry(newPoint(-64, -64)),
new HashMap<>(),
1
),
new VectorTile.Feature(
MountainPeak.LAYER_NAME,
2,
VectorTile.encodeGeometry(newPoint(-65, -65)),
new HashMap<>(),
1
),
new VectorTile.Feature(
MountainPeak.LAYER_NAME,
3,
VectorTile.encodeGeometry(newPoint(256 + 64, 256 + 64)),
new HashMap<>(),
2
),
new VectorTile.Feature(
MountainPeak.LAYER_NAME,
4,
VectorTile.encodeGeometry(newPoint(256 + 65, 256 + 65)),
new HashMap<>(),
2
)
)));
}
}

Wyświetl plik

@ -1,135 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import com.onthegomap.planetiler.geo.GeoUtils;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class ParkTest extends AbstractLayerTest {
@Test
public void testNationalPark() {
assertFeatures(13, List.of(Map.of(
"_layer", "park",
"_type", "polygon",
"class", "national_park",
"name", "<null>",
"_minpixelsize", 2d,
"_minzoom", 6,
"_maxzoom", 14
), Map.of(
"_layer", "park",
"_type", "point",
"class", "national_park",
"name", "Grand Canyon National Park",
"name_int", "Grand Canyon National Park",
"name:latin", "Grand Canyon National Park",
"name:es", "es name",
"_minzoom", 6,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"boundary", "national_park",
"name", "Grand Canyon National Park",
"name:es", "es name",
"protection_title", "National Park",
"wikipedia", "en:Grand Canyon National Park"
))));
// needs a name
assertFeatures(13, List.of(Map.of(
"_layer", "park",
"_type", "polygon"
)), process(polygonFeature(Map.of(
"boundary", "national_park",
"protection_title", "National Park"
))));
}
@Test
public void testSmallerPark() {
double z11area = Math.pow((GeoUtils.metersToPixelAtEquator(0, Math.sqrt(70_000)) / 256d), 2) * Math.pow(2, 20 - 11);
assertFeatures(13, List.of(Map.of(
"_layer", "park",
"_type", "polygon",
"class", "protected_area",
"name", "<null>",
"_minpixelsize", 2d,
"_minzoom", 6,
"_maxzoom", 14
), Map.of(
"_layer", "park",
"_type", "point",
"class", "protected_area",
"name", "Small park",
"name_int", "Small park",
"_minzoom", 11,
"_maxzoom", 14
)), process(polygonFeatureWithArea(z11area, Map.of(
"boundary", "protected_area",
"name", "Small park",
"wikipedia", "en:Small park"
))));
assertFeatures(13, List.of(Map.of(
"_layer", "park",
"_type", "polygon"
), Map.of(
"_layer", "park",
"_type", "point",
"_minzoom", 6,
"_maxzoom", 14
)), process(polygonFeatureWithArea(1, Map.of(
"boundary", "protected_area",
"name", "Small park",
"wikidata", "Q123"
))));
}
@Test
public void testSortKeys() {
assertAscending(
getLabelSortKey(1, Map.of(
"boundary", "national_park",
"name", "a",
"wikipedia", "en:park"
)),
getLabelSortKey(1e-10, Map.of(
"boundary", "national_park",
"name", "a",
"wikipedia", "en:Park"
)),
getLabelSortKey(1, Map.of(
"boundary", "national_park",
"name", "a"
)),
getLabelSortKey(1e-10, Map.of(
"boundary", "national_park",
"name", "a"
)),
getLabelSortKey(1, Map.of(
"boundary", "protected_area",
"name", "a",
"wikipedia", "en:park"
)),
getLabelSortKey(1e-10, Map.of(
"boundary", "protected_area",
"name", "a",
"wikipedia", "en:Park"
)),
getLabelSortKey(1, Map.of(
"boundary", "protected_area",
"name", "a"
)),
getLabelSortKey(1e-10, Map.of(
"boundary", "protected_area",
"name", "a"
))
);
}
private int getLabelSortKey(double area, Map<String, Object> tags) {
var iter = process(polygonFeatureWithArea(area, tags)).iterator();
iter.next();
return iter.next().getSortKey();
}
}

Wyświetl plik

@ -1,485 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.newPoint;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.NATURAL_EARTH_SOURCE;
import static com.onthegomap.planetiler.basemap.BasemapProfile.OSM_SOURCE;
import static com.onthegomap.planetiler.basemap.layers.Place.getSortKey;
import static com.onthegomap.planetiler.collection.FeatureGroup.SORT_KEY_MAX;
import static com.onthegomap.planetiler.collection.FeatureGroup.SORT_KEY_MIN;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SimpleFeature;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class PlaceTest extends AbstractLayerTest {
@Test
public void testContinent() {
wikidataTranslations.put(49, "es", "América del Norte y América Central");
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "continent",
"name", "North America",
"name:en", "North America",
"name:es", "América del Norte y América Central",
"name:latin", "North America",
"rank", 1,
"_type", "point",
"_minzoom", 0,
"_maxzoom", 3
)), process(pointFeature(Map.of(
"place", "continent",
"wikidata", "Q49",
"name:es", "América del Norte",
"name", "North America",
"name:en", "North America"
))));
}
@Test
public void testCountry() {
wikidataTranslations.put(30, "es", "Estados Unidos");
process(SimpleFeature.create(
rectangle(0, 0.25),
Map.of(
"name", "United States",
"scalerank", 0,
"labelrank", 2
),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_0_countries",
0
));
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "country",
"name", "United States of America",
"name_en", "United States of America",
"name:es", "Estados Unidos",
"name:latin", "United States of America",
"iso_a2", "US",
"rank", 6,
"_type", "point",
"_minzoom", 5
)), process(SimpleFeature.create(
newPoint(0.5, 0.5),
Map.of(
"place", "country",
"wikidata", "Q30",
"name:es", "Estados Unidos de América",
"name", "United States of America",
"name:en", "United States of America",
"country_code_iso3166_1_alpha_2", "US"
),
OSM_SOURCE,
null,
0
)));
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "country",
"name", "United States of America",
"name_en", "United States of America",
"name:es", "Estados Unidos",
"name:latin", "United States of America",
"iso_a2", "US",
"rank", 1,
"_type", "point",
"_minzoom", 0
)), process(SimpleFeature.create(
newPoint(0.1, 0.1),
Map.of(
"place", "country",
"wikidata", "Q30",
"name:es", "Estados Unidos de América",
"name", "United States of America",
"name:en", "United States of America",
"country_code_iso3166_1_alpha_2", "US"
),
OSM_SOURCE,
null,
0
)));
}
@Test
public void testState() {
wikidataTranslations.put(771, "es", "Massachusetts es");
process(SimpleFeature.create(
rectangle(0, 0.25),
Map.of(
"name", "Massachusetts",
"scalerank", 0,
"labelrank", 2,
"datarank", 1
),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_1_states_provinces",
0
));
process(SimpleFeature.create(
rectangle(0.4, 0.6),
Map.of(
"name", "Massachusetts - not important",
"scalerank", 4,
"labelrank", 4,
"datarank", 1
),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_1_states_provinces",
0
));
// no match
assertFeatures(0, List.of(), process(SimpleFeature.create(
newPoint(1, 1),
Map.of(
"place", "state",
"wikidata", "Q771",
"name", "Massachusetts",
"name:en", "Massachusetts"
),
OSM_SOURCE,
null,
0
)));
// unimportant match
assertFeatures(0, List.of(), process(SimpleFeature.create(
newPoint(0.5, 0.5),
Map.of(
"place", "state",
"wikidata", "Q771",
"name", "Massachusetts",
"name:en", "Massachusetts"
),
OSM_SOURCE,
null,
0
)));
// important match
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "state",
"name", "Massachusetts",
"name_en", "Massachusetts",
"name:es", "Massachusetts es",
"name:latin", "Massachusetts",
"rank", 1,
"_type", "point",
"_minzoom", 2
)), process(SimpleFeature.create(
newPoint(0.1, 0.1),
Map.of(
"place", "state",
"wikidata", "Q771",
"name", "Massachusetts",
"name:en", "Massachusetts"
),
OSM_SOURCE,
null,
0
)));
}
@Test
public void testIslandPoint() {
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "island",
"name", "Nantucket",
"name_en", "Nantucket",
"name:latin", "Nantucket",
"rank", 7,
"_type", "point",
"_minzoom", 12
)), process(pointFeature(
Map.of(
"place", "island",
"name", "Nantucket",
"name:en", "Nantucket"
))));
}
@Test
public void testIslandPolygon() {
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "island",
"name", "Nantucket",
"name_en", "Nantucket",
"name:latin", "Nantucket",
"rank", 3,
"_type", "point",
"_minzoom", 8
)), process(polygonFeatureWithArea(1,
Map.of(
"place", "island",
"name", "Nantucket",
"name:en", "Nantucket"
))));
double rank4area = Math.pow(GeoUtils.metersToPixelAtEquator(0, Math.sqrt(40_000_000 - 1)) / 256d, 2);
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "island",
"name", "Nantucket",
"rank", 4,
"_type", "point",
"_minzoom", 9
)), process(polygonFeatureWithArea(rank4area,
Map.of(
"place", "island",
"name", "Nantucket",
"name:en", "Nantucket"
))));
}
@Test
public void testPlaceSortKeyRanking() {
int[] sortKeys = new int[]{
// max
getSortKey(0, Place.PlaceType.CITY, 1_000_000_000, "name"),
getSortKey(0, Place.PlaceType.CITY, 1_000_000_000, "name longer"),
getSortKey(0, Place.PlaceType.CITY, 1_000_000_000, "x".repeat(32)),
getSortKey(0, Place.PlaceType.CITY, 10_000_000, "name"),
getSortKey(0, Place.PlaceType.CITY, 0, "name"),
getSortKey(0, Place.PlaceType.TOWN, 1_000_000_000, "name"),
getSortKey(0, Place.PlaceType.ISOLATED_DWELLING, 1_000_000_000, "name"),
getSortKey(0, null, 1_000_000_000, "name"),
getSortKey(1, Place.PlaceType.CITY, 1_000_000_000, "name"),
getSortKey(10, Place.PlaceType.CITY, 1_000_000_000, "name"),
getSortKey(null, Place.PlaceType.CITY, 1_000_000_000, "name"),
// min
getSortKey(null, null, 0, null),
};
for (int i = 0; i < sortKeys.length; i++) {
if (sortKeys[i] < SORT_KEY_MIN) {
fail("Item at index " + i + " is < " + SORT_KEY_MIN + ": " + sortKeys[i]);
}
if (sortKeys[i] > SORT_KEY_MAX) {
fail("Item at index " + i + " is > " + SORT_KEY_MAX + ": " + sortKeys[i]);
}
}
assertAscending(sortKeys);
}
@Test
public void testCountryCapital() {
process(SimpleFeature.create(
newPoint(0, 0),
Map.of(
"name", "Washington, D.C.",
"scalerank", 0,
"wikidataid", "Q61"
),
NATURAL_EARTH_SOURCE,
"ne_10m_populated_places",
0
));
assertFeatures(7, List.of(Map.of(
"_layer", "place",
"class", "city",
"name", "Washington, D.C.",
"rank", 1,
"capital", 2,
"_labelgrid_limit", 0,
"_labelgrid_size", 128d,
"_type", "point",
"_minzoom", 2
)), process(pointFeature(
Map.of(
"place", "city",
"name", "Washington, D.C.",
"population", "672228",
"wikidata", "Q61",
"capital", "yes"
))));
}
@Test
public void testStateCapital() {
process(SimpleFeature.create(
newPoint(0, 0),
Map.of(
"name", "Boston",
"scalerank", 2,
"wikidataid", "Q100"
),
NATURAL_EARTH_SOURCE,
"ne_10m_populated_places",
0
));
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "city",
"name", "Boston",
"rank", 3,
"capital", 4,
"_type", "point",
"_minzoom", 3
)), process(pointFeature(
Map.of(
"place", "city",
"name", "Boston",
"population", "667137",
"capital", "4"
))));
// no match when far away
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "city",
"name", "Boston",
"rank", "<null>"
)), process(SimpleFeature.create(
newPoint(1, 1),
Map.of(
"place", "city",
"name", "Boston",
"wikidata", "Q100",
"population", "667137",
"capital", "4"
),
OSM_SOURCE,
null,
0
)));
// unaccented name match
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "city",
"rank", 3
)), process(pointFeature(
Map.of(
"place", "city",
"name", "Böston",
"population", "667137",
"capital", "4"
))));
// wikidata only match
assertFeatures(0, List.of(Map.of(
"_layer", "place",
"class", "city",
"rank", 3
)), process(pointFeature(
Map.of(
"place", "city",
"name", "Other name",
"population", "667137",
"wikidata", "Q100",
"capital", "4"
))));
}
@Test
public void testCityWithoutNaturalEarthMatch() {
assertFeatures(7, List.of(Map.of(
"_layer", "place",
"class", "city",
"rank", "<null>",
"_minzoom", 7,
"_labelgrid_limit", 4,
"_labelgrid_size", 128d
)), process(pointFeature(
Map.of(
"place", "city",
"name", "City name"
))));
assertFeatures(13, List.of(Map.of(
"_layer", "place",
"class", "isolated_dwelling",
"rank", "<null>",
"_labelgrid_limit", 0,
"_labelgrid_size", 0d,
"_minzoom", 14
)), process(pointFeature(
Map.of(
"place", "isolated_dwelling",
"name", "City name"
))));
assertFeatures(12, List.of(Map.of(
"_layer", "place",
"class", "isolated_dwelling",
"rank", "<null>",
"_labelgrid_limit", 14,
"_labelgrid_size", 128d,
"_minzoom", 14
)), process(pointFeature(
Map.of(
"place", "isolated_dwelling",
"name", "City name"
))));
}
@Test
public void testCitySetRankFromGridrank() throws GeometryException {
var layerName = Place.LAYER_NAME;
assertEquals(List.of(), profile.postProcessLayerFeatures(layerName, 13, List.of()));
assertEquals(List.of(pointFeature(
layerName,
Map.of("rank", 11),
1
)), profile.postProcessLayerFeatures(layerName, 13, List.of(pointFeature(
layerName,
Map.of(),
1
))));
assertEquals(List.of(
pointFeature(
layerName,
Map.of("rank", 11, "name", "a"),
1
), pointFeature(
layerName,
Map.of("rank", 12, "name", "b"),
1
), pointFeature(
layerName,
Map.of("rank", 11, "name", "c"),
2
)
), profile.postProcessLayerFeatures(layerName, 13, List.of(
pointFeature(
layerName,
Map.of("name", "a"),
1
),
pointFeature(
layerName,
Map.of("name", "b"),
1
),
pointFeature(
layerName,
Map.of("name", "c"),
2
)
)));
}
}

Wyświetl plik

@ -1,184 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static org.junit.jupiter.api.Assertions.assertEquals;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SourceFeature;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
public class PoiTest extends AbstractLayerTest {
private SourceFeature feature(boolean area, Map<String, Object> tags) {
return area ? polygonFeature(tags) : pointFeature(tags);
}
@Test
public void testFenwayPark() {
assertFeatures(7, List.of(Map.of(
"_layer", "poi",
"class", "stadium",
"subclass", "stadium",
"name", "Fenway Park",
"rank", "<null>",
"_minzoom", 14,
"_labelgrid_size", 64d
)), process(pointFeature(Map.of(
"leisure", "stadium",
"name", "Fenway Park"
))));
}
@ParameterizedTest
@ValueSource(booleans = {false, true})
public void testFunicularHalt(boolean area) {
assertFeatures(7, List.of(Map.of(
"_layer", "poi",
"class", "railway",
"subclass", "halt",
"rank", "<null>",
"_minzoom", 12
)), process(feature(area, Map.of(
"railway", "station",
"funicular", "yes",
"name", "station"
))));
}
@ParameterizedTest
@ValueSource(booleans = {false, true})
public void testSubway(boolean area) {
assertFeatures(7, List.of(Map.of(
"_layer", "poi",
"class", "railway",
"subclass", "subway",
"rank", "<null>",
"_minzoom", 12
)), process(feature(area, Map.of(
"railway", "station",
"station", "subway",
"name", "station"
))));
}
@ParameterizedTest
@ValueSource(booleans = {false, true})
public void testPlaceOfWorshipFromReligionTag(boolean area) {
assertFeatures(7, List.of(Map.of(
"_layer", "poi",
"class", "place_of_worship",
"subclass", "religion value",
"rank", "<null>",
"_minzoom", 14
)), process(feature(area, Map.of(
"amenity", "place_of_worship",
"religion", "religion value",
"name", "station"
))));
}
@Test
public void testPitchFromSportTag() {
assertFeatures(7, List.of(Map.of(
"_layer", "poi",
"class", "pitch",
"subclass", "soccer",
"rank", "<null>"
)), process(pointFeature(Map.of(
"leisure", "pitch",
"sport", "soccer",
"name", "station"
))));
}
@ParameterizedTest
@ValueSource(booleans = {false, true})
public void testInformation(boolean area) {
assertFeatures(7, List.of(Map.of(
"_layer", "poi",
"class", "information",
"subclass", "infotype",
"layer", 3L,
"level", 2L,
"indoor", 1,
"rank", "<null>"
)), process(feature(area, Map.of(
"tourism", "information",
"information", "infotype",
"name", "station",
"layer", "3",
"level", "2",
"indoor", "yes"
))));
}
@ParameterizedTest
@ValueSource(booleans = {false, true})
public void testFerryTerminal(boolean area) {
assertFeatures(7, List.of(Map.of(
"_layer", "poi",
"class", "ferry_terminal",
"subclass", "ferry_terminal",
"name", "Water Taxi",
"_minzoom", 12
)), process(feature(area, Map.of(
"amenity", "ferry_terminal",
"information", "infotype",
"name", "Water Taxi",
"layer", "3",
"level", "2",
"indoor", "yes"
))));
}
@Test
public void testGridRank() throws GeometryException {
var layerName = Poi.LAYER_NAME;
assertEquals(List.of(), profile.postProcessLayerFeatures(layerName, 13, List.of()));
assertEquals(List.of(pointFeature(
layerName,
Map.of("rank", 1),
1
)), profile.postProcessLayerFeatures(layerName, 14, List.of(pointFeature(
layerName,
Map.of(),
1
))));
assertEquals(List.of(
pointFeature(
layerName,
Map.of("rank", 1, "name", "a"),
1
), pointFeature(
layerName,
Map.of("rank", 2, "name", "b"),
1
), pointFeature(
layerName,
Map.of("rank", 1, "name", "c"),
2
)
), profile.postProcessLayerFeatures(layerName, 14, List.of(
pointFeature(
layerName,
Map.of("name", "a"),
1
),
pointFeature(
layerName,
Map.of("name", "b"),
1
),
pointFeature(
layerName,
Map.of("name", "c"),
2
)
)));
}
}

Wyświetl plik

@ -1,721 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.newLineString;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.NATURAL_EARTH_SOURCE;
import static com.onthegomap.planetiler.basemap.BasemapProfile.OSM_SOURCE;
import com.onthegomap.planetiler.FeatureCollector;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SimpleFeature;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
public class TransportationTest extends AbstractLayerTest {
@Test
public void testNamedFootway() {
FeatureCollector result = process(lineFeature(Map.of(
"name", "Lagoon Path",
"surface", "asphalt",
"level", "0",
"highway", "footway",
"indoor", "no",
"oneway", "no",
"foot", "designated",
"bicycle", "dismount"
)));
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"_type", "line",
"class", "path",
"subclass", "footway",
"oneway", 0,
"name", "<null>",
"_buffer", 4d,
"_minpixelsize", 0d,
"_minzoom", 13,
"_maxzoom", 14
), Map.of(
"_layer", "transportation_name",
"_type", "line",
"class", "path",
"subclass", "footway",
"name", "Lagoon Path",
"name_int", "Lagoon Path",
"name:latin", "Lagoon Path",
"_minpixelsize", 0d,
"_minzoom", 13,
"_maxzoom", 14
)), result);
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"surface", "paved",
"oneway", 0,
"level", 0L,
"ramp", 0,
"bicycle", "dismount",
"foot", "designated"
), Map.of(
"_layer", "transportation_name",
"level", 0L,
"surface", "<null>",
"oneway", "<null>",
"ramp", "<null>",
"bicycle", "<null>",
"foot", "<null>"
)), result);
}
@Test
public void testUnnamedPath() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "path",
"subclass", "path",
"surface", "unpaved",
"oneway", 0
)), process(lineFeature(Map.of(
"surface", "dirt",
"highway", "path"
))));
}
@Test
public void testIndoorTunnelSteps() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "path",
"subclass", "steps",
"brunnel", "tunnel",
"indoor", 1,
"oneway", 1,
"ramp", 1
)), process(lineFeature(Map.of(
"highway", "steps",
"tunnel", "building_passage",
"oneway", "yes",
"indoor", "yes"
))));
}
@Test
public void testInterstateMotorway() {
var rel = new OsmElement.Relation(1);
rel.setTag("type", "route");
rel.setTag("route", "road");
rel.setTag("network", "US:I");
rel.setTag("ref", "90");
FeatureCollector features = process(lineFeatureWithRelation(
profile.preprocessOsmRelation(rel),
Map.of(
"highway", "motorway",
"oneway", "yes",
"name", "Massachusetts Turnpike",
"ref", "I 90",
"surface", "asphalt",
"foot", "no",
"bicycle", "no",
"horse", "no",
"bridge", "yes"
)));
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "motorway",
"surface", "paved",
"oneway", 1,
"ramp", 0,
"bicycle", "no",
"foot", "no",
"horse", "no",
"brunnel", "bridge",
"_minzoom", 4
), Map.of(
"_layer", "transportation_name",
"class", "motorway",
"name", "Massachusetts Turnpike",
"name_en", "Massachusetts Turnpike",
"ref", "90",
"ref_length", 2,
"network", "us-interstate",
"brunnel", "<null>",
"_minzoom", 6
)), features);
assertFeatures(8, List.of(Map.of(
"_layer", "transportation",
"class", "motorway",
"surface", "<null>",
"oneway", "<null>",
"ramp", "<null>",
"bicycle", "<null>",
"foot", "<null>",
"horse", "<null>",
"brunnel", "bridge",
"_minzoom", 4
), Map.of(
"_layer", "transportation_name",
"class", "motorway",
"name", "Massachusetts Turnpike",
"name_en", "Massachusetts Turnpike",
"ref", "90",
"ref_length", 2,
"network", "us-interstate",
"brunnel", "<null>",
"_minzoom", 6
)), features);
}
@Test
public void testPrimaryRoadConstruction() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "primary_construction",
"brunnel", "bridge",
"layer", 1L,
"oneway", 1,
"_minzoom", 7
), Map.of(
"_layer", "transportation_name",
"name", "North Washington Street",
"class", "primary_construction",
"brunnel", "<null>",
"_minzoom", 12
)), process(lineFeature(Map.of(
"highway", "construction",
"construction", "primary",
"bridge", "yes",
"layer", "1",
"name", "North Washington Street",
"oneway", "yes"
))));
}
@Test
public void testRaceway() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "raceway",
"oneway", 1,
"_minzoom", 12
), Map.of(
"_layer", "transportation_name",
"class", "raceway",
"name", "Climbing Turn",
"ref", "5",
"_minzoom", 12
)), process(lineFeature(Map.of(
"highway", "raceway",
"oneway", "yes",
"ref", "5",
"name", "Climbing Turn"
))));
}
@Test
public void testDriveway() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "service",
"service", "driveway",
"_minzoom", 12
)), process(lineFeature(Map.of(
"highway", "service",
"service", "driveway"
))));
}
@Test
public void testMountainBikeTrail() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "path",
"subclass", "path",
"mtb_scale", "4",
"surface", "unpaved",
"bicycle", "yes",
"_minzoom", 13
), Map.of(
"_layer", "transportation_name",
"class", "path",
"subclass", "path",
"name", "Path name",
"_minzoom", 13
)), process(lineFeature(Map.of(
"highway", "path",
"mtb:scale", "4",
"name", "Path name",
"bicycle", "yes",
"surface", "ground"
))));
}
@Test
public void testTrack() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "track",
"surface", "unpaved",
"horse", "yes",
"_minzoom", 14
)), process(lineFeature(Map.of(
"highway", "track",
"surface", "dirt",
"horse", "yes"
))));
}
final OsmElement.Relation relUS = new OsmElement.Relation(1);
{
relUS.setTag("type", "route");
relUS.setTag("route", "road");
relUS.setTag("network", "US:US");
relUS.setTag("ref", "3");
}
final OsmElement.Relation relMA = new OsmElement.Relation(2);
{
relMA.setTag("type", "route");
relMA.setTag("route", "road");
relMA.setTag("network", "US:MA");
relMA.setTag("ref", "2");
}
@Test
public void testUSAndStateHighway() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "primary",
"surface", "paved",
"oneway", 0,
"ramp", 0,
"_minzoom", 7
), Map.of(
"_layer", "transportation_name",
"class", "primary",
"name", "Memorial Drive",
"name_en", "Memorial Drive",
"ref", "3",
"ref_length", 1,
"network", "us-highway",
"_minzoom", 12
)), process(lineFeatureWithRelation(
Stream.concat(
profile.preprocessOsmRelation(relUS).stream(),
profile.preprocessOsmRelation(relMA).stream()
).toList(),
Map.of(
"highway", "primary",
"name", "Memorial Drive",
"ref", "US 3;MA 2",
"surface", "asphalt"
))));
// swap order
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "primary"
), Map.of(
"_layer", "transportation_name",
"class", "primary",
"ref", "3",
"network", "us-highway"
)), process(lineFeatureWithRelation(
Stream.concat(
profile.preprocessOsmRelation(relMA).stream(),
profile.preprocessOsmRelation(relUS).stream()
).toList(),
Map.of(
"highway", "primary",
"name", "Memorial Drive",
"ref", "US 3;MA 2",
"surface", "asphalt"
))));
}
@Test
public void testUsStateHighway() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "primary"
), Map.of(
"_layer", "transportation_name",
"class", "primary",
"name", "Memorial Drive",
"name_en", "Memorial Drive",
"ref", "2",
"ref_length", 1,
"network", "us-state",
"_minzoom", 12
)), process(lineFeatureWithRelation(
profile.preprocessOsmRelation(relMA),
Map.of(
"highway", "primary",
"name", "Memorial Drive",
"ref", "US 3;MA 2",
"surface", "asphalt"
))));
}
@Test
public void testCompoundRef() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "primary"
), Map.of(
"_layer", "transportation_name",
"class", "primary",
"name", "Memorial Drive",
"name_en", "Memorial Drive",
"ref", "US 3;MA 2",
"ref_length", 9,
"network", "road",
"_minzoom", 12
)), process(lineFeature(
Map.of(
"highway", "primary",
"name", "Memorial Drive",
"ref", "US 3;MA 2",
"surface", "asphalt"
))));
}
@Test
public void testTransCanadaHighway() {
var rel = new OsmElement.Relation(1);
rel.setTag("type", "route");
rel.setTag("route", "road");
rel.setTag("network", "CA:transcanada:namedRoute");
FeatureCollector features = process(lineFeatureWithRelation(
profile.preprocessOsmRelation(rel),
Map.of(
"highway", "motorway",
"oneway", "yes",
"name", "Autoroute Claude-Béchard",
"ref", "85",
"surface", "asphalt"
)));
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "motorway",
"surface", "paved",
"oneway", 1,
"ramp", 0,
"_minzoom", 4
), Map.of(
"_layer", "transportation_name",
"class", "motorway",
"name", "Autoroute Claude-Béchard",
"name_en", "Autoroute Claude-Béchard",
"ref", "85",
"ref_length", 2,
"network", "ca-transcanada",
"_minzoom", 6
)), features);
}
@Test
public void testGreatBritainHighway() {
process(SimpleFeature.create(
rectangle(0, 0.1),
Map.of("iso_a2", "GB"),
NATURAL_EARTH_SOURCE,
"ne_10m_admin_0_countries",
0
));
// in GB
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "motorway",
"oneway", 1,
"ramp", 0,
"_minzoom", 4
), Map.of(
"_layer", "transportation_name",
"class", "motorway",
"ref", "M1",
"ref_length", 2,
"network", "gb-motorway",
"_minzoom", 6
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"highway", "motorway",
"oneway", "yes",
"ref", "M1"
),
OSM_SOURCE,
null,
0
)));
// not in GB
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "motorway",
"oneway", 1,
"ramp", 0,
"_minzoom", 4
), Map.of(
"_layer", "transportation_name",
"class", "motorway",
"ref", "M1",
"ref_length", 2,
"network", "road",
"_minzoom", 6
)), process(SimpleFeature.create(
newLineString(1, 0, 0, 1),
Map.of(
"highway", "motorway",
"oneway", "yes",
"ref", "M1"
),
OSM_SOURCE,
null,
0
)));
}
@Test
public void testMergesDisconnectedRoadFeatures() throws GeometryException {
testMergesLinestrings(Map.of("class", "motorway"), Transportation.LAYER_NAME, 10, 14);
}
@Test
public void testMergesDisconnectedRoadNameFeatures() throws GeometryException {
testMergesLinestrings(Map.of("class", "motorway"), TransportationName.LAYER_NAME, 10, 14);
}
@Test
public void testLightRail() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "transit",
"subclass", "light_rail",
"brunnel", "tunnel",
"layer", -1L,
"oneway", 0,
"ramp", 0,
"_minzoom", 11,
"_maxzoom", 14,
"_type", "line"
)), process(lineFeature(Map.of(
"railway", "light_rail",
"name", "Green Line",
"tunnel", "yes",
"layer", "-1"
))));
}
@Test
public void testSubway() {
assertFeatures(13, List.of(Map.of(
"_layer", "transportation",
"class", "transit",
"subclass", "subway",
"brunnel", "tunnel",
"layer", -2L,
"oneway", 0,
"ramp", 0,
"_minzoom", 14,
"_maxzoom", 14,
"_type", "line"
)), process(lineFeature(Map.of(
"railway", "subway",
"name", "Red Line",
"tunnel", "yes",
"layer", "-2",
"level", "-2"
))));
}
@Test
public void testRail() {
assertFeatures(8, List.of(Map.of(
"_layer", "transportation",
"class", "rail",
"subclass", "rail",
"brunnel", "<null>",
"layer", "<null>",
"_minzoom", 8,
"_maxzoom", 14,
"_type", "line"
)), process(lineFeature(Map.of(
"railway", "rail",
"name", "Boston Subdivision",
"usage", "main",
"tunnel", "yes",
"layer", "-2"
))));
assertFeatures(13, List.of(Map.of(
"_minzoom", 10
)), process(lineFeature(Map.of(
"railway", "rail",
"name", "Boston Subdivision"
))));
assertFeatures(13, List.of(),
process(polygonFeature(Map.of(
"railway", "rail"
))));
assertFeatures(13, List.of(Map.of(
"class", "rail",
"subclass", "rail",
"_minzoom", 14,
"service", "yard"
)), process(lineFeature(Map.of(
"railway", "rail",
"name", "Boston Subdivision",
"service", "yard"
))));
}
@Test
public void testNarrowGauge() {
assertFeatures(10, List.of(Map.of(
"_layer", "transportation",
"class", "rail",
"subclass", "narrow_gauge",
"_minzoom", 10,
"_maxzoom", 14,
"_type", "line"
)), process(lineFeature(Map.of(
"railway", "narrow_gauge"
))));
}
@Test
public void testAerialway() {
assertFeatures(10, List.of(Map.of(
"_layer", "transportation",
"class", "aerialway",
"subclass", "gondola",
"_minzoom", 12,
"_maxzoom", 14,
"_type", "line"
)), process(lineFeature(Map.of(
"aerialway", "gondola",
"name", "Summit Gondola"
))));
assertFeatures(10, List.of(),
process(polygonFeature(Map.of(
"aerialway", "gondola",
"name", "Summit Gondola"
))));
}
@Test
public void testFerry() {
assertFeatures(10, List.of(Map.of(
"_layer", "transportation",
"class", "ferry",
"_minzoom", 11,
"_maxzoom", 14,
"_type", "line"
)), process(lineFeature(Map.of(
"route", "ferry",
"name", "Boston - Provincetown Ferry",
"motor_vehicle", "no",
"foot", "yes",
"bicycle", "yes"
))));
assertFeatures(10, List.of(),
process(polygonFeature(Map.of(
"route", "ferry",
"name", "Boston - Provincetown Ferry",
"motor_vehicle", "no",
"foot", "yes",
"bicycle", "yes"
))));
}
@Test
public void testPiers() {
// area
assertFeatures(10, List.of(Map.of(
"_layer", "transportation",
"class", "pier",
"_minzoom", 13,
"_maxzoom", 14,
"_type", "polygon"
)), process(polygonFeature(Map.of(
"man_made", "pier"
))));
assertFeatures(10, List.of(Map.of(
"_layer", "transportation",
"class", "pier",
"_minzoom", 13,
"_maxzoom", 14,
"_type", "line"
)), process(lineFeature(Map.of(
"man_made", "pier"
))));
}
@Test
public void testPedestrianArea() {
assertFeatures(10, List.of(Map.of(
"_layer", "transportation",
"class", "path",
"subclass", "pedestrian",
"_minzoom", 13,
"_maxzoom", 14,
"_type", "polygon"
)), process(polygonFeature(Map.of(
"highway", "pedestrian",
"area", "yes",
"foot", "yes"
))));
// ignore underground pedestrian areas
assertFeatures(10, List.of(),
process(polygonFeature(Map.of(
"highway", "pedestrian",
"area", "yes",
"foot", "yes",
"layer", "-1"
))));
}
private int getWaySortKey(Map<String, Object> tags) {
var iter = process(lineFeature(tags)).iterator();
return iter.next().getSortKey();
}
@Test
public void testSortKeys() {
assertDescending(
getWaySortKey(Map.of("highway", "footway", "layer", "2")),
getWaySortKey(Map.of("highway", "motorway", "bridge", "yes")),
getWaySortKey(Map.of("highway", "footway", "bridge", "yes")),
getWaySortKey(Map.of("highway", "motorway")),
getWaySortKey(Map.of("highway", "trunk")),
getWaySortKey(Map.of("railway", "rail")),
getWaySortKey(Map.of("highway", "primary")),
getWaySortKey(Map.of("highway", "secondary")),
getWaySortKey(Map.of("highway", "tertiary")),
getWaySortKey(Map.of("highway", "motorway_link")),
getWaySortKey(Map.of("highway", "footway")),
getWaySortKey(Map.of("highway", "motorway", "tunnel", "yes")),
getWaySortKey(Map.of("highway", "footway", "tunnel", "yes")),
getWaySortKey(Map.of("highway", "motorway", "layer", "-2"))
);
}
}

Wyświetl plik

@ -1,155 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.newLineString;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.LAKE_CENTERLINE_SOURCE;
import static com.onthegomap.planetiler.basemap.BasemapProfile.NATURAL_EARTH_SOURCE;
import static com.onthegomap.planetiler.basemap.BasemapProfile.OSM_SOURCE;
import com.onthegomap.planetiler.TestUtils;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.reader.SimpleFeature;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class WaterNameTest extends AbstractLayerTest {
@Test
public void testWaterNamePoint() {
assertFeatures(11, List.of(Map.of(
"_layer", "water"
), Map.of(
"class", "lake",
"name", "waterway",
"name:es", "waterway es",
"intermittent", 1,
"_layer", "water_name",
"_type", "point",
"_minzoom", 9,
"_maxzoom", 14
)), process(polygonFeatureWithArea(1, Map.of(
"name", "waterway",
"name:es", "waterway es",
"natural", "water",
"water", "pond",
"intermittent", "1"
))));
double z11area = Math.pow((GeoUtils.metersToPixelAtEquator(0, Math.sqrt(70_000)) / 256d), 2) * Math.pow(2, 20 - 11);
assertFeatures(10, List.of(Map.of(
"_layer", "water"
), Map.of(
"_layer", "water_name",
"_type", "point",
"_minzoom", 11,
"_maxzoom", 14
)), process(polygonFeatureWithArea(z11area, Map.of(
"name", "waterway",
"natural", "water",
"water", "pond"
))));
}
@Test
public void testWaterNameLakeline() {
assertFeatures(11, List.of(), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
new HashMap<>(Map.<String, Object>of(
"OSM_ID", -10
)),
LAKE_CENTERLINE_SOURCE,
null,
0
)));
assertFeatures(10, List.of(Map.of(
"_layer", "water"
), Map.of(
"name", "waterway",
"name:es", "waterway es",
"_layer", "water_name",
"_type", "line",
"_geom", new TestUtils.NormGeometry(GeoUtils.latLonToWorldCoords(newLineString(0, 0, 1, 1))),
"_minzoom", 9,
"_maxzoom", 14,
"_minpixelsize", "waterway".length() * 6d
)), process(SimpleFeature.create(
GeoUtils.worldToLatLonCoords(rectangle(0, Math.sqrt(1))),
new HashMap<>(Map.<String, Object>of(
"name", "waterway",
"name:es", "waterway es",
"natural", "water",
"water", "pond"
)),
OSM_SOURCE,
null,
10
)));
}
@Test
public void testMarinePoint() {
assertFeatures(11, List.of(), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
new HashMap<>(Map.<String, Object>of(
"scalerank", 1,
"name", "Black sea"
)),
NATURAL_EARTH_SOURCE,
"ne_10m_geography_marine_polys",
0
)));
// name match - use scale rank from NE
assertFeatures(10, List.of(Map.of(
"name", "Black Sea",
"name:es", "Mar Negro",
"_layer", "water_name",
"_type", "point",
"_minzoom", 1,
"_maxzoom", 14
)), process(pointFeature(Map.of(
"rank", 9,
"name", "Black Sea",
"name:es", "Mar Negro",
"place", "sea"
))));
// name match but ocean - use min zoom=0
assertFeatures(10, List.of(Map.of(
"_layer", "water_name",
"_type", "point",
"_minzoom", 0,
"_maxzoom", 14
)), process(pointFeature(Map.of(
"rank", 9,
"name", "Black Sea",
"place", "ocean"
))));
// no name match - use OSM rank
assertFeatures(10, List.of(Map.of(
"_layer", "water_name",
"_type", "point",
"_minzoom", 9,
"_maxzoom", 14
)), process(pointFeature(Map.of(
"rank", 9,
"name", "Atlantic",
"place", "sea"
))));
// no rank at all, default to 8
assertFeatures(10, List.of(Map.of(
"_layer", "water_name",
"_type", "point",
"_minzoom", 8,
"_maxzoom", 14
)), process(pointFeature(Map.of(
"name", "Atlantic",
"place", "sea"
))));
}
}

Wyświetl plik

@ -1,225 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.rectangle;
import static com.onthegomap.planetiler.basemap.BasemapProfile.NATURAL_EARTH_SOURCE;
import static com.onthegomap.planetiler.basemap.BasemapProfile.OSM_SOURCE;
import static com.onthegomap.planetiler.basemap.BasemapProfile.WATER_POLYGON_SOURCE;
import com.onthegomap.planetiler.reader.SimpleFeature;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class WaterTest extends AbstractLayerTest {
@Test
public void testWaterNaturalEarth() {
assertFeatures(0, List.of(Map.of(
"class", "lake",
"intermittent", "<null>",
"_layer", "water",
"_type", "polygon",
"_minzoom", 0
)), process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_110m_lakes",
0
)));
assertFeatures(0, List.of(Map.of(
"class", "ocean",
"intermittent", "<null>",
"_layer", "water",
"_type", "polygon",
"_minzoom", 0
)), process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_110m_ocean",
0
)));
assertFeatures(6, List.of(Map.of(
"class", "lake",
"_layer", "water",
"_type", "polygon",
"_maxzoom", 5
)), process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_10m_lakes",
0
)));
assertFeatures(6, List.of(Map.of(
"class", "ocean",
"_layer", "water",
"_type", "polygon",
"_maxzoom", 5
)), process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_10m_ocean",
0
)));
}
@Test
public void testWaterOsmWaterPolygon() {
assertFeatures(0, List.of(Map.of(
"class", "ocean",
"intermittent", "<null>",
"_layer", "water",
"_type", "polygon",
"_minzoom", 6,
"_maxzoom", 14
)), process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
WATER_POLYGON_SOURCE,
null,
0
)));
}
@Test
public void testWater() {
assertFeatures(14, List.of(Map.of(
"class", "lake",
"_layer", "water",
"_type", "polygon",
"_minzoom", 6,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"natural", "water",
"water", "reservoir"
))));
assertFeatures(14, List.of(
Map.of("_layer", "poi"),
Map.of(
"class", "lake",
"_layer", "water",
"_type", "polygon",
"_minzoom", 6,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"leisure", "swimming_pool"
))));
assertFeatures(14, List.of(), process(polygonFeature(Map.of(
"natural", "bay"
))));
assertFeatures(14, List.of(Map.of()), process(polygonFeature(Map.of(
"natural", "water"
))));
assertFeatures(14, List.of(), process(polygonFeature(Map.of(
"natural", "water",
"covered", "yes"
))));
assertFeatures(14, List.of(Map.of(
"class", "river",
"brunnel", "bridge",
"intermittent", 1,
"_layer", "water",
"_type", "polygon",
"_minzoom", 6,
"_maxzoom", 14
)), process(polygonFeature(Map.of(
"waterway", "stream",
"bridge", "1",
"intermittent", "1"
))));
assertFeatures(11, List.of(Map.of(
"class", "lake",
"brunnel", "<null>",
"intermittent", 0,
"_layer", "water",
"_type", "polygon",
"_minzoom", 6,
"_maxzoom", 14,
"_minpixelsize", 2d
)), process(polygonFeature(Map.of(
"landuse", "salt_pond",
"bridge", "1"
))));
}
@Test
public void testOceanZoomLevels() {
assertCoversZoomRange(0, 14, "water",
process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_110m_ocean",
0
)),
process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_50m_ocean",
0
)),
process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_10m_ocean",
0
)),
process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
WATER_POLYGON_SOURCE,
null,
0
))
);
}
@Test
public void testLakeZoomLevels() {
assertCoversZoomRange(0, 14, "water",
process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_110m_lakes",
0
)),
process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_50m_lakes",
0
)),
process(SimpleFeature.create(
rectangle(0, 10),
Map.of(),
NATURAL_EARTH_SOURCE,
"ne_10m_lakes",
0
)),
process(SimpleFeature.create(
rectangle(0, 10),
Map.of(
"natural", "water",
"water", "reservoir"
),
OSM_SOURCE,
null,
0
))
);
}
}

Wyświetl plik

@ -1,186 +0,0 @@
package com.onthegomap.planetiler.basemap.layers;
import static com.onthegomap.planetiler.TestUtils.newLineString;
import static com.onthegomap.planetiler.basemap.BasemapProfile.NATURAL_EARTH_SOURCE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.reader.SimpleFeature;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
public class WaterwayTest extends AbstractLayerTest {
@Test
public void testWaterwayImportantRiverProcess() {
var charlesRiver = process(lineFeature(Map.of(
"waterway", "river",
"name", "charles river",
"name:es", "es name"
)));
assertFeatures(14, List.of(Map.of(
"class", "river",
"name", "charles river",
"name:es", "es name",
"intermittent", 0,
"_layer", "waterway",
"_type", "line",
"_minzoom", 9,
"_maxzoom", 14,
"_buffer", 4d
)), charlesRiver);
assertFeatures(11, List.of(Map.of(
"class", "river",
"name", "charles river",
"name:es", "es name",
"intermittent", "<null>",
"_buffer", 13.082664546679323
)), charlesRiver);
assertFeatures(10, List.of(Map.of(
"class", "river",
"_buffer", 26.165329093358647
)), charlesRiver);
assertFeatures(9, List.of(Map.of(
"class", "river",
"_buffer", 26.165329093358647
)), charlesRiver);
}
@Test
public void testWaterwayImportantRiverPostProcess() throws GeometryException {
var line1 = new VectorTile.Feature(
Waterway.LAYER_NAME,
1,
VectorTile.encodeGeometry(newLineString(0, 0, 10, 0)),
Map.of("name", "river"),
0
);
var line2 = new VectorTile.Feature(
Waterway.LAYER_NAME,
1,
VectorTile.encodeGeometry(newLineString(10, 0, 20, 0)),
Map.of("name", "river"),
0
);
var connected = new VectorTile.Feature(
Waterway.LAYER_NAME,
1,
VectorTile.encodeGeometry(newLineString(0, 0, 20, 0)),
Map.of("name", "river"),
0
);
assertEquals(
List.of(),
profile.postProcessLayerFeatures(Waterway.LAYER_NAME, 11, List.of())
);
assertEquals(
List.of(line1, line2),
profile.postProcessLayerFeatures(Waterway.LAYER_NAME, 12, List.of(line1, line2))
);
assertEquals(
List.of(connected),
profile.postProcessLayerFeatures(Waterway.LAYER_NAME, 11, List.of(line1, line2))
);
}
@Test
public void testWaterwaySmaller() {
// river with no name is not important
assertFeatures(14, List.of(Map.of(
"class", "river",
"brunnel", "bridge",
"_layer", "waterway",
"_type", "line",
"_minzoom", 12
)), process(lineFeature(Map.of(
"waterway", "river",
"bridge", "1"
))));
assertFeatures(14, List.of(Map.of(
"class", "canal",
"_layer", "waterway",
"_type", "line",
"_minzoom", 12
)), process(lineFeature(Map.of(
"waterway", "canal",
"name", "name"
))));
assertFeatures(14, List.of(Map.of(
"class", "stream",
"_layer", "waterway",
"_type", "line",
"_minzoom", 13
)), process(lineFeature(Map.of(
"waterway", "stream",
"name", "name"
))));
}
@Test
public void testWaterwayNaturalEarth() {
assertFeatures(3, List.of(Map.of(
"class", "river",
"name", "<null>",
"intermittent", "<null>",
"_layer", "waterway",
"_type", "line",
"_minzoom", 3,
"_maxzoom", 3
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"featurecla", "River",
"name", "name"
),
NATURAL_EARTH_SOURCE,
"ne_110m_rivers_lake_centerlines",
0
)));
assertFeatures(6, List.of(Map.of(
"class", "river",
"intermittent", "<null>",
"_layer", "waterway",
"_type", "line",
"_minzoom", 4,
"_maxzoom", 5
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"featurecla", "River",
"name", "name"
),
NATURAL_EARTH_SOURCE,
"ne_50m_rivers_lake_centerlines",
0
)));
assertFeatures(6, List.of(Map.of(
"class", "river",
"intermittent", "<null>",
"_layer", "waterway",
"_type", "line",
"_minzoom", 6,
"_maxzoom", 8
)), process(SimpleFeature.create(
newLineString(0, 0, 1, 1),
Map.of(
"featurecla", "River",
"name", "name"
),
NATURAL_EARTH_SOURCE,
"ne_10m_rivers_lake_centerlines",
0
)));
}
}

Wyświetl plik

@ -1,193 +0,0 @@
package com.onthegomap.planetiler.basemap.util;
import static com.onthegomap.planetiler.TestUtils.assertSubmap;
import static com.onthegomap.planetiler.basemap.util.LanguageUtils.containsOnlyLatinCharacters;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
import com.onthegomap.planetiler.util.Translations;
import com.onthegomap.planetiler.util.Wikidata;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
public class LanguageUtilsTest {
private final Wikidata.WikidataTranslations wikidataTranslations = new Wikidata.WikidataTranslations();
private final Translations translations = Translations.defaultProvider(List.of("en", "es", "de"))
.addTranslationProvider(wikidataTranslations);
@Test
public void testSimpleExample() {
assertSubmap(Map.of(
"name", "name",
"name_en", "english name",
"name_de", "german name"
), LanguageUtils.getNames(Map.of(
"name", "name",
"name:en", "english name",
"name:de", "german name"
), translations));
assertSubmap(Map.of(
"name", "name",
"name_en", "name",
"name_de", "german name"
), LanguageUtils.getNames(Map.of(
"name", "name",
"name:de", "german name"
), translations));
assertSubmap(Map.of(
"name", "name",
"name_en", "english name",
"name_de", "name"
), LanguageUtils.getNames(Map.of(
"name", "name",
"name:en", "english name"
), translations));
}
@ParameterizedTest
@CsvSource({
"abc, true",
"5!, true",
"5~, true",
"é, true",
"éś, true",
"ɏə, true",
"ɐ, false",
"ᵿἀ, false",
"Ḁỿ, true",
"\u02ff\u0370, false",
"\u0030\u036f, true",
"日本, false",
"abc本123, false",
})
public void testIsLatin(String in, boolean isLatin) {
if (!isLatin) {
assertFalse(containsOnlyLatinCharacters(in));
} else {
assertEquals(in, LanguageUtils.getNames(Map.of(
"name", in
), translations).get("name:latin"));
}
}
@ParameterizedTest
@CsvSource(value = {
"abcaāíìś+, null",
"abca日āíìś+, 日+",
"(abc), null",
"日本 (Japan), 日本",
"日本 [Japan - Nippon], 日本",
" Japan - Nippon (Japan) - Japan - 日本 - Japan - Nippon (Japan), 日本",
"Japan - 日本~+ , 日本~+",
"Japan / 日本 / Japan , 日本",
}, nullValues = "null")
public void testRemoveNonLatin(String in, String out) {
assertEquals(out, LanguageUtils.getNames(Map.of(
"name", in
), translations).get("name:nonlatin"));
}
@ParameterizedTest
@CsvSource({
"name, a, true",
"name:en, a, true",
"int_name, a, true",
"name:fr, a, true",
"name:es, a, true",
"name:pt, a, true",
"name:de, a, true",
"name:ar, ِغَّ, false",
"name:it, a, true",
"name:jp, ア, false",
"name:jp-Latn, a, true",
"name:jp_rm, a, true",
})
public void testLatinFallbacks(String key, String value, boolean use) {
assertEquals(use ? value : null, LanguageUtils.getNames(Map.of(
key, value
), translations).get("name:latin"));
}
@ParameterizedTest
@CsvSource({
"キャンパス, kyanpasu",
"Αλφαβητικός Κατάλογος, Alphabētikós Katálogos",
"биологическом, biologičeskom",
})
public void testTransliterate(String in, String out) {
assertEquals(out, LanguageUtils.getNames(Map.of(
"name", in
), translations).get("name:latin"));
translations.setShouldTransliterate(false);
assertNull(LanguageUtils.getNames(Map.of(
"name", in
), translations).get("name:latin"));
}
@Test
public void testUseWikidata() {
wikidataTranslations.put(123, "es", "es name");
assertSubmap(Map.of(
"name:es", "es name"
), LanguageUtils.getNames(Map.of(
"name", "name",
"wikidata", "Q123"
), translations));
}
@Test
public void testUseOsm() {
assertSubmap(Map.of(
"name:es", "es name osm"
), LanguageUtils.getNames(Map.of(
"name", "name",
"wikidata", "Q123",
"name:es", "es name osm"
), translations));
}
@Test
public void testPreferWikidata() {
wikidataTranslations.put(123, "es", "wd es name");
assertSubmap(Map.of(
"name:es", "wd es name",
"name:de", "de name osm"
), LanguageUtils.getNames(Map.of(
"name", "name",
"wikidata", "Q123",
"name:es", "es name osm",
"name:de", "de name osm"
), translations));
}
@Test
public void testDontUseTranslationsWhenNotSpecified() {
var result = LanguageUtils.getNamesWithoutTranslations(Map.of(
"name", "name",
"wikidata", "Q123",
"name:es", "es name osm",
"name:de", "de name osm"
));
assertNull(result.get("name:es"));
assertNull(result.get("name:de"));
assertEquals("name", result.get("name"));
}
@Test
public void testIgnoreLanguages() {
wikidataTranslations.put(123, "ja", "ja name wd");
var result = LanguageUtils.getNamesWithoutTranslations(Map.of(
"name", "name",
"wikidata", "Q123",
"name:ja", "ja name osm"
));
assertNull(result.get("name:ja"));
}
}

Wyświetl plik

@ -1,62 +0,0 @@
package com.onthegomap.planetiler.basemap.util;
import static com.onthegomap.planetiler.geo.GeoUtils.point;
import static com.onthegomap.planetiler.util.Gzip.gzip;
import static org.junit.jupiter.api.Assertions.assertTrue;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.mbtiles.Mbtiles;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class VerifyMonacoTest {
private Mbtiles mbtiles;
@BeforeEach
public void setup() {
mbtiles = Mbtiles.newInMemoryDatabase();
}
@AfterEach
public void teardown() throws IOException {
mbtiles.close();
}
@Test
public void testEmptyFileInvalid() {
assertInvalid(mbtiles);
}
@Test
public void testEmptyTablesInvalid() {
mbtiles.createTables().addTileIndex();
assertInvalid(mbtiles);
}
@Test
public void testStilInvalidWithOneTile() throws IOException {
mbtiles.createTables().addTileIndex();
mbtiles.metadata().setName("name");
try (var writer = mbtiles.newBatchedTileWriter()) {
VectorTile tile = new VectorTile();
tile.addLayerFeatures("layer", List.of(new VectorTile.Feature(
"layer",
1,
VectorTile.encodeGeometry(point(0, 0)),
Map.of()
)));
writer.write(TileCoord.ofXYZ(0, 0, 0), gzip(tile.encode()));
}
assertInvalid(mbtiles);
}
private void assertInvalid(Mbtiles mbtiles) {
assertTrue(VerifyMonaco.verify(mbtiles).numErrors() > 0);
}
}

Wyświetl plik

@ -9,19 +9,19 @@
<parent>
<groupId>com.onthegomap.planetiler</groupId>
<artifactId>planetiler-parent</artifactId>
<version>0.2-SNAPSHOT</version>
<version>${revision}</version>
</parent>
<dependencies>
<dependency>
<groupId>com.onthegomap.planetiler</groupId>
<artifactId>planetiler-core</artifactId>
<version>${project.parent.version}</version>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.onthegomap.planetiler</groupId>
<artifactId>planetiler-basemap</artifactId>
<version>${project.parent.version}</version>
<groupId>org.openmaptiles</groupId>
<artifactId>planetiler-openmaptiles</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
@ -30,7 +30,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<version>3.7.1</version>
<!-- for with-deps assembly descriptor -->
<dependencies>
<dependency>

Wyświetl plik

@ -1,90 +0,0 @@
package com.onthegomap.planetiler.benchmarks;
import com.graphhopper.reader.ReaderElementUtils;
import com.graphhopper.reader.ReaderNode;
import com.graphhopper.reader.ReaderRelation;
import com.graphhopper.reader.ReaderWay;
import com.onthegomap.planetiler.basemap.BasemapProfile;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.expression.MultiExpression;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.reader.osm.OsmInputFile;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.util.Translations;
import java.io.IOException;
import java.nio.file.Path;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.locationtech.jts.geom.Geometry;
/**
* Performance tests for {@link MultiExpression}. Times how long a sample of elements from an OSM input file take to
* match.
*/
public class BasemapMapping {
public static void main(String[] args) throws IOException {
var profile = new BasemapProfile(Translations.nullProvider(List.of()), PlanetilerConfig.defaults(),
Stats.inMemory());
var random = new Random(0);
var input = new OsmInputFile(Path.of("data", "sources", "north-america_us_massachusetts.pbf"));
List<SourceFeature> inputs = new ArrayList<>();
input.readTo(readerElem -> {
if (random.nextDouble() < 0.2) {
if (inputs.size() % 1_000_000 == 0) {
System.err.println(inputs.size());
}
var props = ReaderElementUtils.getTags(readerElem);
inputs.add(new SourceFeature(props, "", "", null, readerElem.getId()) {
@Override
public Geometry latLonGeometry() {
return null;
}
@Override
public Geometry worldGeometry() {
return null;
}
@Override
public boolean isPoint() {
return readerElem instanceof ReaderNode;
}
@Override
public boolean canBePolygon() {
return readerElem instanceof ReaderWay || readerElem instanceof ReaderRelation;
}
@Override
public boolean canBeLine() {
return readerElem instanceof ReaderWay;
}
});
}
}, "reader", 3);
System.err.println("read " + inputs.size() + " elems");
long startStart = System.nanoTime();
long count = -1;
while (true) {
count++;
long start = System.nanoTime();
int i = 0;
for (SourceFeature in : inputs) {
i += profile.getTableMatches(in).size();
}
if (count == 0) {
startStart = System.nanoTime();
System.err.println("finished warmup");
} else {
System.err.println(
"took:" + Duration.ofNanos(System.nanoTime() - start).toMillis() + "ms found:" + i + " avg:" + (Duration
.ofNanos(System.nanoTime() - startStart).toMillis() / count) + "ms");
}
}
}
}

Wyświetl plik

@ -0,0 +1,124 @@
package com.onthegomap.planetiler.benchmarks;
import com.google.common.base.Stopwatch;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.mbtiles.Mbtiles;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BenchmarkMbtilesRead {
private static final Logger LOGGER = LoggerFactory.getLogger(BenchmarkMbtilesRead.class);
private static final String SELECT_RANDOM_COORDS =
"select tile_column, tile_row, zoom_level from tiles order by random() limit ?";
public static void main(String[] args) throws Exception {
Arguments arguments = Arguments.fromArgs(args);
int repetitions = arguments.getInteger("bench_repetitions", "number of repetitions", 10);
int nrTileReads = arguments.getInteger("bench_nr_tile_reads", "number of tiles to read", 500_000);
int preWarms = arguments.getInteger("bench_pre_warms", "number of pre warm runs", 3);
List<Path> mbtilesPaths = arguments.getList("bench_mbtiles", "the mbtiles file to read from", List.of()).stream()
.map(Paths::get).toList();
if (mbtilesPaths.isEmpty()) {
throw new IllegalArgumentException("pass one or many paths to the same mbtiles file");
}
mbtilesPaths.stream().forEach(p -> {
if (!Files.exists(p) || !Files.isRegularFile(p)) {
throw new IllegalArgumentException("%s does not exists".formatted(p));
}
});
List<TileCoord> randomCoordsToFetchPerRepetition = new LinkedList<>();
do {
try (var db = Mbtiles.newReadOnlyDatabase(mbtilesPaths.getFirst())) {
try (var statement = db.connection().prepareStatement(SELECT_RANDOM_COORDS)) {
statement.setInt(1, nrTileReads - randomCoordsToFetchPerRepetition.size());
var rs = statement.executeQuery();
while (rs.next()) {
int x = rs.getInt("tile_column");
int y = rs.getInt("tile_row");
int z = rs.getInt("zoom_level");
randomCoordsToFetchPerRepetition.add(TileCoord.ofXYZ(x, (1 << z) - 1 - y, z));
}
}
}
} while (randomCoordsToFetchPerRepetition.size() < nrTileReads);
Map<Path, Double> avgReadOperationsPerSecondPerDb = new HashMap<>();
for (Path dbPath : mbtilesPaths) {
List<ReadResult> results = new LinkedList<>();
LOGGER.info("working on {}", dbPath);
for (int preWarm = 0; preWarm < preWarms; preWarm++) {
readEachTile(randomCoordsToFetchPerRepetition, dbPath);
}
for (int rep = 0; rep < repetitions; rep++) {
results.add(readEachTile(randomCoordsToFetchPerRepetition, dbPath));
}
var readOperationsPerSecondStats =
results.stream().mapToDouble(ReadResult::readOperationsPerSecond).summaryStatistics();
LOGGER.info("readOperationsPerSecondStats: {}", readOperationsPerSecondStats);
avgReadOperationsPerSecondPerDb.put(dbPath, readOperationsPerSecondStats.getAverage());
}
List<Path> keysSorted = avgReadOperationsPerSecondPerDb.entrySet().stream()
.sorted((o1, o2) -> o1.getValue().compareTo(o2.getValue()))
.map(Map.Entry::getKey)
.toList();
LOGGER.info("diffs");
for (int i = 0; i < keysSorted.size() - 1; i++) {
for (int j = i + 1; j < keysSorted.size(); j++) {
Path db0 = keysSorted.get(i);
double avg0 = avgReadOperationsPerSecondPerDb.get(db0);
Path db1 = keysSorted.get(j);
double avg1 = avgReadOperationsPerSecondPerDb.get(db1);
double diff = avg1 * 100 / avg0 - 100;
LOGGER.info("\"{}\" to \"{}\": avg read operations per second improved by {}%", db0, db1, diff);
}
}
}
private static ReadResult readEachTile(List<TileCoord> coordsToFetch, Path dbPath) throws IOException {
try (var db = Mbtiles.newReadOnlyDatabase(dbPath)) {
db.getTile(0, 0, 0); // trigger prepared statement creation
var totalSw = Stopwatch.createStarted();
for (var coordToFetch : coordsToFetch) {
if (db.getTile(coordToFetch) == null) {
throw new IllegalStateException("%s should exist in %s".formatted(coordToFetch, dbPath));
}
}
totalSw.stop();
return new ReadResult(totalSw.elapsed(), coordsToFetch.size());
}
}
private record ReadResult(Duration duration, int coordsFetchedCount) {
double readOperationsPerSecond() {
double secondsFractional = duration.toNanos() / 1E9;
return coordsFetchedCount / secondsFractional;
}
}
}

Wyświetl plik

@ -0,0 +1,143 @@
package com.onthegomap.planetiler.benchmarks;
import com.google.common.base.Stopwatch;
import com.onthegomap.planetiler.archive.TileEncodingResult;
import com.onthegomap.planetiler.archive.WriteableTileArchive.TileWriter;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.mbtiles.Mbtiles;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.DoubleSummaryStatistics;
import java.util.OptionalLong;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BenchmarkMbtilesWriter {
private static final Logger LOGGER = LoggerFactory.getLogger(BenchmarkMbtilesWriter.class);
public static void main(String[] args) throws IOException {
Arguments arguments = Arguments.fromArgs(args);
int tilesToWrite = arguments.getInteger("bench_tiles_to_write", "number of tiles to write", 1_000_000);
int repetitions = arguments.getInteger("bench_repetitions", "number of repetitions", 10);
/*
* select count(distinct(tile_data_id)) * 100.0 / count(*) from tiles_shallow
* => ~8% (Australia)
*/
int distinctTilesInPercent = arguments.getInteger("bench_distinct_tiles", "distinct tiles in percent", 10);
/*
* select avg(length(tile_data))
* from (select tile_data_id from tiles_shallow group by tile_data_id having count(*) = 1) as x
* join tiles_data using(tile_data_id)
* => ~785 (Australia)
*/
int distinctTileDataSize =
arguments.getInteger("bench_distinct_tile_data_size", "distinct tile data size in bytes", 800);
/*
* select avg(length(tile_data))
* from (select tile_data_id from tiles_shallow group by tile_data_id having count(*) > 1) as x
* join tiles_shallow using(tile_data_id)
* join tiles_data using(tile_data_id)
* => ~93 (Australia)
*/
int dupeTileDataSize = arguments.getInteger("bench_dupe_tile_data_size", "dupe tile data size in bytes", 100);
/*
* select count(*) * 100.0 / sum(usage_count)
* from (select tile_data_id, count(*) as usage_count from tiles_shallow group by tile_data_id having count(*) > 1)
* => ~0.17% (Australia)
*/
int dupeSpreadInPercent = arguments.getInteger("bench_dupe_spread", "dupe spread in percent", 10);
byte[] distinctTileData = createFilledByteArray(distinctTileDataSize);
byte[] dupeTileData = createFilledByteArray(dupeTileDataSize);
PlanetilerConfig config = PlanetilerConfig.from(arguments);
DoubleSummaryStatistics tileWritesPerSecondsStats = new DoubleSummaryStatistics();
for (int repetition = 0; repetition < repetitions; repetition++) {
Path outputPath = getTempOutputPath();
try (var mbtiles = Mbtiles.newWriteToFileDatabase(outputPath, config.arguments())) {
if (mbtiles.skipIndexCreation()) {
mbtiles.createTablesWithoutIndexes();
} else {
mbtiles.createTablesWithIndexes();
}
try (var writer = mbtiles.newTileWriter()) {
Stopwatch sw = Stopwatch.createStarted();
writeTiles(writer, tilesToWrite, distinctTilesInPercent, distinctTileData, dupeTileData, dupeSpreadInPercent);
sw.stop();
double secondsFractional = sw.elapsed(TimeUnit.NANOSECONDS) / 1E9;
double tileWritesPerSecond = tilesToWrite / secondsFractional;
tileWritesPerSecondsStats.accept(tileWritesPerSecond);
}
} finally {
Files.delete(outputPath);
}
}
LOGGER.info("tileWritesPerSecondsStats: {}", tileWritesPerSecondsStats);
}
private static void writeTiles(TileWriter writer, int tilesToWrite, int distinctTilesInPercent,
byte[] distinctTileData, byte[] dupeTileData, int dupeSpreadInPercent) {
int dupesToWrite = (int) Math.round(tilesToWrite * (100 - distinctTilesInPercent) / 100.0);
int dupeHashMod = (int) Math.round(dupesToWrite * dupeSpreadInPercent / 100.0);
int tilesWritten = 0;
int dupeCounter = 0;
for (int z = 0; z <= 14; z++) {
int maxCoord = 1 << z;
for (int x = 0; x < maxCoord; x++) {
for (int y = maxCoord - 1; y >= 0; y--) {
TileCoord coord = TileCoord.ofXYZ(x, y, z);
TileEncodingResult toWrite;
if (tilesWritten % 100 < distinctTilesInPercent) {
toWrite = new TileEncodingResult(coord, distinctTileData, OptionalLong.empty());
} else {
++dupeCounter;
int hash = dupeHashMod == 0 ? 0 : dupeCounter % dupeHashMod;
toWrite = new TileEncodingResult(coord, dupeTileData, OptionalLong.of(hash));
}
writer.write(toWrite);
if (++tilesWritten >= tilesToWrite) {
return;
}
}
}
}
}
private static Path getTempOutputPath() {
File f;
try {
f = File.createTempFile("planetiler", ".mbtiles");
} catch (IOException e) {
throw new IllegalStateException(e);
}
f.deleteOnExit();
return f.toPath();
}
private static byte[] createFilledByteArray(int len) {
byte[] data = new byte[len];
new Random(0).nextBytes(data);
return data;
}
}

Some files were not shown because too many files have changed in this diff Show More