Porównaj commity

...

159 Commity
v0.7.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
161 zmienionych plików z 34986 dodań i 1857 usunięć

Wyświetl plik

@ -3,36 +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.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
- 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

@ -18,10 +18,10 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up JDK 17
uses: actions/setup-java@v3
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 17
java-version: 21
distribution: 'temurin'
cache: 'maven'
- name: Ensure code formatted with mvn spotless:apply
@ -34,13 +34,14 @@ jobs:
fail-fast: false
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
jdk: [ 17 ]
jdk: [ 21 ]
include:
- os: ubuntu-latest
jdk: 17
jdk: 21
args: "-DargLine='-Duser.language=fr -Duser.country=FR'"
- os: ubuntu-latest
jdk: 20
jdk: 21
args: ""
runs-on: ${{ matrix.os }}
timeout-minutes: 15
steps:
@ -48,7 +49,7 @@ jobs:
with:
submodules: true
- name: Set up JDK ${{ matrix.jdk }}
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.jdk }}
distribution: 'temurin'
@ -71,10 +72,10 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up JDK 17
uses: actions/setup-java@v3
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 17
java-version: 21
distribution: 'temurin'
- name: Build and test
run: mvn --batch-mode -no-transfer-progress package --file standalone.pom.xml
@ -100,9 +101,9 @@ jobs:
- name: Cache data/sources
uses: ./.github/cache-sources-action
- name: Set up JDK
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: 17
java-version: 21
distribution: 'temurin'
cache: 'maven'
@ -110,7 +111,7 @@ jobs:
run: ./mvnw -DskipTests -Dimage.version=CI_ONLY --batch-mode -no-transfer-progress package jib:dockerBuild --file pom.xml
- name: 'Upload artifact'
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: planetiler-build
path: planetiler-dist/target/*with-deps.jar
@ -137,9 +138,9 @@ jobs:
- name: Cache data/sources
uses: ./.github/cache-sources-action
- name: Set up JDK
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: 17
java-version: 21
distribution: 'temurin'
cache: 'maven'

Wyświetl plik

@ -23,7 +23,7 @@ jobs:
continue-on-error: true
steps:
- name: 'Cancel previous runs'
uses: styfle/cancel-workflow-action@0.11.0
uses: styfle/cancel-workflow-action@0.12.1
with:
access_token: ${{ github.token }}
- name: 'Checkout branch'
@ -42,12 +42,12 @@ jobs:
with:
basedir: branch
- name: Set up JDK
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: 17
java-version: 21
distribution: 'temurin'
cache: 'maven'
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: '14'
- run: npm install -g strip-ansi-cli@3.0.2
@ -88,7 +88,7 @@ jobs:
cat log | strip-ansi > build-info/baselogs.txt
- name: 'Upload build-info'
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: build-info
path: ./build-info

Wyświetl plik

@ -18,65 +18,65 @@ jobs:
contents: write
packages: write
steps:
- name: Ensure version does not start with 'v'
uses: actions/github-script@v6
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@v3
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@v6
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

@ -21,37 +21,37 @@ jobs:
contents: read
packages: write
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@v3
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
- run: sha256sum planetiler-dist/target/*with-deps.jar
- run: md5sum planetiler-dist/target/*with-deps.jar
- name: 'Upload artifact'
uses: actions/upload-artifact@v3
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 }}
- 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 }}

Wyświetl plik

@ -15,66 +15,66 @@ jobs:
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 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'
cache: 'maven'
- name: Cache SonarCloud packages
uses: actions/cache@v3
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@v6
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)}`);
}
});
- 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,75 +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@v4
with:
submodules: true
- 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
- 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 }}

Wyświetl plik

@ -11,12 +11,13 @@ Pull requests are welcome! Any pull request should:
To set up your local development environment:
- Fork the repo [setup submodules](README.md#git-submodules)
- Install Java 17 or later. You can download Java manually from [Adoptium](https://adoptium.net/installation.html) or
- 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 openjdk17-temurin`)
- [Linux installer](https://adoptium.net/installation/linux/) (or `apt-get install openjdk-17-jdk`)
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`
@ -54,7 +55,7 @@ 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 17 or later
- 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

Wyświetl plik

@ -3,9 +3,9 @@
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 17 or later installed and at least 10x as much disk space and at least 0.5x as much RAM as the `planet.osm.pbf`
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 17 installed through `apt`. Planetiler splits work
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
@ -84,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:

Wyświetl plik

@ -33,7 +33,7 @@ the [OpenStreetMap Americana Project](https://github.com/ZeLonewolf/openstreetma
To generate a map of an area using the [OpenMapTiles profile](https://github.com/openmaptiles/planetiler-openmaptiles),
you will need:
- Java 17+ (see [CONTRIBUTING.md](CONTRIBUTING.md)) 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 0.5x as much free RAM as the input `.osm.pbf` file size
@ -162,23 +162,23 @@ consider [contributing](#contributing) your change back for others to use!
Some example runtimes for the OpenMapTiles profile (excluding downloading resources):
| Input | Version | Machine | Time | mbtiles size | Logs |
|-------------------------------------------------------------------------------------------------------------------------------------------|---------|---------------------------------|---------------------------------|--------------|------------------------------------------------------------------------------------------------------------------------|
| s3://osm-pds/2022/planet-220530.osm.pbf (69GB) | 0.5.0 | c2d-standard-112 (112cpu/448GB) | 37m cpu:48h5m gc:3m45s avg:76.9 | 79GB | [logs](planet-logs/v0.5.0-planet-c2d-standard-112.txt) |
| s3://osm-pds/2022/planet-220530.osm.pbf (69GB) | 0.5.0 | c6gd.16xlarge (64cpu/128GB) | 53m cpu:41h58m avg:47.1 | 79GB | [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 | [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 | [logs](planet-logs/v0.5.0-planet-c6gd-32gb.txt) |
| s3://osm-pds/2021/planet-211011.osm.pbf (65GB) | 0.1.0 | 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) | 0.1.0 | DO 16cpu 128GB | 3h13m cpu:43h40m avg:13.5 | 101GB | [logs](planet-logs/v0.1.0-daylight-do-16cpu-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 | mbtiles size | Logs |
|------------------------------------------------|---------|----------------------------------------------------------|--------------------------|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| s3://osm-pds/2022/planet-220530.osm.pbf (69GB) | 0.5.0 | c2d-standard-112 (112cpu/448GB) | 26m cpu:27h47m avg:63.9 | 79GB | [logs](planet-logs/v0.5.0-planet-c2d-standard-112-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 | [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) |
| s3://osm-pds/2021/planet-220214.osm.pbf (67GB) | 0.3.0 | r6g.16xlarge (64cpu/512GB) with ramdisk and write to EFS | 1h1m cpu:24h33m avg:24.3 | 104GB | [logs](planet-logs/v0.3.0-planet-r6g-64cpu-512gb-ramdisk.txt) |
| s3://osm-pds/2021/planet-211011.osm.pbf (65GB) | 0.1.0 | 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) |
| 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

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

@ -30,7 +30,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.0</version>
<version>3.7.1</version>
<!-- for with-deps assembly descriptor -->
<dependencies>
<dependency>

Wyświetl plik

@ -47,7 +47,7 @@ public class BenchmarkMbtilesRead {
List<TileCoord> randomCoordsToFetchPerRepetition = new LinkedList<>();
do {
try (var db = Mbtiles.newReadOnlyDatabase(mbtilesPaths.get(0))) {
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();

Wyświetl plik

@ -15,7 +15,7 @@ public class BenchmarkKWayMerge {
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
System.err.println();
testMinHeap("quaternary", LongMinHeap::newArrayHeap);
testMinHeap("quaternary", n -> LongMinHeap.newArrayHeap(n, Integer::compare));
System.err.println(String.join("\t",
"priorityqueue",
Long.toString(testPriorityQueue(10).toMillis()),

Wyświetl plik

@ -0,0 +1,57 @@
package com.onthegomap.planetiler.collection;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class StressTestKWayMerge {
public static void main(String[] args) throws InterruptedException {
for (int i = 1; i < 20; i++) {
test(i, 100_000, 200_000);
}
for (int i = 50; i <= 500; i += 50) {
test(i, 10_000, 20_000);
}
test(5_000, 1000, 2000);
}
private static void test(int n, long items, long maxKey) throws InterruptedException {
System.out.println("test(" + n + ")");
var random = new Random(0);
List<List<SortableFeature>> featureLists = new ArrayList<>();
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
for (int i = 0; i < n; i++) {
List<SortableFeature> list = new ArrayList<>();
featureLists.add(list);
for (int j = 0; j < items; j++) {
byte[] bytes = new byte[random.nextInt(1, 10)];
random.nextBytes(bytes);
list.add(new SortableFeature(random.nextLong(maxKey), bytes));
}
executorService.submit(() -> list.sort(Comparator.naturalOrder()));
}
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.DAYS);
var iter =
LongMerger.mergeIterators(featureLists.stream().map(List::iterator).toList(), SortableFeature.COMPARE_BYTES);
var last = iter.next();
int i = 1;
while (iter.hasNext()) {
i++;
var item = iter.next();
if (last.compareTo(item) > 0) {
System.err
.println("items out of order lists=" + n + " last=" + last + " item=" + item + " i=" + i);
return;
}
last = item;
}
}
}

Wyświetl plik

@ -16,11 +16,11 @@
</parent>
<properties>
<geotools.version>29.2</geotools.version>
<log4j.version>2.20.0</log4j.version>
<geotools.version>31.0</geotools.version>
<log4j.version>2.23.1</log4j.version>
<prometheus.version>0.16.0</prometheus.version>
<protobuf.version>3.24.3</protobuf.version>
<geopackage.version>6.6.2</geopackage.version>
<protobuf.version>3.25.3</protobuf.version>
<geopackage.version>6.6.5</geopackage.version>
</properties>
<dependencies>
@ -32,7 +32,7 @@
<dependency>
<groupId>org.roaringbitmap</groupId>
<artifactId>RoaringBitmap</artifactId>
<version>1.0.0</version>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
@ -42,7 +42,7 @@
<dependency>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-ffi</artifactId>
<version>2.2.15</version>
<version>2.2.16</version>
</dependency>
<dependency>
<groupId>org.locationtech.jts</groupId>
@ -67,17 +67,17 @@
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.43.0.0</version>
<version>3.45.3.0</version>
</dependency>
<dependency>
<groupId>org.msgpack</groupId>
<artifactId>msgpack-core</artifactId>
<version>0.9.6</version>
<version>0.9.8</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
<version>2.0.13</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
@ -142,17 +142,23 @@
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>73.2</version>
<version>75.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.2-jre</version>
<version>33.2.0-jre</version>
</dependency>
<dependency>
<groupId>mil.nga.geopackage</groupId>
<artifactId>geopackage</artifactId>
<version>${geopackage.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
@ -174,7 +180,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<version>3.4.1</version>
<executions>
<execution>
<goals>

Wyświetl plik

@ -15,6 +15,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.locationtech.jts.algorithm.construct.MaximumInscribedCircle;
import org.locationtech.jts.geom.Geometry;
/**
@ -22,16 +23,13 @@ import org.locationtech.jts.geom.Geometry;
* feature.
* <p>
* For example to add a polygon feature for a lake and a center label point with its name:
*
* <pre>
* {@code
* {@snippet :
* featureCollector.polygon("water")
* .setAttr("class", "lake");
* featureCollector.centroid("water_name")
* .setAttr("class", "lake")
* .setAttr("name", element.getString("name"));
* }
* </pre>
*/
public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
@ -82,7 +80,7 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
}
return geometry(layer, source.worldGeometry());
} catch (GeometryException e) {
e.log(stats, "feature_point", "Error getting point geometry for " + source.id());
e.log(stats, "feature_point", "Error getting point geometry for " + source);
return new Feature(layer, EMPTY_GEOM, source.id());
}
}
@ -102,7 +100,7 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
try {
return geometry(layer, source.line());
} catch (GeometryException e) {
e.log(stats, "feature_line", "Error constructing line for " + source.id());
e.log(stats, "feature_line", "Error constructing line for " + source);
return new Feature(layer, EMPTY_GEOM, source.id());
}
}
@ -122,7 +120,7 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
try {
return geometry(layer, source.polygon());
} catch (GeometryException e) {
e.log(stats, "feature_polygon", "Error constructing polygon for " + source.id());
e.log(stats, "feature_polygon", "Error constructing polygon for " + source);
return new Feature(layer, EMPTY_GEOM, source.id());
}
}
@ -137,7 +135,7 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
try {
return geometry(layer, source.centroid());
} catch (GeometryException e) {
e.log(stats, "feature_centroid", "Error getting centroid for " + source.id());
e.log(stats, "feature_centroid", "Error getting centroid for " + source);
return new Feature(layer, EMPTY_GEOM, source.id());
}
}
@ -154,7 +152,7 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
try {
return geometry(layer, source.centroidIfConvex());
} catch (GeometryException e) {
e.log(stats, "feature_centroid_if_convex", "Error constructing centroid if convex for " + source.id());
e.log(stats, "feature_centroid_if_convex", "Error constructing centroid if convex for " + source);
return new Feature(layer, EMPTY_GEOM, source.id());
}
}
@ -170,11 +168,60 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
try {
return geometry(layer, source.pointOnSurface());
} catch (GeometryException e) {
e.log(stats, "feature_point_on_surface", "Error constructing point on surface for " + source.id());
e.log(stats, "feature_point_on_surface", "Error constructing point on surface for " + source);
return new Feature(layer, EMPTY_GEOM, source.id());
}
}
/**
* Starts building a new point map feature at the furthest interior point of a polygon from its edge using
* {@link MaximumInscribedCircle} (aka "pole of inaccessibility") of the source feature.
* <p>
* NOTE: This is substantially more expensive to compute than {@link #centroid(String)} or
* {@link #pointOnSurface(String)}, especially for small {@code tolerance} values.
*
* @param layer the output vector tile layer this feature will be written to
* @param tolerance precision for calculating maximum inscribed circle. 0.01 means 1% of the square root of the area.
* Smaller values for a more precise tolerance become very expensive to compute. Values between 5%
* and 10% are a good compromise of performance vs. precision.
* @return a feature that can be configured further.
*/
public Feature innermostPoint(String layer, double tolerance) {
try {
return geometry(layer, source.innermostPoint(tolerance));
} catch (GeometryException e) {
e.log(stats, "feature_innermost_point", "Error constructing innermost point for " + source);
return new Feature(layer, EMPTY_GEOM, source.id());
}
}
/** Alias for {@link #innermostPoint(String, double)} with a default tolerance of 10%. */
public Feature innermostPoint(String layer) {
return innermostPoint(layer, 0.1);
}
/** Returns the minimum zoom level at which this feature is at least {@code pixelSize} pixels large. */
public int getMinZoomForPixelSize(double pixelSize) {
try {
return GeoUtils.minZoomForPixelSize(source.size(), pixelSize);
} catch (GeometryException e) {
e.log(stats, "min_zoom_for_size_failure", "Error getting min zoom for size from geometry " + source);
return config.maxzoom();
}
}
/** Returns the actual pixel size of the source feature at {@code zoom} (length if line, sqrt(area) if polygon). */
public double getPixelSizeAtZoom(int zoom) {
try {
return source.size() * (256 << zoom);
} catch (GeometryException e) {
e.log(stats, "source_feature_pixel_size_at_zoom_failure",
"Error getting source feature pixel size at zoom from geometry " + source);
return 0;
}
}
/**
* Creates new feature collector instances for each source feature that we encounter.
*/
@ -233,6 +280,10 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
this.geom = geom;
this.geometryType = GeometryType.typeOf(geom);
this.id = id;
if (geometryType == GeometryType.POINT) {
minPixelSizeAtMaxZoom = 0;
defaultMinPixelSize = 0;
}
}
/** Returns the original ID of the source feature that this feature came from (i.e. OSM node/way ID). */
@ -262,8 +313,8 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
/**
* Sets the value by which features are sorted within a layer in the output vector tile. Sort key gets packed into
* {@link FeatureGroup#SORT_KEY_BITS} bits so the range of this is limited to {@code -(2^(bits-1))} to {@code
* (2^(bits-1))-1}.
* {@link FeatureGroup#SORT_KEY_BITS} bits so the range of this is limited to {@code -(2^(bits-1))} to
* {@code (2^(bits-1))-1}.
* <p>
* Circles, lines, and polygons are rendered in the order they appear in each layer, so features that appear later
* (higher sort key) show up on top of features with a lower sort key.
@ -674,6 +725,29 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
return setAttr(key, ZoomFunction.minZoom(minzoom, value));
}
/**
* Sets the value for {@code key} only at zoom levels where the feature is at least {@code minPixelSize} pixels in
* size.
*/
public Feature setAttrWithMinSize(String key, Object value, double minPixelSize) {
return setAttrWithMinzoom(key, value, getMinZoomForPixelSize(minPixelSize));
}
/**
* Sets the value for {@code key} so that it always shows when {@code zoom_level >= minZoomToShowAlways} but only
* shows when {@code minZoomIfBigEnough <= zoom_level < minZoomToShowAlways} when it is at least
* {@code minPixelSize} pixels in size.
* <p>
* If you need more flexibility, use {@link #getMinZoomForPixelSize(double)} directly, or create a
* {@link ZoomFunction} that calculates {@link #getPixelSizeAtZoom(int)} and applies a custom threshold based on the
* zoom level.
*/
public Feature setAttrWithMinSize(String key, Object value, double minPixelSize, int minZoomIfBigEnough,
int minZoomToShowAlways) {
return setAttrWithMinzoom(key, value,
Math.clamp(getMinZoomForPixelSize(minPixelSize), minZoomIfBigEnough, minZoomToShowAlways));
}
/**
* Inserts all key/value pairs in {@code attrs} into the set of attribute to emit on the output feature at or above
* {@code minzoom}.
@ -706,6 +780,14 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
return this;
}
/**
* Returns the attribute key that the renderer should use to store the number of points in the simplified geometry
* before slicing it into tiles.
*/
public String getNumPointsAttr() {
return numPointsAttr;
}
/**
* Sets a special attribute key that the renderer will use to store the number of points in the simplified geometry
* before slicing it into tiles.
@ -715,12 +797,10 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
return this;
}
/**
* Returns the attribute key that the renderer should use to store the number of points in the simplified geometry
* before slicing it into tiles.
*/
public String getNumPointsAttr() {
return numPointsAttr;
/** Omit this feature from the output */
public Feature omit() {
output.remove(this);
return this;
}
@Override
@ -731,5 +811,10 @@ public class FeatureCollector implements Iterable<FeatureCollector.Feature> {
", attrs=" + attrs +
'}';
}
/** Returns the actual pixel size of the source feature at {@code zoom} (length if line, sqrt(area) if polygon). */
public double getSourceFeaturePixelSizeAtZoom(int zoom) {
return getPixelSizeAtZoom(zoom);
}
}
}

Wyświetl plik

@ -28,6 +28,8 @@ import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.LinearRing;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.geom.Polygonal;
import org.locationtech.jts.geom.TopologyException;
import org.locationtech.jts.geom.util.GeometryFixer;
import org.locationtech.jts.index.strtree.STRtree;
import org.locationtech.jts.operation.buffer.BufferOp;
import org.locationtech.jts.operation.buffer.BufferParameters;
@ -124,7 +126,7 @@ public class FeatureMerge {
List<VectorTile.Feature> result = new ArrayList<>(features.size());
var groupedByAttrs = groupByAttrs(features, result, geometryType);
for (List<VectorTile.Feature> groupedFeatures : groupedByAttrs) {
VectorTile.Feature feature1 = groupedFeatures.get(0);
VectorTile.Feature feature1 = groupedFeatures.getFirst();
if (groupedFeatures.size() == 1) {
result.add(feature1);
} else {
@ -158,7 +160,7 @@ public class FeatureMerge {
List<VectorTile.Feature> result = new ArrayList<>(features.size());
var groupedByAttrs = groupByAttrs(features, result, GeometryType.LINE);
for (List<VectorTile.Feature> groupedFeatures : groupedByAttrs) {
VectorTile.Feature feature1 = groupedFeatures.get(0);
VectorTile.Feature feature1 = groupedFeatures.getFirst();
double lengthLimit = lengthLimitCalculator.apply(feature1.attrs());
// as a shortcut, can skip line merging only if:
@ -300,7 +302,7 @@ public class FeatureMerge {
Collection<List<VectorTile.Feature>> groupedByAttrs = groupByAttrs(features, result, GeometryType.POLYGON);
for (List<VectorTile.Feature> groupedFeatures : groupedByAttrs) {
List<Polygon> outPolygons = new ArrayList<>();
VectorTile.Feature feature1 = groupedFeatures.get(0);
VectorTile.Feature feature1 = groupedFeatures.getFirst();
List<Geometry> geometries = new ArrayList<>(groupedFeatures.size());
for (var feature : groupedFeatures) {
try {
@ -322,7 +324,7 @@ public class FeatureMerge {
// spinning for a very long time on very dense tiles.
// TODO use some heuristic to choose bufferUnbuffer vs. bufferUnionUnbuffer based on the number small
// polygons in the group?
merged = bufferUnionUnbuffer(buffer, polygonGroup);
merged = bufferUnionUnbuffer(buffer, polygonGroup, stats);
} else {
merged = buffer(buffer, GeoUtils.createGeometryCollection(polygonGroup));
}
@ -331,7 +333,7 @@ public class FeatureMerge {
}
merged = GeoUtils.snapAndFixPolygon(merged, stats, "merge").reverse();
} else {
merged = polygonGroup.get(0);
merged = polygonGroup.getFirst();
if (!(merged instanceof Polygonal) || merged.getEnvelopeInternal().getArea() < minArea) {
continue;
}
@ -410,7 +412,7 @@ public class FeatureMerge {
* Merges nearby polygons by expanding each individual polygon by {@code buffer}, unioning them, and contracting the
* result.
*/
private static Geometry bufferUnionUnbuffer(double buffer, List<Geometry> polygonGroup) {
static Geometry bufferUnionUnbuffer(double buffer, List<Geometry> polygonGroup, Stats stats) {
/*
* A simpler alternative that might initially appear faster would be:
*
@ -424,11 +426,20 @@ public class FeatureMerge {
* The following approach is slower most of the time, but faster on average because it does
* not choke on dense nearby polygons:
*/
for (int i = 0; i < polygonGroup.size(); i++) {
polygonGroup.set(i, buffer(buffer, polygonGroup.get(i)));
List<Geometry> buffered = new ArrayList<>(polygonGroup.size());
for (Geometry geometry : polygonGroup) {
buffered.add(buffer(buffer, geometry));
}
Geometry merged = GeoUtils.createGeometryCollection(buffered);
try {
merged = union(merged);
} catch (TopologyException e) {
// buffer result is sometimes invalid, which makes union throw so fix
// it and try again (see #700)
stats.dataError("buffer_union_unbuffer_union_failed");
merged = GeometryFixer.fix(merged);
merged = union(merged);
}
Geometry merged = GeoUtils.createGeometryCollection(polygonGroup);
merged = union(merged);
merged = unbuffer(buffer, merged);
return merged;
}
@ -572,5 +583,5 @@ public class FeatureMerge {
return result;
}
private record WithIndex<T> (T feature, int hilbert) {}
private record WithIndex<T>(T feature, int hilbert) {}
}

Wyświetl plik

@ -1,6 +1,7 @@
package com.onthegomap.planetiler;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.reader.osm.OsmRelationInfo;
@ -20,7 +21,8 @@ import java.util.function.Consumer;
* <li>{@link FeatureProcessor} to handle features from a particular source (added through
* {@link #registerSourceHandler(String, FeatureProcessor)})</li>
* <li>{@link FinishHandler} to be notified whenever we finish processing each source</li>
* <li>{@link FeaturePostProcessor} to post-process features in a layer before rendering the output tile</li>
* <li>{@link LayerPostProcesser} to post-process features in a layer before rendering the output tile</li>
* <li>{@link TilePostProcessor} to post-process features in a tile before rendering the output tile</li>
* </ul>
* See {@code OpenMapTilesProfile} for a full implementation using this framework.
*/
@ -35,8 +37,10 @@ public abstract class ForwardingProfile implements Profile {
private final List<OsmRelationPreprocessor> osmRelationPreprocessors = new ArrayList<>();
/** Handlers that get a callback when each source is finished reading. */
private final List<FinishHandler> finishHandlers = new ArrayList<>();
/** Map from layer name to its handler if it implements {@link FeaturePostProcessor}. */
private final Map<String, List<FeaturePostProcessor>> postProcessors = new HashMap<>();
/** Map from layer name to its handler if it implements {@link LayerPostProcesser}. */
private final Map<String, List<LayerPostProcesser>> layerPostProcessors = new HashMap<>();
/** List of handlers that implement {@link TilePostProcessor}. */
private final List<TilePostProcessor> tilePostProcessors = new ArrayList<>();
/** Map from source ID to its handler if it implements {@link FeatureProcessor}. */
private final Map<String, List<FeatureProcessor>> sourceElementProcessors = new HashMap<>();
@ -53,7 +57,7 @@ public abstract class ForwardingProfile implements Profile {
/**
* Call {@code handler} for different events based on which interfaces {@code handler} implements:
* {@link OsmRelationPreprocessor}, {@link FinishHandler}, or {@link FeaturePostProcessor}.
* {@link OsmRelationPreprocessor}, {@link FinishHandler}, {@link TilePostProcessor} or {@link LayerPostProcesser}.
*/
public void registerHandler(Handler handler) {
this.handlers.add(handler);
@ -69,10 +73,13 @@ public abstract class ForwardingProfile implements Profile {
if (handler instanceof FinishHandler finishHandler) {
finishHandlers.add(finishHandler);
}
if (handler instanceof FeaturePostProcessor postProcessor) {
postProcessors.computeIfAbsent(postProcessor.name(), name -> new ArrayList<>())
if (handler instanceof LayerPostProcesser postProcessor) {
layerPostProcessors.computeIfAbsent(postProcessor.name(), name -> new ArrayList<>())
.add(postProcessor);
}
if (handler instanceof TilePostProcessor postProcessor) {
tilePostProcessors.add(postProcessor);
}
}
@Override
@ -129,10 +136,10 @@ public abstract class ForwardingProfile implements Profile {
public List<VectorTile.Feature> postProcessLayerFeatures(String layer, int zoom, List<VectorTile.Feature> items)
throws GeometryException {
// delegate feature post-processing to each layer, if it implements FeaturePostProcessor
List<FeaturePostProcessor> handlers = postProcessors.get(layer);
List<LayerPostProcesser> postProcessers = layerPostProcessors.get(layer);
List<VectorTile.Feature> result = items;
if (handlers != null) {
for (FeaturePostProcessor handler : handlers) {
if (postProcessers != null) {
for (var handler : postProcessers) {
var thisResult = handler.postProcess(zoom, result);
if (thisResult != null) {
result = thisResult;
@ -142,6 +149,20 @@ public abstract class ForwardingProfile implements Profile {
return result;
}
@Override
public Map<String, List<VectorTile.Feature>> postProcessTileFeatures(TileCoord tileCoord,
Map<String, List<VectorTile.Feature>> layers) throws GeometryException {
var result = layers;
for (TilePostProcessor postProcessor : tilePostProcessors) {
// TODO catch failures to isolate from other tile postprocessors?
var thisResult = postProcessor.postProcessTile(tileCoord, result);
if (thisResult != null) {
result = thisResult;
}
}
return result;
}
@Override
public void finish(String sourceName, FeatureCollector.Factory featureCollectors,
Consumer<FeatureCollector.Feature> next) {
@ -217,11 +238,11 @@ public abstract class ForwardingProfile implements Profile {
List<OsmRelationInfo> preprocessOsmRelation(OsmElement.Relation relation);
}
/** Handlers should implement this interface to post-process vector tile features before emitting an output tile. */
public interface FeaturePostProcessor extends HandlerForLayer {
/** Handlers should implement this interface to post-process vector tile features before emitting an output layer. */
public interface LayerPostProcesser extends HandlerForLayer {
/**
* Apply any post-processing to features in this output layer of a tile before writing it to the output file.
* Apply any post-processing to features in this output layer of a tile before writing it to the output archive.
*
* @throws GeometryException if the input elements cannot be deserialized, or output elements cannot be serialized
* @see Profile#postProcessLayerFeatures(String, int, List)
@ -229,6 +250,26 @@ public abstract class ForwardingProfile implements Profile {
List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) throws GeometryException;
}
/** @deprecated use {@link LayerPostProcesser} or {@link TilePostProcessor} instead */
@Deprecated(forRemoval = true)
public interface FeaturePostProcessor extends LayerPostProcesser {}
/**
* Handlers should implement this interface to post-process all features in a vector tile before writing to an
* archive.
*/
public interface TilePostProcessor extends Handler {
/**
* Apply any post-processing to features in layers in this output tile before writing it to the output archive.
*
* @throws GeometryException if the input elements cannot be deserialized, or output elements cannot be serialized
* @see Profile#postProcessTileFeatures(TileCoord, Map)
*/
Map<String, List<VectorTile.Feature>> postProcessTile(TileCoord tileCoord,
Map<String, List<VectorTile.Feature>> layers) throws GeometryException;
}
/** Handlers should implement this interface to process input features from a given source ID. */
public interface FeatureProcessor {

Wyświetl plik

@ -19,7 +19,6 @@ import com.onthegomap.planetiler.reader.osm.OsmReader;
import com.onthegomap.planetiler.stats.ProcessInfo;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.stats.Timers;
import com.onthegomap.planetiler.stream.StreamArchiveUtils;
import com.onthegomap.planetiler.util.AnsiColors;
import com.onthegomap.planetiler.util.BuildInfo;
import com.onthegomap.planetiler.util.ByteBufferUtil;
@ -84,6 +83,7 @@ public class Planetiler {
private final Path multipolygonPath;
private final Path featureDbPath;
private final boolean downloadSources;
private final boolean refreshSources;
private final boolean onlyDownloadSources;
private final boolean parseNodeBounds;
private Profile profile = null;
@ -118,6 +118,8 @@ public class Planetiler {
tmpDir = config.tmpDir();
onlyDownloadSources = arguments.getBoolean("only_download", "download source data then exit", false);
downloadSources = onlyDownloadSources || arguments.getBoolean("download", "download sources", false);
refreshSources =
arguments.getBoolean("refresh_sources", "download new version of source files if they have changed", false);
fetchOsmTileStats =
arguments.getBoolean("download_osm_tile_weights", "download OSM tile weights file", downloadSources);
nodeDbPath = arguments.file("temp_nodes", "temp node db location", tmpDir.resolve("node.db"));
@ -683,15 +685,15 @@ public class Planetiler {
throw new IllegalArgumentException(output.format() + " doesn't support concurrent writes");
}
IntStream.range(1, config.tileWriteThreads())
.mapToObj(index -> StreamArchiveUtils.constructIndexedPath(output.getLocalPath(), index))
.mapToObj(output::getPathForMultiThreadedWriter)
.forEach(p -> {
if (!config.append() && (overwrite || config.force())) {
FileUtils.delete(p);
}
if (config.append() && !Files.exists(p)) {
throw new IllegalArgumentException("indexed file \"" + p + "\" must exist when appending");
} else if (!config.append() && Files.exists(p)) {
throw new IllegalArgumentException("indexed file \"" + p + "\" must not exist when not appending");
if (config.append() && !output.exists(p)) {
throw new IllegalArgumentException("indexed archive \"" + p + "\" must exist when appending");
} else if (!config.append() && output.exists(p)) {
throw new IllegalArgumentException("indexed archive \"" + p + "\" must not exist when not appending");
}
});
}
@ -719,7 +721,7 @@ public class Planetiler {
// in case any temp files are left from a previous run...
FileUtils.delete(tmpDir, nodeDbPath, featureDbPath, multipolygonPath);
Files.createDirectories(tmpDir);
FileUtils.createParentDirectories(nodeDbPath, featureDbPath, multipolygonPath, output.getLocalPath());
FileUtils.createParentDirectories(nodeDbPath, featureDbPath, multipolygonPath, output.getLocalBasePath());
if (!toDownload.isEmpty()) {
download();
@ -757,7 +759,7 @@ public class Planetiler {
stats.monitorFile("nodes", nodeDbPath);
stats.monitorFile("features", featureDbPath);
stats.monitorFile("multipolygons", multipolygonPath);
stats.monitorFile("archive", output.getLocalPath());
stats.monitorFile("archive", output.getLocalPath(), archive::bytesWritten);
for (Stage stage : stages) {
stage.task.run();
@ -774,8 +776,8 @@ public class Planetiler {
featureGroup.prepare();
TileArchiveWriter.writeOutput(featureGroup, archive, output::size, tileArchiveMetadata, layerStatsPath, config,
stats);
TileArchiveWriter.writeOutput(featureGroup, archive, archive::bytesWritten, tileArchiveMetadata, layerStatsPath,
config, stats);
} catch (IOException e) {
throw new IllegalStateException("Unable to write to " + output, e);
}
@ -892,11 +894,13 @@ public class Planetiler {
private Path getPath(String name, String type, Path defaultPath, String defaultUrl) {
Path path = arguments.file(name + "_path", name + " " + type + " path", defaultPath);
boolean refresh =
arguments.getBoolean("refresh_" + name, "Download new version of " + name + " if changed", refreshSources);
boolean freeAfterReading = arguments.getBoolean("free_" + name + "_after_read",
"delete " + name + " input file after reading to make space for output (reduces peak disk usage)", false);
if (downloadSources) {
if (downloadSources || refresh) {
String url = arguments.getString(name + "_url", name + " " + type + " url", defaultUrl);
if (!Files.exists(path) && url != null) {
if ((!Files.exists(path) || refresh) && url != null) {
toDownload.add(new ToDownload(name, url, path));
}
}
@ -906,7 +910,7 @@ public class Planetiler {
private void download() {
var timer = stats.startStage("download");
Downloader downloader = Downloader.create(config(), stats());
Downloader downloader = Downloader.create(config());
for (ToDownload toDownload : toDownload) {
if (profile.caresAboutSource(toDownload.id)) {
downloader.add(toDownload.id, toDownload.url, toDownload.path);
@ -919,7 +923,7 @@ public class Planetiler {
private void ensureInputFilesExist() {
for (InputPath inputPath : inputPaths) {
if (profile.caresAboutSource(inputPath.id) && !Files.exists(inputPath.path)) {
throw new IllegalArgumentException(inputPath.path + " does not exist");
throw new IllegalArgumentException(inputPath.path + " does not exist. Run with --download to fetch it");
}
}
}

Wyświetl plik

@ -1,12 +1,14 @@
package com.onthegomap.planetiler;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.mbtiles.Mbtiles;
import com.onthegomap.planetiler.reader.SourceFeature;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.reader.osm.OsmRelationInfo;
import com.onthegomap.planetiler.util.Wikidata;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
@ -102,13 +104,40 @@ public interface Profile {
* @return the new list of output features or {@code null} to not change anything. Set any elements of the list to
* {@code null} if they should be ignored.
* @throws GeometryException for any recoverable geometric operation failures - the framework will log the error, emit
* the original input features, and continue processing other tiles
* the original input features, and continue processing other layers
*/
default List<VectorTile.Feature> postProcessLayerFeatures(String layer, int zoom,
List<VectorTile.Feature> items) throws GeometryException {
return items;
}
/**
* Apply any post-processing to layers in an output tile before writing it to the output.
* <p>
* This is called before {@link #postProcessLayerFeatures(String, int, List)} gets called for each layer. Use this
* method if features in one layer should influence features in another layer, to create new layers from existing
* ones, or if you need to remove a layer entirely from the output.
* <p>
* These transformations may add, remove, or change the tags, geometry, or ordering of output features based on other
* features present in this tile. See {@link FeatureMerge} class for a set of common transformations that merge
* linestrings/polygons.
* <p>
* Many threads invoke this method concurrently so ensure thread-safe access to any shared data structures.
* <p>
* The default implementation passes through input features unaltered
*
* @param tileCoord the tile being post-processed
* @param layers all the output features in each layer on this tile
* @return the new map from layer to features or {@code null} to not change anything. Set any elements of the lists to
* {@code null} if they should be ignored.
* @throws GeometryException for any recoverable geometric operation failures - the framework will log the error, emit
* the original input features, and continue processing other tiles
*/
default Map<String, List<VectorTile.Feature>> postProcessTileFeatures(TileCoord tileCoord,
Map<String, List<VectorTile.Feature>> layers) throws GeometryException {
return layers;
}
/**
* Returns the name of the generated tileset to put into {@link Mbtiles} metadata
*
@ -157,6 +186,10 @@ public interface Profile {
return false;
}
default Map<String, String> extraArchiveMetadata() {
return Map.of();
}
/**
* Defines whether {@link Wikidata} should fetch wikidata translations for the input element.
* <p>

Wyświetl plik

@ -27,6 +27,7 @@ import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.geo.GeometryType;
import com.onthegomap.planetiler.geo.MutableCoordinateSequence;
import com.onthegomap.planetiler.util.Hilbert;
import com.onthegomap.planetiler.util.LayerAttrStats;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@ -34,6 +35,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -41,6 +43,7 @@ import javax.annotation.concurrent.NotThreadSafe;
import org.locationtech.jts.algorithm.Orientation;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.CoordinateSequence;
import org.locationtech.jts.geom.CoordinateXY;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LineString;
@ -73,13 +76,16 @@ import vector_tile.VectorTileProto;
*/
@NotThreadSafe
public class VectorTile {
public static final long NO_FEATURE_ID = 0;
private static final Logger LOGGER = LoggerFactory.getLogger(VectorTile.class);
// TODO make these configurable
private static final int EXTENT = 4096;
private static final double SIZE = 256d;
private final Map<String, Layer> layers = new LinkedHashMap<>();
// use a treemap to ensure that layers are encoded in a consistent order
private final Map<String, Layer> layers = new TreeMap<>();
private LayerAttrStats.Updater.ForZoom layerStatsTracker = LayerAttrStats.Updater.ForZoom.NOOP;
private static int[] getCommands(Geometry input, int scale) {
var encoder = new CommandEncoder(scale);
@ -263,7 +269,7 @@ public class VectorTile {
lineStrings.add(gf.createLineString(coordSeq));
}
if (lineStrings.size() == 1) {
geometry = lineStrings.get(0);
geometry = lineStrings.getFirst();
} else if (lineStrings.size() > 1) {
geometry = gf.createMultiLineString(lineStrings.toArray(new LineString[0]));
}
@ -305,12 +311,12 @@ public class VectorTile {
}
List<Polygon> polygons = new ArrayList<>();
for (List<LinearRing> rings : polygonRings) {
LinearRing shell = rings.get(0);
LinearRing shell = rings.getFirst();
LinearRing[] holes = rings.subList(1, rings.size()).toArray(new LinearRing[rings.size() - 1]);
polygons.add(gf.createPolygon(shell, holes));
}
if (polygons.size() == 1) {
geometry = polygons.get(0);
geometry = polygons.getFirst();
}
if (polygons.size() > 1) {
geometry = gf.createMultiPolygon(GeometryFactory.toPolygonArray(polygons));
@ -376,7 +382,7 @@ public class VectorTile {
for (VectorTileProto.Tile.Feature feature : layer.getFeaturesList()) {
int tagsCount = feature.getTagsCount();
Map<String, Object> attrs = new HashMap<>(tagsCount / 2);
Map<String, Object> attrs = HashMap.newHashMap(tagsCount / 2);
int tagIdx = 0;
while (tagIdx < feature.getTagsCount()) {
String key = keys.get(feature.getTags(tagIdx++));
@ -467,12 +473,12 @@ public class VectorTile {
if (features.isEmpty()) {
return this;
}
Layer layer = layers.get(layerName);
if (layer == null) {
layer = new Layer();
layers.put(layerName, layer);
}
var statsTracker = layerStatsTracker.forLayer(layerName);
for (Feature inFeature : features) {
if (inFeature != null && inFeature.geometry().commands().length > 0) {
@ -481,8 +487,11 @@ public class VectorTile {
for (Map.Entry<String, ?> e : inFeature.attrs().entrySet()) {
// skip attribute without value
if (e.getValue() != null) {
outFeature.tags.add(layer.key(e.getKey()));
outFeature.tags.add(layer.value(e.getValue()));
String key = e.getKey();
Object value = e.getValue();
outFeature.tags.add(layer.key(key));
outFeature.tags.add(layer.value(value));
statsTracker.accept(key, value);
}
}
@ -509,20 +518,14 @@ public class VectorTile {
for (Object value : layer.values()) {
VectorTileProto.Tile.Value.Builder tileValue = VectorTileProto.Tile.Value.newBuilder();
if (value instanceof String stringValue) {
tileValue.setStringValue(stringValue);
} else if (value instanceof Integer intValue) {
tileValue.setSintValue(intValue);
} else if (value instanceof Long longValue) {
tileValue.setSintValue(longValue);
} else if (value instanceof Float floatValue) {
tileValue.setFloatValue(floatValue);
} else if (value instanceof Double doubleValue) {
tileValue.setDoubleValue(doubleValue);
} else if (value instanceof Boolean booleanValue) {
tileValue.setBoolValue(booleanValue);
} else {
tileValue.setStringValue(value.toString());
switch (value) {
case String stringValue -> tileValue.setStringValue(stringValue);
case Integer intValue -> tileValue.setSintValue(intValue);
case Long longValue -> tileValue.setSintValue(longValue);
case Float floatValue -> tileValue.setFloatValue(floatValue);
case Double doubleValue -> tileValue.setDoubleValue(doubleValue);
case Boolean booleanValue -> tileValue.setBoolValue(booleanValue);
case Object other -> tileValue.setStringValue(other.toString());
}
tileLayer.addValues(tileValue.build());
}
@ -533,7 +536,7 @@ public class VectorTile {
.setType(feature.geometry().geomType().asProtobufType())
.addAllGeometry(Ints.asList(feature.geometry().commands()));
if (feature.id >= 0) {
if (feature.id != NO_FEATURE_ID) {
featureBuilder.setId(feature.id);
}
@ -600,6 +603,15 @@ public class VectorTile {
return layers.values().stream().allMatch(v -> v.encodedFeatures.isEmpty()) || containsOnlyFillsOrEdges();
}
/**
* Call back to {@code layerStats} as vector tile features are being encoded in
* {@link #addLayerFeatures(String, List)} to track attribute types present on features in each layer, for example to
* emit in tilejson metadata stats.
*/
public void trackLayerStats(LayerAttrStats.Updater.ForZoom layerStats) {
this.layerStatsTracker = layerStats;
}
enum Command {
MOVE_TO(1),
LINE_TO(2),
@ -976,6 +988,20 @@ public class VectorTile {
return Hilbert.hilbertXYToIndex(15, x >> scale, y >> scale);
}
/**
* Returns the coordinate of the first point in this geometry in tile pixel coordinates from (0,0) at the top left
* to (256,256) at the bottom right.
*/
public CoordinateXY firstCoordinate() {
if (commands.length < 3) {
return null;
}
double factor = 1 << scale;
double x = zigZagDecode(commands[1]) * SIZE / EXTENT / factor;
double y = zigZagDecode(commands[2]) * SIZE / EXTENT / factor;
return new CoordinateXY(x, y);
}
}
/**
@ -1072,31 +1098,32 @@ public class VectorTile {
}
void accept(Geometry geometry) {
if (geometry instanceof MultiLineString multiLineString) {
for (int i = 0; i < multiLineString.getNumGeometries(); i++) {
encode(((LineString) multiLineString.getGeometryN(i)).getCoordinateSequence(), false, GeometryType.LINE);
switch (geometry) {
case MultiLineString multiLineString -> {
for (int i = 0; i < multiLineString.getNumGeometries(); i++) {
encode(((LineString) multiLineString.getGeometryN(i)).getCoordinateSequence(), false, GeometryType.LINE);
}
}
} else if (geometry instanceof Polygon polygon) {
LineString exteriorRing = polygon.getExteriorRing();
encode(exteriorRing.getCoordinateSequence(), true, GeometryType.POLYGON);
for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
LineString interiorRing = polygon.getInteriorRingN(i);
encode(interiorRing.getCoordinateSequence(), true, GeometryType.LINE);
case Polygon polygon -> {
LineString exteriorRing = polygon.getExteriorRing();
encode(exteriorRing.getCoordinateSequence(), true, GeometryType.POLYGON);
for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
LineString interiorRing = polygon.getInteriorRingN(i);
encode(interiorRing.getCoordinateSequence(), true, GeometryType.LINE);
}
}
} else if (geometry instanceof MultiPolygon multiPolygon) {
for (int i = 0; i < multiPolygon.getNumGeometries(); i++) {
accept(multiPolygon.getGeometryN(i));
case MultiPolygon multiPolygon -> {
for (int i = 0; i < multiPolygon.getNumGeometries(); i++) {
accept(multiPolygon.getGeometryN(i));
}
}
} else if (geometry instanceof LineString lineString) {
encode(lineString.getCoordinateSequence(), shouldClosePath(geometry), GeometryType.LINE);
} else if (geometry instanceof Point point) {
encode(point.getCoordinateSequence(), false, GeometryType.POINT);
} else if (geometry instanceof Puntal) {
encode(new CoordinateArraySequence(geometry.getCoordinates()), shouldClosePath(geometry),
case LineString lineString ->
encode(lineString.getCoordinateSequence(), shouldClosePath(geometry), GeometryType.LINE);
case Point point -> encode(point.getCoordinateSequence(), false, GeometryType.POINT);
case Puntal ignored -> encode(new CoordinateArraySequence(geometry.getCoordinates()), shouldClosePath(geometry),
geometry instanceof MultiPoint, GeometryType.POINT);
} else {
LOGGER.warn("Unrecognized geometry type: " + geometry.getGeometryType());
case null -> LOGGER.warn("Null geometry type");
default -> LOGGER.warn("Unrecognized geometry type: " + geometry.getGeometryType());
}
}

Wyświetl plik

@ -3,7 +3,12 @@ package com.onthegomap.planetiler.archive;
import static com.onthegomap.planetiler.util.LanguageUtils.nullIfEmpty;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.files.FilesArchiveUtils;
import com.onthegomap.planetiler.geo.TileOrder;
import com.onthegomap.planetiler.stream.StreamArchiveUtils;
import com.onthegomap.planetiler.util.FileUtils;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.URI;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
@ -11,6 +16,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;
/**
* Definition for a tileset, parsed from a URI-like string.
@ -39,6 +45,12 @@ public record TileArchiveConfig(
Map<String, String> options
) {
// be more generous and encode some characters for the users
private static final Map<String, String> URI_ENCODINGS = Map.of(
"{", "%7B",
"}", "%7D"
);
private static TileArchiveConfig.Scheme getScheme(URI uri) {
String scheme = uri.getScheme();
if (scheme == null) {
@ -77,18 +89,20 @@ public record TileArchiveConfig(
private static TileArchiveConfig.Format getFormat(URI uri) {
String format = parseQuery(uri).get("format");
if (format == null) {
format = getExtension(uri);
}
if (format == null) {
return TileArchiveConfig.Format.MBTILES;
}
for (var value : TileArchiveConfig.Format.values()) {
if (value.id().equals(format)) {
if (value.isQueryFormatSupported(format)) {
return value;
}
}
throw new IllegalArgumentException("Unsupported format " + format + " from " + uri);
if (format != null) {
throw new IllegalArgumentException("Unsupported format " + format + " from " + uri);
}
for (var value : TileArchiveConfig.Format.values()) {
if (value.isUriSupported(uri)) {
return value;
}
}
throw new IllegalArgumentException("Unsupported format " + getExtension(uri) + " from " + uri);
}
/**
@ -103,6 +117,10 @@ public record TileArchiveConfig(
string += "?" + parts[1];
}
}
for (Map.Entry<String, String> uriEncoding : URI_ENCODINGS.entrySet()) {
string = string.replace(uriEncoding.getKey(), uriEncoding.getValue());
}
return from(URI.create(string));
}
@ -111,7 +129,11 @@ public record TileArchiveConfig(
*/
public static TileArchiveConfig from(URI uri) {
if (uri.getScheme() == null) {
String base = Path.of(uri.getPath()).toAbsolutePath().toUri().normalize().toString();
final String path = uri.getPath();
String base = Path.of(path).toAbsolutePath().toUri().normalize().toString();
if (path.endsWith("/")) {
base = base + "/";
}
if (uri.getRawQuery() != null) {
base += "?" + uri.getRawQuery();
}
@ -133,13 +155,24 @@ public record TileArchiveConfig(
return scheme == Scheme.FILE ? Path.of(URI.create(uri.toString().replaceAll("\\?.*$", ""))) : null;
}
/**
* Returns the local <b>base</b> path for this archive, for which directories should be pre-created for.
*/
public Path getLocalBasePath() {
Path p = getLocalPath();
if (format() == Format.FILES) {
p = FilesArchiveUtils.cleanBasePath(p);
}
return p;
}
/**
* Deletes the archive if possible.
*/
public void delete() {
if (scheme == Scheme.FILE) {
FileUtils.delete(getLocalPath());
FileUtils.delete(getLocalBasePath());
}
}
@ -147,7 +180,30 @@ public record TileArchiveConfig(
* Returns {@code true} if the archive already exists, {@code false} otherwise.
*/
public boolean exists() {
return getLocalPath() != null && Files.exists(getLocalPath());
return exists(getLocalBasePath());
}
/**
* @param p path to the archive
* @return {@code true} if the archive already exists, {@code false} otherwise.
*/
public boolean exists(Path p) {
if (p == null) {
return false;
}
if (format() != Format.FILES) {
return Files.exists(p);
} else {
if (!Files.exists(p)) {
return false;
}
// file-archive exists only if it has any contents
try (Stream<Path> paths = Files.list(p)) {
return paths.findAny().isPresent();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
/**
@ -165,30 +221,54 @@ public record TileArchiveConfig(
return Arguments.of(options).orElse(arguments.withPrefix(format.id));
}
public Path getPathForMultiThreadedWriter(int index) {
return switch (format) {
case CSV, TSV, JSON, PROTO, PBF -> StreamArchiveUtils.constructIndexedPath(getLocalPath(), index);
case FILES -> getLocalPath();
default -> throw new UnsupportedOperationException("not supported by " + format);
};
}
public enum Format {
MBTILES("mbtiles",
false /* TODO mbtiles could support append in the future by using insert statements with an "on conflict"-clause (i.e. upsert) and by creating tables only if they don't exist, yet */,
false),
PMTILES("pmtiles", false, false),
false, TileOrder.TMS),
PMTILES("pmtiles", false, false, TileOrder.HILBERT),
CSV("csv", true, true),
// should be before PBF in order to avoid collisions
FILES("files", true, true, TileOrder.TMS) {
@Override
boolean isUriSupported(URI uri) {
final String path = uri.getPath();
return path != null && (path.endsWith("/") || path.contains("{") /* template string */ ||
!path.contains(".") /* no extension => assume files */);
}
},
CSV("csv", true, true, TileOrder.TMS),
/** identical to {@link Format#CSV} - except for the column separator */
TSV("tsv", true, true),
TSV("tsv", true, true, TileOrder.TMS),
PROTO("proto", true, true),
PROTO("proto", true, true, TileOrder.TMS),
/** identical to {@link Format#PROTO} */
PBF("pbf", true, true),
PBF("pbf", true, true, TileOrder.TMS),
JSON("json", true, true);
JSON("json", true, true, TileOrder.TMS);
private final String id;
private final boolean supportsAppend;
private final boolean supportsConcurrentWrites;
private final TileOrder order;
Format(String id, boolean supportsAppend, boolean supportsConcurrentWrites) {
Format(String id, boolean supportsAppend, boolean supportsConcurrentWrites, TileOrder order) {
this.id = id;
this.supportsAppend = supportsAppend;
this.supportsConcurrentWrites = supportsConcurrentWrites;
this.order = order;
}
public TileOrder preferredOrder() {
return order;
}
public String id() {
@ -202,6 +282,15 @@ public record TileArchiveConfig(
public boolean supportsConcurrentWrites() {
return supportsConcurrentWrites;
}
boolean isUriSupported(URI uri) {
final String path = uri.getPath();
return path != null && path.endsWith("." + id);
}
boolean isQueryFormatSupported(String queryFormat) {
return id.equals(queryFormat);
}
}
public enum Scheme {

Wyświetl plik

@ -1,36 +1,35 @@
package com.onthegomap.planetiler.archive;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_ABSENT;
import static com.onthegomap.planetiler.util.Format.joinCoordinates;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.onthegomap.planetiler.Profile;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.util.BuildInfo;
import com.onthegomap.planetiler.util.LayerAttrStats;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.locationtech.jts.geom.CoordinateXY;
import java.util.TreeMap;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Envelope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Metadata associated with a tile archive. */
/**
* Metadata associated with a tile archive.
* <p>
* The default (de-)serialization corresponds to the
* <a href="https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md#metadata">mbtiles spec</a>. As such each
* value is a string.
*/
public record TileArchiveMetadata(
@JsonProperty(NAME_KEY) String name,
@JsonProperty(DESCRIPTION_KEY) String description,
@ -38,13 +37,19 @@ public record TileArchiveMetadata(
@JsonProperty(VERSION_KEY) String version,
@JsonProperty(TYPE_KEY) String type,
@JsonProperty(FORMAT_KEY) String format,
@JsonIgnore Envelope bounds,
@JsonIgnore CoordinateXY center,
@JsonProperty(ZOOM_KEY) Double zoom,
@JsonProperty(MINZOOM_KEY) Integer minzoom,
@JsonProperty(MAXZOOM_KEY) Integer maxzoom,
@JsonIgnore List<LayerAttrStats.VectorLayer> vectorLayers,
@JsonAnyGetter @JsonDeserialize(using = EmptyMapIfNullDeserializer.class) Map<String, String> others,
@JsonSerialize(using = TileArchiveMetadataDeSer.EnvelopeSerializer.class)
@JsonDeserialize(using = TileArchiveMetadataDeSer.EnvelopeDeserializer.class) Envelope bounds,
@JsonSerialize(using = TileArchiveMetadataDeSer.CoordinateSerializer.class)
@JsonDeserialize(using = TileArchiveMetadataDeSer.CoordinateDeserializer.class) Coordinate center,
@JsonProperty(MINZOOM_KEY)
@JsonSerialize(using = ToStringSerializer.class) Integer minzoom,
@JsonProperty(MAXZOOM_KEY)
@JsonSerialize(using = ToStringSerializer.class) Integer maxzoom,
@JsonProperty(JSON_KEY)
@JsonSerialize(using = TileArchiveMetadataDeSer.MetadataJsonSerializer.class)
@JsonDeserialize(using = TileArchiveMetadataDeSer.MetadataJsonDeserializer.class) TileArchiveMetadataJson json,
@JsonAnyGetter
@JsonDeserialize(using = TileArchiveMetadataDeSer.EmptyMapIfNullDeserializer.class) Map<String, String> others,
@JsonProperty(COMPRESSION_KEY) TileCompression tileCompression
) {
@ -62,12 +67,11 @@ public record TileArchiveMetadata(
public static final String VECTOR_LAYERS_KEY = "vector_layers";
public static final String COMPRESSION_KEY = "compression";
public static final String JSON_KEY = "json";
public static final String MVT_FORMAT = "pbf";
private static final Logger LOGGER = LoggerFactory.getLogger(TileArchiveMetadata.class);
private static final ObjectMapper mapper = new ObjectMapper()
.registerModules(new Jdk8Module())
.setSerializationInclusion(NON_ABSENT);
public TileArchiveMetadata(Profile profile, PlanetilerConfig config) {
this(profile, config, null);
@ -82,16 +86,37 @@ public record TileArchiveMetadata(
getString(config, TYPE_KEY, profile.isOverlay() ? "overlay" : "baselayer"),
getString(config, FORMAT_KEY, MVT_FORMAT),
config.bounds().latLon(),
new CoordinateXY(config.bounds().latLon().centre()),
GeoUtils.getZoomFromLonLatBounds(config.bounds().latLon()),
new Coordinate(
config.bounds().latLon().centre().getX(),
config.bounds().latLon().centre().getY(),
GeoUtils.getZoomFromLonLatBounds(config.bounds().latLon())
),
config.minzoom(),
config.maxzoom(),
vectorLayers,
mapWithBuildInfo(),
vectorLayers == null ? null : new TileArchiveMetadataJson(vectorLayers),
mergeMaps(mapWithBuildInfo(),profile.extraArchiveMetadata()),
config.tileCompression()
);
}
// just used for the "internal map"-serialization - ignored by default
@JsonIgnore
@JsonProperty(ZOOM_KEY)
public Double zoom() {
if (center == null) {
return null;
}
final double z = center.getZ();
return Double.isNaN(z) ? null : z;
}
// just used for the "internal map"-serialization - ignored by default
@JsonIgnore
@JsonProperty(VECTOR_LAYERS_KEY)
public List<LayerAttrStats.VectorLayer> vectorLayers() {
return json == null ? null : json.vectorLayers;
}
private static String getString(PlanetilerConfig config, String key, String fallback) {
return config.arguments()
.getString("archive_" + key + "|mbtiles_" + key, "'" + key + "' attribute for tileset metadata", fallback);
@ -127,27 +152,22 @@ public record TileArchiveMetadata(
* keys.
*/
public Map<String, String> toMap() {
Map<String, String> result = new LinkedHashMap<>(mapper.convertValue(this, new TypeReference<>() {}));
if (bounds != null) {
result.put(BOUNDS_KEY, joinCoordinates(bounds.getMinX(), bounds.getMinY(), bounds.getMaxX(), bounds.getMaxY()));
}
if (center != null) {
result.put(CENTER_KEY, joinCoordinates(center.getX(), center.getY()));
}
if (vectorLayers != null) {
try {
result.put(VECTOR_LAYERS_KEY, mapper.writeValueAsString(vectorLayers));
} catch (JsonProcessingException e) {
LOGGER.warn("Error encoding vector_layers as json", e);
}
}
return result;
final JsonMapper mapper = TileArchiveMetadataDeSer.internalMapMapper();
return new LinkedHashMap<>(mapper.convertValue(this, new TypeReference<>() {}));
}
/** Returns a copy of this instance with {@link #vectorLayers} set to {@code layerStats}. */
/** Returns a copy of this instance with {@link #json} set to {@code layerStats}. */
public TileArchiveMetadata withLayerStats(List<LayerAttrStats.VectorLayer> layerStats) {
return new TileArchiveMetadata(name, description, attribution, version, type, format, bounds, center, zoom, minzoom,
maxzoom, layerStats, others, tileCompression);
return withJson(json == null ? TileArchiveMetadataJson.create(layerStats) : json.withLayers(layerStats));
}
/**
* Returns a copy of this instance with {@link #json}'s {@link TileArchiveMetadataJson#vectorLayers()} set to
* {@code layerStats}.
*/
public TileArchiveMetadata withJson(TileArchiveMetadataJson json) {
return new TileArchiveMetadata(name, description, attribution, version, type, format, bounds, center, minzoom,
maxzoom, json, others, tileCompression);
}
/*
@ -156,21 +176,27 @@ public record TileArchiveMetadata(
* https://github.com/FasterXML/jackson-databind/issues/3439
*/
private static Map<String,String> mergeMaps(Map<String,String> m1, Map<String,String> m2) {
var result = new TreeMap<>(m1);
result.putAll(m2);
return result;
}
@JsonAnySetter
private void putUnknownFieldsToOthers(String name, String value) {
others.put(name, value);
}
private static class EmptyMapIfNullDeserializer extends JsonDeserializer<Map<String, String>> {
@SuppressWarnings("unchecked")
@Override
public Map<String, String> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return p.readValueAs(HashMap.class);
public record TileArchiveMetadataJson(
@JsonProperty(VECTOR_LAYERS_KEY) List<LayerAttrStats.VectorLayer> vectorLayers
) {
public TileArchiveMetadataJson withLayers(List<LayerAttrStats.VectorLayer> vectorLayers) {
return TileArchiveMetadataJson.create(vectorLayers);
}
@Override
public Map<String, String> getNullValue(DeserializationContext ctxt) {
return new HashMap<>();
public static TileArchiveMetadataJson create(List<LayerAttrStats.VectorLayer> vectorLayers) {
return vectorLayers == null ? null : new TileArchiveMetadataJson(vectorLayers);
}
}
}

Wyświetl plik

@ -0,0 +1,239 @@
package com.onthegomap.planetiler.archive;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_ABSENT;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.onthegomap.planetiler.util.Format;
import com.onthegomap.planetiler.util.LayerAttrStats;
import java.io.IOException;
import java.io.StringWriter;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.CoordinateXY;
import org.locationtech.jts.geom.Envelope;
/**
* Container for everything related to (de-)serialization of {@link TileArchiveMetadata}
*/
public final class TileArchiveMetadataDeSer {
private TileArchiveMetadataDeSer() {}
private static final JsonMapper internalMapMapper = newBaseBuilder()
.addMixIn(TileArchiveMetadata.class, InternalMapMixin.class)
.build();
private static final JsonMapper mbtilesMapper = newBaseBuilder()
.build();
public static JsonMapper internalMapMapper() {
return internalMapMapper;
}
public static JsonMapper mbtilesMapper() {
return mbtilesMapper;
}
public static JsonMapper.Builder newBaseBuilder() {
return JsonMapper.builder()
.addModule(new Jdk8Module())
.serializationInclusion(NON_ABSENT);
}
public record InternalMapMixin(
@JsonIgnore(true) TileArchiveMetadata.TileArchiveMetadataJson json,
@JsonIgnore(false)
@JsonSerialize(using = VectorLayersToStringSerializer.class) List<LayerAttrStats.VectorLayer> vectorLayers,
@JsonIgnore(false) Double zoom,
@JsonSerialize(using = CoordinateXYSerializer.class) Coordinate center
) {}
public record StrictDeserializationMixin(
@StrictDeserialization Coordinate center,
@StrictDeserialization Envelope bounds
) {}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
public @interface StrictDeserialization {
}
private static boolean isStrictDeserialization(BeanProperty property) {
return Optional.ofNullable(property.getAnnotation(StrictDeserialization.class))
.or(() -> Optional.ofNullable(property.getContextAnnotation(StrictDeserialization.class)))
.map(a -> Boolean.TRUE)
.orElse(false);
}
private static void serializeEscapedJson(Object value, JsonGenerator gen) throws IOException {
final ObjectCodec codec = gen.getCodec();
final StringWriter writer = new StringWriter();
final JsonGenerator subGen = gen.getCodec().getFactory().createGenerator(writer);
codec.writeValue(subGen, value);
final String escapedJson = writer.toString();
gen.writeString(escapedJson);
}
private static Optional<List<Double>> doubleListFromCommaList(String commaList, int minItems, int maxItems,
boolean strict) {
final String[] splits = commaList.split(",");
if (splits.length < minItems) {
if (strict) {
throw new IllegalArgumentException("expected at least " + minItems + " doubles");
} else {
return Optional.empty();
}
} else if (splits.length > 3 && strict) {
throw new IllegalArgumentException("expected at most " + maxItems + " doubles");
}
return Optional.of(Arrays.stream(splits)
.limit(maxItems)
.map(Double::parseDouble)
.toList());
}
static class EnvelopeSerializer extends JsonSerializer<Envelope> {
@Override
public void serialize(Envelope v, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(Format.joinCoordinates(v.getMinX(), v.getMinY(), v.getMaxX(), v.getMaxY()));
}
}
static class EnvelopeDeserializer extends JsonDeserializer<Envelope> implements ContextualDeserializer {
private boolean strict = false;
@Override
public Envelope deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
var dsOption = doubleListFromCommaList(p.getValueAsString(), 4, 4, strict);
if (dsOption.isEmpty()) {
return null;
}
final List<Double> ds = dsOption.get();
final double minX = ds.get(0);
final double maxX = ds.get(2);
final double minY = ds.get(1);
final double maxY = ds.get(3);
return new Envelope(minX, maxX, minY, maxY);
}
@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property)
throws JsonMappingException {
strict = isStrictDeserialization(property);
return this;
}
}
static class CoordinateSerializer extends JsonSerializer<Coordinate> {
@Override
public void serialize(Coordinate v, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (Double.isNaN(v.getZ())) {
gen.writeString(Format.joinCoordinates(v.getX(), v.getY()));
} else {
gen.writeString(Format.joinCoordinates(v.getX(), v.getY(), Math.ceil(v.getZ())));
}
}
}
static class CoordinateXYSerializer extends JsonSerializer<Coordinate> {
@Override
public void serialize(Coordinate v, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeString(Format.joinCoordinates(v.getX(), v.getY()));
}
}
static class CoordinateDeserializer extends JsonDeserializer<Coordinate> implements ContextualDeserializer {
boolean strict = false;
@Override
public Coordinate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
var dsOption = doubleListFromCommaList(p.getValueAsString(), 2, 3, strict);
if (dsOption.isEmpty()) {
return null;
}
final List<Double> ds = dsOption.get();
if (ds.size() == 2) {
return new CoordinateXY(ds.get(0), ds.get(1));
} else {
return new Coordinate(ds.get(0), ds.get(1), ds.get(2));
}
}
@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property)
throws JsonMappingException {
strict = isStrictDeserialization(property);
return this;
}
}
static class MetadataJsonDeserializer extends JsonDeserializer<TileArchiveMetadata.TileArchiveMetadataJson> {
@Override
public TileArchiveMetadata.TileArchiveMetadataJson deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
try (JsonParser parser = p.getCodec().getFactory().createParser(p.getValueAsString())) {
return parser.readValueAs(TileArchiveMetadata.TileArchiveMetadataJson.class);
}
}
}
static class MetadataJsonSerializer extends JsonSerializer<TileArchiveMetadata.TileArchiveMetadataJson> {
@Override
public void serialize(TileArchiveMetadata.TileArchiveMetadataJson value, JsonGenerator gen,
SerializerProvider serializers) throws IOException {
serializeEscapedJson(value, gen);
}
}
static class VectorLayersToStringSerializer extends JsonSerializer<List<LayerAttrStats.VectorLayer>> {
@Override
public void serialize(List<LayerAttrStats.VectorLayer> value, JsonGenerator gen, SerializerProvider serializers)
throws IOException {
serializeEscapedJson(value, gen);
}
}
static class EmptyMapIfNullDeserializer extends JsonDeserializer<Map<String, String>> {
@SuppressWarnings("unchecked")
@Override
public Map<String, String> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return p.readValueAs(HashMap.class);
}
@Override
public Map<String, String> getNullValue(DeserializationContext ctxt) {
return new HashMap<>();
}
}
}

Wyświetl plik

@ -15,6 +15,7 @@ import com.onthegomap.planetiler.stats.Timer;
import com.onthegomap.planetiler.util.DiskBacked;
import com.onthegomap.planetiler.util.Format;
import com.onthegomap.planetiler.util.Hashing;
import com.onthegomap.planetiler.util.LayerAttrStats;
import com.onthegomap.planetiler.util.TileSizeStats;
import com.onthegomap.planetiler.util.TileWeights;
import com.onthegomap.planetiler.util.TilesetSummaryStatistics;
@ -32,6 +33,7 @@ import java.util.Map;
import java.util.OptionalLong;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.LongSupplier;
@ -59,6 +61,7 @@ public class TileArchiveWriter {
private final AtomicReference<TileCoord> lastTileWritten = new AtomicReference<>();
private final TileArchiveMetadata tileArchiveMetadata;
private final TilesetSummaryStatistics tileStats;
private final LayerAttrStats layerAttrStats = new LayerAttrStats();
private TileArchiveWriter(Iterable<FeatureGroup.TileFeatures> inputTiles, WriteableTileArchive archive,
PlanetilerConfig config, TileArchiveMetadata tileArchiveMetadata, Stats stats) {
@ -85,9 +88,10 @@ public class TileArchiveWriter {
TileArchiveMetadata tileArchiveMetadata, Path layerStatsPath, PlanetilerConfig config, Stats stats) {
var timer = stats.startStage("archive");
int readThreads = config.featureReadThreads();
int chunksToRead = Math.max(1, features.chunksToRead());
int readThreads = Math.min(config.featureReadThreads(), chunksToRead);
int threads = config.threads();
int processThreads = threads < 10 ? threads : threads - readThreads;
int processThreads = threads < 8 ? threads : (threads - readThreads);
int tileWriteThreads = config.tileWriteThreads();
// when using more than 1 read thread: (N read threads) -> (1 merge thread) -> ...
@ -105,9 +109,7 @@ public class TileArchiveWriter {
readWorker = reader.readWorker();
}
TileArchiveWriter writer =
new TileArchiveWriter(inputTiles, output, config, tileArchiveMetadata.withLayerStats(features.layerStats()
.getTileStats()), stats);
TileArchiveWriter writer = new TileArchiveWriter(inputTiles, output, config, tileArchiveMetadata, stats);
var pipeline = WorkerPipeline.start("archive", stats);
@ -149,6 +151,9 @@ public class TileArchiveWriter {
.addBuffer("reader_queue", queueSize)
.sinkTo("encode", processThreads, writer::tileEncoderSink);
// ensure to initialize the archive BEFORE starting to write any tiles
output.initialize();
// the tile writer will wait on the result of each batch to ensure tiles are written in order
WorkerPipeline<TileBatch> writeBranch = pipeline.readFromQueue(writerQueue)
.sinkTo("write", tileWriteThreads, writer::tileWriter);
@ -179,10 +184,13 @@ public class TileArchiveWriter {
loggers.newLine()
.add(writer::getLastTileLogDetails);
var doneFuture = joinFutures(
writeBranch.done(),
layerStatsBranch == null ? CompletableFuture.completedFuture(null) : layerStatsBranch.done(),
encodeBranch.done());
final CompletableFuture<Void> tileWritersFuture = writeBranch.done();
final CompletableFuture<Void> layerStatsFuture =
layerStatsBranch == null ? CompletableFuture.completedFuture(null) : layerStatsBranch.done();
final CompletableFuture<Void> archiveFinisher =
CompletableFuture.allOf(tileWritersFuture, layerStatsFuture).thenRun(writer::finishArchive);
var doneFuture = joinFutures(tileWritersFuture, layerStatsFuture, encodeBranch.done(), archiveFinisher);
loggers.awaitAndLog(doneFuture, config.logInterval());
writer.printTileStats();
timer.stop();
@ -258,8 +266,10 @@ public class TileArchiveWriter {
boolean lastIsFill = false;
List<TileSizeStats.LayerStats> lastLayerStats = null;
boolean skipFilled = config.skipFilledTiles();
var layerStatsSerializer = TileSizeStats.newThreadLocalSerializer();
var tileStatsUpdater = tileStats.threadLocalUpdater();
var layerAttrStatsUpdater = layerAttrStats.handlerForThread();
for (TileBatch batch : prev) {
List<TileEncodingResult> result = new ArrayList<>(batch.size());
FeatureGroup.TileFeatures last = null;
@ -277,7 +287,7 @@ public class TileArchiveWriter {
layerStats = lastLayerStats;
memoizedTiles.inc();
} else {
VectorTile tile = tileFeatures.getVectorTile();
VectorTile tile = tileFeatures.getVectorTile(layerAttrStatsUpdater);
if (skipFilled && (lastIsFill = tile.containsOnlyFills())) {
encoded = null;
layerStats = null;
@ -288,7 +298,7 @@ public class TileArchiveWriter {
bytes = switch (config.tileCompression()) {
case GZIP -> gzip(encoded);
case NONE -> encoded;
case UNKNWON -> throw new IllegalArgumentException("cannot compress \"UNKNOWN\"");
case UNKNOWN -> throw new IllegalArgumentException("cannot compress \"UNKNOWN\"");
};
layerStats = TileSizeStats.computeTileStats(proto);
if (encoded.length > config.tileWarningSizeBytes()) {
@ -311,7 +321,7 @@ public class TileArchiveWriter {
if ((!skipFilled || !lastIsFill) && bytes != null) {
tileStatsUpdater.recordTile(tileFeatures.tileCoord(), bytes.length, layerStats);
List<String> layerStatsRows = config.outputLayerStats() ?
TileSizeStats.formatOutputRows(tileFeatures.tileCoord(), bytes.length, layerStats) :
layerStatsSerializer.formatOutputRows(tileFeatures.tileCoord(), bytes.length, layerStats) :
List.of();
result.add(
new TileEncodingResult(
@ -329,11 +339,15 @@ public class TileArchiveWriter {
}
}
private final AtomicBoolean firstTileWriterTracker = new AtomicBoolean(true);
private void tileWriter(Iterable<TileBatch> tileBatches) throws ExecutionException, InterruptedException {
final boolean firstTileWriter = firstTileWriterTracker.compareAndExchange(true, false);
var f = NumberFormat.getNumberInstance(Locale.getDefault());
f.setMaximumFractionDigits(5);
archive.initialize(tileArchiveMetadata);
var order = archive.tileOrder();
TileCoord lastTile = null;
@ -349,10 +363,15 @@ public class TileArchiveWriter {
lastTile = encodedTile.coord();
int z = tileCoord.z();
if (z != currentZ) {
if (time == null) {
LOGGER.info("Starting z{}", z);
} else {
LOGGER.info("Finished z{} in {}, now starting z{}", currentZ, time.stop(), z);
// for multiple writers the starting/finish log message of the _first_ tilewriter
// is not 100% accurate in terms of overall "zoom-progress",
// but it should be a "good-enough" indicator for "zoom-progress"-logging
if (firstTileWriter) {
if (time == null) {
LOGGER.info("Starting z{}", z);
} else {
LOGGER.info("Finished z{} in {}, now starting z{}", currentZ, time.stop(), z);
}
}
time = Timer.start();
currentZ = z;
@ -370,8 +389,6 @@ public class TileArchiveWriter {
if (time != null) {
LOGGER.info("Finished z{} in {}", currentZ, time.stop());
}
archive.finish(tileArchiveMetadata);
}
@SuppressWarnings("java:S2629")
@ -385,6 +402,10 @@ public class TileArchiveWriter {
return Stream.of(tilesByZoom).mapToLong(c -> c.get()).sum();
}
private void finishArchive() {
archive.finish(tileArchiveMetadata.withLayerStats(layerAttrStats.getTileStats()));
}
/**
* Generates a hash over encoded and compressed tile.
* <p>

Wyświetl plik

@ -1,6 +1,8 @@
package com.onthegomap.planetiler.archive;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.files.ReadableFilesArchive;
import com.onthegomap.planetiler.files.WriteableFilesArchive;
import com.onthegomap.planetiler.mbtiles.Mbtiles;
import com.onthegomap.planetiler.pmtiles.ReadablePmtiles;
import com.onthegomap.planetiler.pmtiles.WriteablePmtiles;
@ -56,6 +58,7 @@ public class TileArchives {
new StreamArchiveConfig(config, options));
case JSON -> WriteableJsonStreamArchive.newWriteToFile(archive.getLocalPath(),
new StreamArchiveConfig(config, options));
case FILES -> WriteableFilesArchive.newWriter(archive.getLocalPath(), options, config.force() || config.append());
};
}
@ -73,6 +76,7 @@ public class TileArchives {
case CSV, TSV -> throw new UnsupportedOperationException("reading CSV is not supported");
case PROTO, PBF -> throw new UnsupportedOperationException("reading PROTO is not supported");
case JSON -> throw new UnsupportedOperationException("reading JSON is not supported");
case FILES -> ReadableFilesArchive.newReader(archive.getLocalPath(), options);
};
}

Wyświetl plik

@ -1,21 +1,26 @@
package com.onthegomap.planetiler.archive;
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.io.IOException;
import java.util.Arrays;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@JsonDeserialize(using = TileCompression.Deserializer.class)
public enum TileCompression {
@JsonProperty("none")
NONE("none"),
@JsonProperty("gzip")
GZIP("gzip"),
@JsonProperty("unknown") @JsonEnumDefaultValue
UNKNWON("unknown");
@JsonProperty("unknown")
UNKNOWN("unknown");
private final String id;
@ -37,10 +42,22 @@ public enum TileCompression {
}
public static Set<TileCompression> availableValues() {
return Arrays.stream(TileCompression.values()).filter(tc -> tc != UNKNWON).collect(Collectors.toUnmodifiableSet());
return Arrays.stream(TileCompression.values()).filter(tc -> tc != UNKNOWN).collect(Collectors.toUnmodifiableSet());
}
public String id() {
return id;
}
static class Deserializer extends JsonDeserializer<TileCompression> {
@Override
public TileCompression deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return findById(p.getValueAsString()).orElse(TileCompression.UNKNOWN);
}
@Override
public TileCompression getNullValue(DeserializationContext ctxt) {
return TileCompression.GZIP;
}
}
}

Wyświetl plik

@ -30,7 +30,7 @@ public interface WriteableTileArchive extends Closeable {
* Called before any tiles are written into {@link TileWriter}. Implementations of TileArchive should set up any
* required state here.
*/
default void initialize(TileArchiveMetadata metadata) {}
default void initialize() {}
/**
* Implementations should return a object that implements {@link TileWriter} The specific TileWriter returned might
@ -44,6 +44,8 @@ public interface WriteableTileArchive extends Closeable {
*/
default void finish(TileArchiveMetadata tileArchiveMetadata) {}
long bytesWritten();
interface TileWriter extends Closeable {
void write(TileEncodingResult encodingResult);

Wyświetl plik

@ -95,7 +95,7 @@ class ArrayLongLongMapMmap implements LongLongMap.ParallelWrites {
int minChunks = 1;
int maxChunks = (int) (MAX_BYTES_TO_USE / chunkSize);
int targetChunks = (int) (ProcessInfo.getMaxMemoryBytes() * 0.5d / chunkSize);
return Math.min(maxChunks, Math.max(minChunks, targetChunks));
return Math.clamp(targetChunks, minChunks, maxChunks);
}
public void init() {

Wyświetl plik

@ -18,6 +18,7 @@
package com.onthegomap.planetiler.collection;
import java.util.Arrays;
import java.util.function.IntBinaryOperator;
/**
* A min-heap stored in an array where each element has 4 children.
@ -38,24 +39,26 @@ import java.util.Arrays;
*/
class ArrayLongMinHeap implements LongMinHeap {
protected static final int NOT_PRESENT = -1;
protected final int[] tree;
protected final int[] positions;
protected final long[] vals;
protected final int[] posToId;
protected final int[] idToPos;
protected final long[] posToValue;
protected final int max;
protected int size;
private final IntBinaryOperator tieBreaker;
/**
* @param elements the number of elements that can be stored in this heap. Currently the heap cannot be resized or
* shrunk/trimmed after initial creation. elements-1 is the maximum id that can be stored in this heap
*/
ArrayLongMinHeap(int elements) {
ArrayLongMinHeap(int elements, IntBinaryOperator tieBreaker) {
// we use an offset of one to make the arithmetic a bit simpler/more efficient, the 0th elements are not used!
tree = new int[elements + 1];
positions = new int[elements + 1];
Arrays.fill(positions, NOT_PRESENT);
vals = new long[elements + 1];
vals[0] = Long.MIN_VALUE;
posToId = new int[elements + 1];
idToPos = new int[elements + 1];
Arrays.fill(idToPos, NOT_PRESENT);
posToValue = new long[elements + 1];
posToValue[0] = Long.MIN_VALUE;
this.max = elements;
this.tieBreaker = tieBreaker;
}
private static int firstChild(int index) {
@ -87,58 +90,59 @@ class ArrayLongMinHeap implements LongMinHeap {
" was pushed already, you need to use the update method if you want to change its value");
}
size++;
tree[size] = id;
positions[id] = size;
vals[size] = value;
posToId[size] = id;
idToPos[id] = size;
posToValue[size] = value;
percolateUp(size);
}
@Override
public boolean contains(int id) {
checkIdInRange(id);
return positions[id] != NOT_PRESENT;
return idToPos[id] != NOT_PRESENT;
}
@Override
public void update(int id, long value) {
checkIdInRange(id);
int index = positions[id];
if (index < 0) {
int pos = idToPos[id];
if (pos < 0) {
throw new IllegalStateException(
"The heap does not contain: " + id + ". Use the contains method to check this before calling update");
}
long prev = vals[index];
vals[index] = value;
if (value > prev) {
percolateDown(index);
} else if (value < prev) {
percolateUp(index);
long prev = posToValue[pos];
posToValue[pos] = value;
int cmp = compareIdPos(value, prev, id, pos);
if (cmp > 0) {
percolateDown(pos);
} else if (cmp < 0) {
percolateUp(pos);
}
}
@Override
public void updateHead(long value) {
vals[1] = value;
posToValue[1] = value;
percolateDown(1);
}
@Override
public int peekId() {
return tree[1];
return posToId[1];
}
@Override
public long peekValue() {
return vals[1];
return posToValue[1];
}
@Override
public int poll() {
int id = peekId();
tree[1] = tree[size];
vals[1] = vals[size];
positions[tree[1]] = 1;
positions[id] = NOT_PRESENT;
posToId[1] = posToId[size];
posToValue[1] = posToValue[size];
idToPos[posToId[1]] = 1;
idToPos[id] = NOT_PRESENT;
size--;
percolateDown(1);
return id;
@ -147,29 +151,29 @@ class ArrayLongMinHeap implements LongMinHeap {
@Override
public void clear() {
for (int i = 1; i <= size; i++) {
positions[tree[i]] = NOT_PRESENT;
idToPos[posToId[i]] = NOT_PRESENT;
}
size = 0;
}
private void percolateUp(int index) {
assert index != 0;
if (index == 1) {
private void percolateUp(int pos) {
assert pos != 0;
if (pos == 1) {
return;
}
final int el = tree[index];
final long val = vals[index];
final int id = posToId[pos];
final long val = posToValue[pos];
// the finish condition (index==0) is covered here automatically because we set vals[0]=-inf
int parent;
long parentValue;
while (val < (parentValue = vals[parent = parent(index)])) {
vals[index] = parentValue;
positions[tree[index] = tree[parent]] = index;
index = parent;
while (compareIdPos(val, parentValue = posToValue[parent = parent(pos)], id, parent) < 0) {
posToValue[pos] = parentValue;
idToPos[posToId[pos] = posToId[parent]] = pos;
pos = parent;
}
tree[index] = el;
vals[index] = val;
positions[tree[index]] = index;
posToId[pos] = id;
posToValue[pos] = val;
idToPos[posToId[pos]] = pos;
}
private void checkIdInRange(int id) {
@ -178,45 +182,65 @@ class ArrayLongMinHeap implements LongMinHeap {
}
}
private void percolateDown(int index) {
private void percolateDown(int pos) {
if (size == 0) {
return;
}
assert index > 0;
assert index <= size;
final int el = tree[index];
final long val = vals[index];
assert pos > 0;
assert pos <= size;
final int id = posToId[pos];
final long value = posToValue[pos];
int child;
while ((child = firstChild(index)) <= size) {
while ((child = firstChild(pos)) <= size) {
// optimization: this is a very hot code path for performance of k-way merging,
// so manually-unroll the loop over the 4 child elements to find the minimum value
int minChild = child;
long minValue = vals[child], value;
long minValue = posToValue[child], childValue;
if (++child <= size) {
if ((value = vals[child]) < minValue) {
if (comparePosPos(childValue = posToValue[child], minValue, child, minChild) < 0) {
minChild = child;
minValue = value;
minValue = childValue;
}
if (++child <= size) {
if ((value = vals[child]) < minValue) {
if (comparePosPos(childValue = posToValue[child], minValue, child, minChild) < 0) {
minChild = child;
minValue = value;
minValue = childValue;
}
if (++child <= size && (value = vals[child]) < minValue) {
if (++child <= size &&
comparePosPos(childValue = posToValue[child], minValue, child, minChild) < 0) {
minChild = child;
minValue = value;
minValue = childValue;
}
}
}
if (minValue >= val) {
if (compareIdPos(value, minValue, id, minChild) <= 0) {
break;
}
vals[index] = minValue;
positions[tree[index] = tree[minChild]] = index;
index = minChild;
posToValue[pos] = minValue;
idToPos[posToId[pos] = posToId[minChild]] = pos;
pos = minChild;
}
tree[index] = el;
vals[index] = val;
positions[el] = index;
posToId[pos] = id;
posToValue[pos] = value;
idToPos[id] = pos;
}
private int comparePosPos(long val1, long val2, int pos1, int pos2) {
if (val1 < val2) {
return -1;
} else if (val1 == val2 && val1 != Long.MIN_VALUE) {
return tieBreaker.applyAsInt(posToId[pos1], posToId[pos2]);
}
return 1;
}
private int compareIdPos(long val1, long val2, int id1, int pos2) {
if (val1 < val2) {
return -1;
} else if (val1 == val2 && val1 != Long.MIN_VALUE) {
return tieBreaker.applyAsInt(id1, posToId[pos2]);
}
return 1;
}
}

Wyświetl plik

@ -185,7 +185,7 @@ class ExternalMergeSort implements FeatureSort {
.sinkToConsumer("worker", workers, group -> {
try {
readSemaphore.acquire();
var chunk = group.get(0);
var chunk = group.getFirst();
var others = group.stream().skip(1).toList();
var toSort = time(reading, () -> {
// merge all chunks into first one, and remove the others
@ -253,7 +253,12 @@ class ExternalMergeSort implements FeatureSort {
}
}
return LongMerger.mergeIterators(iterators);
return LongMerger.mergeIterators(iterators, SortableFeature.COMPARE_BYTES);
}
@Override
public int chunksToRead() {
return chunks.size();
}
public int chunks() {

Wyświetl plik

@ -26,8 +26,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Consumer;
import java.util.function.Function;
import javax.annotation.concurrent.NotThreadSafe;
import org.msgpack.core.MessageBufferPacker;
@ -59,7 +59,6 @@ public final class FeatureGroup implements Iterable<FeatureGroup.TileFeatures>,
private final CommonStringEncoder.AsByte commonLayerStrings = new CommonStringEncoder.AsByte();
private final CommonStringEncoder commonValueStrings = new CommonStringEncoder(100_000);
private final Stats stats;
private final LayerAttrStats layerStats = new LayerAttrStats();
private final PlanetilerConfig config;
private volatile boolean prepared = false;
private final TileOrder tileOrder;
@ -141,14 +140,6 @@ public final class FeatureGroup implements Iterable<FeatureGroup.TileFeatures>,
return (byte) ((geometry.geomType().asByte() & 0xff) | (geometry.scale() << 3));
}
/**
* Returns statistics about each layer written through {@link #newRenderedFeatureEncoder()} including min/max zoom,
* features on elements in that layer, and their types.
*/
public LayerAttrStats layerStats() {
return layerStats;
}
public long numFeaturesWritten() {
return sorter.numFeaturesWritten();
}
@ -159,16 +150,13 @@ public final class FeatureGroup implements Iterable<FeatureGroup.TileFeatures>,
// This method gets called billions of times when generating the planet, so these optimizations make a big difference:
// 1) Re-use the same buffer packer to avoid allocating and resizing new byte arrays for every feature.
private final MessageBufferPacker packer = MessagePack.newDefaultBufferPacker();
// 2) Avoid a ThreadLocal lookup on every layer stats call by getting the handler for this thread once
private final Consumer<RenderedFeature> threadLocalLayerStats = layerStats.handlerForThread();
// 3) Avoid re-encoding values for identical filled geometries (i.e. ocean) by memoizing the encoded values
// 2) Avoid re-encoding values for identical filled geometries (i.e. ocean) by memoizing the encoded values
// FeatureRenderer ensures that a separate VectorTileEncoder.Feature is used for each zoom level
private VectorTile.Feature lastFeature = null;
private byte[] lastEncodedValue = null;
@Override
public SortableFeature apply(RenderedFeature feature) {
threadLocalLayerStats.accept(feature);
var group = feature.group().orElse(null);
var thisFeature = feature.vectorTileFeature();
byte[] encodedValue;
@ -217,24 +205,18 @@ public final class FeatureGroup implements Iterable<FeatureGroup.TileFeatures>,
var attrs = vectorTileFeature.attrs();
packer.packMapHeader((int) attrs.values().stream().filter(Objects::nonNull).count());
for (Map.Entry<String, Object> entry : attrs.entrySet()) {
if (entry.getValue() != null) {
Object value = entry.getValue();
if (value != null) {
packer.packInt(commonValueStrings.encode(entry.getKey()));
Object value = entry.getValue();
if (value instanceof String string) {
packer.packValue(ValueFactory.newString(string));
} else if (value instanceof Integer integer) {
packer.packValue(ValueFactory.newInteger(integer.longValue()));
} else if (value instanceof Long longValue) {
packer.packValue(ValueFactory.newInteger(longValue));
} else if (value instanceof Float floatValue) {
packer.packValue(ValueFactory.newFloat(floatValue));
} else if (value instanceof Double doubleValue) {
packer.packValue(ValueFactory.newFloat(doubleValue));
} else if (value instanceof Boolean booleanValue) {
packer.packValue(ValueFactory.newBoolean(booleanValue));
} else {
packer.packValue(ValueFactory.newString(value.toString()));
}
packer.packValue(switch (value) {
case String string -> ValueFactory.newString(string);
case Integer integer -> ValueFactory.newInteger(integer.longValue());
case Long longValue -> ValueFactory.newInteger(longValue);
case Float floatValue -> ValueFactory.newFloat(floatValue);
case Double doubleValue -> ValueFactory.newFloat(doubleValue);
case Boolean booleanValue -> ValueFactory.newBoolean(booleanValue);
case Object other -> ValueFactory.newString(other.toString());
});
}
}
// Use the same binary format for encoding geometries in output vector tiles. Benchmarking showed
@ -333,6 +315,10 @@ public final class FeatureGroup implements Iterable<FeatureGroup.TileFeatures>,
}
}
public int chunksToRead() {
return sorter.chunksToRead();
}
public interface RenderedFeatureEncoder extends Function<RenderedFeature, SortableFeature>, Closeable {}
public record Reader(Worker readWorker, Iterable<TileFeatures> result) {}
@ -423,7 +409,7 @@ public final class FeatureGroup implements Iterable<FeatureGroup.TileFeatures>,
GeometryType geomType = decodeGeomType(geomTypeAndScale);
int scale = decodeScale(geomTypeAndScale);
int mapSize = unpacker.unpackMapHeader();
Map<String, Object> attrs = new HashMap<>(mapSize);
Map<String, Object> attrs = HashMap.newHashMap(mapSize);
for (int i = 0; i < mapSize; i++) {
String key = commonValueStrings.decode(unpacker.unpackInt());
Value v = unpacker.unpackValue();
@ -456,29 +442,55 @@ public final class FeatureGroup implements Iterable<FeatureGroup.TileFeatures>,
}
public VectorTile getVectorTile() {
return getVectorTile(null);
}
public VectorTile getVectorTile(LayerAttrStats.Updater layerStats) {
VectorTile tile = new VectorTile();
List<VectorTile.Feature> items = new ArrayList<>(entries.size());
if (layerStats != null) {
tile.trackLayerStats(layerStats.forZoom(tileCoord.z()));
}
List<VectorTile.Feature> items = new ArrayList<>();
String currentLayer = null;
Map<String, List<VectorTile.Feature>> layerFeatures = new TreeMap<>();
for (SortableFeature entry : entries) {
var feature = decodeVectorTileFeature(entry);
String layer = feature.layer();
if (currentLayer == null) {
currentLayer = layer;
layerFeatures.put(currentLayer, items);
} else if (!currentLayer.equals(layer)) {
postProcessAndAddLayerFeatures(tile, currentLayer, items);
currentLayer = layer;
items.clear();
items = new ArrayList<>();
layerFeatures.put(layer, items);
}
items.add(feature);
}
postProcessAndAddLayerFeatures(tile, currentLayer, items);
// first post-process entire tile by invoking postProcessTileFeatures to allow for post-processing that combines
// features across different layers, infers new layers, or removes layers
try {
var initialFeatures = layerFeatures;
layerFeatures = profile.postProcessTileFeatures(tileCoord, layerFeatures);
if (layerFeatures == null) {
layerFeatures = initialFeatures;
}
} catch (Throwable e) { // NOSONAR - OK to catch Throwable since we re-throw Errors
handlePostProcessFailure(e, "entire tile");
}
// then let profiles post-process each layer in isolation with postProcessLayerFeatures
for (var entry : layerFeatures.entrySet()) {
postProcessAndAddLayerFeatures(tile, entry.getKey(), entry.getValue());
}
return tile;
}
private void postProcessAndAddLayerFeatures(VectorTile encoder, String layer,
List<VectorTile.Feature> features) {
if (features == null || features.isEmpty()) {
return;
}
try {
List<VectorTile.Feature> postProcessed = profile
.postProcessLayerFeatures(layer, tileCoord.z(), features);
@ -490,21 +502,25 @@ public final class FeatureGroup implements Iterable<FeatureGroup.TileFeatures>,
// also remove points more than --max-point-buffer pixels outside the tile if the
// user has requested a narrower buffer than the profile provides by default
} catch (Throwable e) { // NOSONAR - OK to catch Throwable since we re-throw Errors
// failures in tile post-processing happen very late so err on the side of caution and
// log failures, only throwing when it's a fatal error
if (e instanceof GeometryException geoe) {
geoe.log(stats, "postprocess_layer",
"Caught error postprocessing features for " + layer + " layer on " + tileCoord);
} else if (e instanceof Error err) {
LOGGER.error("Caught fatal error postprocessing features {} {}", layer, tileCoord, e);
throw err;
} else {
LOGGER.error("Caught error postprocessing features {} {}", layer, tileCoord, e);
}
handlePostProcessFailure(e, layer);
}
encoder.addLayerFeatures(layer, features);
}
private void handlePostProcessFailure(Throwable e, String entity) {
// failures in tile post-processing happen very late so err on the side of caution and
// log failures, only throwing when it's a fatal error
if (e instanceof GeometryException geoe) {
geoe.log(stats, "postprocess_layer",
"Caught error postprocessing features for " + entity + " on " + tileCoord, config.logJtsExceptions());
} else if (e instanceof Error err) {
LOGGER.error("Caught fatal error postprocessing features {} {}", entity, tileCoord, e);
throw err;
} else {
LOGGER.error("Caught error postprocessing features {} {}", entity, tileCoord, e);
}
}
void add(SortableFeature entry) {
numFeaturesProcessed.incrementAndGet();
long key = entry.key();

Wyświetl plik

@ -74,6 +74,11 @@ interface FeatureSort extends Iterable<SortableFeature>, DiskBacked, MemoryEstim
.mapToObj(list::get)
.iterator();
}
@Override
public int chunksToRead() {
return list.size();
}
};
}
@ -131,9 +136,11 @@ interface FeatureSort extends Iterable<SortableFeature>, DiskBacked, MemoryEstim
}
}
});
return new ParallelIterator(reader, LongMerger.mergeSuppliers(queues));
return new ParallelIterator(reader, LongMerger.mergeSuppliers(queues, SortableFeature.COMPARE_BYTES));
}
int chunksToRead();
record ParallelIterator(Worker reader, @Override Iterator<SortableFeature> iterator)
implements Iterable<SortableFeature> {}
}

Wyświetl plik

@ -2,7 +2,7 @@ package com.onthegomap.planetiler.collection;
/**
* An item with a {@code long key} that can be used for sorting/grouping.
*
* <p>
* These items can be sorted or grouped by {@link FeatureSort}/{@link FeatureGroup} implementations. Sorted lists can
* also be merged using {@link LongMerger}.
*/

Wyświetl plik

@ -7,6 +7,7 @@ import com.carrotsearch.hppc.LongIntHashMap;
import com.carrotsearch.hppc.LongLongHashMap;
import com.carrotsearch.hppc.LongObjectHashMap;
import com.carrotsearch.hppc.ObjectIntHashMap;
import com.carrotsearch.hppc.SortedIterationLongObjectHashMap;
/**
* Static factory method for <a href="https://github.com/carrotsearch/hppc">High Performance Primitive Collections</a>.
@ -40,4 +41,8 @@ public class Hppc {
public static LongByteMap newLongByteHashMap() {
return new LongByteHashMap(10, 0.75);
}
public static <T> SortedIterationLongObjectHashMap<T> sortedView(LongObjectHashMap<T> input) {
return new SortedIterationLongObjectHashMap<>(input, Long::compare);
}
}

Wyświetl plik

@ -1,6 +1,7 @@
package com.onthegomap.planetiler.collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
@ -16,29 +17,34 @@ public class LongMerger {
private LongMerger() {}
/** Merges sorted items from {@link Supplier Suppliers} that return {@code null} when there are no items left. */
public static <T extends HasLongSortKey> Iterator<T> mergeSuppliers(List<? extends Supplier<T>> suppliers) {
return mergeIterators(suppliers.stream().map(SupplierIterator::new).toList());
public static <T extends HasLongSortKey> Iterator<T> mergeSuppliers(List<? extends Supplier<T>> suppliers,
Comparator<T> tieBreaker) {
return mergeIterators(suppliers.stream().map(SupplierIterator::new).toList(), tieBreaker);
}
/** Merges sorted iterators into a combined iterator over all the items. */
public static <T extends HasLongSortKey> Iterator<T> mergeIterators(List<? extends Iterator<T>> iterators) {
public static <T extends HasLongSortKey> Iterator<T> mergeIterators(List<? extends Iterator<T>> iterators,
Comparator<T> tieBreaker) {
return switch (iterators.size()) {
case 0 -> Collections.emptyIterator();
case 1 -> iterators.get(0);
case 2 -> new TwoWayMerge<>(iterators.get(0), iterators.get(1));
case 3 -> new ThreeWayMerge<>(iterators.get(0), iterators.get(1), iterators.get(2));
default -> new KWayMerge<>(iterators);
case 2 -> new TwoWayMerge<>(iterators.get(0), iterators.get(1), tieBreaker);
case 3 -> new ThreeWayMerge<>(iterators.get(0), iterators.get(1), iterators.get(2), tieBreaker);
default -> new KWayMerge<>(iterators, tieBreaker);
};
}
private static class TwoWayMerge<T extends HasLongSortKey> implements Iterator<T> {
private final Comparator<T> tieBreaker;
T a, b;
long ak = Long.MAX_VALUE, bk = Long.MAX_VALUE;
final Iterator<T> inputA, inputB;
TwoWayMerge(Iterator<T> inputA, Iterator<T> inputB) {
TwoWayMerge(Iterator<T> inputA, Iterator<T> inputB, Comparator<T> tieBreaker) {
this.inputA = inputA;
this.inputB = inputB;
this.tieBreaker = tieBreaker;
if (inputA.hasNext()) {
a = inputA.next();
ak = a.key();
@ -57,7 +63,7 @@ public class LongMerger {
@Override
public T next() {
T result;
if (ak < bk) {
if (lessThan(ak, bk, a, b)) {
result = a;
if (inputA.hasNext()) {
a = inputA.next();
@ -80,14 +86,21 @@ public class LongMerger {
}
return result;
}
private boolean lessThan(long ak, long bk, T a, T b) {
return ak < bk || (ak == bk && lessThanCmp(a, b, tieBreaker));
}
}
private static class ThreeWayMerge<T extends HasLongSortKey> implements Iterator<T> {
private final Comparator<T> tieBreaker;
T a, b, c;
long ak = Long.MAX_VALUE, bk = Long.MAX_VALUE, ck = Long.MAX_VALUE;
final Iterator<T> inputA, inputB, inputC;
ThreeWayMerge(Iterator<T> inputA, Iterator<T> inputB, Iterator<T> inputC) {
ThreeWayMerge(Iterator<T> inputA, Iterator<T> inputB, Iterator<T> inputC, Comparator<T> tieBreaker) {
this.tieBreaker = tieBreaker;
this.inputA = inputA;
this.inputB = inputB;
this.inputC = inputC;
@ -114,8 +127,8 @@ public class LongMerger {
public T next() {
T result;
// use at most 2 comparisons to get the next item
if (ak < bk) {
if (ak < ck) {
if (lessThan(ak, bk, a, b)) {
if (lessThan(ak, ck, a, c)) {
// ACB / ABC
result = a;
if (inputA.hasNext()) {
@ -136,7 +149,7 @@ public class LongMerger {
ck = Long.MAX_VALUE;
}
}
} else if (ck < bk) {
} else if (lessThan(ck, bk, c, b)) {
// CAB
result = c;
if (inputC.hasNext()) {
@ -161,6 +174,21 @@ public class LongMerger {
}
return result;
}
private boolean lessThan(long ak, long bk, T a, T b) {
return ak < bk || (ak == bk && lessThanCmp(a, b, tieBreaker));
}
}
private static <T> boolean lessThanCmp(T a, T b, Comparator<T> tieBreaker) {
// nulls go at the end
if (a == null) {
return false;
} else if (b == null) {
return true;
} else {
return tieBreaker.compare(a, b) < 0;
}
}
private static class KWayMerge<T extends HasLongSortKey> implements Iterator<T> {
@ -169,10 +197,10 @@ public class LongMerger {
private final LongMinHeap heap;
@SuppressWarnings("unchecked")
KWayMerge(List<? extends Iterator<T>> inputIterators) {
KWayMerge(List<? extends Iterator<T>> inputIterators, Comparator<T> tieBreaker) {
this.iterators = new Iterator[inputIterators.size()];
this.items = (T[]) new HasLongSortKey[inputIterators.size()];
this.heap = LongMinHeap.newArrayHeap(inputIterators.size());
this.heap = LongMinHeap.newArrayHeap(inputIterators.size(), (a, b) -> tieBreaker.compare(items[a], items[b]));
int outIdx = 0;
for (Iterator<T> iter : inputIterators) {
if (iter.hasNext()) {
@ -202,8 +230,8 @@ public class LongMerger {
items[id] = next;
heap.updateHead(next.key());
} else {
items[id] = null;
heap.poll();
items[id] = null;
}
return result;
}

Wyświetl plik

@ -17,6 +17,8 @@
*/
package com.onthegomap.planetiler.collection;
import java.util.function.IntBinaryOperator;
/**
* API for min-heaps that keeps track of {@code int} keys in a range from {@code [0, size)} ordered by {@code long}
* values.
@ -31,8 +33,8 @@ public interface LongMinHeap {
* <p>
* This is slightly faster than a traditional binary min heap due to a shallower, more cache-friendly memory layout.
*/
static LongMinHeap newArrayHeap(int elements) {
return new ArrayLongMinHeap(elements);
static LongMinHeap newArrayHeap(int elements, IntBinaryOperator tieBreaker) {
return new ArrayLongMinHeap(elements, tieBreaker);
}
int size();

Wyświetl plik

@ -1,12 +1,20 @@
package com.onthegomap.planetiler.collection;
import java.util.Arrays;
import java.util.Comparator;
public record SortableFeature(@Override long key, byte[] value) implements Comparable<SortableFeature>, HasLongSortKey {
public static final Comparator<SortableFeature> COMPARE_BYTES = (a, b) -> Arrays.compareUnsigned(a.value, b.value);
@Override
public int compareTo(SortableFeature o) {
return Long.compare(key, o.key);
if (key < o.key) {
return -1;
} else if (key == o.key) {
return Arrays.compareUnsigned(value, o.value);
} else {
return 1;
}
}
@Override

Wyświetl plik

@ -20,6 +20,7 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
import java.util.regex.Pattern;
@ -485,6 +486,13 @@ public class Arguments {
return parsed;
}
public <T> T getObject(String key, String description, T defaultValue, Function<String, T> converter) {
final String serializedValue = getArg(key);
final T value = serializedValue == null ? defaultValue : converter.apply(serializedValue);
logArgValue(key, description, value);
return value;
}
/**
* Returns a map from all the arguments provided to their values.
*/

Wyświetl plik

@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory;
public class Bounds {
private static final Logger LOGGER = LoggerFactory.getLogger(Bounds.class);
public static final Bounds WORLD = new Bounds(null);
private Envelope latLon;
private Envelope world;
@ -24,7 +25,7 @@ public class Bounds {
private Geometry shape;
Bounds(Envelope latLon) {
public Bounds(Envelope latLon) {
set(latLon);
}
@ -36,6 +37,10 @@ public class Bounds {
return world == null ? GeoUtils.WORLD_BOUNDS : world;
}
public boolean isWorld() {
return latLon == null || latLon.equals(GeoUtils.WORLD_LAT_LON_BOUNDS);
}
public TileExtents tileExtents() {
if (tileExtents == null) {
tileExtents = TileExtents.computeFromWorldBounds(PlanetilerConfig.MAX_MAXZOOM, world(), shape);

Wyświetl plik

@ -41,6 +41,7 @@ public record PlanetilerConfig(
String httpUserAgent,
Duration httpTimeout,
int httpRetries,
Duration httpRetryWait,
long downloadChunkSizeMB,
int downloadThreads,
double downloadMaxBandwidth,
@ -58,7 +59,8 @@ public record PlanetilerConfig(
String debugUrlPattern,
Path tmpDir,
Path tileWeights,
double maxPointBuffer
double maxPointBuffer,
boolean logJtsExceptions
) {
public static final int MIN_MINZOOM = 0;
@ -104,7 +106,7 @@ public record PlanetilerConfig(
Math.max(1, (threads - 16) / 32 + 1));
int featureProcessThreads =
arguments.getInteger("process_threads", "number of threads to use when processing input features",
Math.max(threads < 4 ? threads : (threads - featureWriteThreads), 1));
Math.max(threads < 8 ? threads : (threads - featureWriteThreads), 1));
Bounds bounds = new Bounds(arguments.bounds("bounds", "bounds"));
Path polygonFile =
arguments.file("polygon", "a .poly file that limits output to tiles intersecting the shape", null);
@ -165,6 +167,7 @@ public record PlanetilerConfig(
"Planetiler downloader (https://github.com/onthegomap/planetiler)"),
arguments.getDuration("http_timeout", "Timeout to use when downloading files over HTTP", "30s"),
arguments.getInteger("http_retries", "Retries to use when downloading files over HTTP", 1),
arguments.getDuration("http_retry_wait", "How long to wait before retrying HTTP request", "5s"),
arguments.getLong("download_chunk_size_mb", "Size of file chunks to download in parallel in megabytes", 100),
arguments.getInteger("download_threads", "Number of parallel threads to use when downloading each file", 1),
Parse.bandwidth(arguments.getString("download_max_bandwidth",
@ -208,7 +211,8 @@ public record PlanetilerConfig(
"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",
Double.POSITIVE_INFINITY)
Double.POSITIVE_INFINITY),
arguments.getBoolean("log_jts_exceptions", "Emit verbose details to debug JTS geometry errors", false)
);
}

Wyświetl plik

@ -34,19 +34,14 @@ public enum DataType implements BiFunction<WithTags, String, Object> {
/** Returns the data type associated with {@code value}, or {@link #GET_TAG} as a fallback. */
public static DataType typeOf(Object value) {
if (value instanceof String) {
return GET_STRING;
} else if (value instanceof Integer) {
return GET_INT;
} else if (value instanceof Long) {
return GET_LONG;
} else if (value instanceof Double) {
return GET_DOUBLE;
} else if (value instanceof Boolean) {
return GET_BOOLEAN;
} else {
return GET_TAG;
}
return switch (value) {
case String ignored -> GET_STRING;
case Integer ignored -> GET_INT;
case Long ignored -> GET_LONG;
case Double ignored -> GET_DOUBLE;
case Boolean ignored -> GET_BOOLEAN;
default -> GET_TAG;
};
}
/** Returns the data type associated with {@code id}, or {@link #GET_TAG} as a fallback. */

Wyświetl plik

@ -2,6 +2,7 @@ package com.onthegomap.planetiler.expression;
import static com.onthegomap.planetiler.expression.DataType.GET_TAG;
import com.google.common.base.Joiner;
import com.onthegomap.planetiler.reader.WithGeometryType;
import com.onthegomap.planetiler.reader.WithTags;
import com.onthegomap.planetiler.util.Format;
@ -14,7 +15,6 @@ import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.logging.log4j.util.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -23,12 +23,9 @@ import org.slf4j.LoggerFactory;
* <p>
* Calling {@code toString()} on any expression will generate code that can be used to recreate an identical copy of the
* original expression, assuming that the generated code includes:
*
* <pre>
* {@code
* {@snippet :
* import static com.onthegomap.planetiler.expression.Expression.*;
* }
* </pre>
*/
// TODO rename to BooleanExpression
public interface Expression extends Simplifiable<Expression> {
@ -141,14 +138,13 @@ public interface Expression extends Simplifiable<Expression> {
default Expression replace(Predicate<Expression> replace, Expression b) {
if (replace.test(this)) {
return b;
} else if (this instanceof Not not) {
return new Not(not.child.replace(replace, b));
} else if (this instanceof Or or) {
return new Or(or.children.stream().map(child -> child.replace(replace, b)).toList());
} else if (this instanceof And and) {
return new And(and.children.stream().map(child -> child.replace(replace, b)).toList());
} else {
return this;
return switch (this) {
case Not(var child) -> new Not(child.replace(replace, b));
case Or(var children) -> new Or(children.stream().map(child -> child.replace(replace, b)).toList());
case And(var children) -> new And(children.stream().map(child -> child.replace(replace, b)).toList());
default -> this;
};
}
}
@ -156,14 +152,13 @@ public interface Expression extends Simplifiable<Expression> {
default boolean contains(Predicate<Expression> filter) {
if (filter.test(this)) {
return true;
} else if (this instanceof Not not) {
return not.child.contains(filter);
} else if (this instanceof Or or) {
return or.children.stream().anyMatch(child -> child.contains(filter));
} else if (this instanceof And and) {
return and.children.stream().anyMatch(child -> child.contains(filter));
} else {
return false;
return switch (this) {
case Not(var child) -> child.contains(filter);
case Or(var children) -> children.stream().anyMatch(child -> child.contains(filter));
case And(var children) -> children.stream().anyMatch(child -> child.contains(filter));
default -> false;
};
}
}
@ -234,7 +229,7 @@ public interface Expression extends Simplifiable<Expression> {
return TRUE;
}
if (children.size() == 1) {
return children.get(0).simplifyOnce();
return children.getFirst().simplifyOnce();
}
if (children.contains(FALSE)) {
return FALSE;
@ -288,7 +283,7 @@ public interface Expression extends Simplifiable<Expression> {
return FALSE;
}
if (children.size() == 1) {
return children.get(0).simplifyOnce();
return children.getFirst().simplifyOnce();
}
if (children.contains(TRUE)) {
return TRUE;
@ -367,7 +362,7 @@ public interface Expression extends Simplifiable<Expression> {
return new MatchAny(field, values,
Set.copyOf(exactMatches),
patterns.isEmpty() ? null : Pattern.compile("(" + Strings.join(patterns, '|') + ")"),
patterns.isEmpty() ? null : Pattern.compile(patterns.stream().collect(Collectors.joining("|", "(", ")"))),
matchWhenMissing,
valueGetter
);

Wyświetl plik

@ -50,19 +50,15 @@ public record MultiExpression<T> (List<Entry<T>> expressions) implements Simplif
* when a particular key is present on the input.
*/
private static boolean mustAlwaysEvaluate(Expression expression) {
if (expression instanceof Expression.Or or) {
return or.children().stream().anyMatch(MultiExpression::mustAlwaysEvaluate);
} else if (expression instanceof Expression.And and) {
return and.children().stream().allMatch(MultiExpression::mustAlwaysEvaluate);
} else if (expression instanceof Expression.Not not) {
return !mustAlwaysEvaluate(not.child());
} else if (expression instanceof Expression.MatchAny any && any.matchWhenMissing()) {
return true;
} else {
return !(expression instanceof Expression.MatchAny) &&
!(expression instanceof Expression.MatchField) &&
!FALSE.equals(expression);
}
return switch (expression) {
case Expression.Or(var children) -> children.stream().anyMatch(MultiExpression::mustAlwaysEvaluate);
case Expression.And(var children) -> children.stream().allMatch(MultiExpression::mustAlwaysEvaluate);
case Expression.Not(var child) -> !mustAlwaysEvaluate(child);
case Expression.MatchAny any when any.matchWhenMissing() -> true;
case null, default -> !(expression instanceof Expression.MatchAny) &&
!(expression instanceof Expression.MatchField) &&
!FALSE.equals(expression);
};
}
/** Calls {@code acceptKey} for every tag that could possibly cause {@code exp} to match an input element. */
@ -152,6 +148,7 @@ public record MultiExpression<T> (List<Entry<T>> expressions) implements Simplif
return new MultiExpression<>(
expressions.stream()
.map(entry -> entry(fn.apply(entry.result), entry.expression))
.filter(entry -> entry.result != null)
.toList()
);
}
@ -176,7 +173,7 @@ public record MultiExpression<T> (List<Entry<T>> expressions) implements Simplif
*/
default O getOrElse(WithTags input, O defaultValue) {
List<O> matches = getMatches(input);
return matches.isEmpty() ? defaultValue : matches.get(0);
return matches.isEmpty() ? defaultValue : matches.getFirst();
}
/**
@ -184,7 +181,7 @@ public record MultiExpression<T> (List<Entry<T>> expressions) implements Simplif
*/
default O getOrElse(Map<String, Object> tags, O defaultValue) {
List<O> matches = getMatches(WithTags.from(tags));
return matches.isEmpty() ? defaultValue : matches.get(0);
return matches.isEmpty() ? defaultValue : matches.getFirst();
}
/** Returns true if any expression matches that tags from an input element. */

Wyświetl plik

@ -0,0 +1,93 @@
package com.onthegomap.planetiler.files;
import static com.onthegomap.planetiler.files.TileSchemeEncoding.X_TEMPLATE;
import static com.onthegomap.planetiler.files.TileSchemeEncoding.Y_TEMPLATE;
import static com.onthegomap.planetiler.files.TileSchemeEncoding.Z_TEMPLATE;
import com.onthegomap.planetiler.config.Arguments;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;
import java.util.Optional;
public final class FilesArchiveUtils {
static final String OPTION_METADATA_PATH = "metadata_path";
static final String OPTION_TILE_SCHEME = "tile_scheme";
private FilesArchiveUtils() {}
static Optional<Path> metadataPath(Path basePath, Arguments options) {
final String metadataPathRaw = options.getString(
OPTION_METADATA_PATH,
"path to the metadata - use \"none\" to disable",
"metadata.json"
);
if ("none".equals(metadataPathRaw)) {
return Optional.empty();
} else {
final Path p = Paths.get(metadataPathRaw);
if (p.isAbsolute()) {
return Optional.of(p);
}
return Optional.of(basePath.resolve(p));
}
}
static TileSchemeEncoding tilesSchemeEncoding(Arguments options, Path basePath, String defaultTileScheme) {
final String tileScheme = options.getString(
OPTION_TILE_SCHEME,
"the tile scheme (e.g. {z}/{x}/{y}.pbf, {x}/{y}/{z}.pbf)" +
" - instead of {x}/{y} {xs}/{ys} can be used which splits the x/y into 2 directories each" +
" which ensures <1000 files per directory",
defaultTileScheme
);
return new TileSchemeEncoding(tileScheme, basePath);
}
static BasePathWithTileSchemeEncoding basePathWithTileSchemeEncoding(Arguments options, Path basePath) {
final SplitShortcutPath split = SplitShortcutPath.split(basePath);
final String tileScheme = Objects
.requireNonNullElse(split.tileSchemePart(), Path.of(Z_TEMPLATE, X_TEMPLATE, Y_TEMPLATE + ".pbf")).toString();
return new BasePathWithTileSchemeEncoding(
split.basePart(),
tilesSchemeEncoding(options, split.basePart(), tileScheme)
);
}
public static Path cleanBasePath(Path basePath) {
return SplitShortcutPath.split(basePath).basePart();
}
record BasePathWithTileSchemeEncoding(Path basePath, TileSchemeEncoding tileSchemeEncoding) {}
private record SplitShortcutPath(Path basePart, Path tileSchemePart) {
public static SplitShortcutPath split(Path basePath) {
Path basePart = Objects.requireNonNullElse(basePath.getRoot(), Paths.get(""));
Path tileSchemePart = null;
boolean remainingIsTileScheme = false;
for (int i = 0; i < basePath.getNameCount(); i++) {
final Path part = basePath.getName(i);
if (!remainingIsTileScheme && part.toString().contains("{")) {
remainingIsTileScheme = true;
}
if (remainingIsTileScheme) {
tileSchemePart = tileSchemePart == null ? part : tileSchemePart.resolve(part);
} else {
basePart = basePart.resolve(part);
}
}
if (tileSchemePart == null) {
// just in case: use the "original" basePath in case no tile scheme is included, but basePart _should_ be identical
return new SplitShortcutPath(basePath, null);
} else {
return new SplitShortcutPath(basePart, tileSchemePart);
}
}
}
}

Wyświetl plik

@ -0,0 +1,114 @@
package com.onthegomap.planetiler.files;
import com.google.common.base.Preconditions;
import com.onthegomap.planetiler.archive.ReadableTileArchive;
import com.onthegomap.planetiler.archive.TileArchiveMetadata;
import com.onthegomap.planetiler.archive.TileArchiveMetadataDeSer;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.util.CloseableIterator;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Reads tiles from a folder structure (e.g. BASEPATH/{z}/{x}{y}.pbf). Counterpart to {@link WriteableFilesArchive}.
* <p/>
* Supported arguments
* <dl>
* <dt>(files_)tile_scheme</dt>
* <dd>The tile scheme e.g. {x}/{y}/{z}.pbf. The default is {z}/{x}/{y}.pbf. See {@link TileSchemeEncoding} for more
* details.</dd>
* <dt>(files_)metadata_path</dt>
* <dd>The path the meta data should be written to. The default is BASEPATH/metadata.json. "none" can be used to
* suppress writing metadata.</dd>
* </ul>
*
* @see WriteableFilesArchive
* @see TileSchemeEncoding
*/
public class ReadableFilesArchive implements ReadableTileArchive {
private static final Logger LOGGER = LoggerFactory.getLogger(ReadableFilesArchive.class);
private final Path basePath;
private final Path metadataPath;
private final Function<TileCoord, Path> tileSchemeEncoder;
private final Function<Path, Optional<TileCoord>> tileSchemeDecoder;
private final int searchDepth;
private ReadableFilesArchive(Path basePath, Arguments options) {
final var pathAndScheme = FilesArchiveUtils.basePathWithTileSchemeEncoding(options, basePath);
basePath = pathAndScheme.basePath();
LOGGER.atInfo().log(() -> "using " + pathAndScheme.basePath() + " as base files archive path");
this.basePath = basePath;
Preconditions.checkArgument(
Files.isDirectory(basePath),
"require \"" + basePath + "\" to be an existing directory"
);
this.metadataPath = FilesArchiveUtils.metadataPath(basePath, options).orElse(null);
final TileSchemeEncoding tileSchemeEncoding = pathAndScheme.tileSchemeEncoding();
this.tileSchemeEncoder = tileSchemeEncoding.encoder();
this.tileSchemeDecoder = tileSchemeEncoding.decoder();
this.searchDepth = tileSchemeEncoding.searchDepth();
}
public static ReadableFilesArchive newReader(Path basePath, Arguments options) {
return new ReadableFilesArchive(basePath, options);
}
@Override
@SuppressWarnings("java:S1168") // returning null is in sync with other implementations: mbtiles and pmtiles
public byte[] getTile(int x, int y, int z) {
final Path absolute = tileSchemeEncoder.apply(TileCoord.ofXYZ(x, y, z));
if (!Files.exists(absolute)) {
return null;
}
try {
return Files.readAllBytes(absolute);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
@Override
public CloseableIterator<TileCoord> getAllTileCoords() {
try {
final Stream<TileCoord> it = Files.find(basePath, searchDepth, (p, a) -> a.isRegularFile())
.map(tileSchemeDecoder)
.flatMap(Optional::stream);
return CloseableIterator.of(it);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
@Override
public TileArchiveMetadata metadata() {
if (metadataPath != null && Files.exists(metadataPath)) {
try (InputStream is = Files.newInputStream(metadataPath)) {
return TileArchiveMetadataDeSer.mbtilesMapper().readValue(is, TileArchiveMetadata.class);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
return null;
}
@Override
public void close() {
// nothing to do here
}
}

Wyświetl plik

@ -0,0 +1,183 @@
package com.onthegomap.planetiler.files;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.geo.TileOrder;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
/**
* Tile scheme encoding i.e. encoding and decoding of tile coordinates to a relative path.
* <p/>
* The tile scheme is a template string that supports the following templates: {x}, {y}, {z}, {xs}, {ys}. {xs} and {ys}
* are "safe" options that split the x/s coordinate into two folders, ensuring that each folder has less than 1000
* children.
* <table>
* <tr>
* <th>Tile Scheme</th>
* <th>Example Path</th>
* </tr>
* <tr>
* <td>{z}/{x}/{y}.pbf</td>
* <td>3/1/2.pbf</td>
* </tr>
* <tr>
* <td>{x}/{y}/{z}.pbf</td>
* <td>1/2/3.pbf</td>
* </tr>
* <tr>
* <td>{x}-{y}-{z}.pbf</td>
* <td>1-2-3.pbf</td>
* </tr>
* <tr>
* <td>{x}/a/{y}/b{z}.pbf</td>
* <td>1/a/2/b3.pbf</td>
* </tr>
* <tr>
* <td>{z}/{x}/{y}.pbf.gz</td>
* <td>3/1/2.pbf.gz</td>
* </tr>
* <tr>
* <td>{z}/{xs}/{ys}.pbf</td>
* <td>3/000/001/000/002.pbf</td>
* </tr>
* <tr>
* <td>{z}/{x}/{ys}.pbf</td>
* <td>3/1/000/002.pbf</td>
* </tr>
* <tr>
* <td>{z}/{xs}/{y}.pbf</td>
* <td>3/000/001/2.pbf</td>
* </tr>
* </table>
*/
public class TileSchemeEncoding {
static final String X_TEMPLATE = "{x}";
static final String X_SAFE_TEMPLATE = "{xs}";
static final String Y_TEMPLATE = "{y}";
static final String Y_SAFE_TEMPLATE = "{ys}";
static final String Z_TEMPLATE = "{z}";
private final String tileScheme;
private final Path basePath;
/**
* @param tileScheme the tile scheme to use e.g. {z}/{x}/{y}.pbf
* @param basePath the base path to append the generated relative tile path to
*/
public TileSchemeEncoding(String tileScheme, Path basePath) {
this.tileScheme = validate(tileScheme);
this.basePath = basePath;
}
public Function<TileCoord, Path> encoder() {
final boolean xSafe = tileScheme.contains(X_SAFE_TEMPLATE);
final boolean ySafe = tileScheme.contains(Y_SAFE_TEMPLATE);
return tileCoord -> {
String p = tileScheme.replace(Z_TEMPLATE, Integer.toString(tileCoord.z()));
if (xSafe) {
final String colStr = String.format("%06d", tileCoord.x());
p = p.replace(X_SAFE_TEMPLATE, Paths.get(colStr.substring(0, 3), colStr.substring(3)).toString());
} else {
p = p.replace(X_TEMPLATE, Integer.toString(tileCoord.x()));
}
if (ySafe) {
final String rowStr = String.format("%06d", tileCoord.y());
p = p.replace(Y_SAFE_TEMPLATE, Paths.get(rowStr.substring(0, 3), rowStr.substring(3)).toString());
} else {
p = p.replace(Y_TEMPLATE, Integer.toString(tileCoord.y()));
}
return basePath.resolve(Paths.get(p));
};
}
Function<Path, Optional<TileCoord>> decoder() {
final String tmpPath = basePath.resolve(tileScheme).toAbsolutePath().toString();
@SuppressWarnings("java:S1075") final String escapedPathSeparator = "\\" + File.separator;
final Pattern pathPattern = Pattern.compile(
Pattern.quote(tmpPath)
.replace(X_TEMPLATE, "\\E(?<x>\\d+)\\Q")
.replace(Y_TEMPLATE, "\\E(?<y>\\d+)\\Q")
.replace(Z_TEMPLATE, "\\E(?<z>\\d+)\\Q")
.replace(X_SAFE_TEMPLATE, "\\E(?<x0>\\d+)" + escapedPathSeparator + "(?<x1>\\d+)\\Q")
.replace(Y_SAFE_TEMPLATE, "\\E(?<y0>\\d+)" + escapedPathSeparator + "(?<y1>\\d+)\\Q")
);
final boolean xSafe = tileScheme.contains(X_SAFE_TEMPLATE);
final boolean ySafe = tileScheme.contains(Y_SAFE_TEMPLATE);
return path -> {
final Matcher m = pathPattern.matcher(path.toAbsolutePath().toString());
if (!m.matches()) {
return Optional.empty();
}
final int x = xSafe ? Integer.parseInt(m.group("x0") + m.group("x1")) : Integer.parseInt(m.group("x"));
final int y = ySafe ? Integer.parseInt(m.group("y0") + m.group("y1")) : Integer.parseInt(m.group("y"));
final int z = Integer.parseInt(m.group("z"));
return Optional.of(TileCoord.ofXYZ(x, y, z));
};
}
int searchDepth() {
return Paths.get(tileScheme).getNameCount() +
StringUtils.countMatches(tileScheme, X_SAFE_TEMPLATE) +
StringUtils.countMatches(tileScheme, Y_SAFE_TEMPLATE);
}
TileOrder preferredTileOrder() {
// there's only TMS currently - but once there are more, this can be changed according to the scheme
return TileOrder.TMS;
}
private static String validate(String tileScheme) {
if (Paths.get(tileScheme).isAbsolute()) {
throw new IllegalArgumentException("tile scheme is not allowed to be absolute");
}
if (StringUtils.countMatches(tileScheme, Z_TEMPLATE) != 1 ||
StringUtils.countMatches(tileScheme, X_TEMPLATE) + StringUtils.countMatches(tileScheme, X_SAFE_TEMPLATE) != 1 ||
StringUtils.countMatches(tileScheme, Y_TEMPLATE) + StringUtils.countMatches(tileScheme, Y_SAFE_TEMPLATE) != 1) {
throw new IllegalArgumentException(
"tile scheme must contain ('%s' OR '%s') AND ('%s' OR '%s' ) AND '%s'"
.formatted(X_TEMPLATE, X_SAFE_TEMPLATE, Y_TEMPLATE, Y_SAFE_TEMPLATE, Z_TEMPLATE));
}
if (tileScheme.contains("\\E") || tileScheme.contains("\\Q")) {
throw new IllegalArgumentException("regex quotes are not allowed");
}
return tileScheme;
}
@Override
public boolean equals(Object o) {
return this == o || (o instanceof TileSchemeEncoding that && Objects.equals(tileScheme, that.tileScheme) &&
Objects.equals(basePath, that.basePath));
}
@Override
public int hashCode() {
return Objects.hash(tileScheme, basePath);
}
@Override
public String toString() {
return "TileSchemeEncoding[" +
"tileScheme='" + tileScheme + '\'' +
", basePath=" + basePath +
']';
}
}

Wyświetl plik

@ -0,0 +1,175 @@
package com.onthegomap.planetiler.files;
import com.google.common.base.Preconditions;
import com.onthegomap.planetiler.archive.TileArchiveMetadata;
import com.onthegomap.planetiler.archive.TileArchiveMetadataDeSer;
import com.onthegomap.planetiler.archive.TileEncodingResult;
import com.onthegomap.planetiler.archive.WriteableTileArchive;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.geo.TileOrder;
import com.onthegomap.planetiler.stats.Counter;
import com.onthegomap.planetiler.util.CountingOutputStream;
import com.onthegomap.planetiler.util.FileUtils;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.function.Function;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Writes tiles as separate files. The default tile scheme is z/x/y.pbf.
* <p/>
* Supported arguments
* <dl>
* <dt>(files_)tile_scheme</dt>
* <dd>The tile scheme e.g. {x}/{y}/{z}.pbf. The default is {z}/{x}/{y}.pbf. See {@link TileSchemeEncoding} for more
* details.</dd>
* <dt>(files_)metadata_path</dt>
* <dd>The path the meta data should be written to. The default is BASEPATH/metadata.json. "none" can be used to
* suppress writing metadata.</dd>
* </ul>
*
* Usages:
*
* <pre>
* --output=/path/to/tiles/ --files_tile_scheme={z}/{x}/{y}.pbf --files_metadata_path=/some/other/path/metadata.json
* --output=/path/to/tiles/{z}/{x}/{y}.pbf
* --output=/path/to/tiles?format=files&amp;tile_scheme={z}/{x}/{y}.pbf
* </pre>
*
* @see ReadableFilesArchive
* @see TileSchemeEncoding
*/
public class WriteableFilesArchive implements WriteableTileArchive {
private static final Logger LOGGER = LoggerFactory.getLogger(WriteableFilesArchive.class);
private final Counter.MultiThreadCounter bytesWritten = Counter.newMultiThreadCounter();
private final Path basePath;
private final Path metadataPath;
private final Function<TileCoord, Path> tileSchemeEncoder;
private final TileOrder tileOrder;
private WriteableFilesArchive(Path basePath, Arguments options, boolean overwriteMetadata) {
final var pathAndScheme = FilesArchiveUtils.basePathWithTileSchemeEncoding(options, basePath);
basePath = pathAndScheme.basePath();
LOGGER.atInfo().log("using {} as base files archive path", basePath);
this.basePath = createValidateDirectory(basePath);
this.metadataPath = FilesArchiveUtils.metadataPath(basePath, options)
.flatMap(p -> FilesArchiveUtils.metadataPath(p.getParent(), options))
.orElse(null);
if (this.metadataPath != null && Files.exists(this.metadataPath)) {
if (!overwriteMetadata) {
throw new IllegalArgumentException(this.metadataPath + " already exists");
} else if (!Files.isRegularFile(this.metadataPath)) {
throw new IllegalArgumentException("require " + this.metadataPath + " to be a regular file");
}
}
final TileSchemeEncoding tileSchemeEncoding = pathAndScheme.tileSchemeEncoding();
this.tileSchemeEncoder = tileSchemeEncoding.encoder();
this.tileOrder = tileSchemeEncoding.preferredTileOrder();
}
public static WriteableFilesArchive newWriter(Path basePath, Arguments options, boolean overwriteMetadata) {
return new WriteableFilesArchive(basePath, options, overwriteMetadata);
}
@Override
public boolean deduplicates() {
return false;
}
@Override
public TileOrder tileOrder() {
return tileOrder;
}
@Override
public TileWriter newTileWriter() {
return new TileFilesWriter(basePath, tileSchemeEncoder, bytesWritten.counterForThread());
}
@Override
public void finish(TileArchiveMetadata tileArchiveMetadata) {
if (metadataPath == null) {
return;
}
try (OutputStream s = new CountingOutputStream(Files.newOutputStream(metadataPath), bytesWritten::incBy)) {
TileArchiveMetadataDeSer.mbtilesMapper().writeValue(s, tileArchiveMetadata);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
@Override
public long bytesWritten() {
return bytesWritten.get();
}
@Override
public void close() throws IOException {
// nothing to do here
}
private static Path createValidateDirectory(Path p) {
if (!Files.exists(p)) {
FileUtils.createDirectory(p);
}
Preconditions.checkArgument(
Files.isDirectory(p),
"require \"" + p + "\" to be a directory"
);
return p;
}
private static class TileFilesWriter implements TileWriter {
private final Function<TileCoord, Path> tileSchemeEncoder;
private final Counter bytesWritten;
private Path lastCheckedFolder;
TileFilesWriter(Path basePath, Function<TileCoord, Path> tileSchemeEncoder, Counter bytesWritten) {
this.tileSchemeEncoder = tileSchemeEncoder;
this.lastCheckedFolder = basePath;
this.bytesWritten = bytesWritten;
}
@Override
public final void write(TileEncodingResult encodingResult) {
final byte[] data = encodingResult.tileData();
final Path file = tileSchemeEncoder.apply(encodingResult.coord());
final Path folder = file.getParent();
// tiny optimization in order to avoid too many unnecessary "folder-exists-checks" (I/O)
// only effective when the tileScheme is z/x/y but doesn't really harm otherwise
if (!lastCheckedFolder.equals(folder) && !Files.exists(folder)) {
FileUtils.createDirectory(folder);
}
lastCheckedFolder = folder;
try {
Files.write(file, data);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
bytesWritten.incBy(data.length);
}
@Override
public void close() {
// nothing to do here
}
}
}

Wyświetl plik

@ -1,6 +1,7 @@
package com.onthegomap.planetiler.geo;
import com.onthegomap.planetiler.collection.LongLongMap;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.stats.Stats;
import java.util.ArrayList;
import java.util.List;
@ -51,6 +52,7 @@ public class GeoUtils {
public static final double WORLD_CIRCUMFERENCE_METERS = Math.PI * 2 * WORLD_RADIUS_METERS;
private static final double RADIANS_PER_DEGREE = Math.PI / 180;
private static final double DEGREES_PER_RADIAN = 180 / Math.PI;
private static final double LOG2 = Math.log(2);
/**
* Transform web mercator coordinates where top-left corner of the planet is (0,0) and bottom-right is (1,1) to
* latitude/longitude coordinates.
@ -281,15 +283,15 @@ public class GeoUtils {
}
public static Geometry combineLineStrings(List<LineString> lineStrings) {
return lineStrings.size() == 1 ? lineStrings.get(0) : createMultiLineString(lineStrings);
return lineStrings.size() == 1 ? lineStrings.getFirst() : createMultiLineString(lineStrings);
}
public static Geometry combinePolygons(List<Polygon> polys) {
return polys.size() == 1 ? polys.get(0) : createMultiPolygon(polys);
return polys.size() == 1 ? polys.getFirst() : createMultiPolygon(polys);
}
public static Geometry combinePoints(List<Point> points) {
return points.size() == 1 ? points.get(0) : createMultiPoint(points);
return points.size() == 1 ? points.getFirst() : createMultiPoint(points);
}
/**
@ -383,29 +385,29 @@ public class GeoUtils {
if (lineStrings.isEmpty()) {
throw new GeometryException("polygon_to_linestring_empty", "No line strings");
} else if (lineStrings.size() == 1) {
return lineStrings.get(0);
return lineStrings.getFirst();
} else {
return createMultiLineString(lineStrings);
}
}
private static void getLineStrings(Geometry input, List<LineString> output) throws GeometryException {
if (input instanceof LinearRing linearRing) {
output.add(JTS_FACTORY.createLineString(linearRing.getCoordinateSequence()));
} else if (input instanceof LineString lineString) {
output.add(lineString);
} else if (input instanceof Polygon polygon) {
getLineStrings(polygon.getExteriorRing(), output);
for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
getLineStrings(polygon.getInteriorRingN(i), output);
switch (input) {
case LinearRing linearRing -> output.add(JTS_FACTORY.createLineString(linearRing.getCoordinateSequence()));
case LineString lineString -> output.add(lineString);
case Polygon polygon -> {
getLineStrings(polygon.getExteriorRing(), output);
for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
getLineStrings(polygon.getInteriorRingN(i), output);
}
}
} else if (input instanceof GeometryCollection gc) {
for (int i = 0; i < gc.getNumGeometries(); i++) {
getLineStrings(gc.getGeometryN(i), output);
case GeometryCollection gc -> {
for (int i = 0; i < gc.getNumGeometries(); i++) {
getLineStrings(gc.getGeometryN(i), output);
}
}
} else {
throw new GeometryException("get_line_strings_bad_type",
"unrecognized geometry type: " + input.getGeometryType());
case null, default -> throw new GeometryException("get_line_strings_bad_type",
"unrecognized geometry type: " + (input == null ? "null" : input.getGeometryType()));
}
}
@ -416,7 +418,7 @@ public class GeoUtils {
/** Returns a point approximately {@code ratio} of the way from start to end and {@code offset} units to the right. */
public static Point pointAlongOffset(LineString lineString, double ratio, double offset) {
int numPoints = lineString.getNumPoints();
int middle = Math.max(0, Math.min(numPoints - 2, (int) (numPoints * ratio)));
int middle = Math.clamp((int) (numPoints * ratio), 0, numPoints - 2);
Coordinate a = lineString.getCoordinateN(middle);
Coordinate b = lineString.getCoordinateN(middle + 1);
LineSegment segment = new LineSegment(a, b);
@ -530,10 +532,22 @@ public class GeoUtils {
innerGeometries.add(geom);
}
}
return innerGeometries.size() == 1 ? innerGeometries.get(0) :
return innerGeometries.size() == 1 ? innerGeometries.getFirst() :
JTS_FACTORY.createGeometryCollection(innerGeometries.toArray(Geometry[]::new));
}
/**
* For a feature of size {@code worldGeometrySize} (where 1=full planet), determine the minimum zoom level at which
* the feature appears at least {@code minPixelSize} pixels large.
* <p>
* The result will be clamped to the range [0, {@link PlanetilerConfig#MAX_MAXZOOM}].
*/
public static int minZoomForPixelSize(double worldGeometrySize, double minPixelSize) {
double worldPixels = worldGeometrySize * 256;
return Math.clamp((int) Math.ceil(Math.log(minPixelSize / worldPixels) / LOG2), 0,
PlanetilerConfig.MAX_MAXZOOM);
}
/** Helper class to sort polygons by area of their outer shell. */
private record PolyAndArea(Polygon poly, double area) implements Comparable<PolyAndArea> {

Wyświetl plik

@ -1,6 +1,12 @@
package com.onthegomap.planetiler.geo;
import com.onthegomap.planetiler.stats.Stats;
import java.util.ArrayList;
import java.util.Base64;
import java.util.function.Supplier;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.WKBWriter;
import org.locationtech.jts.io.WKTWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -14,6 +20,7 @@ public class GeometryException extends Exception {
private final String stat;
private final boolean nonFatal;
private final ArrayList<Supplier<String>> detailsSuppliers = new ArrayList<>();
/**
* Constructs a new exception with a detailed error message caused by {@code cause}.
@ -51,6 +58,11 @@ public class GeometryException extends Exception {
this.nonFatal = nonFatal;
}
public GeometryException addDetails(Supplier<String> detailsSupplier) {
this.detailsSuppliers.add(detailsSupplier);
return this;
}
/** Returns the unique code for this error condition to use for counting the number of occurrences in stats. */
public String stat() {
return stat;
@ -72,6 +84,38 @@ public class GeometryException extends Exception {
assert nonFatal : log; // make unit tests fail if fatal
}
/** Logs the error but if {@code logDetails} is true, then also prints detailed debugging info. */
public void log(Stats stats, String statPrefix, String logPrefix, boolean logDetails) {
if (logDetails) {
stats.dataError(statPrefix + "_" + stat());
StringBuilder log = new StringBuilder(logPrefix + ": " + getMessage());
for (var details : detailsSuppliers) {
log.append("\n").append(details.get());
}
var str = log.toString();
LOGGER.warn(str, this.getCause() == null ? this : this.getCause());
assert nonFatal : log.toString(); // make unit tests fail if fatal
} else {
log(stats, statPrefix, logPrefix);
}
}
public GeometryException addGeometryDetails(String original, Geometry geometryCollection) {
return addDetails(() -> {
var wktWriter = new WKTWriter();
var wkbWriter = new WKBWriter();
var base64 = Base64.getEncoder();
return """
%s (wkt): %s
%s (wkb): %s
""".formatted(
original, wktWriter.write(geometryCollection),
original, base64.encodeToString(wkbWriter.write(geometryCollection))
).strip();
});
}
/**
* An error that we expect to encounter often so should only be logged at {@code TRACE} level.
*/

Wyświetl plik

@ -19,7 +19,7 @@ import org.locationtech.jts.index.strtree.STRtree;
@ThreadSafe
public class PolygonIndex<T> {
private record GeomWithData<T> (Polygon poly, T data) {}
private record GeomWithData<T>(Polygon poly, T data) {}
private final STRtree index = new STRtree();
@ -45,7 +45,7 @@ public class PolygonIndex<T> {
/** Returns the data associated with the first polygon containing {@code point}. */
public T getOnlyContaining(Point point) {
List<T> result = getContaining(point);
return result.isEmpty() ? null : result.get(0);
return result.isEmpty() ? null : result.getFirst();
}
/** Returns the data associated with all polygons containing {@code point}. */
@ -57,11 +57,29 @@ public class PolygonIndex<T> {
return postFilterContaining(point, items);
}
/** Returns the data associated with all polygons containing {@code point}. */
public List<T> getIntersecting(Geometry geom) {
build();
List<?> items = index.query(geom.getEnvelopeInternal());
return postFilterIntersecting(geom, items);
}
private List<T> postFilterContaining(Point point, List<?> items) {
List<T> result = new ArrayList<>(items.size());
for (Object item : items) {
if (item instanceof GeomWithData<?> value && value.poly.contains(point)) {
@SuppressWarnings("unchecked") T t = (T) value.data;
if (item instanceof GeomWithData<?>(var poly,var data) && poly.contains(point)) {
@SuppressWarnings("unchecked") T t = (T) data;
result.add(t);
}
}
return result;
}
private List<T> postFilterIntersecting(Geometry geom, List<?> items) {
List<T> result = new ArrayList<>(items.size());
for (Object item : items) {
if (item instanceof GeomWithData<?>(var poly,var data) && poly.intersects(geom)) {
@SuppressWarnings("unchecked") T t = (T) data;
result.add(t);
}
}
@ -77,7 +95,7 @@ public class PolygonIndex<T> {
List<?> items = index.query(point.getEnvelopeInternal());
// optimization: if there's only one then skip checking contains/distance
if (items.size() == 1) {
if (items.get(0)instanceof GeomWithData<?> value) {
if (items.getFirst() instanceof GeomWithData<?> value) {
@SuppressWarnings("unchecked") T t = (T) value.data;
return List.of(t);
}
@ -108,7 +126,7 @@ public class PolygonIndex<T> {
/** Returns the data associated with a polygon that contains {@code point} or nearest polygon if none are found. */
public T get(Point point) {
List<T> nearests = getContainingOrNearest(point);
return nearests.isEmpty() ? null : nearests.get(0);
return nearests.isEmpty() ? null : nearests.getFirst();
}
/** Indexes {@code item} for all polygons contained in {@code geom}. */

Wyświetl plik

@ -21,11 +21,11 @@ public class TileExtents implements Predicate<TileCoord> {
}
private static int quantizeDown(double value, int levels) {
return Math.max(0, Math.min(levels, (int) Math.floor(value * levels)));
return Math.clamp((int) Math.floor(value * levels), 0, levels);
}
private static int quantizeUp(double value, int levels) {
return Math.max(0, Math.min(levels, (int) Math.ceil(value * levels)));
return Math.clamp((int) Math.ceil(value * levels), 0, levels);
}
/** Returns a filter to tiles that intersect {@code worldBounds} (specified in world web mercator coordinates). */

Wyświetl plik

@ -1,17 +1,11 @@
package com.onthegomap.planetiler.mbtiles;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_ABSENT;
import static com.onthegomap.planetiler.util.Format.joinCoordinates;
import com.carrotsearch.hppc.LongIntHashMap;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.core.type.TypeReference;
import com.onthegomap.planetiler.archive.ReadableTileArchive;
import com.onthegomap.planetiler.archive.Tile;
import com.onthegomap.planetiler.archive.TileArchiveMetadata;
import com.onthegomap.planetiler.archive.TileCompression;
import com.onthegomap.planetiler.archive.TileArchiveMetadataDeSer;
import com.onthegomap.planetiler.archive.TileEncodingResult;
import com.onthegomap.planetiler.archive.WriteableTileArchive;
import com.onthegomap.planetiler.config.Arguments;
@ -19,9 +13,8 @@ import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.geo.TileOrder;
import com.onthegomap.planetiler.reader.FileFormatException;
import com.onthegomap.planetiler.util.CloseableIterator;
import com.onthegomap.planetiler.util.FileUtils;
import com.onthegomap.planetiler.util.Format;
import com.onthegomap.planetiler.util.LayerAttrStats;
import com.onthegomap.planetiler.util.Parse;
import java.io.IOException;
import java.nio.file.Path;
import java.sql.Connection;
@ -34,17 +27,15 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.OptionalLong;
import java.util.TreeMap;
import java.util.function.LongSupplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.locationtech.jts.geom.CoordinateXY;
import org.locationtech.jts.geom.Envelope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sqlite.SQLiteConfig;
@ -91,9 +82,6 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
private static final String METADATA_COL_VALUE = "value";
private static final Logger LOGGER = LoggerFactory.getLogger(Mbtiles.class);
private static final ObjectMapper objectMapper = new ObjectMapper()
.registerModules(new Jdk8Module())
.setSerializationInclusion(NON_ABSENT);
// load the sqlite driver
static {
@ -110,7 +98,9 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
private final boolean vacuumAnalyze;
private PreparedStatement getTileStatement = null;
private Mbtiles(Connection connection, Arguments arguments) {
private final LongSupplier bytesWritten;
private Mbtiles(Connection connection, Arguments arguments, LongSupplier bytesWritten) {
this.connection = connection;
this.compactDb = arguments.getBoolean(
COMPACT_DB + "|" + LEGACY_COMPACT_DB,
@ -127,6 +117,7 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
"mbtiles: vacuum analyze sqlite DB after writing",
false
);
this.bytesWritten = bytesWritten;
}
/** Returns a new mbtiles file that won't get written to disk. Useful for toy use-cases like unit tests. */
@ -138,7 +129,7 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
public static Mbtiles newInMemoryDatabase(Arguments options) {
SQLiteConfig config = new SQLiteConfig();
config.setApplicationId(MBTILES_APPLICATION_ID);
return new Mbtiles(newConnection("jdbc:sqlite::memory:", config, options), options);
return new Mbtiles(newConnection("jdbc:sqlite::memory:", config, options), options, () -> 0);
}
/** Alias for {@link #newInMemoryDatabase(boolean)} */
@ -160,7 +151,7 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
sqliteConfig.setTempStore(SQLiteConfig.TempStore.MEMORY);
sqliteConfig.setApplicationId(MBTILES_APPLICATION_ID);
var connection = newConnection("jdbc:sqlite:" + path.toAbsolutePath(), sqliteConfig, options);
return new Mbtiles(connection, options);
return new Mbtiles(connection, options, () -> FileUtils.size(path));
}
/** Returns a new connection to an mbtiles file optimized for reads. */
@ -182,7 +173,7 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
// helps with 3 or more threads concurrently accessing:
// config.setOpenMode(SQLiteOpenMode.NOMUTEX);
Connection connection = newConnection("jdbc:sqlite:" + path.toAbsolutePath(), config, options);
return new Mbtiles(connection, options);
return new Mbtiles(connection, options, () -> 0);
}
private static Connection newConnection(String url, SQLiteConfig defaults, Arguments args) {
@ -220,7 +211,7 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
}
@Override
public void initialize(TileArchiveMetadata tileArchiveMetadata) {
public void initialize() {
if (skipIndexCreation) {
createTablesWithoutIndexes();
if (LOGGER.isInfoEnabled()) {
@ -230,17 +221,21 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
} else {
createTablesWithIndexes();
}
metadataTable().set(tileArchiveMetadata);
}
@Override
public void finish(TileArchiveMetadata tileArchiveMetadata) {
metadataTable().set(tileArchiveMetadata);
if (vacuumAnalyze) {
vacuumAnalyze();
}
}
@Override
public long bytesWritten() {
return bytesWritten.getAsLong();
}
@Override
public void close() throws IOException {
try {
@ -472,33 +467,8 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
* @see <a href="https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md#vector-tileset-metadata">MBtiles
* schema</a>
*/
// TODO add tilestats
public record MetadataJson(
@JsonProperty("vector_layers") List<LayerAttrStats.VectorLayer> vectorLayers
) {
public MetadataJson(LayerAttrStats.VectorLayer... layers) {
this(List.of(layers));
}
public static MetadataJson fromJson(String json) {
try {
return json == null ? null : objectMapper.readValue(json, MetadataJson.class);
} catch (JsonProcessingException e) {
throw new IllegalStateException("Invalid metadata json: " + json, e);
}
}
public String toJson() {
try {
return objectMapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("Unable to encode as string: " + this, e);
}
}
}
/** Contents of a row of the tiles_shallow table. */
/** Contents of a row of the tiles_shallow table. */
private record TileShallowEntry(TileCoord coord, int tileDataId) {}
/** Contents of a row of the tiles_data table. */
@ -818,19 +788,18 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
public class Metadata {
/** Inserts a row into the metadata table that sets {@code name=value}. */
public Metadata setMetadata(String name, Object value) {
public Metadata setMetadata(String name, String value) {
if (value != null) {
String stringValue = value.toString();
LOGGER.debug("Set mbtiles metadata: {}={}", name,
stringValue.length() > 1_000 ?
(stringValue.substring(0, 1_000) + "... " + (stringValue.length() - 1_000) + " more characters") :
stringValue);
value.length() > 1_000 ?
(value.substring(0, 1_000) + "... " + (value.length() - 1_000) + " more characters") :
value);
try (
PreparedStatement statement = connection.prepareStatement(
"INSERT INTO " + METADATA_TABLE + " (" + METADATA_COL_NAME + "," + METADATA_COL_VALUE + ") VALUES(?, ?);")
) {
statement.setString(1, name);
statement.setString(2, stringValue);
statement.setString(2, value);
statement.execute();
} catch (SQLException throwables) {
LOGGER.error("Error setting metadata " + name + "=" + value, throwables);
@ -839,14 +808,6 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
return this;
}
/**
* Inserts a row into the metadata table that sets the value for {@code "json"} key to {@code value} serialized as a
* string.
*/
public Metadata setJson(MetadataJson value) {
return value == null ? this : setMetadata("json", value.toJson());
}
/** Returns all key-value pairs from the metadata table. */
public Map<String, String> getAll() {
TreeMap<String, String> result = new TreeMap<>();
@ -875,41 +836,9 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
* specification</a>
*/
public Metadata set(TileArchiveMetadata tileArchiveMetadata) {
final TileCompression tileCompression = tileArchiveMetadata.tileCompression();
if (tileCompression != null && tileCompression != TileCompression.GZIP) {
LOGGER.warn("will use {} for tile compression, but the mbtiles specification actually requires gzip",
tileCompression.id());
}
var map = new LinkedHashMap<>(tileArchiveMetadata.toMap());
setMetadata(TileArchiveMetadata.FORMAT_KEY, tileArchiveMetadata.format());
var center = tileArchiveMetadata.center();
var zoom = tileArchiveMetadata.zoom();
if (center != null) {
if (zoom != null) {
setMetadata(TileArchiveMetadata.CENTER_KEY, joinCoordinates(center.x, center.y, Math.ceil(zoom)));
} else {
setMetadata(TileArchiveMetadata.CENTER_KEY, joinCoordinates(center.x, center.y));
}
}
var bounds = tileArchiveMetadata.bounds();
if (bounds != null) {
setMetadata(TileArchiveMetadata.BOUNDS_KEY,
joinCoordinates(bounds.getMinX(), bounds.getMinY(), bounds.getMaxX(), bounds.getMaxY()));
}
setJson(new MetadataJson(tileArchiveMetadata.vectorLayers()));
map.remove(TileArchiveMetadata.FORMAT_KEY);
map.remove(TileArchiveMetadata.CENTER_KEY);
map.remove(TileArchiveMetadata.ZOOM_KEY);
map.remove(TileArchiveMetadata.BOUNDS_KEY);
map.remove(TileArchiveMetadata.VECTOR_LAYERS_KEY);
for (var entry : map.entrySet()) {
setMetadata(entry.getKey(), entry.getValue());
}
TileArchiveMetadataDeSer.mbtilesMapper()
.convertValue(tileArchiveMetadata, new TypeReference<Map<String, String>>() {})
.forEach(this::setMetadata);
return this;
}
@ -918,46 +847,7 @@ public final class Mbtiles implements WriteableTileArchive, ReadableTileArchive
*/
public TileArchiveMetadata get() {
Map<String, String> map = new HashMap<>(getAll());
String[] bounds = map.containsKey(TileArchiveMetadata.BOUNDS_KEY) ?
map.remove(TileArchiveMetadata.BOUNDS_KEY).split(",") : null;
String[] center = map.containsKey(TileArchiveMetadata.CENTER_KEY) ?
map.remove(TileArchiveMetadata.CENTER_KEY).split(",") : null;
var metadataJson = MetadataJson.fromJson(map.remove("json"));
String tileCompressionRaw = map.remove(TileArchiveMetadata.COMPRESSION_KEY);
TileCompression tileCompression = tileCompressionRaw == null ? TileCompression.GZIP :
TileCompression.findById(tileCompressionRaw).orElseGet(() -> {
LOGGER.warn("unknown tile compression {}", tileCompressionRaw);
return TileCompression.UNKNWON;
});
return new TileArchiveMetadata(
map.remove(TileArchiveMetadata.NAME_KEY),
map.remove(TileArchiveMetadata.DESCRIPTION_KEY),
map.remove(TileArchiveMetadata.ATTRIBUTION_KEY),
map.remove(TileArchiveMetadata.VERSION_KEY),
map.remove(TileArchiveMetadata.TYPE_KEY),
map.remove(TileArchiveMetadata.FORMAT_KEY),
bounds == null || bounds.length < 4 ? null : new Envelope(
Double.parseDouble(bounds[0]),
Double.parseDouble(bounds[2]),
Double.parseDouble(bounds[1]),
Double.parseDouble(bounds[3])
),
center == null || center.length < 2 ? null : new CoordinateXY(
Double.parseDouble(center[0]),
Double.parseDouble(center[1])
),
center == null || center.length < 3 ? null : Double.parseDouble(center[2]),
Parse.parseIntOrNull(map.remove(TileArchiveMetadata.MINZOOM_KEY)),
Parse.parseIntOrNull(map.remove(TileArchiveMetadata.MAXZOOM_KEY)),
metadataJson == null ? null : metadataJson.vectorLayers,
// any left-overs:
map,
tileCompression
);
return TileArchiveMetadataDeSer.mbtilesMapper().convertValue(map, TileArchiveMetadata.class);
}
}
}

Wyświetl plik

@ -18,6 +18,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.locationtech.jts.geom.Coordinate;
public class ReadablePmtiles implements ReadableTileArchive {
private final SeekableByteChannel channel;
@ -120,7 +121,7 @@ public class ReadablePmtiles implements ReadableTileArchive {
TileCompression tileCompression = switch (header.tileCompression()) {
case GZIP -> TileCompression.GZIP;
case NONE -> TileCompression.NONE;
case UNKNOWN -> TileCompression.UNKNWON;
case UNKNOWN -> TileCompression.UNKNOWN;
};
String format = switch (header.tileType()) {
@ -139,11 +140,14 @@ public class ReadablePmtiles implements ReadableTileArchive {
map.remove(TileArchiveMetadata.TYPE_KEY),
format,
header.bounds(),
header.center(),
(double) header.centerZoom(),
new Coordinate(
header.center().getX(),
header.center().getY(),
header.centerZoom()
),
(int) header.minZoom(),
(int) header.maxZoom(),
jsonMetadata.vectorLayers(),
TileArchiveMetadata.TileArchiveMetadataJson.create(jsonMetadata.vectorLayers()),
map,
tileCompression
);

Wyświetl plik

@ -10,6 +10,7 @@ import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.geo.TileOrder;
import com.onthegomap.planetiler.util.FileUtils;
import com.onthegomap.planetiler.util.Format;
import com.onthegomap.planetiler.util.Gzip;
import com.onthegomap.planetiler.util.SeekableInMemoryByteChannel;
@ -23,10 +24,11 @@ import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Objects;
import java.util.OptionalLong;
import java.util.TreeMap;
import java.util.function.LongSupplier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -47,9 +49,12 @@ public final class WriteablePmtiles implements WriteableTileArchive {
private long numAddressedTiles = 0;
private boolean isClustered = true;
private WriteablePmtiles(SeekableByteChannel channel) throws IOException {
private final LongSupplier bytesWritten;
private WriteablePmtiles(SeekableByteChannel channel, LongSupplier bytesWritten) throws IOException {
this.out = channel;
out.write(ByteBuffer.allocate(INIT_SECTION));
this.bytesWritten = bytesWritten;
}
private static Directories makeDirectoriesWithLeaves(List<Pmtiles.Entry> subEntries, int leafSize, int attemptNum)
@ -114,11 +119,13 @@ public final class WriteablePmtiles implements WriteableTileArchive {
public static WriteablePmtiles newWriteToFile(Path path) throws IOException {
return new WriteablePmtiles(
FileChannel.open(path, StandardOpenOption.CREATE, StandardOpenOption.READ, StandardOpenOption.WRITE));
FileChannel.open(path, StandardOpenOption.CREATE, StandardOpenOption.READ, StandardOpenOption.WRITE),
() -> FileUtils.size(path)
);
}
public static WriteablePmtiles newWriteToMemory(SeekableInMemoryByteChannel bytes) throws IOException {
return new WriteablePmtiles(bytes);
return new WriteablePmtiles(bytes, () -> 0);
}
@Override
@ -140,7 +147,8 @@ public final class WriteablePmtiles implements WriteableTileArchive {
}
try {
Directories directories = makeDirectories(entries);
var otherMetadata = new LinkedHashMap<>(tileArchiveMetadata.toMap());
// use treemap to ensure consistent ouput between runs
var otherMetadata = new TreeMap<>(tileArchiveMetadata.toMap());
// exclude keys included in top-level header
otherMetadata.remove(TileArchiveMetadata.CENTER_KEY);
@ -199,8 +207,8 @@ public final class WriteablePmtiles implements WriteableTileArchive {
(int) (bounds.getMaxX() * 10_000_000),
(int) (bounds.getMaxY() * 10_000_000),
(byte) zoom,
(int) center.x * 10_000_000,
(int) center.y * 10_000_000
(int) (center.x * 10_000_000),
(int) (center.y * 10_000_000)
);
LOGGER.info("Writing metadata and leaf directories...");
@ -238,6 +246,11 @@ public final class WriteablePmtiles implements WriteableTileArchive {
}
}
@Override
public long bytesWritten() {
return bytesWritten.getAsLong();
}
@Override
public void close() throws IOException {
out.close();

Wyświetl plik

@ -19,12 +19,12 @@ import mil.nga.geopackage.GeoPackageManager;
import mil.nga.geopackage.features.user.FeatureColumns;
import mil.nga.geopackage.features.user.FeatureDao;
import mil.nga.geopackage.geom.GeoPackageGeometryData;
import org.geotools.api.referencing.FactoryException;
import org.geotools.api.referencing.operation.MathTransform;
import org.geotools.geometry.jts.JTS;
import org.geotools.geometry.jts.WKBReader;
import org.geotools.referencing.CRS;
import org.locationtech.jts.geom.Geometry;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.MathTransform;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -153,7 +153,7 @@ public class GeoPackageReader extends SimpleReader<SimpleFeature> {
Geometry latLonGeom = (transform.isIdentity()) ? featureGeom : JTS.transform(featureGeom, transform);
FeatureColumns columns = feature.getColumns();
SimpleFeature geom = SimpleFeature.create(latLonGeom, new HashMap<>(columns.columnCount()),
SimpleFeature geom = SimpleFeature.create(latLonGeom, HashMap.newHashMap(columns.columnCount()),
sourceName, featureName, ++id);
for (int i = 0; i < columns.columnCount(); ++i) {

Wyświetl plik

@ -15,7 +15,6 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
@ -101,10 +100,14 @@ public class NaturalEarthReader extends SimpleReader<SimpleFeature> {
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("No .sqlite file found inside " + path));
extracted = unzippedDir.resolve(URLEncoder.encode(zipEntry.toString(), StandardCharsets.UTF_8));
if (!extracted.startsWith(unzippedDir)) {
throw new IllegalArgumentException(
"Zip file tried to extract child outside of folder: " + zipEntry.getFileName());
}
FileUtils.createParentDirectories(extracted);
if (!keepUnzipped || FileUtils.isNewer(path, extracted)) {
LOGGER.info("unzipping {} to {}", path.toAbsolutePath(), extracted);
Files.copy(Files.newInputStream(zipEntry), extracted, StandardCopyOption.REPLACE_EXISTING);
FileUtils.safeCopy(Files.newInputStream(zipEntry), extracted);
}
if (!keepUnzipped) {
extracted.toFile().deleteOnExit();
@ -177,7 +180,7 @@ public class NaturalEarthReader extends SimpleReader<SimpleFeature> {
// create the feature and pass to next stage
Geometry latLonGeometry = GeoUtils.WKB_READER.read(geometry);
SimpleFeature readerGeometry = SimpleFeature.create(latLonGeometry, new HashMap<>(column.length - 1),
SimpleFeature readerGeometry = SimpleFeature.create(latLonGeometry, HashMap.newHashMap(column.length - 1),
sourceName, table, ++id);
for (int c = 0; c < column.length; c++) {
if (c != geometryColumn) {

Wyświetl plik

@ -2,6 +2,7 @@ package com.onthegomap.planetiler.reader;
import com.onthegomap.planetiler.Profile;
import com.onthegomap.planetiler.collection.FeatureGroup;
import com.onthegomap.planetiler.config.Bounds;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.stats.Stats;
import java.io.IOException;
@ -10,19 +11,23 @@ import java.nio.file.Path;
import java.util.HashMap;
import java.util.List;
import java.util.function.Consumer;
import org.geotools.data.FeatureSource;
import org.geotools.api.data.FeatureSource;
import org.geotools.api.feature.simple.SimpleFeatureType;
import org.geotools.api.filter.Filter;
import org.geotools.api.referencing.FactoryException;
import org.geotools.api.referencing.crs.CoordinateReferenceSystem;
import org.geotools.api.referencing.operation.MathTransform;
import org.geotools.api.referencing.operation.OperationNotFoundException;
import org.geotools.api.referencing.operation.TransformException;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.feature.FeatureCollection;
import org.geotools.geometry.jts.JTS;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.util.factory.GeoTools;
import org.locationtech.jts.geom.Envelope;
import org.locationtech.jts.geom.Geometry;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.Filter;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.OperationNotFoundException;
import org.opengis.referencing.operation.TransformException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -38,22 +43,24 @@ import org.slf4j.LoggerFactory;
public class ShapefileReader extends SimpleReader<SimpleFeature> {
private static final Logger LOGGER = LoggerFactory.getLogger(ShapefileReader.class);
private final FeatureCollection<SimpleFeatureType, org.opengis.feature.simple.SimpleFeature> inputSource;
private final FeatureCollection<SimpleFeatureType, org.geotools.api.feature.simple.SimpleFeature> inputSource;
private final String[] attributeNames;
private final ShapefileDataStore dataStore;
private final String layer;
private MathTransform transformToLatLon;
public ShapefileReader(String sourceProjection, String sourceName, Path input) {
this(sourceProjection, sourceName, input, Bounds.WORLD);
}
public ShapefileReader(String sourceProjection, String sourceName, Path input, Bounds bounds) {
super(sourceName);
this.layer = input.getFileName().toString().replaceAll("\\.shp$", "");
dataStore = open(input);
try {
String typeName = dataStore.getTypeNames()[0];
FeatureSource<SimpleFeatureType, org.opengis.feature.simple.SimpleFeature> source = dataStore
FeatureSource<SimpleFeatureType, org.geotools.api.feature.simple.SimpleFeature> source = dataStore
.getFeatureSource(typeName);
inputSource = source.getFeatures(Filter.INCLUDE);
CoordinateReferenceSystem src =
sourceProjection == null ? source.getSchema().getCoordinateReferenceSystem() : CRS.decode(sourceProjection);
CoordinateReferenceSystem dest = CRS.decode("EPSG:4326", true);
@ -61,6 +68,26 @@ public class ShapefileReader extends SimpleReader<SimpleFeature> {
if (transformToLatLon.isIdentity()) {
transformToLatLon = null;
}
Filter filter = Filter.INCLUDE;
Envelope env = bounds.latLon();
if (!bounds.isWorld()) {
var ff = CommonFactoryFinder.getFilterFactory(GeoTools.getDefaultHints());
var schema = source.getSchema();
String geometryPropertyName = schema.getGeometryDescriptor().getLocalName();
var bbox = new ReferencedEnvelope(env.getMinX(), env.getMaxX(), env.getMinY(), env.getMaxY(), dest);
try {
var bbox2 = bbox.transform(schema.getGeometryDescriptor().getCoordinateReferenceSystem(), true);
filter = ff.bbox(ff.property(geometryPropertyName), bbox2);
} catch (TransformException e) {
// just use include filter
}
}
inputSource = source.getFeatures(filter);
attributeNames = new String[inputSource.getSchema().getAttributeCount()];
for (int i = 0; i < attributeNames.length; i++) {
attributeNames[i] = inputSource.getSchema().getDescriptor(i).getLocalName();
@ -105,7 +132,7 @@ public class ShapefileReader extends SimpleReader<SimpleFeature> {
SourceFeatureProcessor.processFiles(
sourceName,
sourcePaths,
path -> new ShapefileReader(sourceProjection, sourceName, path),
path -> new ShapefileReader(sourceProjection, sourceName, path, config.bounds()),
writer, config, profile, stats
);
}
@ -130,14 +157,14 @@ public class ShapefileReader extends SimpleReader<SimpleFeature> {
long id = 0;
try (var iter = inputSource.features()) {
while (iter.hasNext()) {
org.opengis.feature.simple.SimpleFeature feature = iter.next();
org.geotools.api.feature.simple.SimpleFeature feature = iter.next();
Geometry source = (Geometry) feature.getDefaultGeometry();
Geometry latLonGeometry = source;
if (transformToLatLon != null) {
latLonGeometry = JTS.transform(source, transformToLatLon);
}
if (latLonGeometry != null) {
SimpleFeature geom = SimpleFeature.create(latLonGeometry, new HashMap<>(attributeNames.length),
SimpleFeature geom = SimpleFeature.create(latLonGeometry, HashMap.newHashMap(attributeNames.length),
sourceName, layer, ++id);
for (int i = 1; i < attributeNames.length; i++) {
geom.setTag(attributeNames[i], feature.getAttribute(i));

Wyświetl plik

@ -1,12 +1,14 @@
package com.onthegomap.planetiler.reader;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.geo.GeoUtils;
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.reader.osm.OsmSourceFeature;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicLong;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Lineal;
@ -19,14 +21,12 @@ import org.locationtech.jts.geom.Puntal;
*/
public class SimpleFeature extends SourceFeature {
private static final AtomicLong idGenerator = new AtomicLong(0);
private final Map<String, Object> tags;
private Geometry worldGeometry;
private Geometry latLonGeometry;
private SimpleFeature(Geometry latLonGeometry, Geometry worldGeometry, Map<String, Object> tags, String source,
String sourceLayer,
long id, List<OsmReader.RelationMember<OsmRelationInfo>> relations) {
String sourceLayer, long id, List<OsmReader.RelationMember<OsmRelationInfo>> relations) {
super(tags, source, sourceLayer, relations, id);
assert latLonGeometry == null || worldGeometry == null : "Cannot specify both a world and lat/lon geometry";
this.latLonGeometry = latLonGeometry;
@ -51,54 +51,127 @@ public class SimpleFeature extends SourceFeature {
}
/** Returns a new feature with no tags and a geometry specified in latitude/longitude coordinates. */
public static SimpleFeature fromLatLonGeometry(Geometry latLonGeometry) {
return new SimpleFeature(latLonGeometry, null, Map.of(), null, null, idGenerator.incrementAndGet(), null);
public static SimpleFeature fromLatLonGeometry(Geometry latLonGeometry, long id) {
return new SimpleFeature(latLonGeometry, null, Map.of(), null, null, id, null);
}
/** Alias for {@link #fromLatLonGeometry(Geometry, long)} with no ID set. */
public static SimpleFeature fromLatLonGeometry(Geometry worldGeometry) {
return fromLatLonGeometry(worldGeometry, VectorTile.NO_FEATURE_ID);
}
/**
* Returns a new feature with no tags and a geometry specified in world web mercator coordinates where (0,0) is the
* northwest and (1,1) is the southeast corner of the planet.
*/
public static SimpleFeature fromWorldGeometry(Geometry worldGeometry) {
return new SimpleFeature(null, worldGeometry, Map.of(), null, null, idGenerator.incrementAndGet(), null);
public static SimpleFeature fromWorldGeometry(Geometry worldGeometry, long id) {
return new SimpleFeature(null, worldGeometry, Map.of(), null, null, id, null);
}
/** Returns a new feature with empty geometry and no tags. */
public static SimpleFeature empty() {
return fromWorldGeometry(GeoUtils.JTS_FACTORY.createGeometryCollection());
/** Alias for {@link #fromWorldGeometry(Geometry, long)} with no ID set. */
public static SimpleFeature fromWorldGeometry(Geometry worldGeometry) {
return fromWorldGeometry(worldGeometry, VectorTile.NO_FEATURE_ID);
}
/**
* Returns a new feature without source information if you need a {@code SimpleFeature} but don't plan on passing it
* to a profile.
*/
public static SimpleFeature create(Geometry latLonGeometry, Map<String, Object> tags, long id) {
return new SimpleFeature(latLonGeometry, null, tags, null, null, id, null);
}
/** Alias for {@link #create(Geometry, Map, long)} with no ID set. */
public static SimpleFeature create(Geometry latLonGeometry, Map<String, Object> tags) {
return new SimpleFeature(latLonGeometry, null, tags, null, null, idGenerator.incrementAndGet(), null);
return create(latLonGeometry, tags, VectorTile.NO_FEATURE_ID);
}
private static class SimpleOsmFeature extends SimpleFeature implements OsmSourceFeature {
private final String area;
private final OsmElement.Info info;
private SimpleOsmFeature(Geometry latLonGeometry, Geometry worldGeometry, Map<String, Object> tags, String source,
String sourceLayer, long id, List<OsmReader.RelationMember<OsmRelationInfo>> relations, OsmElement.Info info) {
super(latLonGeometry, worldGeometry, tags, source, sourceLayer, id, relations);
this.area = (String) tags.get("area");
this.info = info;
}
@Override
public boolean canBePolygon() {
return latLonGeometry() instanceof Polygonal || (latLonGeometry() instanceof LineString line &&
OsmReader.canBePolygon(line.isClosed(), area, latLonGeometry().getNumPoints()));
}
@Override
public boolean canBeLine() {
return latLonGeometry() instanceof MultiLineString || (latLonGeometry() instanceof LineString line &&
OsmReader.canBeLine(line.isClosed(), area, latLonGeometry().getNumPoints()));
}
@Override
protected Geometry computePolygon() {
var geom = worldGeometry();
return geom instanceof LineString line ? GeoUtils.JTS_FACTORY.createPolygon(line.getCoordinates()) : geom;
}
@Override
public OsmElement originalElement() {
return new OsmElement() {
@Override
public long id() {
return SimpleOsmFeature.this.id();
}
@Override
public Info info() {
return info;
}
@Override
public int cost() {
return 1;
}
@Override
public Type type() {
return isPoint() ? Type.NODE : Type.WAY;
}
@Override
public Map<String, Object> tags() {
return tags();
}
};
}
@Override
public boolean equals(Object o) {
return this == o || (o instanceof SimpleOsmFeature other && super.equals(other) &&
Objects.equals(area, other.area) && Objects.equals(info, other.info));
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (area != null ? area.hashCode() : 0);
result = 31 * result + (info != null ? info.hashCode() : 0);
return result;
}
}
/** Returns a new feature with OSM relation info. Useful for setting up inputs for OSM unit tests. */
public static SimpleFeature createFakeOsmFeature(Geometry latLonGeometry, Map<String, Object> tags, String source,
String sourceLayer, long id, List<OsmReader.RelationMember<OsmRelationInfo>> relations) {
String area = (String) tags.get("area");
return new SimpleFeature(latLonGeometry, null, tags, source, sourceLayer, id, relations) {
@Override
public boolean canBePolygon() {
return latLonGeometry instanceof Polygonal || (latLonGeometry instanceof LineString line &&
OsmReader.canBePolygon(line.isClosed(), area, latLonGeometry.getNumPoints()));
}
return createFakeOsmFeature(latLonGeometry, tags, source, sourceLayer, id, relations, null);
}
@Override
public boolean canBeLine() {
return latLonGeometry instanceof MultiLineString || (latLonGeometry instanceof LineString line &&
OsmReader.canBeLine(line.isClosed(), area, latLonGeometry.getNumPoints()));
}
@Override
protected Geometry computePolygon() {
var geom = worldGeometry();
return geom instanceof LineString line ? GeoUtils.JTS_FACTORY.createPolygon(line.getCoordinates()) : geom;
}
};
/** Returns a new feature with OSM relation info and metadata. Useful for setting up inputs for OSM unit tests. */
public static SimpleFeature createFakeOsmFeature(Geometry latLonGeometry, Map<String, Object> tags, String source,
String sourceLayer, long id, List<OsmReader.RelationMember<OsmRelationInfo>> relations, OsmElement.Info info) {
return new SimpleOsmFeature(latLonGeometry, null, tags, source, sourceLayer, id, relations, info);
}
@Override
@ -153,8 +226,10 @@ public class SimpleFeature extends SourceFeature {
@Override
public String toString() {
return "SimpleFeature[" +
"geometry type=" + latLonGeometry().getGeometryType() + ", " +
"tags=" + tags + ']';
return "Feature[source=" + getSource() +
", source layer=" + getSourceLayer() +
", id=" + id() +
", geometry type=" + latLonGeometry().getGeometryType() +
", tags=" + tags + ']';
}
}

Wyświetl plik

@ -7,6 +7,7 @@ import com.onthegomap.planetiler.reader.osm.OsmRelationInfo;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.locationtech.jts.algorithm.construct.MaximumInscribedCircle;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Lineal;
@ -34,11 +35,14 @@ public abstract class SourceFeature implements WithTags, WithGeometryType {
private Geometry centroid = null;
private Geometry pointOnSurface = null;
private Geometry centroidIfConvex = null;
private double innermostPointTolerance = Double.NaN;
private Geometry innermostPoint = null;
private Geometry linearGeometry = null;
private Geometry polygonGeometry = null;
private Geometry validPolygon = null;
private double area = Double.NaN;
private double length = Double.NaN;
private double size = Double.NaN;
/**
* Constructs a new input feature.
@ -125,10 +129,30 @@ public abstract class SourceFeature implements WithTags, WithGeometryType {
worldGeometry().getInteriorPoint());
}
/**
* Returns {@link MaximumInscribedCircle#getCenter()} of this geometry in world web mercator coordinates.
*
* @param tolerance precision for calculating maximum inscribed circle. 0.01 means 1% of the square root of the area.
* Smaller values for a more precise tolerance become very expensive to compute. Values between
* 0.05-0.1 are a good compromise of performance vs. precision.
*/
public final Geometry innermostPoint(double tolerance) throws GeometryException {
if (canBePolygon()) {
// cache as long as the tolerance hasn't changed
if (tolerance != innermostPointTolerance || innermostPoint == null) {
innermostPoint = MaximumInscribedCircle.getCenter(polygon(), Math.sqrt(area()) * tolerance);
innermostPointTolerance = tolerance;
}
return innermostPoint;
} else {
return pointOnSurface();
}
}
private Geometry computeCentroidIfConvex() throws GeometryException {
if (!canBePolygon()) {
return centroid();
} else if (polygon()instanceof Polygon poly &&
} else if (polygon() instanceof Polygon poly &&
poly.getNumInteriorRing() == 0 &&
GeoUtils.isConvex(poly.getExteriorRing())) {
return centroid();
@ -245,6 +269,14 @@ public abstract class SourceFeature implements WithTags, WithGeometryType {
(isPoint() || canBePolygon() || canBeLine()) ? worldGeometry().getLength() : 0) : length;
}
/**
* Returns and caches sqrt of {@link #area()} if polygon or {@link #length()} if a line string.
*/
public double size() throws GeometryException {
return Double.isNaN(size) ? (size = canBePolygon() ? Math.sqrt(Math.abs(area())) : canBeLine() ? length() : 0) :
size;
}
/** Returns the ID of the source that this feature came from. */
public String getSource() {
return source;
@ -292,4 +324,13 @@ public abstract class SourceFeature implements WithTags, WithGeometryType {
public boolean hasRelationInfo() {
return relationInfos != null && !relationInfos.isEmpty();
}
@Override
public String toString() {
return "Feature[source=" + getSource() +
", source layer=" + getSourceLayer() +
", id=" + id() +
", tags=" + tags + ']';
}
}

Wyświetl plik

@ -24,6 +24,8 @@ public interface OsmElement extends WithTags {
int cost();
Type type();
enum Type {
NODE,
WAY,
@ -41,6 +43,11 @@ public interface OsmElement extends WithTags {
public int cost() {
return 1 + tags.size() + (info == null ? 0 : Info.COST);
}
@Override
public Type type() {
return null;
}
}
/** A point on the earth's surface. */
@ -117,6 +124,11 @@ public interface OsmElement extends WithTags {
return 1 + tags.size() + (info == null ? 0 : Info.COST);
}
@Override
public Type type() {
return Type.NODE;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
@ -170,6 +182,11 @@ public interface OsmElement extends WithTags {
public int cost() {
return 1 + tags.size() + nodes.size() + (info == null ? 0 : Info.COST);
}
@Override
public Type type() {
return Type.WAY;
}
}
/** An ordered list of nodes, ways, and other relations. */
@ -199,6 +216,11 @@ public interface OsmElement extends WithTags {
return 1 + tags.size() + members.size() * 3 + (info == null ? 0 : Info.COST);
}
@Override
public Type type() {
return Type.RELATION;
}
/**
* A node, way, or relation contained in a relation with an optional "role" to clarify the purpose of each member.
*/

Wyświetl plik

@ -14,15 +14,14 @@
package com.onthegomap.planetiler.reader.osm;
import com.carrotsearch.hppc.LongArrayList;
import com.carrotsearch.hppc.LongObjectMap;
import com.carrotsearch.hppc.LongObjectHashMap;
import com.carrotsearch.hppc.ObjectIntMap;
import com.carrotsearch.hppc.cursors.LongObjectCursor;
import com.onthegomap.planetiler.collection.Hppc;
import com.onthegomap.planetiler.geo.GeoUtils;
import com.onthegomap.planetiler.geo.GeometryException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.locationtech.jts.geom.Coordinate;
@ -41,8 +40,9 @@ import org.locationtech.jts.geom.prep.PreparedPolygon;
* Multipolygon way members have an "inner" and "outer" role, but they can be incorrectly specified, so instead
* determine the nesting order and alternate outer/inner/outer/inner... from the outermost ring inwards.
* <p>
* This class is ported to Java from https://github.com/omniscale/imposm3/blob/master/geom/multipolygon.go and
* https://github.com/omniscale/imposm3/blob/master/geom/ring.go
* This class is ported to Java from
* <a href="https://github.com/omniscale/imposm3/blob/master/geom/multipolygon.go">imposm3 multipolygon.go</a> and
* <a href="https://github.com/omniscale/imposm3/blob/master/geom/ring.go">imposm3 ring.go</a>
*/
public class OsmMultipolygon {
/*
@ -62,7 +62,8 @@ public class OsmMultipolygon {
private final Polygon geom;
private final double area;
private Ring containedBy = null;
private final Set<Ring> holes = new HashSet<>();
// use linked hash set to ensure same input always produces same output
private final Set<Ring> holes = new LinkedHashSet<>();
private Ring(Polygon geom) {
this.geom = geom;
@ -163,7 +164,7 @@ public class OsmMultipolygon {
boolean fix
) throws GeometryException {
try {
if (rings.size() == 0) {
if (rings.isEmpty()) {
throw new GeometryException.Verbose("osm_invalid_multipolygon_empty",
"error building multipolygon " + osmId + ": no rings to process");
}
@ -175,7 +176,7 @@ public class OsmMultipolygon {
}
polygons.sort(BY_AREA_DESCENDING);
Set<Ring> shells = groupParentChildShells(polygons);
if (shells.size() == 0) {
if (shells.isEmpty()) {
throw new GeometryException.Verbose("osm_invalid_multipolygon_not_closed",
"error building multipolygon " + osmId + ": multipolygon not closed");
} else if (shells.size() == 1) {
@ -227,12 +228,13 @@ public class OsmMultipolygon {
}
private static Set<Ring> groupParentChildShells(List<Ring> polygons) {
Set<Ring> shells = new HashSet<>();
// use linked hash set to ensure the same input always produces the same output
Set<Ring> shells = new LinkedHashSet<>();
int numPolygons = polygons.size();
if (numPolygons == 0) {
return shells;
}
shells.add(polygons.get(0));
shells.add(polygons.getFirst());
if (numPolygons == 1) {
return shells;
}
@ -313,7 +315,7 @@ public class OsmMultipolygon {
}
static List<LongArrayList> connectPolygonSegments(List<LongArrayList> outer) {
LongObjectMap<LongArrayList> endpointIndex = Hppc.newLongObjectHashMap(outer.size() * 2);
LongObjectHashMap<LongArrayList> endpointIndex = Hppc.newLongObjectHashMap(outer.size() * 2);
List<LongArrayList> completeRings = new ArrayList<>(outer.size());
for (LongArrayList ids : outer) {
@ -366,12 +368,11 @@ public class OsmMultipolygon {
}
}
for (LongObjectCursor<LongArrayList> cursor : endpointIndex) {
LongArrayList value = cursor.value;
if (value.size() >= 4) {
if (value.get(0) == value.get(value.size() - 1) || cursor.key == value.get(0)) {
completeRings.add(value);
}
// iterate in sorted order to ensure the same input always produces the same output
for (var entry : Hppc.sortedView(endpointIndex)) {
LongArrayList value = entry.value;
if (value.size() >= 4 && (value.get(0) == value.get(value.size() - 1) || entry.key == value.get(0))) {
completeRings.add(value);
}
}
return completeRings;

Wyświetl plik

@ -35,8 +35,10 @@ import java.io.Closeable;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Consumer;
@ -159,10 +161,11 @@ public class OsmReader implements Closeable, MemoryEstimator.HasEstimate {
.addProcessStats()
.addInMemoryObject("hppc", this)
.newLine();
int threads = config.threads();
if (nodeLocationDb instanceof LongLongMap.ParallelWrites) {
// If the node location writer supports parallel writes, then parse, process, and write node locations from worker threads
int parseThreads = Math.max(1, config.threads() - 1);
int parseThreads = Math.max(1, threads < 8 ? threads : (threads - 1));
pass1Phaser.registerWorkers(parseThreads);
var parallelPipeline = pipeline
.fromGenerator("read", osmBlockSource::forEachBlock)
@ -174,7 +177,7 @@ public class OsmReader implements Closeable, MemoryEstimator.HasEstimate {
// If the node location writer requires sequential writes, then the reader hands off the block to workers
// and a handle that the result will go on to the single-threaded writer, and the writer emits new nodes when
// they are ready
int parseThreads = Math.max(1, config.threads() - 2);
int parseThreads = Math.max(1, threads < 8 ? threads : (threads - 2));
int pendingBlocks = parseThreads * 2;
// Each worker will hand off finished elements to the single process thread. A Future<List<OsmElement>> would result
// in too much memory usage/GC so use a WeightedHandoffQueue instead which will fill up with lightweight objects
@ -592,7 +595,7 @@ public class OsmReader implements Closeable, MemoryEstimator.HasEstimate {
* @param role "role" of the relation member
* @param relation user-provided data about the relation from pass1
*/
public record RelationMember<T extends OsmRelationInfo> (String role, T relation) {}
public record RelationMember<T extends OsmRelationInfo>(String role, T relation) {}
/** Raw relation membership data that gets encoded/decoded into a long. */
private record RelationMembership(String role, long relationId) {}
@ -787,11 +790,15 @@ public class OsmReader implements Closeable, MemoryEstimator.HasEstimate {
@Override
protected Geometry computeWorldGeometry() throws GeometryException {
List<LongArrayList> rings = new ArrayList<>(relation.members().size());
Set<Long> added = new HashSet<>();
for (OsmElement.Relation.Member member : relation.members()) {
String role = member.role();
LongArrayList poly = multipolygonWayGeometries.get(member.ref());
if (member.type() == OsmElement.Type.WAY) {
if (poly != null && !poly.isEmpty()) {
if (!added.add(member.ref())) {
// ignore duplicate relation members
stats.dataError("osm_" + relation.getTag("type") + "_duplicate_member");
} else if (poly != null && !poly.isEmpty()) {
rings.add(poly);
} else {
// boundary and land_area relations might not be complete for extracts, but multipolygons should be

Wyświetl plik

@ -133,7 +133,7 @@ public class PbfDecoder implements Iterable<OsmElement> {
private Map<String, Object> buildTags(int num, IntUnaryOperator key, IntUnaryOperator value) {
if (num > 0) {
Map<String, Object> tags = new HashMap<>(num);
Map<String, Object> tags = HashMap.newHashMap(num);
for (int i = 0; i < num; i++) {
String k = fieldDecoder.decodeString(key.applyAsInt(i));
String v = fieldDecoder.decodeString(value.applyAsInt(i));
@ -366,7 +366,7 @@ public class PbfDecoder implements Iterable<OsmElement> {
if (tags == null) {
// divide by 2 as key&value, multiply by 2 because of the better approximation
tags = new HashMap<>(Math.max(3, 2 * (nodes.getKeysValsCount() / 2) / nodes.getKeysValsCount()));
tags = HashMap.newHashMap(Math.max(3, 2 * (nodes.getKeysValsCount() / 2) / nodes.getKeysValsCount()));
}
tags.put(fieldDecoder.decodeString(keyIndex), fieldDecoder.decodeString(valueIndex));

Wyświetl plik

@ -97,6 +97,10 @@ public class FeatureRenderer implements Consumer<FeatureCollector.Feature>, Clos
coords[i] = origCoords[i].copy();
}
for (int zoom = feature.getMaxZoom(); zoom >= feature.getMinZoom(); zoom--) {
double minSize = feature.getMinPixelSizeAtZoom(zoom);
if (minSize > 0 && feature.getSourceFeaturePixelSizeAtZoom(zoom) < minSize) {
continue;
}
Map<String, Object> attrs = feature.getAttrsAtZoom(zoom);
double buffer = feature.getBufferPixelsAtZoom(zoom) / 256;
int tilesAtZoom = 1 << zoom;
@ -207,7 +211,7 @@ public class FeatureRenderer implements Consumer<FeatureCollector.Feature>, Clos
}
Map<String, Object> attrs = feature.getAttrsAtZoom(sliced.zoomLevel());
if (numPointsAttr != null) {
// if profile wants the original number of points that the simplified but untiled geometry started with
// if profile wants the original number off points that the simplified but untiled geometry started with
attrs = new HashMap<>(attrs);
attrs.put(numPointsAttr, geom.getNumPoints());
}

Wyświetl plik

@ -122,7 +122,7 @@ class GeometryCoordinateSequences {
static Geometry reassemblePolygons(List<List<CoordinateSequence>> groups) throws GeometryException {
int numGeoms = groups.size();
if (numGeoms == 1) {
return reassemblePolygon(groups.get(0));
return reassemblePolygon(groups.getFirst());
} else {
Polygon[] polygons = new Polygon[numGeoms];
for (int i = 0; i < numGeoms; i++) {
@ -135,7 +135,7 @@ class GeometryCoordinateSequences {
/** Returns a {@link Polygon} built from all outer/inner rings in {@code group}, reversing all inner rings. */
private static Polygon reassemblePolygon(List<CoordinateSequence> group) throws GeometryException {
try {
LinearRing first = GeoUtils.JTS_FACTORY.createLinearRing(group.get(0));
LinearRing first = GeoUtils.JTS_FACTORY.createLinearRing(group.getFirst());
LinearRing[] rest = new LinearRing[group.size() - 1];
for (int j = 1; j < group.size(); j++) {
CoordinateSequence seq = group.get(j);

Wyświetl plik

@ -258,7 +258,7 @@ public class TiledGeometry {
TileCoord tile = TileCoord.ofXYZ(wrappedX, y, z);
double tileY = worldY - y;
tileContents.computeIfAbsent(tile, t -> List.of(new ArrayList<>()))
.get(0)
.getFirst()
.add(GeoUtils.coordinateSequence(tileX * 256, tileY * 256));
}
}
@ -384,7 +384,7 @@ public class TiledGeometry {
for (var entry : inProgressShapes.entrySet()) {
TileCoord tileID = entry.getKey();
List<CoordinateSequence> inSeqs = entry.getValue();
if (area && inSeqs.get(0).size() < 4) {
if (area && inSeqs.getFirst().size() < 4) {
// not enough points in outer polygon, ignore
continue;
}
@ -573,20 +573,20 @@ public class TiledGeometry {
}
/*
A tile is inside a filled region when there is an odd number of vertical edges to the left and right
for example a simple shape:
---------
out | in | out
(0/2) | (1/1) | (2/0)
---------
or a more complex shape
--------- ---------
out | in | out | in |
(0/4) | (1/3) | (2/2) | (3/1) |
| --------- |
-------------------------
So we keep track of this number by xor'ing the left and right fills repeatedly,
then and'ing them together at the end.
*/

Wyświetl plik

@ -38,7 +38,7 @@ public class ProcessInfo {
for (GarbageCollectorMXBean garbageCollectorMXBean : ManagementFactory.getGarbageCollectorMXBeans()) {
if (garbageCollectorMXBean instanceof NotificationEmitter emitter) {
emitter.addNotificationListener((notification, handback) -> {
if (notification.getUserData()instanceof CompositeData compositeData) {
if (notification.getUserData() instanceof CompositeData compositeData) {
var info = GarbageCollectionNotificationInfo.from(compositeData);
GcInfo gcInfo = info.getGcInfo();
postGcMemoryUsage.set(gcInfo.getMemoryUsageAfterGc().entrySet().stream()
@ -142,7 +142,7 @@ public class ProcessInfo {
* Returns the total amount of memory available on the system if available.
*/
public static OptionalLong getSystemMemoryBytes() {
if (ManagementFactory.getOperatingSystemMXBean()instanceof com.sun.management.OperatingSystemMXBean osBean) {
if (ManagementFactory.getOperatingSystemMXBean() instanceof com.sun.management.OperatingSystemMXBean osBean) {
return OptionalLong.of(osBean.getTotalMemorySize());
} else {
return OptionalLong.empty();

Wyświetl plik

@ -10,15 +10,12 @@ import javax.annotation.concurrent.Immutable;
* A utility for measuring the wall and CPU time that this JVM consumes between snapshots.
* <p>
* For example:
*
* <pre>
* {@code
* {@snippet :
* var start = ProcessTime.now();
* // do expensive work...
* var end - ProcessTime.now();
* var end = ProcessTime.now();
* LOGGER.log("Expensive work took " + end.minus(start));
* }
* </pre>
*/
@Immutable
public record ProcessTime(Duration wall, Optional<Duration> cpu, Duration gc) {

Wyświetl plik

@ -275,7 +275,7 @@ public class ProgressLoggers {
/** Adds the CPU utilization of every thread starting with {@code prefix} since the last log to output. */
public ProgressLoggers addThreadPoolStats(String name, String prefix) {
boolean first = loggers.isEmpty() || !(loggers.get(loggers.size() - 1) instanceof WorkerPipelineLogger);
boolean first = loggers.isEmpty() || !(loggers.getLast() instanceof WorkerPipelineLogger);
try {
Map<Long, ProcessInfo.ThreadState> lastThreads = ProcessInfo.getThreadStats();
AtomicLong lastTime = new AtomicLong(System.nanoTime());

Wyświetl plik

@ -1,6 +1,5 @@
package com.onthegomap.planetiler.stats;
import com.onthegomap.planetiler.util.FileUtils;
import com.onthegomap.planetiler.util.MemoryEstimator;
import io.prometheus.client.Collector;
import io.prometheus.client.CollectorRegistry;
@ -49,7 +48,7 @@ class PrometheusStats implements Stats {
private PushGateway pg;
private ScheduledExecutorService executor;
private final String job;
private final Map<String, Path> filesToMonitor = new ConcurrentSkipListMap<>();
private final Map<String, MonitoredFile> filesToMonitor = new ConcurrentSkipListMap<>();
private final Map<String, Long> dataErrorCounters = new ConcurrentHashMap<>();
private final Map<String, MemoryEstimator.HasEstimate> heapObjectsToMonitor = new ConcurrentSkipListMap<>();
@ -171,7 +170,7 @@ class PrometheusStats implements Stats {
}
@Override
public Map<String, Path> monitoredFiles() {
public Map<String, MonitoredFile> monitoredFiles() {
return filesToMonitor;
}
@ -248,11 +247,13 @@ class PrometheusStats implements Stats {
@Override
public List<MetricFamilySamples> collect() {
List<Collector.MetricFamilySamples> results = new ArrayList<>();
for (var file : filesToMonitor.entrySet()) {
String name = sanitizeMetricName(file.getKey());
Path path = file.getValue();
for (var entry : filesToMonitor.entrySet()) {
String name = sanitizeMetricName(entry.getKey());
MonitoredFile monitoredFile = entry.getValue();
Path path = monitoredFile.path();
long size = monitoredFile.sizeProvider().getAsLong();
results.add(new GaugeMetricFamily(BASE + "file_" + name + "_size_bytes", "Size of " + name + " in bytes",
FileUtils.size(path)));
size));
if (Files.exists(path)) {
try {
FileStore fileStore = Files.getFileStore(path);

Wyświetl plik

@ -60,7 +60,7 @@ public interface Stats extends AutoCloseable {
timers().printSummary();
logger.info("-".repeat(40));
for (var entry : monitoredFiles().entrySet()) {
long size = FileUtils.size(entry.getValue());
long size = entry.getValue().sizeProvider().getAsLong();
if (size > 0) {
logger.info("\t{}\t{}B", entry.getKey(), format.storage(size, false));
}
@ -118,15 +118,20 @@ public interface Stats extends AutoCloseable {
Timers timers();
/** Returns all the files being monitored. */
Map<String, Path> monitoredFiles();
Map<String, MonitoredFile> monitoredFiles();
/** Adds a stat that will track the size of a file or directory located at {@code path}. */
default void monitorFile(String name, Path path) {
monitorFile(name, path, null);
}
default void monitorFile(String name, Path path, LongSupplier sizeProvider) {
if (path != null) {
monitoredFiles().put(name, path);
monitoredFiles().put(name, new MonitoredFile(path, sizeProvider));
}
}
/** Adds a stat that will track the estimated in-memory size of {@code object}. */
void monitorInMemoryObject(String name, MemoryEstimator.HasEstimate object);
@ -188,7 +193,7 @@ public interface Stats extends AutoCloseable {
private InMemory() {}
private final Timers timers = new Timers();
private final Map<String, Path> monitoredFiles = new ConcurrentSkipListMap<>();
private final Map<String, MonitoredFile> monitoredFiles = new ConcurrentSkipListMap<>();
private final Map<String, Long> dataErrors = new ConcurrentHashMap<>();
@Override
@ -200,7 +205,7 @@ public interface Stats extends AutoCloseable {
}
@Override
public Map<String, Path> monitoredFiles() {
public Map<String, MonitoredFile> monitoredFiles() {
return monitoredFiles;
}
@ -242,4 +247,11 @@ public interface Stats extends AutoCloseable {
}
}
record MonitoredFile(Path path, LongSupplier sizeProvider) {
public MonitoredFile(Path path, LongSupplier sizeProvider) {
this.path = path;
this.sizeProvider = sizeProvider != null ? sizeProvider : () -> FileUtils.size(path);
}
}
}

Wyświetl plik

@ -1,10 +1,6 @@
package com.onthegomap.planetiler.stream;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonIncludeProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@ -16,7 +12,6 @@ import com.onthegomap.planetiler.archive.TileArchiveConfig;
import com.onthegomap.planetiler.archive.TileArchiveMetadata;
import com.onthegomap.planetiler.archive.TileEncodingResult;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.util.LayerAttrStats;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@ -27,8 +22,6 @@ import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import org.locationtech.jts.geom.CoordinateXY;
import org.locationtech.jts.geom.Envelope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -51,9 +44,6 @@ public final class WriteableJsonStreamArchive extends WriteableStreamArchive {
static final JsonMapper jsonMapper = JsonMapper.builder()
.serializationInclusion(Include.NON_ABSENT)
.addModule(new Jdk8Module())
.addMixIn(TileArchiveMetadata.class, TileArchiveMetadataMixin.class)
.addMixIn(Envelope.class, EnvelopeMixin.class)
.addMixIn(CoordinateXY.class, CoordinateXYMixin.class)
.build();
private final boolean writeTilesOnly;
@ -76,11 +66,11 @@ public final class WriteableJsonStreamArchive extends WriteableStreamArchive {
}
@Override
public void initialize(TileArchiveMetadata metadata) {
public void initialize() {
if (writeTilesOnly) {
return;
}
writeEntryFlush(new InitializationEntry(metadata));
writeEntryFlush(new InitializationEntry());
}
@Override
@ -204,30 +194,9 @@ public final class WriteableJsonStreamArchive extends WriteableStreamArchive {
}
}
record InitializationEntry(TileArchiveMetadata metadata) implements Entry {}
record InitializationEntry() implements Entry {}
record FinishEntry(TileArchiveMetadata metadata) implements Entry {}
private interface TileArchiveMetadataMixin {
@JsonIgnore(false)
Envelope bounds();
@JsonIgnore(false)
CoordinateXY center();
@JsonIgnore(false)
List<LayerAttrStats.VectorLayer> vectorLayers();
}
@JsonIncludeProperties({"minX", "maxX", "minY", "maxY"})
private abstract static class EnvelopeMixin {
@JsonCreator
EnvelopeMixin(@JsonProperty("minX") double minX, @JsonProperty("maxX") double maxX,
@JsonProperty("minY") double minY, @JsonProperty("maxY") double maxY) {}
}
@JsonIncludeProperties({"x", "y"})
private interface CoordinateXYMixin {}
}

Wyświetl plik

@ -11,7 +11,7 @@ import java.io.OutputStream;
import java.io.UncheckedIOException;
import java.nio.file.Path;
import java.util.function.Consumer;
import org.locationtech.jts.geom.CoordinateXY;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Envelope;
/**
@ -50,14 +50,8 @@ public final class WriteableProtoStreamArchive extends WriteableStreamArchive {
}
@Override
public void initialize(TileArchiveMetadata metadata) {
writeEntry(
StreamArchiveProto.Entry.newBuilder()
.setInitialization(
StreamArchiveProto.InitializationEntry.newBuilder().setMetadata(toExportData(metadata)).build()
)
.build()
);
public void initialize() {
writeEntry(StreamArchiveProto.Entry.newBuilder().build());
}
@Override
@ -89,13 +83,12 @@ public final class WriteableProtoStreamArchive extends WriteableStreamArchive {
setIfNotNull(metaDataBuilder::setFormat, metadata.format());
setIfNotNull(metaDataBuilder::setBounds, toExportData(metadata.bounds()));
setIfNotNull(metaDataBuilder::setCenter, toExportData(metadata.center()));
setIfNotNull(metaDataBuilder::setZoom, metadata.zoom());
setIfNotNull(metaDataBuilder::setMinZoom, metadata.minzoom());
setIfNotNull(metaDataBuilder::setMaxZoom, metadata.maxzoom());
final StreamArchiveProto.TileCompression tileCompression = switch (metadata.tileCompression()) {
case GZIP -> StreamArchiveProto.TileCompression.TILE_COMPRESSION_GZIP;
case NONE -> StreamArchiveProto.TileCompression.TILE_COMPRESSION_NONE;
case UNKNWON -> throw new IllegalArgumentException("should not produce \"UNKNOWN\" compression");
case UNKNOWN -> throw new IllegalArgumentException("should not produce \"UNKNOWN\" compression");
};
metaDataBuilder.setTileCompression(tileCompression);
if (metadata.vectorLayers() != null) {
@ -120,13 +113,14 @@ public final class WriteableProtoStreamArchive extends WriteableStreamArchive {
.build();
}
private static StreamArchiveProto.CoordinateXY toExportData(CoordinateXY coord) {
private static StreamArchiveProto.Coordinate toExportData(Coordinate coord) {
if (coord == null) {
return null;
}
return StreamArchiveProto.CoordinateXY.newBuilder()
return StreamArchiveProto.Coordinate.newBuilder()
.setX(coord.getX())
.setY(coord.getY())
.setZ(coord.getZ())
.build();
}

Wyświetl plik

@ -2,6 +2,9 @@ package com.onthegomap.planetiler.stream;
import com.onthegomap.planetiler.archive.WriteableTileArchive;
import com.onthegomap.planetiler.geo.TileOrder;
import com.onthegomap.planetiler.stats.Counter;
import com.onthegomap.planetiler.util.CloseShieldOutputStream;
import com.onthegomap.planetiler.util.CountingOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UncheckedIOException;
@ -10,7 +13,6 @@ import java.nio.file.OpenOption;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.core.util.CloseShieldOutputStream;
/**
* Base archive for all kinds of simple file streams. This is primarily useful when the file is a named pipe. In that
@ -34,6 +36,8 @@ import org.apache.logging.log4j.core.util.CloseShieldOutputStream;
*/
abstract class WriteableStreamArchive implements WriteableTileArchive {
private final Counter.MultiThreadCounter bytesWritten = Counter.newMultiThreadCounter();
private final OutputStream primaryOutputStream;
private final OutputStreamSupplier outputStreamFactory;
@SuppressWarnings("unused")
@ -42,10 +46,11 @@ abstract class WriteableStreamArchive implements WriteableTileArchive {
private final AtomicInteger tileWriterCounter = new AtomicInteger(0);
private WriteableStreamArchive(OutputStreamSupplier outputStreamFactory, StreamArchiveConfig config) {
this.outputStreamFactory = outputStreamFactory;
this.outputStreamFactory =
i -> new CountingOutputStream(outputStreamFactory.newOutputStream(i), bytesWritten.counterForThread()::incBy);
this.config = config;
this.primaryOutputStream = outputStreamFactory.newOutputStream(0);
this.primaryOutputStream = this.outputStreamFactory.newOutputStream(0);
}
protected WriteableStreamArchive(Path p, StreamArchiveConfig config) {
@ -78,6 +83,11 @@ abstract class WriteableStreamArchive implements WriteableTileArchive {
}
@Override
public long bytesWritten() {
return bytesWritten.get();
}
protected abstract TileWriter newTileWriter(OutputStream outputStream);
protected final OutputStream getPrimaryOutputStream() {

Wyświetl plik

@ -95,7 +95,7 @@ public class AwsOsm {
} else if (results.size() > 1) {
throw new IllegalArgumentException("Found multiple AWS osm download URLs for " + searchQuery + ": " + results);
}
return results.get(0);
return results.getFirst();
}
}

Wyświetl plik

@ -0,0 +1,19 @@
package com.onthegomap.planetiler.util;
import java.io.IOException;
import java.io.OutputStream;
/**
* {@link OutputStream} decorator that suppresses {@link #close()}.
*/
public class CloseShieldOutputStream extends DelegatingOutputStream {
public CloseShieldOutputStream(OutputStream wrapped) {
super(wrapped);
}
@Override
public void close() throws IOException {
// suppress closing
}
}

Wyświetl plik

@ -0,0 +1,465 @@
package com.onthegomap.planetiler.util;
import com.google.common.primitives.Ints;
import com.onthegomap.planetiler.VectorTile;
import com.onthegomap.planetiler.archive.Tile;
import com.onthegomap.planetiler.archive.TileArchiveConfig;
import com.onthegomap.planetiler.archive.TileArchives;
import com.onthegomap.planetiler.archive.TileCompression;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.GeometryException;
import com.onthegomap.planetiler.geo.GeometryType;
import com.onthegomap.planetiler.geo.TileCoord;
import com.onthegomap.planetiler.pmtiles.ReadablePmtiles;
import com.onthegomap.planetiler.stats.ProgressLoggers;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.worker.Worker;
import com.onthegomap.planetiler.worker.WorkerPipeline;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Supplier;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.MultiPolygon;
import org.locationtech.jts.geom.Polygon;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import vector_tile.VectorTileProto;
/**
* Compares the contents of two tile archives.
* <p>
* To run:
*
* <pre>{@code
* java -jar planetiler.jar compare [options] {path/to/archive1} {path/to/archive2}
* }</pre>
*/
public class CompareArchives {
private static final Logger LOGGER = LoggerFactory.getLogger(CompareArchives.class);
private final Map<String, Long> diffTypes = new ConcurrentHashMap<>();
private final Map<String, Map<String, Long>> diffsByLayer = new ConcurrentHashMap<>();
private final List<String> archiveDiffs = new CopyOnWriteArrayList<>();
private final TileArchiveConfig input1;
private final TileArchiveConfig input2;
private final boolean verbose;
private CompareArchives(TileArchiveConfig archiveConfig1, TileArchiveConfig archiveConfig2, boolean verbose) {
this.verbose = verbose;
this.input1 = archiveConfig1;
this.input2 = archiveConfig2;
}
/**
* @throws FatalComparisonFailure if a comparison failure is encountered that prevents comparing the whole archives.
*/
public static Result compare(TileArchiveConfig archiveConfig1, TileArchiveConfig archiveConfig2,
PlanetilerConfig config, boolean verbose) {
return new CompareArchives(archiveConfig1, archiveConfig2, verbose).getResult(config);
}
public static void main(String[] args) {
if (args.length < 2) {
System.err.println("Usage: compare [options] {path/to/archive1} {path/to/archive2}");
System.exit(1);
}
// last 2 args are paths to the archives
String inputString1 = args[args.length - 2];
String inputString2 = args[args.length - 1];
var arguments = Arguments.fromArgsOrConfigFile(Arrays.copyOf(args, args.length - 2));
var verbose = arguments.getBoolean("verbose", "log each tile diff", false);
var strict = arguments.getBoolean("strict", "set to false to only fail on tile diffs", true);
var config = PlanetilerConfig.from(arguments);
var input1 = TileArchiveConfig.from(inputString1);
var input2 = TileArchiveConfig.from(inputString2);
try {
var result = compare(input1, input2, config, verbose);
var format = Format.defaultInstance();
if (LOGGER.isInfoEnabled()) {
LOGGER.info("Detailed diffs:");
for (var entry : result.tileDiffsByLayer.entrySet()) {
LOGGER.info(" \"{}\" layer", entry.getKey());
for (var layerEntry : entry.getValue().entrySet().stream().sorted(Map.Entry.comparingByValue()).toList()) {
LOGGER.info(" {}: {}", layerEntry.getKey(), format.integer(layerEntry.getValue()));
}
}
for (var entry : result.tileDiffTypes.entrySet().stream().sorted(Map.Entry.comparingByValue()).toList()) {
LOGGER.info(" {}: {}", entry.getKey(), format.integer(entry.getValue()));
}
for (var diffType : result.archiveDiffs) {
LOGGER.info(" {}", diffType);
}
LOGGER.info("Total tiles: {}", format.integer(result.total));
LOGGER.info("Tile diffs: {} ({} of all tiles)", format.integer(result.tileDiffs),
format.percent(result.tileDiffs * 1d / result.total));
}
System.exit((result.tileDiffs > 0 || (strict && !result.archiveDiffs.isEmpty())) ? 1 : 0);
} catch (FatalComparisonFailure e) {
LOGGER.error("Error comparing archives {}", e.getMessage());
System.exit(1);
}
}
public static class FatalComparisonFailure extends IllegalArgumentException {
FatalComparisonFailure(String message) {
super(message);
}
}
private Result getResult(PlanetilerConfig config) {
final TileCompression compression2;
final TileCompression compression1;
compareArchive("format", input1.format(), input2.format());
try (
var reader1 = TileArchives.newReader(input1, config);
var reader2 = TileArchives.newReader(input2, config);
) {
var metadata1 = reader1.metadata();
var metadata2 = reader2.metadata();
compareArchive("metadata", metadata1, metadata2);
if (reader1 instanceof ReadablePmtiles pmt1 && reader2 instanceof ReadablePmtiles pmt2) {
var header1 = pmt1.getHeader();
var header2 = pmt2.getHeader();
compareArchive("pmtiles header", header1, header2);
}
compression1 = metadata1 == null ? TileCompression.UNKNOWN : metadata1.tileCompression();
compression2 = metadata2 == null ? TileCompression.UNKNOWN : metadata2.tileCompression();
if (!compareArchive("tile compression", compression1, compression2)) {
LOGGER.warn("Will compare decompressed tile contents instead");
}
} catch (IOException e) {
throw new UncheckedIOException(e);
}
var order = input1.format().preferredOrder();
var order2 = input2.format().preferredOrder();
if (order != order2) {
throw new FatalComparisonFailure(
"Archive orders must be the same to compare, got " + order + " and " + order2);
}
var stats = config.arguments().getStats();
var total = new AtomicLong(0);
var diffs = new AtomicLong(0);
record Diff(Tile a, Tile b) {}
var pipeline = WorkerPipeline.start("compare", stats)
.<Diff>fromGenerator("enumerate", next -> {
try (
var reader1 = TileArchives.newReader(input1, config);
var tiles1 = reader1.getAllTiles();
var reader2 = TileArchives.newReader(input2, config);
var tiles2 = reader2.getAllTiles()
) {
Supplier<Tile> supplier1 = () -> tiles1.hasNext() ? tiles1.next() : null;
Supplier<Tile> supplier2 = () -> tiles2.hasNext() ? tiles2.next() : null;
var tile1 = supplier1.get();
var tile2 = supplier2.get();
while (tile1 != null || tile2 != null) {
if (tile1 == null) {
next.accept(new Diff(null, tile2));
tile2 = supplier2.get();
} else if (tile2 == null) {
next.accept(new Diff(tile1, null));
tile1 = supplier1.get();
} else {
if (tile1.coord().equals(tile2.coord())) {
next.accept(new Diff(tile1, tile2));
tile1 = supplier1.get();
tile2 = supplier2.get();
} else if (order.encode(tile1.coord()) < order.encode(tile2.coord())) {
next.accept(new Diff(tile1, null));
tile1 = supplier1.get();
} else {
next.accept(new Diff(null, tile2));
tile2 = supplier2.get();
}
}
}
}
})
.addBuffer("diffs", 50_000, 1_000)
.sinkTo("process", config.featureProcessThreads(), prev -> {
boolean sameCompression = compression1 == compression2;
for (var diff : prev) {
var a = diff.a();
var b = diff.b();
total.incrementAndGet();
if (a == null) {
recordTileDiff(b.coord(), "archive 1 missing tile");
diffs.incrementAndGet();
} else if (b == null) {
recordTileDiff(a.coord(), "archive 2 missing tile");
diffs.incrementAndGet();
} else if (sameCompression) {
if (!Arrays.equals(a.bytes(), b.bytes())) {
recordTileDiff(a.coord(), "different contents");
diffs.incrementAndGet();
compareTiles(
a.coord(),
decode(decompress(a.bytes(), compression1)),
decode(decompress(b.bytes(), compression2))
);
}
} else { // different compression
var decompressed1 = decompress(a.bytes(), compression1);
var decompressed2 = decompress(b.bytes(), compression2);
if (!Arrays.equals(decompressed1, decompressed2)) {
recordTileDiff(a.coord(), "different decompressed contents");
diffs.incrementAndGet();
compareTiles(
a.coord(),
decode(decompressed1),
decode(decompressed2)
);
}
}
}
});
Format format = Format.defaultInstance();
ProgressLoggers loggers = ProgressLoggers.create()
.addRateCounter("tiles", total)
.add(() -> " diffs: [ " + format.numeric(diffs, true) + " ]")
.newLine()
.addPipelineStats(pipeline)
.newLine()
.addProcessStats();
loggers.awaitAndLog(pipeline.done(), config.logInterval());
if (archiveDiffs.isEmpty() && diffs.get() == 0) {
var path1 = input1.getLocalPath();
var path2 = input2.getLocalPath();
if (path1 != null && path2 != null && Files.isRegularFile(path1) && Files.isRegularFile(path2)) {
LOGGER.info("No diffs so far, comparing bytes in {} vs. {}", path1, path2);
compareFiles(path1, path2, config);
}
}
return new Result(total.get(), diffs.get(), archiveDiffs, diffTypes, diffsByLayer);
}
private void compareFiles(Path path1, Path path2, PlanetilerConfig config) {
long size = FileUtils.fileSize(path1);
if (compareArchive("archive size", size, FileUtils.fileSize(path2))) {
AtomicLong bytesRead = new AtomicLong(0);
var worker = new Worker("compare", Stats.inMemory(), 1, () -> {
byte[] bytes1 = new byte[8192];
byte[] bytes2 = new byte[8192];
long n = 0;
try (
var is1 = Files.newInputStream(path1, StandardOpenOption.READ);
var is2 = Files.newInputStream(path2, StandardOpenOption.READ)
) {
do {
int len = is1.read(bytes1);
int len2 = is2.read(bytes2, 0, len);
if (len2 != len) {
String message = "Expected to read %s bytes from %s but got %s".formatted(len, path2, len2);
archiveDiffs.add(message);
LOGGER.warn(message);
return;
}
int mismatch = Arrays.mismatch(bytes1, bytes2);
if (mismatch >= 0 && mismatch < len) {
archiveDiffs.add("mismatch at byte %s".formatted(mismatch + n));
LOGGER.warn("Archives mismatch ay byte {}", mismatch + n);
return;
}
n += len;
bytesRead.set(n);
} while (n < size);
}
LOGGER.info("No mismatches! Analyzed {} / {} bytes", n, size);
});
var logger = ProgressLoggers.create()
.addStorageRatePercentCounter("bytes", size, bytesRead::get, true)
.newLine()
.addThreadPoolStats("compare", worker)
.newLine()
.addProcessStats();
worker.awaitAndLog(logger, config.logInterval());
}
}
private <T> boolean compareArchive(String name, T a, T b) {
if (Objects.equals(a, b)) {
return true;
}
LOGGER.warn("""
archive1 and archive2 have different {}
archive1: {}
archive2: {}
""", name, a, b);
archiveDiffs.add(name);
return false;
}
private void compareTiles(TileCoord coord, VectorTileProto.Tile proto1, VectorTileProto.Tile proto2) {
compareLayerNames(coord, proto1, proto2);
for (int i = 0; i < proto1.getLayersCount() && i < proto2.getLayersCount(); i++) {
var layer1 = proto1.getLayers(i);
var layer2 = proto2.getLayers(i);
compareLayer(coord, layer1, layer2);
}
}
private void compareLayer(TileCoord coord, VectorTileProto.Tile.Layer layer1, VectorTileProto.Tile.Layer layer2) {
String name = layer1.getName();
compareValues(coord, name, "version", layer1.getVersion(), layer2.getVersion());
compareValues(coord, name, "extent", layer1.getExtent(), layer2.getExtent());
compareList(coord, name, "keys list", layer1.getKeysList(), layer2.getKeysList());
compareList(coord, name, "values list", layer1.getValuesList(), layer2.getValuesList());
if (compareValues(coord, name, "features count", layer1.getFeaturesCount(), layer2.getFeaturesCount())) {
var ids1 = layer1.getFeaturesList().stream().map(f -> f.getId()).toList();
var ids2 = layer2.getFeaturesList().stream().map(f -> f.getId()).toList();
if (compareValues(coord, name, "feature ids", Set.of(ids1), Set.of(ids2)) &&
compareValues(coord, name, "feature order", ids1, ids2)) {
for (int i = 0; i < layer1.getFeaturesCount() && i < layer2.getFeaturesCount(); i++) {
var feature1 = layer1.getFeatures(i);
var feature2 = layer2.getFeatures(i);
compareFeature(coord, name, feature1, feature2);
}
}
}
}
private void compareFeature(TileCoord coord, String layer, VectorTileProto.Tile.Feature feature1,
VectorTileProto.Tile.Feature feature2) {
compareValues(coord, layer, "feature id", feature1.getId(), feature2.getId());
compareGeometry(coord, layer, feature1, feature2);
compareValues(coord, layer, "feature tags", feature1.getTagsCount(), feature2.getTagsCount());
}
private void compareGeometry(TileCoord coord, String layer, VectorTileProto.Tile.Feature feature1,
VectorTileProto.Tile.Feature feature2) {
if (compareValues(coord, layer, "feature type", feature1.getType(), feature2.getType())) {
var geomType = feature1.getType();
if (!compareValues(coord, layer, "feature " + geomType.toString().toLowerCase() + " geometry commands",
feature1.getGeometryList(), feature2.getGeometryList())) {
var geom1 =
new VectorTile.VectorGeometry(Ints.toArray(feature1.getGeometryList()), GeometryType.valueOf(geomType), 0);
var geom2 =
new VectorTile.VectorGeometry(Ints.toArray(feature2.getGeometryList()), GeometryType.valueOf(geomType), 0);
try {
compareGeometry(coord, layer, geom1.decode(), geom2.decode());
} catch (GeometryException e) {
LOGGER.error("Error decoding geometry", e);
}
}
}
}
private void compareGeometry(TileCoord coord, String layer, Geometry geom1, Geometry geom2) {
String geometryType = geom1.getGeometryType();
compareValues(coord, layer, "feature JTS geometry type", geom1.getGeometryType(), geom2.getGeometryType());
compareValues(coord, layer, "feature num geometries", geom1.getNumGeometries(), geom2.getNumGeometries());
if (geom1 instanceof MultiPolygon) {
for (int i = 0; i < geom1.getNumGeometries() && i < geom2.getNumGeometries(); i++) {
comparePolygon(coord, layer, geometryType, (Polygon) geom1.getGeometryN(i), (Polygon) geom2.getGeometryN(i));
}
} else if (geom1 instanceof Polygon p1 && geom2 instanceof Polygon p2) {
comparePolygon(coord, layer, geometryType, p1, p2);
}
}
private void comparePolygon(TileCoord coord, String layer, String geomType, Polygon p1, Polygon p2) {
compareValues(coord, layer, geomType + " exterior ring geometry", p1.getExteriorRing(), p2.getExteriorRing());
if (compareValues(coord, layer, geomType + " num interior rings", p1.getNumInteriorRing(),
p2.getNumInteriorRing())) {
for (int i = 0; i < p1.getNumInteriorRing() && i < p2.getNumInteriorRing(); i++) {
compareValues(coord, layer, geomType + " interior ring geometry", p1.getInteriorRingN(i),
p2.getInteriorRingN(i));
}
}
}
private void compareLayerNames(TileCoord coord, VectorTileProto.Tile proto1, VectorTileProto.Tile proto2) {
var layers1 = proto1.getLayersList().stream().map(d -> d.getName()).toList();
var layers2 = proto2.getLayersList().stream().map(d -> d.getName()).toList();
compareListDetailed(coord, "tile layers", layers1, layers2);
}
private <T> boolean compareList(TileCoord coord, String layer, String name, List<T> value1, List<T> value2) {
return compareValues(coord, layer, name + " unique values", Set.copyOf(value1), Set.copyOf(value2)) &&
compareValues(coord, layer, name + " order", value1, value2);
}
private <T> void compareListDetailed(TileCoord coord, String name, List<T> value1, List<T> value2) {
if (!Objects.equals(value1, value2)) {
boolean missing = false;
for (var layer : value1) {
if (!value2.contains(layer)) {
recordTileDiff(coord, name + " 2 missing " + layer);
missing = true;
}
}
for (var layer : value2) {
if (!value1.contains(layer)) {
recordTileDiff(coord, name + " 1 missing " + layer);
missing = true;
}
}
if (!missing) {
recordTileDiff(coord, name + " different order");
}
}
}
private <T> boolean compareValues(TileCoord coord, String layer, String name, T value1, T value2) {
if (!Objects.equals(value1, value2)) {
recordLayerDiff(coord, layer, name);
return false;
}
return true;
}
private byte[] decompress(byte[] bytes, TileCompression tileCompression) throws IOException {
return switch (tileCompression) {
case GZIP -> Gzip.gunzip(bytes);
case NONE -> bytes;
case UNKNOWN -> throw new FatalComparisonFailure("Unknown compression");
};
}
private VectorTileProto.Tile decode(byte[] decompressedTile) throws IOException {
return VectorTileProto.Tile.parseFrom(decompressedTile);
}
private void recordLayerDiff(TileCoord coord, String layer, String issue) {
var layerDiffs = diffsByLayer.get(layer);
if (layerDiffs == null) {
layerDiffs = diffsByLayer.computeIfAbsent(layer, k -> new ConcurrentHashMap<>());
}
layerDiffs.merge(issue, 1L, Long::sum);
if (verbose) {
LOGGER.debug("{} layer {} {}", coord, layer, issue);
}
}
private void recordTileDiff(TileCoord coord, String issue) {
diffTypes.merge(issue, 1L, Long::sum);
if (verbose) {
LOGGER.debug("{} {}", coord, issue);
}
}
public record Result(
long total,
long tileDiffs,
List<String> archiveDiffs,
Map<String, Long> tileDiffTypes,
Map<String, Map<String, Long>> tileDiffsByLayer
) {}
}

Wyświetl plik

@ -0,0 +1,36 @@
package com.onthegomap.planetiler.util;
import java.io.IOException;
import java.io.OutputStream;
import java.util.function.LongConsumer;
/**
* {@link OutputStream} decorator that notifies the callback about the written bytes.
*/
public class CountingOutputStream extends DelegatingOutputStream {
private final LongConsumer writtenBytesConsumer;
public CountingOutputStream(OutputStream wrapped, LongConsumer writtenBytesConsumer) {
super(wrapped);
this.writtenBytesConsumer = writtenBytesConsumer;
}
@Override
public void write(int i) throws IOException {
super.write(i);
writtenBytesConsumer.accept(1L);
}
@Override
public void write(byte[] b) throws IOException {
super.write(b);
writtenBytesConsumer.accept(b.length);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
super.write(b, off, len);
writtenBytesConsumer.accept(len);
}
}

Wyświetl plik

@ -0,0 +1,38 @@
package com.onthegomap.planetiler.util;
import java.io.IOException;
import java.io.OutputStream;
abstract class DelegatingOutputStream extends OutputStream {
private final OutputStream delegate;
protected DelegatingOutputStream(OutputStream wrapped) {
this.delegate = wrapped;
}
@Override
public void write(int i) throws IOException {
delegate.write(i);
}
@Override
public void write(byte[] b) throws IOException {
delegate.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
delegate.write(b, off, len);
}
@Override
public void flush() throws IOException {
delegate.flush();
}
@Override
public void close() throws IOException {
delegate.close();
}
}

Wyświetl plik

@ -5,12 +5,12 @@ import static java.nio.file.StandardOpenOption.WRITE;
import com.google.common.util.concurrent.RateLimiter;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.stats.Counter;
import com.onthegomap.planetiler.stats.ProgressLoggers;
import com.onthegomap.planetiler.stats.Stats;
import com.onthegomap.planetiler.worker.WorkerPipeline;
import com.onthegomap.planetiler.worker.RunnableThatThrows;
import com.onthegomap.planetiler.worker.Worker;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.net.URI;
import java.net.URLConnection;
import java.net.http.HttpClient;
@ -18,9 +18,7 @@ import java.net.http.HttpHeaders;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.ReadableByteChannel;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
@ -30,9 +28,9 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicLong;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -43,15 +41,12 @@ import org.slf4j.LoggerFactory;
* changes.
* <p>
* For example:
*
* <pre>
* {@code
* {@snippet :
* Downloader.create(PlanetilerConfig.defaults())
* .add("natural_earth", "http://url/of/natural_earth.zip", Path.of("natural_earth.zip"))
* .add("osm", "http://url/of/file.osm.pbf", Path.of("file.osm.pbf"))
* .run();
* }
* </pre>
* <p>
* As a shortcut to find the URL of a file to download from the <a href="https://download.geofabrik.de/">Geofabrik
* download site</a>, you can use "geofabrik:extract name" (i.e. "geofabrik:monaco" or "geofabrik:australia") to look up
@ -69,32 +64,26 @@ public class Downloader {
private static final Logger LOGGER = LoggerFactory.getLogger(Downloader.class);
private final PlanetilerConfig config;
private final List<ResourceToDownload> toDownloadList = new ArrayList<>();
private final HttpClient client = HttpClient.newBuilder()
// explicitly follow redirects to capture final redirect url
.followRedirects(HttpClient.Redirect.NEVER).build();
private final HttpClient client;
private final ExecutorService executor;
private final Stats stats;
private final long chunkSizeBytes;
private final ResourceUsage diskSpaceCheck = new ResourceUsage("download");
private final RateLimiter rateLimiter;
Downloader(PlanetilerConfig config, Stats stats, long chunkSizeBytes) {
Downloader(PlanetilerConfig config, long chunkSizeBytes) {
this.rateLimiter = config.downloadMaxBandwidth() == 0 ? null : RateLimiter.create(config.downloadMaxBandwidth());
this.chunkSizeBytes = chunkSizeBytes;
this.config = config;
this.stats = stats;
this.executor = Executors.newSingleThreadExecutor(runnable -> {
Thread thread = new Thread(() -> {
LogUtil.setStage("download");
runnable.run();
});
thread.setDaemon(true);
return thread;
});
this.executor = Executors.newVirtualThreadPerTaskExecutor();
this.client = HttpClient.newBuilder()
// explicitly follow redirects to capture final redirect url
.followRedirects(HttpClient.Redirect.NEVER)
.executor(executor)
.build();
}
public static Downloader create(PlanetilerConfig config, Stats stats) {
return new Downloader(config, stats, config.downloadChunkSizeMB() * 1_000_000L);
public static Downloader create(PlanetilerConfig config) {
return new Downloader(config, config.downloadChunkSizeMB() * 1_000_000L);
}
private static URLConnection getUrlConnection(String urlString, PlanetilerConfig config) throws IOException {
@ -191,145 +180,117 @@ public class Downloader {
}
CompletableFuture<Void> downloadIfNecessary(ResourceToDownload resourceToDownload) {
long existingSize = FileUtils.size(resourceToDownload.output);
return httpHeadFollowRedirects(resourceToDownload.url, 0)
.whenComplete((metadata, err) -> {
if (metadata != null) {
resourceToDownload.metadata.complete(metadata);
} else {
resourceToDownload.metadata.completeExceptionally(err);
}
})
.thenComposeAsync(metadata -> {
if (metadata.size == existingSize) {
LOGGER.info("Skipping {}: {} already up-to-date", resourceToDownload.id, resourceToDownload.output);
return CompletableFuture.completedFuture(null);
} else {
String redirectInfo = metadata.canonicalUrl.equals(resourceToDownload.url) ? "" :
" (redirected to " + metadata.canonicalUrl + ")";
LOGGER.info("Downloading {}{} to {}", resourceToDownload.url, redirectInfo, resourceToDownload.output);
FileUtils.delete(resourceToDownload.output);
FileUtils.createParentDirectories(resourceToDownload.output);
Path tmpPath = resourceToDownload.tmpPath();
FileUtils.delete(tmpPath);
FileUtils.deleteOnExit(tmpPath);
diskSpaceCheck.addDisk(tmpPath, metadata.size, resourceToDownload.id);
diskSpaceCheck.checkAgainstLimits(config.force(), false);
return httpDownload(resourceToDownload, tmpPath)
.thenCompose(result -> {
try {
Files.move(tmpPath, resourceToDownload.output);
return CompletableFuture.completedFuture(null);
} catch (IOException e) {
return CompletableFuture.<Void>failedFuture(e);
}
})
.whenCompleteAsync((result, error) -> {
if (error != null) {
LOGGER.error("Error downloading {} to {}", resourceToDownload.url, resourceToDownload.output, error);
} else {
LOGGER.info("Finished downloading {} to {}", resourceToDownload.url, resourceToDownload.output);
}
FileUtils.delete(tmpPath);
}, executor);
}
}, executor);
return CompletableFuture.runAsync(RunnableThatThrows.wrap(() -> {
LogUtil.setStage("download", resourceToDownload.id);
long existingSize = FileUtils.size(resourceToDownload.output);
var metadata = httpHeadFollowRedirects(resourceToDownload.url, 0);
Path tmpPath = resourceToDownload.tmpPath();
resourceToDownload.metadata.complete(metadata);
if (metadata.size == existingSize) {
LOGGER.info("Skipping {}: {} already up-to-date", resourceToDownload.id, resourceToDownload.output);
return;
}
try {
String redirectInfo = metadata.canonicalUrl.equals(resourceToDownload.url) ? "" :
" (redirected to " + metadata.canonicalUrl + ")";
LOGGER.info("Downloading {}{} to {}", resourceToDownload.url, redirectInfo, resourceToDownload.output);
FileUtils.delete(resourceToDownload.output);
FileUtils.createParentDirectories(resourceToDownload.output);
FileUtils.delete(tmpPath);
FileUtils.deleteOnExit(tmpPath);
diskSpaceCheck.addDisk(tmpPath, metadata.size, resourceToDownload.id);
diskSpaceCheck.checkAgainstLimits(config.force(), false);
httpDownload(resourceToDownload, tmpPath);
Files.move(tmpPath, resourceToDownload.output);
LOGGER.info("Finished downloading {} to {}", resourceToDownload.url, resourceToDownload.output);
} catch (Exception e) { // NOSONAR
LOGGER.error("Error downloading {} to {}", resourceToDownload.url, resourceToDownload.output, e);
throw e;
} finally {
FileUtils.delete(tmpPath);
}
}), executor);
}
private CompletableFuture<ResourceMetadata> httpHeadFollowRedirects(String url, int redirects) {
private ResourceMetadata httpHeadFollowRedirects(String url, int redirects) throws IOException, InterruptedException {
if (redirects > MAX_REDIRECTS) {
throw new IllegalStateException("Exceeded " + redirects + " redirects for " + url);
}
return httpHead(url).thenComposeAsync(response -> response.redirect.isPresent() ?
httpHeadFollowRedirects(response.redirect.get(), redirects + 1) : CompletableFuture.completedFuture(response));
var response = httpHead(url);
return response.redirect.isPresent() ? httpHeadFollowRedirects(response.redirect.get(), redirects + 1) : response;
}
CompletableFuture<ResourceMetadata> httpHead(String url) {
return client
.sendAsync(newHttpRequest(url).method("HEAD", HttpRequest.BodyPublishers.noBody()).build(),
responseInfo -> {
int status = responseInfo.statusCode();
Optional<String> location = Optional.empty();
long contentLength = 0;
HttpHeaders headers = responseInfo.headers();
if (status >= 300 && status < 400) {
location = responseInfo.headers().firstValue(LOCATION);
if (location.isEmpty()) {
throw new IllegalStateException("Received " + status + " but no location header from " + url);
}
} else if (responseInfo.statusCode() != 200) {
throw new IllegalStateException("Bad response: " + responseInfo.statusCode());
} else {
contentLength = headers.firstValueAsLong(CONTENT_LENGTH).orElseThrow();
ResourceMetadata httpHead(String url) throws IOException, InterruptedException {
return client.send(newHttpRequest(url).HEAD().build(),
responseInfo -> {
int status = responseInfo.statusCode();
Optional<String> location = Optional.empty();
long contentLength = 0;
HttpHeaders headers = responseInfo.headers();
if (status >= 300 && status < 400) {
location = responseInfo.headers().firstValue(LOCATION);
if (location.isEmpty()) {
throw new IllegalStateException("Received " + status + " but no location header from " + url);
}
boolean supportsRangeRequest = headers.allValues(ACCEPT_RANGES).contains("bytes");
ResourceMetadata metadata = new ResourceMetadata(location, url, contentLength, supportsRangeRequest);
return HttpResponse.BodyHandlers.replacing(metadata).apply(responseInfo);
})
.thenApply(HttpResponse::body);
}
private CompletableFuture<?> httpDownload(ResourceToDownload resource, Path tmpPath) {
/*
* Alternative using async HTTP client:
*
* return client.sendAsync(newHttpRequest(url).GET().build(), responseInfo -> {
* assertOK(responseInfo);
* return HttpResponse.BodyHandlers.ofFile(path).apply(responseInfo);
*
* But it is slower on large files
*/
return resource.metadata.thenCompose(metadata -> {
String canonicalUrl = metadata.canonicalUrl;
record Range(long start, long end) {
long size() {
return end - start;
} else if (responseInfo.statusCode() != 200) {
throw new IllegalStateException("Bad response: " + responseInfo.statusCode());
} else {
contentLength = headers.firstValueAsLong(CONTENT_LENGTH).orElseThrow();
}
}
List<Range> chunks = new ArrayList<>();
boolean ranges = metadata.acceptRange && config.downloadThreads() > 1;
long chunkSize = ranges ? chunkSizeBytes : metadata.size;
for (long start = 0; start < metadata.size; start += chunkSize) {
long end = Math.min(start + chunkSize, metadata.size);
chunks.add(new Range(start, end));
}
// create an empty file
try {
Files.createFile(tmpPath);
} catch (IOException e) {
return CompletableFuture.failedFuture(new IOException("Failed to create " + resource.output, e));
}
return WorkerPipeline.start("download-" + resource.id, stats)
.readFromTiny("chunks", chunks)
.sinkToConsumer("chunk-downloader", Math.min(config.downloadThreads(), chunks.size()), range -> {
try (var fileChannel = FileChannel.open(tmpPath, WRITE)) {
while (range.size() > 0) {
try (
var inputStream = (ranges || range.start > 0) ? openStreamRange(canonicalUrl, range.start, range.end) :
openStream(canonicalUrl);
var input = new ProgressChannel(Channels.newChannel(inputStream), resource.progress, rateLimiter)
) {
// ensure this file has been allocated up to the start of this block
fileChannel.write(ByteBuffer.allocate(1), range.start);
fileChannel.position(range.start);
long transferred = fileChannel.transferFrom(input, range.start, range.size());
if (transferred == 0) {
throw new IOException("Transferred 0 bytes but " + range.size() + " expected: " + canonicalUrl);
} else if (transferred != range.size() && !metadata.acceptRange) {
throw new IOException(
"Transferred " + transferred + " bytes but " + range.size() + " expected: " + canonicalUrl +
" and server does not support range requests");
}
range = new Range(range.start + transferred, range.end);
}
}
} catch (IOException e) {
throw new UncheckedIOException(e);
boolean supportsRangeRequest = headers.allValues(ACCEPT_RANGES).contains("bytes");
ResourceMetadata metadata = new ResourceMetadata(location, url, contentLength, supportsRangeRequest);
return HttpResponse.BodyHandlers.replacing(metadata).apply(responseInfo);
}).body();
}
private void httpDownload(ResourceToDownload resource, Path tmpPath)
throws ExecutionException, InterruptedException {
var metadata = resource.metadata().get();
String canonicalUrl = metadata.canonicalUrl();
record Range(long start, long end) {}
List<Range> chunks = new ArrayList<>();
boolean ranges = metadata.acceptRange && config.downloadThreads() > 1;
long chunkSize = ranges ? chunkSizeBytes : metadata.size;
for (long start = 0; start < metadata.size; start += chunkSize) {
long end = Math.min(start + chunkSize, metadata.size);
chunks.add(new Range(start, end));
}
FileUtils.setLength(tmpPath, metadata.size);
Semaphore perFileLimiter = new Semaphore(config.downloadThreads());
Worker.joinFutures(chunks.stream().map(range -> CompletableFuture.runAsync(RunnableThatThrows.wrap(() -> {
LogUtil.setStage("download", resource.id);
perFileLimiter.acquire();
var counter = resource.progress.counterForThread();
try (
var fc = FileChannel.open(tmpPath, WRITE);
var inputStream = (ranges || range.start > 0) ?
openStreamRange(canonicalUrl, range.start, range.end) :
openStream(canonicalUrl);
) {
long offset = range.start;
byte[] buffer = new byte[16384];
int read;
while (offset < range.end && (read = inputStream.read(buffer, 0, 16384)) >= 0) {
counter.incBy(read);
if (rateLimiter != null) {
rateLimiter.acquire(read);
}
}).done();
});
int position = 0;
int remaining = read;
while (remaining > 0) {
int written = fc.write(ByteBuffer.wrap(buffer, position, remaining), offset);
if (written <= 0) {
throw new IOException("Failed to write to " + tmpPath);
}
position += written;
remaining -= written;
offset += written;
}
}
} finally {
perFileLimiter.release();
}
}), executor)).toArray(CompletableFuture[]::new)).get();
}
private HttpRequest.Builder newHttpRequest(String url) {
@ -341,11 +302,12 @@ public class Downloader {
record ResourceMetadata(Optional<String> redirect, String canonicalUrl, long size, boolean acceptRange) {}
record ResourceToDownload(
String id, String url, Path output, CompletableFuture<ResourceMetadata> metadata, AtomicLong progress
String id, String url, Path output, CompletableFuture<ResourceMetadata> metadata,
Counter.MultiThreadCounter progress
) {
ResourceToDownload(String id, String url, Path output) {
this(id, url, output, new CompletableFuture<>(), new AtomicLong(0));
this(id, url, output, new CompletableFuture<>(), Counter.newMultiThreadCounter());
}
public Path tmpPath() {
@ -356,33 +318,4 @@ public class Downloader {
return progress.get();
}
}
/**
* Wrapper for a {@link ReadableByteChannel} that captures progress information.
*/
private record ProgressChannel(ReadableByteChannel inner, AtomicLong progress, RateLimiter rateLimiter)
implements ReadableByteChannel {
@Override
public int read(ByteBuffer dst) throws IOException {
int n = inner.read(dst);
if (n > 0) {
if (rateLimiter != null) {
rateLimiter.acquire(n);
}
progress.addAndGet(n);
}
return n;
}
@Override
public boolean isOpen() {
return inner.isOpen();
}
@Override
public void close() throws IOException {
inner.close();
}
}
}

Wyświetl plik

@ -1,8 +1,13 @@
package com.onthegomap.planetiler.util;
import static java.nio.file.StandardOpenOption.CREATE;
import static java.nio.file.StandardOpenOption.WRITE;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.ClosedFileSystemException;
import java.nio.file.FileStore;
import java.nio.file.FileSystem;
@ -263,7 +268,7 @@ public class FileUtils {
* @throws UncheckedIOException if an IO exception occurs
*/
public static void safeCopy(InputStream inputStream, Path destPath) {
try (var outputStream = Files.newOutputStream(destPath, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
try (var outputStream = Files.newOutputStream(destPath, StandardOpenOption.CREATE, WRITE)) {
int totalSize = 0;
int nBytes;
@ -310,7 +315,7 @@ public class FileUtils {
try (
var out = Files.newOutputStream(destination, StandardOpenOption.CREATE_NEW,
StandardOpenOption.WRITE)
WRITE)
) {
totalEntryArchive++;
while ((nBytes = zip.read(buffer)) > 0) {
@ -366,4 +371,16 @@ public class FileUtils {
return true;
}
}
/** Expands the file at {@code path} to {@code size} bytes. */
public static void setLength(Path path, long size) {
try (var fc = FileChannel.open(path, CREATE, WRITE)) {
int written = fc.write(ByteBuffer.allocate(1), size - 1);
if (written != 1) {
throw new IOException("Unable to expand " + path + " to " + size);
}
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}

Wyświetl plik

@ -106,7 +106,7 @@ public class Geofabrik {
"Multiple " + name + " for '" + searchQuery + "': " + values.stream().map(d -> d.id).collect(
Collectors.joining(", ")));
} else if (values.size() == 1) {
return values.get(0).urls.get("pbf");
return values.getFirst().urls.get("pbf");
} else {
return null;
}

Wyświetl plik

@ -2,16 +2,12 @@ package com.onthegomap.planetiler.util;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.onthegomap.planetiler.archive.WriteableTileArchive;
import com.onthegomap.planetiler.mbtiles.Mbtiles;
import com.onthegomap.planetiler.render.RenderedFeature;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.OptionalInt;
import java.util.TreeMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;
import javax.annotation.concurrent.NotThreadSafe;
import javax.annotation.concurrent.ThreadSafe;
@ -23,11 +19,11 @@ import javax.annotation.concurrent.ThreadSafe;
* thread-local handler that can update stats without contention.
* </p>
*
* @see Mbtiles.MetadataJson
* @see com.onthegomap.planetiler.archive.TileArchiveMetadata.TileArchiveMetadataJson
* @see <a href="https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md#content">MBtiles spec</a>
*/
@ThreadSafe
public class LayerAttrStats implements Consumer<RenderedFeature> {
public class LayerAttrStats {
/*
* This utility is called for billions of features by multiple threads when processing the planet which can make
* access to shared data structures a bottleneck. So give each thread an individual ThreadLocalLayerStatsHandler to
@ -63,6 +59,11 @@ public class LayerAttrStats implements Consumer<RenderedFeature> {
.toList();
}
/** Shortcut for tests */
void accept(String layer, int zoom, String key, Object value) {
handlerForThread().forZoom(zoom).forLayer(layer).accept(key, value);
}
public enum FieldType {
@JsonProperty("Number")
NUMBER,
@ -95,10 +96,6 @@ public class LayerAttrStats implements Consumer<RenderedFeature> {
this(id, fields, Optional.empty(), OptionalInt.of(minzoom), OptionalInt.of(maxzoom));
}
public static VectorLayer forLayer(String id) {
return new VectorLayer(id, new HashMap<>());
}
public VectorLayer withDescription(String newDescription) {
return new VectorLayer(id, fields, Optional.of(newDescription), minzoom, maxzoom);
}
@ -114,7 +111,7 @@ public class LayerAttrStats implements Consumer<RenderedFeature> {
/** Accepts features from a single thread that will be combined across all threads in {@link #getTileStats()}. */
@NotThreadSafe
private class ThreadLocalHandler implements Consumer<RenderedFeature> {
private class ThreadLocalHandler implements Updater {
private final Map<String, StatsForLayer> layers = new TreeMap<>();
@ -123,48 +120,57 @@ public class LayerAttrStats implements Consumer<RenderedFeature> {
}
@Override
public void accept(RenderedFeature feature) {
var vectorTileFeature = feature.vectorTileFeature();
var stats = layers.computeIfAbsent(vectorTileFeature.layer(), StatsForLayer::new);
stats.expandZoomRangeToInclude(feature.tile().z());
for (var entry : vectorTileFeature.attrs().entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
FieldType fieldType = null;
if (value instanceof Number) {
fieldType = FieldType.NUMBER;
} else if (value instanceof Boolean) {
fieldType = FieldType.BOOLEAN;
} else if (value != null) {
fieldType = FieldType.STRING;
}
if (fieldType != null) {
// widen different types to string
stats.fields.merge(key, fieldType, FieldType::merge);
}
}
public Updater.ForZoom forZoom(int zoom) {
return layer -> {
var stats = layers.computeIfAbsent(layer, StatsForLayer::new);
stats.expandZoomRangeToInclude(zoom);
return (key, value) -> {
FieldType fieldType = null;
if (value instanceof Number) {
fieldType = FieldType.NUMBER;
} else if (value instanceof Boolean) {
fieldType = FieldType.BOOLEAN;
} else if (value != null) {
fieldType = FieldType.STRING;
}
if (fieldType != null) {
// widen different types to string
stats.fields.merge(key, fieldType, FieldType::merge);
}
};
};
}
}
/**
* Returns a handler optimized for accepting features from a single thread.
* <p>
* Use this instead of {@link #accept(RenderedFeature)}
*/
public Consumer<RenderedFeature> handlerForThread() {
public Updater handlerForThread() {
return layerStats.get();
}
@Override
public void accept(RenderedFeature feature) {
handlerForThread().accept(feature);
public interface Updater {
ForZoom forZoom(int zoom);
interface ForZoom {
ForZoom NOOP = layer -> (key, value) -> {
};
ForLayer forLayer(String layer);
interface ForLayer {
void accept(String key, Object value);
}
}
}
private static class StatsForLayer {
private final String layer;
private final Map<String, FieldType> fields = new HashMap<>();
// use TreeMap to ensure the same output always appears the same in an archive
private final Map<String, FieldType> fields = new TreeMap<>();
private int minzoom = Integer.MAX_VALUE;
private int maxzoom = Integer.MIN_VALUE;

Wyświetl plik

@ -14,7 +14,7 @@ public class LogUtil {
/** Prepends {@code [stage]} to all subsequent logs from this thread. */
public static void setStage(String stage) {
MDC.put(STAGE_KEY, stage);
MDC.put(STAGE_KEY, "[%s] ".formatted(stage));
}
/** Removes {@code [stage]} from subsequent logs from this thread. */
@ -24,7 +24,8 @@ public class LogUtil {
/** Returns the current {@code [stage]} value prepended to log for this thread. */
public static String getStage() {
return MDC.get(STAGE_KEY);
// strip out the "[stage] " wrapper
return MDC.get(STAGE_KEY) instanceof String s ? s.substring(1, s.length() - 2) : null;
}
/** Prepends {@code [parent:child]} to all subsequent logs from this thread. */

Wyświetl plik

@ -13,19 +13,15 @@ import com.onthegomap.planetiler.collection.FeatureGroup;
* To sort by a field descending, specify its range from high to low.
* <p>
* For example this SQL ordering:
*
* <pre>
* {@code
*
* {@snippet lang = "sql" :
* ORDER BY rank ASC,
* population DESC,
* length(name) ASC
* }
* </pre>
* <p>
* would become:
*
* <pre>
* {@code
* {@snippet :
* feature.setSortKey(
* SortKey
* .orderByInt(rank, MIN_RANK, MAX_RANK)
@ -125,7 +121,7 @@ public class SortKey {
}
int levels = end + 1 - start;
if (value < start || value > end) {
value = Math.max(start, Math.min(end, value));
value = Math.clamp(value, start, end);
}
return accumulate(value, start, levels);
}
@ -141,7 +137,7 @@ public class SortKey {
return thenByDouble(start - value, end, start, levels);
}
if (value < start || value > end) {
value = Math.max(start, Math.min(end, value));
value = Math.clamp(value, start, end);
}
int intVal = doubleRangeToInt(value, start, end, levels);
@ -160,7 +156,7 @@ public class SortKey {
}
assert start > 0 : "log thresholds must be > 0 got [" + start + ", " + end + "]";
if (value < start || value > end) {
value = Math.max(start, Math.min(end, value));
value = Math.clamp(value, start, end);
}
int intVal = doubleRangeToInt(Math.log(value), Math.log(start), Math.log(end), levels);

Wyświetl plik

@ -38,7 +38,7 @@ import vector_tile.VectorTileProto;
* Utilities for extracting tile and layer size summaries from encoded vector tiles.
* <p>
* {@link #computeTileStats(VectorTileProto.Tile)} extracts statistics about each layer in a tile and
* {@link #formatOutputRows(TileCoord, int, List)} formats them as row of a TSV file to write.
* {@link TsvSerializer} formats them as row of a TSV file to write.
* <p>
* To generate a tsv.gz file with stats for each tile, you can add {@code --output-layerstats} option when generating an
* archive, or run the following an existing archive:
@ -52,13 +52,11 @@ import vector_tile.VectorTileProto;
public class TileSizeStats {
private static final int BATCH_SIZE = 1_000;
private static final CsvMapper MAPPER = new CsvMapper();
private static final CsvSchema SCHEMA = MAPPER
private static final CsvSchema SCHEMA = new CsvMapper()
.schemaFor(OutputRow.class)
.withoutHeader()
.withColumnSeparator('\t')
.withLineSeparator("\n");
private static final ObjectWriter WRITER = MAPPER.writer(SCHEMA);
/** Returns the default path that a layerstats file should go relative to an existing archive. */
public static Path getDefaultLayerstatsPath(Path archive) {
@ -120,6 +118,7 @@ public class TileSizeStats {
List<LayerStats> layerStats = null;
var updater = tileStats.threadLocalUpdater();
var layerStatsSerializer = TileSizeStats.newThreadLocalSerializer();
for (var batch : prev) {
List<String> lines = new ArrayList<>(batch.tiles.size());
for (var tile : batch.tiles) {
@ -130,7 +129,7 @@ public class TileSizeStats {
layerStats = computeTileStats(decoded);
}
updater.recordTile(tile.coord(), zipped.length, layerStats);
lines.addAll(TileSizeStats.formatOutputRows(tile.coord(), zipped.length, layerStats));
lines.addAll(layerStatsSerializer.formatOutputRows(tile.coord(), zipped.length, layerStats));
}
batch.stats.complete(lines);
}
@ -161,28 +160,32 @@ public class TileSizeStats {
stats.printSummary();
}
/** Returns the TSV rows to output for all the layers in a tile. */
public static List<String> formatOutputRows(TileCoord tileCoord, int archivedBytes, List<LayerStats> layerStats)
throws IOException {
int hilbert = tileCoord.hilbertEncoded();
List<String> result = new ArrayList<>(layerStats.size());
for (var layer : layerStats) {
result.add(lineToString(new OutputRow(
tileCoord.z(),
tileCoord.x(),
tileCoord.y(),
hilbert,
archivedBytes,
layer.layer,
layer.layerBytes,
layer.layerFeatures,
layer.layerGeometries,
layer.layerAttrBytes,
layer.layerAttrKeys,
layer.layerAttrValues
)));
}
return result;
/** Returns a {@link TsvSerializer} that can be used by a single thread to convert to CSV rows. */
public static TsvSerializer newThreadLocalSerializer() {
// CsvMapper is not entirely thread safe, and can end up with a BufferRecycler memory leak when writeValueAsString
// is called billions of times from multiple threads, so we generate a new instance per serializing thread
ObjectWriter writer = new CsvMapper().writer(SCHEMA);
return (tileCoord, archivedBytes, layerStats) -> {
int hilbert = tileCoord.hilbertEncoded();
List<String> result = new ArrayList<>(layerStats.size());
for (var layer : layerStats) {
result.add(writer.writeValueAsString(new OutputRow(
tileCoord.z(),
tileCoord.x(),
tileCoord.y(),
hilbert,
archivedBytes,
layer.layer,
layer.layerBytes,
layer.layerFeatures,
layer.layerGeometries,
layer.layerAttrBytes,
layer.layerAttrKeys,
layer.layerAttrValues
)));
}
return result;
};
}
/**
@ -195,11 +198,6 @@ public class TileSizeStats {
StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE))));
}
/** Returns {@code output} encoded as a TSV row string. */
public static String lineToString(OutputRow output) throws IOException {
return WRITER.writeValueAsString(output);
}
/** Returns the header row for the output TSV file. */
public static String headerRow() {
return String.join(
@ -240,6 +238,14 @@ public class TileSizeStats {
return result;
}
@FunctionalInterface
public interface TsvSerializer {
/** Returns the TSV rows to output for all the layers in a tile. */
List<String> formatOutputRows(TileCoord tileCoord, int archivedBytes, List<LayerStats> layerStats)
throws IOException;
}
/** Model for the data contained in each row in the TSV. */
@JsonPropertyOrder({
"z",

Wyświetl plik

@ -62,7 +62,7 @@ public class TopOsmTiles {
TopOsmTiles(PlanetilerConfig config, Stats stats) {
this.config = config;
this.stats = stats;
downloader = Downloader.create(config, stats);
downloader = Downloader.create(config);
}
Reader fetch(LocalDate date) throws IOException {

Wyświetl plik

@ -128,7 +128,7 @@ public class Translations {
Map<String, String> result = new HashMap<>();
for (var entry : tags.entrySet()) {
String key = entry.getKey();
if (key.startsWith("name:") && entry.getValue()instanceof String stringVal) {
if (key.startsWith("name:") && entry.getValue() instanceof String stringVal) {
result.put(key, stringVal);
}
}

Wyświetl plik

@ -300,10 +300,15 @@ public class Wikidata {
.POST(HttpRequest.BodyPublishers.ofString(query, StandardCharsets.UTF_8))
.build();
InputStream response = null;
for (int i = 0; i <= config.httpRetries() && response == null; i++) {
LongObjectMap<Map<String, String>> result = null;
for (int i = 0; i <= config.httpRetries() && result == null; i++) {
try {
response = client.send(request);
var response = client.send(request);
if (response != null) {
try (var bis = new BufferedInputStream(response)) {
result = parseResults(bis);
}
}
} catch (IOException e) {
boolean lastTry = i == config.httpRetries();
if (!lastTry) {
@ -312,13 +317,12 @@ public class Wikidata {
LOGGER.error("sparql query failed, exhausted retries: " + e);
throw e;
}
Thread.sleep(config.httpRetryWait());
}
}
if (response != null) {
try (var bis = new BufferedInputStream(response)) {
return parseResults(bis);
}
if (result != null) {
return result;
} else {
throw new IllegalStateException("No response or exception"); // should never happen
}

Wyświetl plik

@ -18,4 +18,8 @@ public interface RunnableThatThrows {
throwFatalException(e);
}
}
static Runnable wrap(RunnableThatThrows thrower) {
return thrower::runAndWrapException;
}
}

Wyświetl plik

@ -17,24 +17,21 @@ import java.util.function.Consumer;
* A mini-framework for chaining sequential steps that run in dedicated threads with a queue between each.
* <p>
* For example:
*
* <pre>
* {@code
* {@snippet :
* WorkerPipeline.start("name", stats)
* .readFrom("reader", List.of(1, 2, 3))
* .addBuffer("reader_queue", 10)
* .addWorker("process", 2, (i, next) -> next.accept(doExpensiveWork(i))
* .addWorker("process", 2, (i, next) -> next.accept(doExpensiveWork(i)))
* .addBuffer("writer_queue", 10)
* .sinkToConsumer("writer", 1, result -> writeToDisk(result))
* .await();
* }
* </pre>
* <p>
* NOTE: to do any forking/joining, you must construct and wire-up queues and each sequence of steps manually.
*
* @param <T> input type of this pipeline
*/
public record WorkerPipeline<T> (
public record WorkerPipeline<T>(
String name,
WorkerPipeline<?> previous,
WorkQueue<T> inputQueue,
@ -219,7 +216,7 @@ public record WorkerPipeline<T> (
*
* @param <O> type of elements that the next step must process
*/
public record Builder<O> (
public record Builder<O>(
String prefix,
String name,
// keep track of previous elements so that build can wire-up the computation graph

Wyświetl plik

@ -1,4 +1,3 @@
syntax = "proto3";
package com.onthegomap.planetiler.proto;
@ -19,7 +18,6 @@ message TileEntry {
}
message InitializationEntry {
Metadata metadata = 1;
}
message FinishEntry {
@ -35,13 +33,12 @@ message Metadata {
string type = 5;
string format = 6;
Envelope bounds = 7;
CoordinateXY center = 8;
double zoom = 9;
int32 min_zoom = 10;
int32 max_zoom = 11;
repeated VectorLayer vector_layers = 12;
map<string, string> others = 13;
TileCompression tile_compression = 14;
Coordinate center = 8;
int32 min_zoom = 9;
int32 max_zoom = 10;
repeated VectorLayer vector_layers = 11;
map<string, string> others = 12;
TileCompression tile_compression = 13;
}
message Envelope {
@ -51,9 +48,10 @@ message Envelope {
double max_y = 4;
}
message CoordinateXY {
message Coordinate {
double x = 1;
double y = 2;
double z = 3;
}
message VectorLayer {

Wyświetl plik

@ -2,7 +2,7 @@ appenders=console
appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=%highlight{$${uptime:now} %level{length=3} %notEmpty{[%X{stage}] }- %msg%n%throwable}{FATAL=red, ERROR=red, WARN=YELLOW, INFO=normal, DEBUG=normal, TRACE=normal}
appender.console.layout.pattern=%highlight{$${uptime:now} %level{length=3} %X{stage}- %msg%n%throwable}{FATAL=red, ERROR=red, WARN=YELLOW, INFO=normal, DEBUG=normal, TRACE=normal}
packages=com.onthegomap.planetiler.util.log4j
rootLogger.level=debug
rootLogger.appenderRefs=stdout

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