-
Notifications
You must be signed in to change notification settings - Fork 1
/
CityBufFeature.fbs
129 lines (111 loc) · 2.41 KB
/
CityBufFeature.fbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
include "CityBufHeader.fbs";
namespace CityBuf_;
enum CityObjectType:ubyte {
Bridge,
BridgePart,
BridgeInstallation,
BridgeConstructiveElement,
BridgeRoom,
BridgeFurniture,
Building,
BuildingPart,
BuildingInstallation,
BuildingConstructiveElement,
BuildingFurniture,
BuildingStorey,
BuildingRoom,
BuildingUnit,
CityFurniture,
CityObjectGroup,
GenericCityObject,
LandUse,
OtherConstruction,
PlantCover,
SolitaryVegetationObject,
TINRelief,
// Transportation objects
Road,
Railway,
Waterway,
TransportSquare,
Tunnel,
TunnelPart,
TunnelInstallation,
TunnelConstructiveElement,
TunnelHollowSpace,
TunnelFurniture,
WaterBody
}
enum SemanticSurfaceType:ubyte {
// Building
RoofSurface,
GroundSurface,
WallSurface,
ClosureSurface,
OuterCeilingSurface,
OuterFloorSurface,
Window,
Door,
InteriorWallSurface,
CeilingSurface,
FloorSurface,
// WaterBody
WaterSurface,
WaterGroundSurface,
WaterClosureSurface,
// Transportation ("Road", "Railway", "TransportSquare")
TrafficArea,
AuxiliaryTrafficArea,
TransportationMarking,
TransportationHole
}
enum GeometryType:ubyte {
MultiPoint,
MultiLineString,
MultiSurface,
CompositeSurface,
Solid,
MultiSolid,
CompositeSolid
}
struct Vertex {
x:int;
y:int;
z:int;
}
table CityFeature {
id:string (key, required);
objects:[CityObject];
vertices:[Vertex];
}
table CityObject {
type:CityObjectType;
id:string (key, required);
geographical_extent:GeographicalExtent;
geometry:[Geometry];
attributes:[ubyte];
columns:[Column]; // Attribute columns schema (optional, if set it should be used instead of the header columns)
children:[string];
children_roles:[string]; // for CityObjectGroup only
parents:[string];
}
table Geometry {
type:GeometryType;
lod:string;
// these are lengths in the
// depending on the geometry_type, different fields are used
solids:[uint];
shells:[uint];
surfaces:[uint];
strings:[uint]; // Rings or LineStrings
boundaries:[uint]; // flat list of vertex indices
semantics:[uint]; // flat list of semantic object indices
semantics_objects:[SemanticObject];
}
table SemanticObject {
type:SemanticSurfaceType;
attributes:[ubyte];
children:[uint];
parent:uint = null; // default is null, important to be able to check if this field is set
}
root_type CityFeature;