Genereren van 3D Tiles: Tyler

3dtilesnederland.nl

Status: concept
Laatst bijgewerkt: 4 december 2023 | Azure pipeline voorbeeld toegevoegd

In de basis volgen we in deze handleiding de standaard handleiding van Tyler. Hieronder volgt echter nog wat aanvullende informatie en aandachtspunten.

Voorwaarden om Tyler te kunnen gebruiken:

  • Brondata is beschikbaar als CityJSONFeatures, dat wil zeggen losse bestanden voor de verschillende objecten;
  • Vertices van de geometrie zijn in centimeters en ints (geen floats);
  • LOD’s zijn strings (geen floats).
  • Download de GeoFlow bundle vanaf de release page
  • https://github.com/geoflow3d/geoflow-bundle/releases
  • Installeer deze op de standaard locatie, C:\Program Files\Geoflow
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Download Tyler vanaf de release page
  • https://github.com/3DGI/tyler/releases
  • Kopieer de inhoud van de zip naar een willkeurige locatie
Klik om de afbeelding in een nieuw tabblad te bekijken
  • Tyler maakt gebruik van een metadata bestand, metadata.city.json
  • Hierin worden verschillende instellingen gedefinieerd die tijdens het genereren van de tileset gebruikt worden. Wat deze instellingen precies moeten zijn is per geval verschillend.
  • Speciale aandacht gaat uit naar het onderdeel Scale onder Transform. Het resultaat van de tool is sterk afhankelijk van de input. Een veel voorkomend probleem is dat de scale niet goed staat, dit heeft te maken met de notatie van de vertices (zie stap 1, Voorwaarden om Tyler te kunnen gebruiken). Als de vertices bijvoorbeeld in meter staan, kunnen deze tot centimers gecorrigeerd worden met deze scale.
    Het is echter aan te raden om te zorgen dat de brondata al in centimeters genoteerd is.

metadata.city.json


{
    "type": "CityJSON",
    "version": "1.1",
    "CityObjects": {},
    "vertices": [],
    "transform": {
        "scale": [
            0.01,
            0.01,
            0.01
        ],
        "translate": [
            0.0,
            0.0,
            0.0
        ]
    },
    "metadata": {
        "identifier": "4381bbca-a936-4df9-902f-1683082697cd-blaat",
        "referenceDate": "2021-12-10",
        "referenceSystem": "https://www.opengis.net/def/crs/EPSG/0/7415"
    },
    "+metadata-extended": {
        "thematicModels": [
            "LandUse",
            "Building",
            "BuildingPart",
            "GenericCityObject",
            "Bridge",
            "Road",
            "WaterBody",
            "PlantCover"
        ],
        "fileIdentifier": "30dz1_04.json"
    },
    "extensions": {
        "MetadataExtended": {
            "url": "https://raw.githubusercontent.com/cityjson/metadata-extended/0.5/metadata-extended.ext.json",
            "version": "0.5"
        },
        "Generic": {
            "url": "https://cityjson.org/extensions/download/generic.ext.json",
            "version": "1.0"
        }
    }
}

GitHub – CesiumGS/3d-tiles-tools

OPTIONEEL

Om Tyler via Docker te kunnen gebruiken, volg je deze stappen.

Vervolgens kun je Tyler runnen met de gewenste instellingen. Bijvoorbeeld

  • docker run -it -e RUST_LOG=debug -e PROJ_DATA=/usr/local/share/proj -v %cd%:/data –rm tylerdocker tyler

Dit vraagt initieel iets meer tijd om op te starten, voordeel is dat je bijvoorbeeld lokaal geen extra software hoeft te installeren.

Bonus: Azure pipeline voorbeeld


trigger:
- none

pool:
  vmImage: ubuntu-latest

steps:

- script: |
    docker run -e RUST_LOG=debug -e PROJ_DATA=/usr/local/share/proj -v "$(Build.Repository.LocalPath):/data" --rm 3dgi/tyler tyler \
    --metadata /data/metadata.city.json \
    --features /data/input \
    --output /data/output \
    --3dtiles-implicit \
    --object-type PlantCover \
    --object-type Building \
    --object-type BuildingPart \
    --object-type BuildingInstallation \
    --object-attribute gebouwnummer:string \
    --geometric-error-above-leaf 1500 \
    --3dtiles-metadata-class buildings \
    --grid-minz=-15 \
    --grid-maxz=400
  displayName: 'Run Tyler Docker'

- task: CopyFiles@2
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)/output'
    targetFolder: '$(Build.ArtifactStagingDirectory)'
    
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'

- task: AzureCLI@2
  inputs:
    azureSubscription: 'your-subscription'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: 'az storage blob upload-batch -d "tylerbuilds/$(Build.BuildId)" --account-name "your-storage-account" -s "$(Build.ArtifactStagingDirectory)"'
  displayName: 'Upload files to $(Build.BuildId)'