#tile #3d #gltf #city #city-json #tileset #object

app tyler

从编码为CityJSONFeatures的3D城市对象中创建瓦片

1个不稳定版本

0.3.0 2023年3月17日

#115地理空间

Apache-2.0

340KB
3.5K SLoC

tyler

tyler 从3D城市对象创建瓦片。

作为输入,tyler 采取 CityJSON Features,其中每个特性存储在一个单独的文件中。

作为输出,tyler 可以创建

3D Tiles输出的详细信息

关于 tyler 内部结构的更多信息,您可以在 设计文档 中找到。

安装

目前,tyler 依赖于 geoflow-bundle 将CityJSONFeatures转换为glTF。除非您想自己安装 geoflow-bundle,否则我们强烈建议使用提供的docker镜像来运行 tyler,因为它包含了 geoflow-bundle

从源码编译

tyler是用Rust编写的,您需要 Rust工具链 来编译它。

从GitHub下载源代码后,导航到tyler目录,您可以使用 cargo 安装 tyler

cargo install .

使用方法

tyler 是一个命令行应用程序。

使用 --help 查看帮助菜单。

tyler --help

执行日志输出到控制台。您可以通过设置环境变量 RUST_LOG 来控制日志级别(debuginfoerror)以开启调试消息。

RUST_LOG=debug tyler ...

导出3D瓦片

生成3D瓦片的示例命令。具体参数细节请参考下面的文本。

tyler \
    --metadata metadata.city.json \
    --features features/ \
    --output /3dtiles \
    --3dtiles-implicit \
    --object-type LandUse \
    --object-type PlantCover \
    --object-type WaterBody \
    --object-type Road \
    --object-type GenericCityObject \
    --object-type Bridge \
    --object-attribute objectid:int,bronhouder:string \
    --3dtiles-metadata-class terrain \
    --grid-minz=-5 \
    --grid-maxz=300

输入数据

  1. 一个主 .city.json 文件,包含至少CRS变换 对象。
  2. 一个包含 .city.jsonl 文件的目录(或目录树),每个文件包含一个 CityJSON Feature,包括所有子 City 对象。

--metadata

一个主 .city.json 文件,包含至少 CRStransform 对象,由参数设置。

--features

一个包含 .city.jsonl 文件的目录(或目录树),每个文件包含一个 CityJSON Feature,包括所有子 City 对象。

例如

tyler--metadata metadata.city.json--features/some/directory/

输出

--output

输出写入由 --output 设置的目录。对于3D瓦片输出,它将包含一个 tileset.json 文件和包含 glTF 文件的 tiles/ 目录。在隐式瓦片的情况下,还会写入一个包含子树的 subtrees/ 目录。

在 Tyler 运行过程中,还会创建一个包含文本文件的 input/ 目录,但 Tyler 处理瓦片完成后,此目录及其所有内容将被删除(除非启用调试模式)。

CityObject 类型

CityJSON 数据可以包含不同类型的 CityObject,如 Building、PlantCover 或 Road。您可以选择只包含选定的 CityObject 类型在瓦片输出中。使用 --object-type 参数选择 CityObject 类型。此参数可以指定多次以选择多个对象类型。

例如

tyler …--object-type Building --object-type BuildingPart

3D瓦片元数据类

3D瓦片元数据规范使用类来分类功能。使用 --3dtiles-metadata-class 参数,可以为 3D 瓦片输出中的功能设置元数据类。元数据类与选择 CityObject 类型一起工作。例如,可以声明一组 CityObject 类型的元数据类。

例如

tyler …--3dtiles-metadata-class building--object-type Building --object-type BuildingPart

细节级别(LoD)

CityJSON可以存储具有多个详细级别的城市对象。对于每种CityObject类型,其LoD都需要指定。这是在输入数据中定义的LoD。每个CityObject类型的LoD值由--lod-<cityobject type>参数设置。<cityobject type>是CityJSON CityObject类型,例如BuildingPart或LandUse。参数是小写的,因此“BuildingPart”变为“building-part”,“LandUse”变为“land-use”。如果--lod-<cityobject type>的值为空字符串(这是默认值),则Tyler将选择城市对象可用的最高LoD。

例如

tyler …--lod-land-use 1 --lod-building-part1.3

属性

glTF特性上的属性使用--object-attribute参数设置。该参数接受属性名称和属性值类型作为其值。属性名称和类型由冒号“:”分隔并连接成单个字符串,例如“name:type”。可能的值类型是“string”,“int”,“float”,“bool”。可以多次指定--object-attribute参数以包含多个属性。

例如

tyler …--object-attribute bouwjaar:int--object-attribute objectid:int--object-attribute bagpandid:string--object-attribute bgt_type:string

颜色

glTF特性上的颜色使用--color-<cityobject type>参数设置。<cityobject type>是CityJSON CityObject类型,例如BuildingPart或LandUse。参数是小写的,因此“BuildingPart”变为“building-part”,“LandUse”变为“land-use”。参数值是十六进制rgb颜色值。例如,“#FF0000”是红色。

例如

tyler …--color-building-part#FF0000

依赖关系

~13–24MB
~264K SLoC