# 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).

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

{
"type": "Feature",
"id": "microPAIndoorSampleSection",
"geometry": {
"type": "Point",
"coordinates": [120.68093, 24.2114]
},
"properties": {
"category": "MicroPA",
"isoCountryCode": "FRA",
"sourceType": "EXTERNAL",
"id": "1005"
},
"locationDetails": [
{
"names": [
{
"name": "A",
"languageCode": "ENG",
"nameType": "ABBREVIATION"
}
],
"locationType": "SECTION"
}
],
"defaultDisplayPointType": "INDOOR_SPACE_CENTROID"
}
}


### Row

{
"type": "Feature",
"id": "microPAIndoorSampleRow",
"geometry": {
"type": "Point",
"coordinates": [120.68093, 24.2114]
},
"properties": {
"category": "MicroPA",
"isoCountryCode": "FRA",
"sourceType": "EXTERNAL",
"id": "1005"
},
"id": "microPAIndoorSampleSection"
},
"locationDetails": [
{
"names": [
{
"name": "12",
"languageCode": "ENG",
"nameType": "ABBREVIATION"
}
],
"locationType": "ROW"
}
],
"defaultDisplayPointType": "INDOOR_SPACE_CENTROID"
}
}


### Seat

{
"type": "Feature",
"id": "microPAIndoorSampleSeat",
"geometry": {
"type": "Point",
"coordinates": [120.68093, 24.2114]
},
"properties": {
"category": "MicroPA",
"isoCountryCode": "FRA",
"sourceType": "FIELD",
"id": "1005",
"spaceId": "here-pa"
},
"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:

{
"type": "Feature",
"properties": {
"category": "MicroPA",
"routingPoints": [
{
"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 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.