Topology: routing enablers
Routing graphs in MOM are based on the general concept of topologies. A topology is represented via a LineString
geometry with a start and end node, and can carry attributes further defining navigability characteristics, such as the direction of travel or allowed vehicle types. The topology graph is a basic enabler for routing along with addresses.
Topologies
Topologies, MOM features of the type topology
, form the navigation graph or navigable elements. Topologies are used not only in indoor maps, but also in outdoor maps, either in the same way as topology
features, or as road
features. As both feature types are very similar, this documentation uses topology
as a synonym for both types.
Route graph calculation
To navigate to a specific destination, the destination needs to have an address property of either the Address
or the MicroPA
type, which contains one or more routePoint
elements. A routePoint
references a topology, and also contains a location on the geometry, which allows for routing to the destination. The routing graph is created by starting with the position on the current topology, and then calculating an optimal path along the map's topologies to the target topology.
Topology references
The underlying concept is that "places of interest" are referencing topologies, which is sufficient to enable route calculation. In order to facilitate map creation and editing, it is necessary to also describe the relationship between the elements of the map that are not navigable destinations and the rest of the map. For this description, you must reference topologies from the indoor.Level
features:
{
"id": "level-64575",
"momType": "indoor.Level",
"type": "Feature",
"properties": {
...
"topologies": [
{
"id": "topology-18727840"
},
{
"id": "topology-18720600"
},
{
"id": "topology-18720601"
},
...
Topology characteristics
The topology
feature allows for flexible refinement of access characteristics and restrictions. Within the context of indoor maps, you must specify modality and directionality for all topologies, as these are combined in the accessCharacteristics
property:
{
"id": "topology-18740922",
"momType": "Topology",
"type": "Feature",
"properties": {
...
"accessCharacteristics": [
{
"range": {
"startOffset": 0,
"endOffset": 1
},
"appliesTo": "FROM_START",
"auto": true,
"autoWithTrailer": true,
"bicycle": true,
"bus": true,
"carpool": true,
"delivery": true,
"emergencyVehicle": true,
"hybrid": true,
"motorcycle": true,
"taxi": true,
"truck": true,
"throughTraffic": true,
"alternateFuelVehicle": true,
"motorhome": true,
"caravan": true,
"trailer": true,
"boatTrailer": true,
"autoTowingCaravan": true,
"semi": true
}
]
A common concept for access characteristics and restrictions is the ability to define a range and a direction for the characteristic. As seen in the example above, the allowed vehicle types are applied to the full range (see the range
property) of the topology, and apply to only to the direction from the start node (appliesTo
is set to FROM_START
).
Addresses
MOM defines the Address
feature type with two categories: PointAddress
and MicroPA
(micro point address). A PointAddress
represents the street address, whereas a MicroPA
is inside the building and provides an internal address for various feature objects, such as structures, levels, and spaces in an Indoor Map context.
The address features have a hierarchy where each MicroPA
must have the PointAddress
as a parent, and additionally, these addresses may also have another MicroPA
as a parent. Having an extensive hierarchy of MicroPA
addresses is not common in indoor maps.
For example, to model seats in a sport stadium, the address is "section: A", "row: 12", "seat: 32". The result, excluding the street address PointAddress
, would be the following:
Section
{
"momType": "Address",
"type": "Feature",
"id": "microPAIndoorSampleSection",
"geometry": {
"type": "Point",
"coordinates": [120.68093, 24.2114]
},
"properties": {
"featureType": "Address",
"category": "MicroPA",
"isoCountryCode": "FRA",
"sourceType": "EXTERNAL",
"parentPointAddressId": {
"id": "1005"
},
"locationDetails": [
{
"names": [
{
"name": "A",
"languageCode": "ENG",
"nameType": "ABBREVIATION"
}
],
"locationType": "SECTION"
}
],
"defaultDisplayPointType": "INDOOR_SPACE_CENTROID"
}
}
Row
{
"momType": "Address",
"type": "Feature",
"id": "microPAIndoorSampleRow",
"geometry": {
"type": "Point",
"coordinates": [120.68093, 24.2114]
},
"properties": {
"featureType": "Address",
"category": "MicroPA",
"isoCountryCode": "FRA",
"sourceType": "EXTERNAL",
"parentPointAddressId": {
"id": "1005"
},
"parentMicroPointAddressId": {
"id": "microPAIndoorSampleSection"
},
"locationDetails": [
{
"names": [
{
"name": "12",
"languageCode": "ENG",
"nameType": "ABBREVIATION"
}
],
"locationType": "ROW"
}
],
"defaultDisplayPointType": "INDOOR_SPACE_CENTROID"
}
}
Seat
{
"momType": "Address",
"type": "Feature",
"id": "microPAIndoorSampleSeat",
"geometry": {
"type": "Point",
"coordinates": [120.68093, 24.2114]
},
"properties": {
"featureType": "Address",
"category": "MicroPA",
"isoCountryCode": "FRA",
"sourceType": "FIELD",
"parentPointAddressId": {
"id": "1005",
"spaceId": "here-pa"
},
"parentMicroPointAddressId": {
"id": "microPAIndoorSampleRow"
},
"locationDetails": [
{
"names": [
{
"name": "5",
"languageCode": "ENG",
"nameType": "ABBREVIATION"
}
],
"locationType": "SEAT"
}
],
"defaultDisplayPointType": "INDOOR_SPACE_CENTROID"
}
}
To allow navigation to an indoor feature, the feature's address can be connected to the topology graph via the routingPoints
property of a MicroPA
. A RoutePoint
consists of a reference to a topology and coordinates on the topology, as well as an optional indication on which side of the topology the feature is located:
{
"momType": "Address",
"type": "Feature",
"properties": {
"category": "MicroPA",
"routingPoints": [
{
"road": "45363",
"side": "left",
"point": {
"latitude": 120.680928
"longitude": 24.21142
}
}
]
...
}
...
}
Lanes
To increase navigation accuracy, such as in autonomous driving use cases in indoor maps that represent maps for vehicles, you can further augment the topology on a level with the MOM LaneGroups
feature. A set of LaneGroups
references these lanes per level. However, not all parking garages have visible lanes drawn on the floor, and in such instances, the map won't have them either. Lanes are not used with pedestrian-only topologies.
In the indoor context, LaneGroups
will provide detailed geometries for the underlying topologies, mainly the boundary and possible center lines. The dividers between lanes are modeled in indoor maps using indoor.Space
. Due to the linking of lane groups to topologies in indoor maps, the directionality of the topologies and the directionOfTravel
property of the lanes in a group must match.
Note
laneGroup
has a reference to topology, but as they are an enhancement to topologies and may not be used in all indoor maps, the topologies-set is the primary one to follow.
Road signs
Road sign is a point-geometry feature with identifying properties. Signs were originally defined for outdoor use, therefore the SignType
enumeration covers additional cases that are not applicable for indoor maps. Typical signs present in indoor maps include speed limit, height limit, no parking, no stopping, no entry, and turn restrictions.
The altitude of signs in indoor maps is provided as the relativeAltitudeCm
attribute instead of the altitude of the point geometry. Sign features are referenced by the indoor.Level
at which they are located.
Floor markings
Floor markings in indoor maps are represented by the RoadSurfaceMarkings
MOM feature. They include elements such as arrows painted on the floor.
Each indoor map level can have a set of RoadSurfaceMarkings
, referenced per indoor.Level
.
Note
A lane group may also reference RoadSurfaceMarkings
, but floor markings can be present without lanes.