1个不稳定版本
0.3.0 | 2023年3月17日 |
---|
#115 在 地理空间
340KB
3.5K SLoC
tyler
tyler 从3D城市对象创建瓦片。
作为输入,tyler 采取 CityJSON Features,其中每个特性存储在一个单独的文件中。
作为输出,tyler 可以创建
3D Tiles输出的详细信息
- 二进制glTF (.glb) 的瓦片集内容。
- glTF资产包含特征元数据(每个CityObject),使用 EXT_mesh_features 和 EXT_structural_metadata 扩展。
- 特性被着色为默认值,并且可以按CityObject类型设置颜色。
- glTF文件使用 KHR_mesh_quantization 和 EXT_meshopt_compression 扩展进行压缩。
- 支持隐式瓦片(可选)。
关于 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
来控制日志级别(debug
、info
、error
)以开启调试消息。
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
输入数据
- 一个主
.city.json
文件,包含至少CRS 和 变换 对象。 - 一个包含
.city.jsonl
文件的目录(或目录树),每个文件包含一个 CityJSON Feature,包括所有子 City 对象。
--metadata
一个主 .city.json
文件,包含至少 CRS
和 transform
对象,由参数设置。
--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