MongoDB是一种文档型分布式数据库,是非关系型数据库的典型代表,适合存储海量空间三维模型瓦片数据。
MongoDB的单个数据库(database)可以存储多份空间三维模型瓦片数据,每个database中有两类集合(collection):元数据集合和数据集合。 元数据集合存储描述文件相关信息;数据集合存储数据文件、索引树文件、属性描述文件和属性数据文件。
具体存储示例见数据示例。
元数据集合名称固定为: metadatas_s3m,为方便后续扩展,文档结构定义为自描述方式。元数据集合存储单个database中所有空间三维模型瓦片数据的描述文件信息,ID字段作为每份空间三维模型瓦片数据的标识。
字段名 | 字段类型 | 描述 |
---|---|---|
ID | Integer | 一份空间三维模型瓦片数据的唯一标识 |
Name | String | 元数据标签名称 |
Value | Variant | 元数据标签值 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
TilesetName | String | 空间三维模型瓦片数据的名称 | 无,在database中唯一,即不同空间三维模型瓦片数据在同一database中不能重名。其取值决定了对应数据集合的名称 |
Version | String | 版本号 | 对应Config对象中规定的version标签 |
Asset | String | 数据的基本信息 | 对应Config对象中规定的asset标签 |
PyramidSplitType | String | 数据的空间划分类型 | 对应Config对象中规定的pyramidSplitType标签 |
LodType | String | LOD切换到精细层时,精细层Tile数据的处理方式 | 对应Config对象中规定的lodType标签 |
Position | Position | 整个TileTreeSet放置的空间点坐标位置,用Position对象表示 | 对应Config对象中规定的position标签 |
GeoBounds | Rect | 数据的地理范围,用Rect对象表示 | 对应Config对象中规定的geoBounds标签 |
HeightRange | HeightRange | 数据的高度范围,用HeightRange对象表示 | 对应表5中规定的heightRange标签 |
VertexAttributeDescript | Array<CategoryDescript> | 顶点扩展属性含义描述信息和数值范围,用CategoryDescript对象数组表示 | 对应Config对象中规定的vertexAttributeDescript标签 |
Crs | String | 坐标系信息 | 对应Config对象中规定的crs标签 |
TileInfo | TileInfo | 瓦片信息,用TileInfo对象表示 | 无 |
IDFieldName | String | IDInfo中单体对象ID的属性字段名,对应属性描述文件(attribute.json)中FieldInfo里某个字段名 | 对应Config对象中规定的idFieldName标签 |
CompressedPackageType | String | 数据文件(.s3mb)的压缩类型。 取值范围:{‘None’,‘Zip’,‘Gzip’} 分别对应:无压缩、zip压缩、gzip压缩 |
对应Config对象中规定的compressedPackageType标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
unit | String | 空间坐标的单位 | 对应Position对象中规定的unit标签 |
point3D | Point3D | 空间点坐标值,用Point3D对象表示 | 对应Position对象中规定的point3D标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
left | Double | 数据地理范围的左值 | 对应Rect对象中规定的left标签 |
top | Double | 数据地理范围的上值 | 对应Rect对象中规定的top标签 |
right | Double | 数据地理范围的右值 | 对应Rect对象中规定的right标签 |
bottom | Double | 数据地理范围的下值 | 对应Rect对象中规定的bottom标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
min | Double | 最小值 | 对应HeightRange对象中规定的min标签 |
max | Double | 最大值 | 对应HeightRange对象中规定的max标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
category | String | 顶点扩展属性含义描述信息 | 对应CategoryDescript对象中规定的category标签 |
range | Range | 顶点扩展属性数值范围,用Range对象表示 | 对应CategoryDescript对象中规定的range标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
dimension | Integer | 数据维度 | 对应Range对象中规定的dimension标签 |
min | Array<Double> | 每个维度的最小值构成的数组,数组长度为dimension | 对应Range对象中规定的min标签 |
max | Array<Double> | 每个维度最大值构成的数组,数组长度为dimension | 对应Range对象中规定的max标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
tileName | String | 瓦片名称 | 无 |
boundingBox | BoundingBox | 瓦片数据范围,用BoundingBox对象表示 | 对应TileTreeInfo对象中规定的boundingBox标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
x | Double | 空间点的x坐标值 | 对应Point3D对象中规定的x标签 |
y | Double | 空间点的y坐标值 | 对应Point3D对象中规定的y标签 |
z | Double | 空间点的z坐标值 | 对应Point3D对象中规定的z标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
center | Point3D | 包围盒中心点,用Point3D对象表示 | 对应BoundingBox对象中规定的center标签 |
xExtent | Vector3 | 包围盒x方向和长度,用Vector3对象表示 | 对应BoundingBox对象中规定的xExtent标签 |
yExtent | Vector3 | 包围盒y方向和长度,用Vector3对象表示 | 对应BoundingBox对象中规定的yExtent标签 |
zExtent | Vector3 | 包围盒z方向和长度,用Vector3对象表示 | 对应BoundingBox对象中规定的zExtent标签 |
标签名 | 字段类型 | 描述 | 与描述文件各标签的对应关系 |
---|---|---|---|
x | Double | 向量的x分量 | 对应Vector3对象中规定的x |
y | Double | 向量的y分量 | 对应Vector3对象中规定的x |
z | Double | 向量的z分量 | 对应Vector3对象中规定的x |
数据集合的命名规则为Tileset_Name,其中,Name是每份空间三维模型瓦片数据的名称,对应metadatas_s3m集合的TilesetName标签的值。如某空间三维模型瓦片数据的名称为cbd,其数据集合名称为Tileset_cbd。
一个数据集合存储一份空间三维模型瓦片数据的数据文件、索引树文件、属性描述文件、属性数据文件。
字段名 | 字段类型 | 描述 |
---|---|---|
Tileset_Key | String | 文件名称(含文件扩展名)。 不同文件的文件扩展名不同,数据文件、索引树文件、属性数据文件的文件扩展名分别为s3mb、json、s3md。 属性描述文件的文件名称为attribute.json |
Tileset_Value | Binary Data | 文件的二进制数据 |
以某一BIM数据为例给出如下示例。
部分Building@CBD数据的元数据具体内容如下(_id字段为MongoDB预定义主键):
/* TilesetName */
{
"_id" : ObjectId("5576849543e29094b23538d0"),
"ID" : 1,
"Name" : "TilesetName",
"Value" : "Building@CBD"
}
/* Version */
{
"_id" : ObjectId("5576849543e29094b23538d1"),
"ID" : 1,
"Name" : "Version",
"Value" : "3.0"
}
/* Asset */
{
"_id" : ObjectId("5576849543e29094b23538d2"),
"ID" : 1,
"Name" : "Asset",
"Value" : ""
}
/* DataType */
{
"_id" : ObjectId("5576849543e29094b23538d3"),
"ID" : 1,
"Name" : "DataType",
"Value" : "BIM"
}
/* PyramidSplitType */
{
"_id" : ObjectId("5576849543e29094b23538d4"),
"ID" : 1,
"Name" : "PyramidSplitType",
"Value" : "QuadTree"
}
/* LodType */
{
"_id" : ObjectId("5576849543e29094b23538d5"),
"ID" : 1,
"Name" : "LodType",
"Value" : "Replace"
}
/* Position */
{
"_id" : ObjectId("5576849543e29094b23538d6"),
"ID" : 1,
"Name" : "Position",
"Value" : {
"unit" : "Degree",
"point3D" : {
"x" : 116.36,
"y" : 39.99,
"z" : 0
}
}
}
/* GeoBounds */
{
"_id" : ObjectId("5576849543e29094b23538d7"),
"ID" : 1,
"Name" : "GeoBounds",
"Value" : {
"left" : 116.3635,
"top" : 40.0018,
"right" : 116.3755,
"bottom" : 39.9932
}
}
/* HeightRange */
{
"_id" : ObjectId("5576849543e29094b23538d8"),
"ID" : 1,
"Name" : "HeightRange",
"Value" : {
"min" : 9.4875,
"max" : 119.9612
}
}
/* VertexAttributeDescript */
{
"_id" : ObjectId("5576849543e29094b23538d9"),
"ID" : 1,
"Name" : "VertexAttributeDescript",
"Value" : [{
"category" : "",
"range" : {
"dimension" : 1,
"min" : [0],
"max" : [0]
}
}]
}
/* Crs */
{
"_id" : ObjectId("5576849543e29094b23538da"),
"ID" : 1,
"Name" : "Crs",
"Value" : "epsg: 4490"
}
/* TileInfo */
{
"_id" : ObjectId("5576849543e29094b23538db"),
"ID" : 1,
"Name" : "TileInfo",
"Value" : {
"tileName" : "Tile_-7281_21185_0000.s3mb",
"boundingBox" : {
"center" : {
"x" : 344.276527615756145,
"y" : -435.8184572990872,
"z" : 64.24122925985044
},
"xExtent" : {
"x" : 98.91085097278456,
"y" : 0,
"z" : 0
},
"yExtent" : {
"x" : 0,
"y" : 49.4554254863923,
"z" : 0
},
"zExtent" : {
"x" : 0,
"y" : 0,
"z" : 98.91085097278457
}
}
}
}
/* IDFieldName */
{
"_id" : ObjectId("5576849543e29094b23538dc"),
"ID" : 1,
"Name" : "IDFieldName",
"Value" : "SmID"
}
/* CompressedPackageType */
{
"_id" : ObjectId("5576849543e29094b23538dd"),
"ID" : 1,
"Name" : "CompressedPackageType",
"Value" : "Zip"
}
部分Tileset_Building@CBD数据的数据集合的具体内容如下(_id字段为MongoDB预定义主键):
/* 索引树文件 */
{
"_id" : ObjectId("5ffcf3099883b7c2d85d648d"),
"Tileset_Key" : "Tile_-7281_21185_0000.json",
"Tileset_Value" : new BinData(0, "eyJsb2RU...")
}
/* 数据文件 */
{
"_id" : ObjectId("5ffcf3099883b7c2d85d648b"),
"Tileset_Key" : "Tile_-7281_21185_0000.s3mb",
"Tileset_Value" : new BinData(0, "AACAPx8y...")
}
/* 数据文件 */
{
"_id" : ObjectId("5ffcf3099883b7c2d85d649e"),
"Tileset_Key" : "Tile_-7281_21185_0000_0004_0000.s3mb",
"Tileset_Value" : new BinData(0, "AACAPxS3...")
}
/* 数据文件 */
{
"_id" : ObjectId("5ffcf3099883b7c2d85d6491"),
"Tileset_Key" : "Tile_-7282_21183_0000.s3mb",
"Tileset_Value" : new BinData(0, "AACAP8UK...")
}
/* 数据文件 */
{
"_id" : ObjectId("5ffcf3099883b7c2d85d64a0"),
"Tileset_Key" : "Tile_-7282_21183_0000_0001_0000.s3mb",
"Tileset_Value" : new BinData(0, "AACAP4zS...")
}
/* 属性描述文件 */
{
"_id" : ObjectId("5ffcf3099883b7c2d85d64a3"),
"Tileset_Key" : "attribute.json",
"Tileset_Value" : new BinData(0, "eyJsYXll...")
}
/* 属性数据文件 */
{
"_id" : ObjectId("5ffcf3099883b7c2d85d649a"),
"Tileset_Key" : "Tile_-7281_21185_0000.s3md",
"Tileset_Value" : new BinData(0, "zgcAAKgB...")
}