kopia lustrzana https://github.com/onthegomap/planetiler
Porównaj commity
159 Commity
Autor | SHA1 | Data |
---|---|---|
Michael Barry | 8f9b750789 | |
dependabot[bot] | e6e2f467d5 | |
Mike Barry | eea8455156 | |
dependabot[bot] | ff024a098a | |
Peter Hanecak | a5f3cf46d7 | |
Michael Barry | 1cb3050f39 | |
dependabot[bot] | a169dcf021 | |
dependabot[bot] | d68e83135d | |
Michael Barry | ef1702ec73 | |
Peter Hanecak | 85324e7f65 | |
dependabot[bot] | 12558b99a8 | |
dependabot[bot] | b41e1f2f3b | |
dependabot[bot] | bbd197b525 | |
dependabot[bot] | ade89c0739 | |
dependabot[bot] | 6f6a4dd6ed | |
dependabot[bot] | 6b9c996df9 | |
Michael Barry | 978c64f0c6 | |
dependabot[bot] | ed373ff3d3 | |
dependabot[bot] | 32f941f1b1 | |
dependabot[bot] | ef6fc85691 | |
Michael Barry | f69882addb | |
dependabot[bot] | 6c41c388f4 | |
dependabot[bot] | 689abb5ad7 | |
dependabot[bot] | da9d03c85d | |
dependabot[bot] | 1871e230ac | |
dependabot[bot] | f1a9be3192 | |
dependabot[bot] | 01786f553a | |
dependabot[bot] | 568092dc32 | |
zstadler | 696f63671c | |
dependabot[bot] | 2cb1a99025 | |
dependabot[bot] | 4920b34447 | |
dependabot[bot] | 3a8e7c4420 | |
dependabot[bot] | d1eec2f4a3 | |
dependabot[bot] | 99b848f1de | |
dependabot[bot] | 7c01366b01 | |
dependabot[bot] | 641f0e01a4 | |
dependabot[bot] | 2303334124 | |
dependabot[bot] | 96202644ac | |
dependabot[bot] | 6c6ee791e3 | |
dependabot[bot] | 7dd0f85bb1 | |
Michael Barry | c0fef5b6b4 | |
dependabot[bot] | c4682500eb | |
dependabot[bot] | e7c7e08f9e | |
dependabot[bot] | fe5526026b | |
dependabot[bot] | fa34992d53 | |
Michael Barry | 8396991fda | |
Michael Barry | 9f0f513dd7 | |
Peter Hanecak | 40e64a2fd3 | |
Peter Hanecak | d703b626ad | |
dependabot[bot] | e9a2bcc647 | |
Michael Barry | f7a3b62170 | |
Michael Barry | 7c03592358 | |
dependabot[bot] | f97b5f9cb9 | |
Michael Barry | 384f84f51a | |
dependabot[bot] | 54394aa01d | |
Oliver Wipfli | 389a14462b | |
dependabot[bot] | 07680f4199 | |
dependabot[bot] | a6fee0ce6c | |
dependabot[bot] | 4d52507baa | |
Michael Barry | fa7bffb04f | |
dependabot[bot] | 6331934d6f | |
Michael Barry | 92fa59ef20 | |
Michael Barry | 328e1b4d53 | |
dependabot[bot] | 08990007a9 | |
dependabot[bot] | 85f644d380 | |
Michael Barry | 31ae80d047 | |
Brandon Liu | 67d530a526 | |
dependabot[bot] | fdb9ea6e02 | |
Brandon Liu | 0cb2645639 | |
dependabot[bot] | 7492f6982b | |
Michael Barry | bf24ef3961 | |
Michael Barry | 5a7757435d | |
dependabot[bot] | 902651fda8 | |
Michael Barry | 14b217d6f6 | |
Michael Barry | 062528b1ee | |
dependabot[bot] | 36977d5388 | |
dependabot[bot] | 8cb42bd435 | |
dependabot[bot] | 43e39ef1ea | |
Michael Barry | 0dc2ee82e1 | |
Michael Barry | 96eae6110b | |
dependabot[bot] | 076d2acbee | |
dependabot[bot] | 8e1eae8804 | |
Björn Bilger | df804879ef | |
dependabot[bot] | d2b267aa2e | |
cmahnke | f692124168 | |
Björn Bilger | c480b35f1c | |
dependabot[bot] | 389ccab8e1 | |
Brandon Liu | a233e683bd | |
dependabot[bot] | 3dea746ff0 | |
dependabot[bot] | 8affe1e3e8 | |
dependabot[bot] | 8fcc6139e6 | |
Michael Barry | 3b48682f69 | |
dependabot[bot] | e2aacfe75e | |
dependabot[bot] | d59251deff | |
dependabot[bot] | 401adf45ef | |
Michael Barry | a78e6284a8 | |
dependabot[bot] | 289bbc6b1f | |
dependabot[bot] | d3d5ed8f0f | |
dependabot[bot] | 1963bf1451 | |
Michael Barry | cbb092a1f7 | |
dependabot[bot] | 3d10501558 | |
dependabot[bot] | 1b6b3d6380 | |
dependabot[bot] | d98d5d6ae1 | |
dependabot[bot] | c53fdea788 | |
dependabot[bot] | 1c45474bbb | |
Michael Barry | fc53c36439 | |
dependabot[bot] | 1ac5b69b92 | |
dependabot[bot] | 1326edf560 | |
dependabot[bot] | f68351c377 | |
Michael Barry | 40bf33e887 | |
dependabot[bot] | 4efc2bbd41 | |
dependabot[bot] | ed4c320e49 | |
dependabot[bot] | 20c4a6f890 | |
dependabot[bot] | dc04a62d81 | |
dependabot[bot] | 05011ee15d | |
dependabot[bot] | 34f29eeda7 | |
Mike Barry | 699277b17f | |
dependabot[bot] | 6209f4d36e | |
Michael Barry | 1df1bf04e4 | |
dependabot[bot] | c22d379734 | |
dependabot[bot] | c9f61df4cb | |
dependabot[bot] | fdee80d395 | |
dependabot[bot] | 9995df9a3a | |
Michael Barry | ae7261246f | |
dependabot[bot] | a2083eb2f0 | |
Michael Barry | ec6430dc49 | |
dependabot[bot] | c4036f317a | |
dependabot[bot] | 58c26f5e4e | |
dependabot[bot] | d9dd9d5daf | |
dependabot[bot] | 67757075cc | |
Michael Barry | 517851435d | |
dependabot[bot] | 65935461e3 | |
dependabot[bot] | c19419808d | |
dependabot[bot] | 2eb4dd2955 | |
dependabot[bot] | 48050ed495 | |
Michael Barry | 44f22b27c5 | |
dependabot[bot] | bf7294970e | |
dependabot[bot] | 8b5af48e43 | |
Michael Barry | a94ac0ddd8 | |
dependabot[bot] | 834d4587f1 | |
Michael Barry | 9f960022b8 | |
Michael Barry | 1be2fca45f | |
dependabot[bot] | 01114cb12c | |
Michael Barry | 2bb05a0797 | |
Michael Barry | a0cd4fa864 | |
Michael Barry | b108f88453 | |
dependabot[bot] | b23d7ea7f5 | |
dependabot[bot] | b800cb6836 | |
dependabot[bot] | a50b06a38b | |
dependabot[bot] | d53f7fc485 | |
dependabot[bot] | 46f67a7c06 | |
dependabot[bot] | ebd90722a8 | |
dependabot[bot] | 015f418405 | |
dependabot[bot] | f858a462d1 | |
dependabot[bot] | b5df50d995 | |
dependabot[bot] | aa6a3a94eb | |
dependabot[bot] | 076ac3e2f1 | |
dependabot[bot] | 0f488c0712 | |
dependabot[bot] | 19c883c651 |
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }}
|
||||
|
|
|
@ -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 }}
|
||||
|
|
|
@ -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)}`);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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 }}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
30
README.md
30
README.md
|
@ -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
|
||||
|
||||
|
|
|
@ -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">© OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">© 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
|
|
@ -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">© OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">© 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
|
|
@ -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">© OpenMapTiles</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">© 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
|
Plik diff jest za duży
Load Diff
Plik diff jest za duży
Load Diff
Plik diff jest za duży
Load Diff
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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()),
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<>();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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> {}
|
||||
}
|
||||
|
|
|
@ -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}.
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
);
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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 +
|
||||
']';
|
||||
}
|
||||
}
|
|
@ -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&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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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> {
|
||||
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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}. */
|
||||
|
|
|
@ -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). */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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 + ']';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 + ']';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
) {}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -18,4 +18,8 @@ public interface RunnableThatThrows {
|
|||
throwFatalException(e);
|
||||
}
|
||||
}
|
||||
|
||||
static Runnable wrap(RunnableThatThrows thrower) {
|
||||
return thrower::runAndWrapException;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
Ładowanie…
Reference in New Issue