Open Geospatial Consortium

Submission Date: 2020-06-01

Approval Date:   2020-09-20

Publication Date:   2021-01-19

External identifier of this OGC® document: http://www.opengis.net/doc/dp/indoorgml-poi

Internal reference number of this OGC® document:    20-054r1

Category: OGC® Discussion Paper

Editor:  Kyoung-Sook Kim, Jiyeong Lee

An Extension Model to attach Points of Interest into IndoorGML

Copyright notice

Copyright © 2021 Open Geospatial Consortium

To obtain additional rights of use, visit http://www.opengeospatial.org/legal/

Warning

This document is not an OGC Standard. This document is an OGC Discussion Paper and is therefore not an official position of the OGC membership. It is distributed for review and comment. It is subject to change without notice and may not be referred to as an OGC Standard. Further, an OGC Discussion Paper should not be referenced as required or mandatory technology in procurements.

Document type:    OGC® Discussion Paper

Document subtype:

Document stage:    Approved for public release

Document language:  English

License Agreement

Permission is hereby granted by the Open Geospatial Consortium, ("Licensor"), free of charge and subject to the terms set forth below, to any person obtaining a copy of this Intellectual Property and any associated documentation, to deal in the Intellectual Property without restriction (except as set forth below), including without limitation the rights to implement, use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Intellectual Property, and to permit persons to whom the Intellectual Property is furnished to do so, provided that all copyright notices on the intellectual property are retained intact and that each person to whom the Intellectual Property is furnished agrees to the terms of this Agreement.

If you modify the Intellectual Property, all copies of the modified Intellectual Property must include, in addition to the above copyright notice, a notice that the Intellectual Property includes modifications that have not been approved or adopted by LICENSOR.

THIS LICENSE IS A COPYRIGHT LICENSE ONLY, AND DOES NOT CONVEY ANY RIGHTS UNDER ANY PATENTS THAT MAY BE IN FORCE ANYWHERE IN THE WORLD.

THE INTELLECTUAL PROPERTY IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE DO NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE INTELLECTUAL PROPERTY WILL MEET YOUR REQUIREMENTS OR THAT THE OPERATION OF THE INTELLECTUAL PROPERTY WILL BE UNINTERRUPTED OR ERROR FREE. ANY USE OF THE INTELLECTUAL PROPERTY SHALL BE MADE ENTIRELY AT THE USER’S OWN RISK. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY CONTRIBUTOR OF INTELLECTUAL PROPERTY RIGHTS TO THE INTELLECTUAL PROPERTY BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM ANY ALLEGED INFRINGEMENT OR ANY LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR UNDER ANY OTHER LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH THE IMPLEMENTATION, USE, COMMERCIALIZATION OR PERFORMANCE OF THIS INTELLECTUAL PROPERTY.

This license is effective until terminated. You may terminate it at any time by destroying the Intellectual Property together with all copies in any form. The license will also terminate if you fail to comply with any term or condition of this Agreement. Except as provided in the following sentence, no such termination of this license shall require the termination of any third party end-user sublicense to the Intellectual Property which is in force as of the date of notice of such termination. In addition, should the Intellectual Property, or the operation of the Intellectual Property, infringe, or in LICENSOR’s sole opinion be likely to infringe, any patent, copyright, trademark or other right of a third party, you agree that LICENSOR, in its sole discretion, may terminate this license without any compensation or liability to you, your licensees or any other party. You agree upon termination of any kind to destroy or cause to be destroyed the Intellectual Property together with all copies in any form, whether held by you or by any third party.

Except as contained in this notice, the name of LICENSOR or of any other holder of a copyright in all or part of the Intellectual Property shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Intellectual Property without prior written authorization of LICENSOR or such copyright holder. LICENSOR is and shall at all times be the sole entity that may authorize you or any third party to use certification marks, trademarks or other special designations to indicate compliance with any LICENSOR standards or specifications. This Agreement is governed by the laws of the Commonwealth of Massachusetts. The application to this Agreement of the United Nations Convention on Contracts for the International Sale of Goods is hereby expressly excluded. In the event any provision of this Agreement shall be deemed unenforceable, void or invalid, such provision shall be modified so as to make it valid and enforceable, and as so modified the entire Agreement shall remain in full force and effect. No decision, action or inaction by LICENSOR shall be construed to be a waiver of any rights or remedies available to it.

i. Abstract

This OGC discussion paper provides an extension module of OGC IndoorGML for managing spatial-temporal information of Point-of-Interest (POI) data. POI data, also sometimes cited as “Feature of Interest,” “Object of Interest,” or “Landmarks” in some literature, is one of the most fundamental requirements for indoor Location-Based Services (LBS). This discussion paper aims to try to define the types of POIs in the indoor space and develop an extension module to integrate POIs with the core model of OGC IndoorGML. Moreover, this document shows two use-cases of how to adapt the POI extension of IndoorGML to develop a data model to support the management of the POI information in OGC IndoorGML and supplement existing POIs for a more suitable standard in creating such features in the indoor space to increase utilization and development of indoor location-based services. This document has use-cases to show the possibilities of the proposed model.

ii. Keywords

The following are keywords to be used by search engines and document catalogues.

ogcdoc, OGC, IndoorGML, Indoor space, Spatial-Temporal data, Point of Interest

iii. Preface

Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.

Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.

iv. Submitting organizations

The following organizations submitted this Document to the Open Geospatial Consortium (OGC):

  1. National Institute of Advanced Industrial Science and Technology,

  2. The University of Seoul, and

  3. All for Land Inc.

v. Submitters

All questions regarding this submission should be directed to the editor or the submitters:

Name

Affiliation

Kyong-Sook Kim

National Institute of Advanced Industrial Science and Technology

Teahoon Kim

National Institute of Advanced Industrial Science and Technology

Jiyeong Lee

The University of Seoul

In-Hye Park

The University of Seoul

Hye-Young Kang

All for Land Inc.

1. Scope

The scope of this discussion paper is to investigate types of Point of Interest (POI) data in indoor space and propose a conceptual model to harmonize the POI information with the IndoorGML core and navigation modules. In particular, this document focuses on the management of spatial (and non-spatial) history of indoor POI features. The paper covers the following scope:

  • Points of Interest Feature Types;

  • A Conceptual model to extend IndoorGML schema for indoor POI; and

  • Use cases in home navigation and hospital facility management.

2. References

The following normative documents contain provisions that, through reference in this text, constitute provisions of this document. For dated references, subsequent amendments to, or revisions of, any of these publications do not apply. For undated references, the latest edition of the normative document referred to applies.

OGC: OGC 14-005r5, OGC® Indoor Geography Markup Language (IndoorGML) 1.0.3 (2014)

ISO: ISO 12006-2:2015, Building construction — Organization of information about construction works — Part 2: Framework for classification (2015)

3. Terms and Definitions

This document uses the terms defined in the OGC® IndoorGML [OGC 14-005r5]. In addition, the following terms and definitions apply.

3.1. indoor POI

a feature whose location is identified by name and characterized by type

3.2. indoor POI space

limited two- or three-dimensional extent defined physically or notionally by POI in indoor space

3.3. indoor POI location

identifiable part of indoor space by a POI

4. Conventions

This section provides details and examples for any conventions used in the document. Examples of conventions are symbols, abbreviations, use of XML schema, or special notes regarding how to read the document.

4.1. Abbreviated terms

The following abbreviated terms are used in this Discussion Paper:

CRS

Coordinate Reference System

GML

Geography Markup Language

IndoorGML

Indoor Geographic Markup Language

ISO

International Organization for Standardization

LBS

Location-Based Service

OGC

Open Geospatial Consortium

POI

Point of Interest

UML

Unified Modeling Language

W3C

World Wide Web Consortium

5. Indoor Points of Interest (POI)

With the dramatic improvement of indoor mapping and positioning technologies, location-based services (LBS) have started to extend their coverages to indoor spaces, in addition to outdoor spaces. The concept of Indoor POI is necessary to support various indoor applications and services, including route navigation, facility management, and evacuation simulation. This Discussion Paper aims to propose a data model that describes POI in the indoor environment, considering its various spatial and temporal aspects, based on a previously proposed spatial-temporal model for POI.

5.1. The Point of Interest

POIs such as restaurants, parking lots, and hotels, are one of the fundamental features for map-related data in navigation systems. In ISO 24099:2011, POI data is defined as "destination and/or site of interest to travellers (such as restaurants)." In order to represent POIs, ISO 14825:2011 Geographic Data Files (GDF) define a conceptual data model of the Services Feature Theme as market-oriented features. Service is "a generic term for an activity at a specific location," such as airports, toll locations, banks, and tourist attractions. Another specification of Point Of Interest eXchange Language Specification (POIX) for exchanging POI information is established by the Mobile Information Standard Technical Committee (MOSTEC), which is an industry group of automobile manufacturers, car navigation manufacturers, and mobile terminal manufacturers.

OGC also has included POI data in Standards that include an abstract data model and encoding formats. The definition of POI provided by the OGC OpenLS Standard is “A location (with a fixed position) where one can find a place, product or service, typically identified by name rather than by address and characterized by type, which may be used as a reference point or a target in a location based service request, e.g., as the destination of a route [OGC 07-074].” Since 2013, OGC officially approved POI SWG (currently inactive) to contribute to developing OGC Standards related to POIs based on the draft specification developed by the World Wide Web Consortium (W3C) POI Working Group (WG). The W3C POI had tried to design a general data model for the representation of POI information on the Web and released the first Public Working Draft of W3C POI Core on 12 May 2011. The W3C POI extended the POI definition of "a location about which information is available" to cover a wide variety of applications such as augmented reality (AR) browsers, mobile games, geocaching, and digital mapping, not only for navigation systems.

Note

W3G POI Core: The term "location" is used to refer to a geographical construct, a physically fixed point, typically on the surface of the Earth (relative to WGS-84), though locations can be relative to another coordinate system. Locations can be a single point, a centroid, a minimum bounding rectangle, or a set of vectors. A location should be persistent over time and does not change.

There are several ways to reference a location. A typical representation is indicated by direct coordinates in which geometry can be represented. However, human beings better understand a location with a name or an identifier like address than providing its coordinates. W3G POI Core defines 8 types of geo-references: Center (the center point of the POI), Navigation Point (the logical destination point for routing), Address (a civic address such as mailing or street address), Route, Area (a line-bounded area), Object (a rich and flexible description of an object including a 3D object like a building), Undetermined (a location that as of yet is determined), and Relative (distance from and bearing to another location).

In ISO, two standards ISO 19112:2019 and ISO 19155:2012 define spatial references by identifiers. ISO 19112:2019 establishes "a general model of for spatial referencing using geographic identifiers and the components of a spatial reference system. It also specifies a conceptual scheme for a gazetteer." ISO 19155:2012 defines mechanisms to match multiple Place Identifiers (PI) to the same place, in which an identifier of a place (not only in the real world but also those in the virtual world) is referred to as a PI. Also, OGC Gazetteer Service defines the information model for gazetteer data from ISO 19112, and the web service information request model from OGC’s Web Feature Service (WFS) to define "the Gazetteer Service - Application Profile of the Web Feature Service Implementation Specification as a OGC Best Practice OGC 11-122r1. The OGC gazetteer service implements the ISO abstract data model in XML using the OGC Geography Markup Language (GML) standard, and describes how to make web requests for information from the gazetteer using WFS."

Even though POI is an essential feature in positioning and human-oriented geographic information, there is no specification of a general-purposed model and encoding formats for sharing POI data, especially in indoor space. Also, many industries individually create and manage POI data with their own models and formats, and those POI data are duplicated and not generally interoperable among different organizations. For example, 70% of the 3 Million POIs being maintained by 12 private companies have overlap in Korea [12].

5.2. Definition of Indoor POI

The primary purpose of this Discussion Paper is how to attach POI information into OGC IndoorGML. A POI typically describes a location where one can find any entity identified by name and characterized by type. This paper defines a POI that describes a named feature with the following mandatory properties:

  • an identifier;

  • one or more labels;

  • one or more locations; and

  • a category.

5.2.1. Identifiers

A POI has an identifier that uniquely, and permanently designates a POI instance. It is represented by linguistically independent sequence of characters.

5.2.2. Labels

A label is the term by which POI may be referred. It is an alphanumeric string which represents the human-interpretable name of something and shall have a natural-language meaning. A POI may have multiple labels, such as A1 seat or vip seat.

5.2.3. Locations

The most common way of expressing a POI location is as a point or geometry potentially occupied in any space. Here, an indoor POI is located at a point location attached to an indoor space when it is installed or equipped. However, the indoor POI location can be classified into two types: navigable and non-navigable location [13]. A navigable location is a space where an object or person can move through/within and a non-navigable location indicates an obstacle space where an object or person can not pass.

Figure 1 shows examples of navigable location and non-navigable locations in a subway station. Figure 1(a) is a ticket gate as a navigable location, through which passengers pass. However, a ticket machine, as shown in Figure 1(b), does not allow a person to move through it. Both POI locations are essential features that can be the source or destination point of a navigation route. Also, many navigable locations of POI often have their constraint on the accessibility time, such as operating time of automated teller machines (ATM). Finally, a POI is understood to have acquired a new location when it physically moves. As a result, the management of the spatio-temporal locations of indoor POIs need to be considered with the availability of navigation in the model schema.

5.2.4. Categories

A category describes a functional type of POI. For example, ISO 14825:2011 GDF specifies 97 class types of a Services Feature with a flat structure, e.g., Vehicle Repair Facility, Petrol Station, Rent a Car Pick Up/Return, Parking Garage, Hotel or Motel, Zoo, Museum, and Swimming Pool. As an example, in industry, ESRI divides indoor POI data into two logical categories of level 1 and level 2 to search and locate indoor POIs such as facilities, people, and events. IMDF defines a POI as a generic term that collectively refers to Amenity and Occupant (via Anchor) feature types.

ESRI Indoor POI Types

  • Places + Things: Unit centroids or indoors addresses for noncommercial locations inside (or outside) a facility. These can be ATMs, auditoriums, restrooms, elevators, or other Unit use types. This can also include fountains, art pieces, or other landmarks that people may want to find.

  • Retails + Services: Indicates where on the map you can purchase goods or services, or make other financial transactions. Examples include gas stations, stores, restaurants, or ATMs.

  • Safety + Security: Indicates where equipment, first aid, exits, and other emergency or safety-related resources are located.

  • Events: Time-enabled POIs that typically have a start time, end time, and some descriptive information about the type of event.

Indoor Mapping Data Format (1.0.0.rc.1)

  • An Amenity models the physical presence and approximate point location of a pedestrian amenity that serves a utilitarian purpose or other convenience that serves to enhance the pedestrian “experience.”

  • An Occupant models the presence and location (via Anchor) of a business entity that trades goods and/or services.

  • An Anchor represents the curated Point used as the preferred display location of a specific Address OR non-addressable device, service, equipment, or physical environment. In both cases, the record serves as the anchoring point from which another feature (i.e., Occupant) can derive, reference, or inherit the Anchor’s attribution.

This discussion paper refers to the classification systems UniClass 2015 aligned with ISO 12006-2 that defines "a framework for the development of built environment classification systems." Table 1 shows recommended classification systems given by ISO 12006-2 and their mapping in the UniClass classification.

Table 1. Recommended classification systems of ISO 12006-2 and its mapping tables in UniClass 2015
ISO Class Definition UniClass

CLASSES RELATED TO RESOURCE

Construction information

"information of interest in a construction process"

Form of information (Table FI)

Construction product

"product intended to be used as a construction resource"

Products (Table Pr)

Construction agent

"human construction resource carrying out a construction process"

Roles (Table Ro)

Construction aid

"construction resource intended to assist in carrying out a construction process"

Tools and Equipment (Table TE)

CLASSES RELATED TO PROCESS

Management

"control activity in a construction process by one or more construction agents"

Project Management (Table PM)

Construction process

"process which uses construction resources to achieve construction results"

-

CLASSES RELATED TO RESULT

Construction complex

"aggregate of one or more construction entities intended to serve at least one function or user activity"

Complex (Table Co)

Construction entity

"independent unit of the built environment with a characteristic form and spatial structure, intended to serve at least one function or user activity"

Entities (Table En)

Built space

"space defined by built or natural environment or both, intended for user activity or equipment"

Spaces/locations (Table SL)

Construction element

"constituent of a construction entity with a characteristic function, form, or position"

Elements/functions (Table EF)

Systems (Table Ss)

Work result

"view of construction result by type of work activity and resources used"

-

CLASSES RELATED TO PROPERTY

Construction property

"property of a construction object"

-

Uniclass provides a comprehensive classification and an implementation of ISO 12006-2 to support all processes and information in the construction industry. A classification code is defined with the hierarchical structure of (Group, Sub Group, Section, Object).

In this Discussion Paper, the following items are considered as the base-types of POI category.

  • Complexes: describes "a project in overall terms. It can be a private house with garden, drive, garage and tool shed, or it can be a University campus with buildings for lecturing, administration, sport, halls of residence, etc. Rail networks and airports are also all examples of complexes."

  • Entities: are "discrete things like buildings, bridges, tunnels etc. They provide the areas where different activities occur. Within the holiday village above is a restaurant which is an Entity."

  • Spaces and Locations: "Building spaces are provided for various activities to take place. In some cases a space is only suitable for one activity, for example a kitchen, but a school hall may be used for assemblies, lunches, sports, concerts and dramas."

  • Activities: defines "what user activities are accommodated in the complex, entity or space. For example a prison complex provides a Detention activity at a high level, but can also be broken down into individual activities like exercise, sleeping, eating, working, etc."

  • Elements and Functions: "Elements are the main components of a building (floors, walls and roofs) or of a structure like a bridge (foundations, piers, deck). Functions are the building services to be provided and managed."

  • Systems: "Systems are collections of products, for example, a system for a timber pitched roof includes timber structural members, boards, fastenings, etc.; and a low temperature hot water heating system includes a boiler, pipework, tank, radiators, etc."

  • Products: "The individual products used to construct a system can be specified, e.g. joist hangers, terrazzo tiles, gas fired boilers."

In addition, two extra categories are added into the POI categories as follows.

  • Events: are data related to a thing that happens and associated with a space/location, such as advertisement, early warning notification, accidents, and outage information.

  • Agents: are objects or persons participated in indoor space with a specific role, such as autonomous delivery robots, CCTV installer, room cleaners, and employers.

Figure 2 shows the types of POI category used in this Discussion Ppaper.

Note

The types of POI category are dependent on the application. This discussion paper shows only an example of defining POI category types based on ISO 12006-2.

poitypes
Figure 2. Examples of indoor POI category types

6. Indoor POI extension module in IndoorGML

OGC IndoorGML is the OGC Standard that specifies data models and GML encoding of indoor geospatial information for navigation systems. IndoorGML focuses on the topological connectivity of indoor space, as well as the geometric representation. IndoorGML provides a broad definition of indoor spaces' expression and structure, but POIs (such as an event, facility, furniture, and installation) are out of the scope of the Standard. However, the absence of POI information in indoor space brings the limitation of standard implementation and usability. Therefore, this paper discusses how to extend an IndoorGML model to harmonize the indoor spaces and the spatial-temporal history of indoor POI.

6.1. IndoorGML Core Module

IndoorGML provides a standard data model for indoor space with two spatial models, as shown in Figure 3: Euclidean Space represents the shape of a three-dimensional (3D) cell space; Topology Space represents the connectivity between cell spaces. Topology represents a duality transformation of the 3D cell space and is an essential component for indoor navigation and routing system. By applying a duality transformation, the 3D cells in primal space are mapped to nodes (0D) in dual space. The topological adjacency relationships between 3D cells are transformed to edges (1D) linking pairs of nodes in dual space. Therefore, IndoorGML utilizes a network model for navigation and expresses the connectivity relationships among cell spaces. The nodes of the indoor network represent rooms, corridors, doors, elevators, and staircases. The edges of the indoor network represent the topological relationships among indoor spatial entities and can indicate the paths of pedestrian movement between nodes within a building. Therefore, one edge should be represented by two nodes. The network model in IndoorGML is represented by nodes (as called State) and edges (as called Transition) feature, as shown in Figure 4.

indoorgml
Figure 3. Structure space model (OGC 14-005r5, IndoorGML)
indoorgmlmodel
Figure 4. Part of IndoorGML Core module UML diagram (OGC 14-005r5, IndoorGML)

6.2. The conformance requirements of the IndoorGML Core Module

When POIs represent 3D models of indoor environments, each POI occupies a certain space. Suppose that there are several objects in a bathroom, as shown in Figure 5(a), and an application wants to consider them as POIs of service, as shown in Figure 5(b). In order to represent those POI spaces in a IndoorGML document, they can be defined as instances of class CellSpace of IndoorGML core module. However, it brings a conflict with the conformance requirements of the IndoorGML Core Module if the CellSpace bathroom is in the same SpaceLayer instance of POIs. IndoorGML constrains to avoid the overlap of the instances of class CellSpace in the same layer of SpaceLayer. The following requirements are required to confirm to the Conformance Requirements of the IndoorGML Core Module.

  • Requirement 1: The instances of CellSpace belonging to the same instance of SpaceLayer shall not overlap.

  • Requirement 2: When a CellSpace instance is divided into a set of subspaces, the subspace instances shall not belong to the same SpaceLayer instance of the original CellSpace instance but form a new SpaceLayer instance.

  • Requirement 3: Every instance of InterLayerConnection shall connect two State instances, each of which belongs to different space layers.

If the cell spaces of POIs and bathroom in the same layer, the requirements are violated. To satisfy the requirements, the cell space of the bathroom has to be assigned with the space other than the POIs cell spaces, as shown in Figure 5(c). However, the application requires the high cost for calculating the cell geometry with holes where POIs are located and managing the information whenever the location of a POI is changed. As a result, a separate space layer to define cell spaces of POIs is required for the management of indoor POIs in IndoorGML documents.

bathroom
Figure 5. Example of POIs in a bathroom

6.3. UML diagram of indoor POI extension module

In order to satisfy the IndoorGML conformance requirements, a POI layer is defined as a separate SpaceLayer instance from the SpaceLayer instance to describe the topological indoor spaces such as rooms, stairways, and doors. For example, a POI SpaceLayer instance is defined separately and its POI State is connected with room State via InterLayerConnection, as shown in Figure 6. In this case, the geometry of the room does not to need change even if some POI has moved to another place.

poilayer
Figure 6. Defining IndoorPOI SpaceLayer and linking with topographical SpaceLayer via InterLayerConnection

Figure 7 illustrates a new package of POI, called IndoorPOI, as a thematic extension module with the dependency relationships among IndoorGML modules. Even though a POI is useful information for a navigation service, it is not restricted for use in navigation services. Various location-based services such as mobile advertising, location tagging of social networks, and indoor object searching take advantage of the human-friendly representation of the location with POIs. For supporting a wide area of indoor services, this Discussion Paper defines the IndoorPOI module as a separated module from IndoorNavigation. The IndoorPOI module is specified by an XML Schema definition file and is defined within an individual and globally unique XML target namespace as shown in Table 2.

poipackage
Figure 7. UML Package diagram
Table 2. IndoorPOI Module and Namespace Identifier
Module Name IndoorGML POI (IndoorPOI)

XML Namespace Identifier

XML Schema File Name

indoorPOI.xsd

Namespace Prefix

IndoorPOI

Module Description

The IndoorPOI module defines the semantic extension of IndoorGML core module to represent the POI information. It also includes the schema definitions of the classes to handle spatio-temporal POI information.

The UML diagram depicted in Figure 8 shows the data model of the IndoorPOI module based on the IndoorGML core module. The IndoorPOI module consists of six elements: IndoorPOI, IndoorPOIState, IndoorPOISpace, TopoLayerConnection, IndoorPOIAttribute, and POICode.

inpoimodel
Figure 8. UML diagram of elements of the indoorPOI module based on IndoorGML

6.3.1. <IndoorPOI>

The IndoorPOI class is the main element in the IndoorPOI module representing a POI feature in the indoor space. It has four attributes of id, labels, category, and attributes. The id and labels attribute is the identifier and name of the indoor POI, respectively. The category attribute represents a general classification code of the indoor POI, e.g., the classification scheme described in Section 5.2. The attributes attribute is a set of user-defined properties that application require. This Discussion Paper focuses on the spatio-temporal changes of the POI’s location. For that, the location information of a POI is represented by at least one or more located associations with IndoorPOIState. Also, the IndoorPOI class may have more than zero occupying associations with IndoorPOISpace to mean the occupying space by POI itself, such as boxes in an IndoorPOI SpaceLayer shown in Figure 6. The occupying is optional, but one must be careful if the IndoorPOI instances have occupying spaces. Because of the Conformance Requirements of IndoorGML Core Module, "The instances of CellSpace belonging to the same instance of SpaceLayer shall not overlap," there is no overlap space among the occupying spaces of the IndoorPOI instances defined in the same layer. Finally, The IndoorPOI class may explain its hierarchical relationship between instances with parent and child attributes. Each IndoorPOI instance can have zero or one parent, and more than zero child POIs. These parent and child attributes may represent a spatial hierarchy or detail levels. Schema 1 shows an XML encoding schema for the IndoorPOI class.

Schema 1. IndoorPOI XML Schema
<xs:element name="IndoorPOI" type="IndoorPOIType" substitutionGroup="gml:AbstractFeature"/>
<!-- ====================================================================== -->
<xs:complexType name="IndoorPOIPropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="IndoorPOI"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>
<!-- ====================================================================== -->
<xs:complexType name="IndoorPOIType">
    <xs:complexContent>
        <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
                <xs:element name="id" type="xs:string"/>
                <xs:element name="labels" type="xs:string" maxOccurs="unbounded"/>
                <xs:element name="category" type="POICodeType"/>
                <xs:element name="located" type="IndoorPOIStatePropertyType" maxOccurs="unbounded"/>
                <xs:element name="occupying" type="IndoorPOISpacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="attributes" type="IndoorPOIAttributePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="highLevel" type="IndoorPOIPropertyType" minOccurs="0"/>
                <xs:element name="lowLevel" type="IndoorPOIPropertyType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="gml:AggregationAttributeGroup"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

6.3.2. <IndoorPOIState>

IndoorPOIState represents a specific position where a POI is located at a time interval limited by two instants. To represent the position of a POI, the IndoorPOIState instance has a geometry attribute derived from the State class, having a gml:Point instance and the POI located at the position is associated via poi. An IndoorPOIState instance is associated with only one IndoorPOI instance.

Note
The geometry attribute of the State class is optional in the IndoorGML Core module, but the IndoorPOI module overrides it as mandatory.

The beginTime and endTime attributes represent a valid time interval of the position. The associated POI exists only during the interval from beginTime and endTime. A sequence of IndoorPOIState instances whose poi indicates the same IndoorPOI instance implies the history of location information changes of the POI.

Note
When a POI is static or newly created, this paper assumes that endTime is “now”. Thus, if the POI moves to another position at a certain time, the endTime value should be updated with a specific time instant. There is a temporal order between IndoorPOIState instances with beginTime. If two IndoorPOIState instances have the same values of their beginTime, then the order is the same as endTime. A POI cannot have two positions at the same time.

The navigable attribute has one of true or false values representing the POI type of navigation, as illustrated by Figure 1; e.g., the vending machine is not navigable, but the ticket gate is usually navigable. This means that the POI space (i.e., the IndoorPOISpace instance) associated by its duality attribute has space through which people (or robots) can move. Finally, the attached attribute plays a role in connecting the spatio-temporal position of a POI with an indoor space of IndoorGML Core or IndoorNavigation modules. If any value does not have the attached attribute, it means the POI position is not accessible from any indoor space, such as a room, corridor, and door. Schema 2 shows an XML encoding schema for the IndoorPOIState class.

Schema 2. IndoorPOIState XML Schema
<xs:element name="IndoorPOIState" type="IndoorPOIStateType" substitutionGroup="IndoorCore:State"/>
<!-- ====================================================================== -->
<xs:complexType name="IndoorPOIStatePropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="IndoorPOIState"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>
<!-- ====================================================================== -->
<xs:complexType name="IndoorPOIStateType">
    <xs:complexContent>
        <xs:extension base="IndoorCore:StateType">
            <xs:sequence>
                <xs:element name="validTime" type="gml:TimePeriodPropertyType"/>
                <xs:element name="navigable" type="xs:boolean"/>
                <xs:element name="prev" type="IndoorPOIStatePropertyType" minOccurs="0"/>
                <xs:element name="next" type="IndoorPOIStatePropertyType" minOccurs="0"/>
                <xs:element name="poi" type="IndoorPOIPropertyType"/>
                <xs:element name="interConnect" type="AttachmentPropertyType" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

6.3.3. <IndoorPOISpace>

Class IndoorPOISpace inherited from CellSpace represents the indoor space occupied by a POI. An associated geometry object corresponds to a 2D area or 3D space as purely geometric shapes of the POI. Although IndoorPOIState can represent the POI existence, it does not describe how much space each POI occupies. The POI’s own space is essential for supporting safe navigation or changing the location. For example, a navigation application for wheelchair users requires the indoor free/navigable space exclude the POI-occupying spaces, as shown in Figure 5 (c). Schema 3 shows an XML encoding schema for the IndoorPOISpace class.

Schema 3. IndoorPOISpace XML Schema
<xs:element name="IndoorPOISpace" type="IndoorPOISpaceType" substitutionGroup="IndoorCore:CellSpace"/>
<!-- ====================================================================== -->
<xs:complexType name="IndoorPOISpacePropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="IndoorPOISpace"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>
<!-- ====================================================================== -->
<xs:complexType name="IndoorPOISpaceType">
    <xs:complexContent>
        <xs:extension base="IndoorCore:CellSpaceType">
            <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

6.3.4. <TopoLayerConnection>

The TopoLayerConnection class is a sub-class of InterLayerConnection to specify a topological relationship between a POI position (IndoorPOIState) and an indoor space (State); e.g., when a bed is included in a room. Thus, the inherited attribute typeOfTopoExpression should be assigned with a typeOfTopoExpressionCode instance. In this paper, the instances of elements in the IndoorPOI module should be defined as the separated layers of IndoorGML Core or IndoorNavigation to keep the IndoorGML constraint described in Section 6.2. The TopoLayerConnection class has a State and an IndoorPOIState instance reference as topoConnect and poiConnect attributes, respectively. This class can also allow a geometry object for the pathGeometry attribute to denote a path curve that is the route information for accessing a POI from an indoor space. Schema 4 shows an XML encoding schema for the TopoLayerConnection class.

Schema 4. TopoLayerConnection XML Schema
<xs:element name="Attachment" type="AttachmentType" substitutionGroup="IndoorCore:InterLayerConnection"/>
<!-- ====================================================================== -->
<xs:complexType name="AttachmentPropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="Attachment"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>
<!-- ====================================================================== -->
<xs:complexType name="AttachmentType">
    <xs:complexContent>
        <xs:extension base="IndoorCore:InterLayerConnectionType">
            <xs:sequence>
                <xs:element name="inState" type="IndoorCore:StatePropertyType"/>
                <xs:element name="poiState" type="IndoorPOIStatePropertyType"/>
                <xs:element name="pathGeometry" type="gml:CurvePropertyType" minOccurs="0"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

6.3.5. <IndoorPOIAttribute>

IndoorPOIAttribute is used to describe the indoor POI properties that are required for applications to manage. The attributeName attribute represents a property name, e.g., "openDate", "owner", or "capability". The valueHistory and updateHistory attributes are for managing the update information over time, having the same number of elements in each array. For the values in updateHistory, the time positions are in order, and each time position is coupled with a value in valueHistory with the same order. Schema 5 shows an XML encoding schema of the IndoorPOIAttribute type.

Schema 5. IndoorPOIAttribute XML Schema
<xs:element name="IndoorPOIAttribute" type="IndoorPOIAttributeType"/>
<!-- ====================================================================== -->
<xs:complexType name="IndoorPOIAttributePropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="IndoorPOIAttribute"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>
<!-- ====================================================================== -->
<xs:complexType name="IndoorPOIAttributeType">
    <xs:complexContent>
        <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
                <xs:element name="attributeName" type="xs:string"/>
                <xs:element name="attributeValue" type="xs:anyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="createDate" type="gml:TimePositionType"/>
                <xs:element name="updateDates" type="gml:TimePositionType" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="gml:AggregationAttributeGroup"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

6.3.6. <POICode>

POICode is the CodeList to classify the functional type of POI, as defined in Categories(5.2.4). Schema 6 shows an XML encoding schema of the POICode type.

Schema 6. POICode XML Schema
<xs:simpleType name="POICodeType">
    <xs:union memberTypes="POICodeEnumerationType POICodeOtherType"/>
</xs:simpleType>
<!-- ====================================================================== -->
<xs:simpleType name="POICodeEnumerationType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Complexes"/>
        <xs:enumeration value="Entities"/>
        <xs:enumeration value="Spaces and Locations"/>
        <xs:enumeration value="Activities"/>
        <xs:enumeration value="Elements and Functions"/>
        <xs:enumeration value="Systems"/>
        <xs:enumeration value="Products"/>
        <xs:enumeration value="Events"/>
        <xs:enumeration value="Agents"/>
        <xs:enumeration value="Unknown"/>
    </xs:restriction>
</xs:simpleType>
<!-- ====================================================================== -->
<xs:simpleType name="POICodeOtherType">
    <xs:restriction base="xs:string"/>
</xs:simpleType>

6.4. Management of spatio-temporal information of POIs

The IndoorPOI module supports two approaches to manage spatio-temporal information for POIs: POI-based and Location-based. The POI-based approach handles the history of positions of an identified POI. For example, the POI called "Woori Bank Jongro Branch" was located on "xx, Jong-ro 2-ga, Jongno-gu, Seoul" from May 1, 2011, to March 30, 2013. Then the POI moves to "00. Eulji-ro 2-ga, Jung-gu, Seoul" from April 1, 2013 and is still located in the same position. In the data model shown in Figure 8, an IndoorPOI instance has an association with more than one IndoorPOIState instance via located. The Location-based approach is the management of changes of POI at the fixed location. For example, "Kookmin Bank Jong-ro Branch" was located at the position of "xx, Jong-ro 2-ga, Jongno-gu, Seoul" after "Woori Bank Jongro Branch" moved to "00. Eulji-ro 2-ga, Jung-gu, Seoul". The IndoorPOIState instance has a geometry object to represent a position. Thus, the history of POI change of the location can be interpreted with the set of poi values of IndoorPOIState in temporal order. The next section will describe more detailed examples with use cases.

7. Use-cases

For better understanding, this document provides use-cases for the IndoorPOI module. This section shows how to make IndoorPOI (and IndoorGML core) data via sample data describes several issues and solutions, which can commonly occur in 2D.

7.1. The cases of the mansion

Figure 9 is a floor plan of sample data. There are various indoor POIs, such as a desk, bed, chair, restroom, etc. In this case, we distinguish indoor POIs by size and moving frequency. For example, the bed is relatively big and rarely moved, but the chair is relatively small and frequently moved.

usecasefloorplan
Figure 9. Example of a floor plan of sample data.[1]

This example is quite complex; therefore, we focused on one room, as Figure 10. Figure 10 (a) describes the coordinates of indoor POIs and the room. Figure 10 (b) represents the TopoLayerConnection that inherits InterLayerConnection class and expresses the relationship between the topographical and indoorPOI layers. The InterLayerConnection may represent one of the following spatial relationships by typeOfTopoExpression attribute; CONTAINS, CROSSES, EQUALS, OVERLAPS, INTERSECTS, or WITHIN. Normally, indoor POI has a "WITHIN" relationship with topographical space (or topographical space has a "CONTAINS" relationship with indoor POIs). The part of the IndoorGML document for Figure 10 is shown below as Example 1. This document is combined with the IndoorGML core module and IndoorPOI module. Especially in the IndoorPOI module, some parts are inherited from IndoorGML core, as shown in Example 1; IndoorPOIState and IndoorPOISpace can represent the geometry of POI via an attribute of IndoorGML core class.

usecasefloorplanpart
Figure 10. Part of the sample floor plan (focus on a room ‘A’)
Example 1. Part of poi_sample.gml
<gml:FeatureCollection xmlns:gml="http://www.opengis.net/gml/3.2"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:core="http://www.opengis.net/indoorgml/1.0/core"
    xmlns:navi="http://www.opengis.net/indoorgml/1.0/navigation"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.opengis.net/indoorgml/1.0/poi"
    xsi:schemaLocation="http://www.opengis.net/indoorgml/1.0/core http://schemas.opengis.net/indoorgml/1.0/indoorgmlcore.xsd
    http://www.opengis.net/indoorgml/1.0/navigation http://schemas.opengis.net/indoorgml/1.0/indoorgmlnavi.xsd
    http://www.opengis.net/indoorgml/1.0/poi indoorPOI.xsd">
    <gml:featureMembers>
        <core:IndoorFeatures gml:id="IFs">
            <core:primalSpaceFeatures>
                <core:PrimalSpaceFeatures gml:id="PSs">
                    <core:cellSpaceMember>
                        <core:CellSpace gml:id="CS1">
                            <gml:name>Room1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 15 15 15 255 255 255 255 270 320 270
                                                  320 255 450 255 420 130 380 130 380 15 15 15
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#S1"/>
                        </core:CellSpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS1">
                            <gml:name>Wardrobe</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 15 15 110 15 110 85 110 15 15 15
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL1"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                </core:PrimalSpaceFeatures>
            </core:primalSpaceFeatures>
            <core:multiLayeredGraph>
                <core:MultiLayeredGraph gml:id="MLG1">
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_Topology">
                                <core:nodes>
                                    <core:stateMember>
                                        <core:State gml:id="S1">
                                            <core:duality xlink:href="#CS1"/>
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 210 130 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                        </core:State>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL1">
                                            <core:duality xlink:href="#IPS1"/>
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 65 40 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP1"/>
                                            <attached xlink:href="#AT1"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:interEdges>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT1">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL1"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL1"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                    </core:interEdges>
                </core:MultiLayeredGraph>
            </core:multiLayeredGraph>
        </core:IndoorFeatures>
        <IndoorPOI gml:id="IP1">
            <id>Wardrobe</id>
            <labels>Wardrobe</labels>
            <category>Products</category>
            <located xlink:href="#IPL1"/>
            <occupying xlink:href="#IPS1"/>
        </IndoorPOI>
    </gml:featureMembers>
</gml:FeatureCollection>

In this case, overlapping space issues remain. As we mentioned in Section 6.2, IndoorGML standards don’t allow for the instance of CellSpace belonging to the same instance of SpaceLayer to overlap. IndoorPOI module solves this issue by making different SpaceLayer (POI SpaceLayer) and Attachment instances.

However, as shown in Figure 11, occupied spaces of POI (chair, desk, TV) can be overlapped in the POI space layer. The occupied space of POIs doesn’t overlap in 3D space but can overlap in 2D space. This is a natural 3D situation. However, the problem is that the IndoorGML core module does not allow this case. There are four solutions to solving this problem as below.

usecaseoverlapissue
Figure 11. Example of occupied space of indoor POIs overlapping issue
  • The first solution is making 3D geometry for non-overlapped occupied space in the same SpaceLayer instance. This is the most fundamental solution to the problem. However, some users do not want this solution because the cost to construct 3D geometry is relatively high.

  • The second solution is separating the POI layer if there is an overlapped space. There is no specific rule for making a SpaceLayer instance. In this Discussion Paper, we divide the POI layer via the characteristic of POIs, e.g., size of POI, moving frequency, the role of POI, etc. Figure 12 shows the divided results by the size of POI and the role of POI.

  • The third solution is using a grid-based space layer with other space layers. In this case, the geometry representation entrusts the grid-based SpaceLayer instance, and additional semantic information can be expressed with a different SpaceLayer instance. For example, as shown in Figure 13, room ‘A’ is divided with grid cells. If we focus on a small part of room ‘A’ (red rectangle), all states in the red box have an interlayer connection with Room state in a different layer. Also, they have had interlayer connections with other states (Desk, Chair, TV) if the grid state has other properties. In this case, the state that represents property does not need CellSpace instance.

  • The last solution is not to make an occupied space of POI. IndoorPOISpace is an optional property of IndoorPOI. Therefore, we can escape an overlapping space issue using only IndoorPOIState as the location of POI.

usecaseseparate
Figure 12. Separate POI layer via a characteristic of POIs
usecasegridlayout
Figure 13. Using grid layout

IndoorPOI can have spatial-hierarchy using parent (and child). The POI can be not only a small object but also a huge place. For example, a room contains several objects located in the room, in Figure 14. In this case, we can denote that a room as parent, and others as child. Also, we can express these relationships with typeOfTopoExpression of TopoLayerConnection. Note that TopoLayerConnection can be used when inState and inPOI belong to different SpaceLayer. Unlike this, parent and child can be used regardless of SpaceLayer. We can check the related example documents in Example 2.

usecaseonlypoi
Figure 14. Using only POIState, not with POISpace
Example 2. Part of only_poi_sample.gml
<gml:FeatureCollection xmlns:gml="http://www.opengis.net/gml/3.2"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:core="http://www.opengis.net/indoorgml/1.0/core"
    xmlns:navi="http://www.opengis.net/indoorgml/1.0/navigation"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.opengis.net/indoorgml/1.0/poi"
    xsi:schemaLocation="http://www.opengis.net/indoorgml/1.0/core http://schemas.opengis.net/indoorgml/1.0/indoorgmlcore.xsd
    http://www.opengis.net/indoorgml/1.0/navigation http://schemas.opengis.net/indoorgml/1.0/indoorgmlnavi.xsd
    http://www.opengis.net/indoorgml/1.0/poi indoorPOI.xsd">
    <gml:featureMembers>
        <!-- ====================================================================== -->
        <core:IndoorFeatures gml:id="IFs">
            <core:multiLayeredGraph>
                <core:MultiLayeredGraph gml:id="MLG1">
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_Topology">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL0">
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 210 130 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP0"/>
                                            <attached xlink:href="#AT1"/>
                                            <attached xlink:href="#AT2"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL1">
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 65 40 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP1"/>
                                            <attached xlink:href="#AT1"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL2">
                                            <core:geometry>
                                                <gml:Point>
                                                    <gml:pos> 340 60 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP2"/>
                                            <attached xlink:href="#AT2"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:interEdges>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT1">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#IPL0"/>
                                <core:interConnects xlink:href="#IPL1"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI"/>
                                <inState xlink:href="#IPL0"/>
                                <poiState xlink:href="#IPL1"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT2">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#IPL0"/>
                                <core:interConnects xlink:href="#IPL2"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI"/>
                                <inState xlink:href="#IPL0"/>
                                <poiState xlink:href="#IPL2"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                    </core:interEdges>
                </core:MultiLayeredGraph>
            </core:multiLayeredGraph>
        </core:IndoorFeatures>
        <!-- ====================================================================== -->
        <IndoorPOI gml:id="IP0">
            <id>Room</id>
            <labels>Room</labels>
            <category>Space and Location</category>
            <located xlink:href="#IPL0"/>
            <child xlink:href="#IP1"/>
            <child xlink:href="#IP2"/>
        </IndoorPOI>
        <IndoorPOI gml:id="IP1">
            <id>Wardrobe</id>
            <labels>Wardrobe</labels>
            <category>Products</category>
            <located xlink:href="#IPL1"/>
            <parent xlink:href="#IP0"/>
        </IndoorPOI>
        <IndoorPOI gml:id="IP2">
            <id>Desk_1</id>
            <labels>Desk</labels>
            <category>Products</category>
            <located xlink:href="#IPL2"/>
            <parent xlink:href="#IP0"/>
        </IndoorPOI>
    </gml:featureMembers>
</gml:FeatureCollection>

Lastly, the IndoorPOI module can have a location history of POIs. To manage POI history, we need to add new class instances and properties in a document as below.

  1. We need to add a new IndoorPOIState instance for a moved POI.

  2. Then, we need to update properties (endTime) to the IndoorPOIState instance of the previous location.

  3. Also, we need to add a new TopoLayerConnection for the new IndoorPOIState instance.

  4. Lastly, we need to add a new property (located) to the IndoorPOI instance of the moved POI.

  5. Optionally, we can add a new IndoorPOISpace instance for the moved POI and add a new property (occupying) to the IndoorPOI instance of the moved POI.

For example, as shown in Figure 15, the location of the bed changed. The document generated is shown in Example 3. In this example, the initially occupied space of the POI overlapped with the moved occupied space. Therefore, we separated the space layer to "SL_POI_big" and "SL_POI_versioning".

usecasemovedpoi
Figure 15. Example of moved indoor POI
Example 3. Part of poi_sample.gml
<gml:FeatureCollection xmlns:gml="http://www.opengis.net/gml/3.2"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:core="http://www.opengis.net/indoorgml/1.0/core"
    xmlns:navi="http://www.opengis.net/indoorgml/1.0/navigation"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.opengis.net/indoorgml/1.0/poi"
    xsi:schemaLocation="http://www.opengis.net/indoorgml/1.0/core http://schemas.opengis.net/indoorgml/1.0/indoorgmlcore.xsd
    http://www.opengis.net/indoorgml/1.0/navigation http://schemas.opengis.net/indoorgml/1.0/indoorgmlnavi.xsd
    http://www.opengis.net/indoorgml/1.0/poi indoorPOI.xsd">
    <gml:featureMembers>
        <core:IndoorFeatures gml:id="IFs">
            <core:primalSpaceFeatures>
                <core:PrimalSpaceFeatures gml:id="PSs">
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS4">
                            <gml:name>Bed_1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 60 110 60 255 220 255 220 110 60 110
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL4"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS4_v1">
                            <gml:name>Bed_1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 15 110 15 255 175 255 175 110 15 110
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL4_v1"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                </core:PrimalSpaceFeatures>
            </core:primalSpaceFeatures>
            <core:multiLayeredGraph>
                <core:MultiLayeredGraph gml:id="MLG1">
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI_big">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL4">
                                            <core:duality xlink:href="#IPS4"/>
                                            <core:geometry>
                                                <gml:Point>
                                                    <gml:pos> 140 180 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>2019-12-21T12:00:00Z</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP4"/>
                                            <attached xlink:href="#AT4"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI_versioning">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL4_v1">
                                            <core:duality xlink:href="#IPS4_v1"/>
                                            <core:geometry>
                                                <gml:Point>
                                                    <gml:pos> 95 180 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP4"/>
                                            <attached xlink:href="#AT4_v1"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:interEdges>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT4">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL4"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_big"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL4"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT4_v1">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL4_v1"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_versioning"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL4_v1"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                    </core:interEdges>
                </core:MultiLayeredGraph>
            </core:multiLayeredGraph>
        </core:IndoorFeatures>
        <IndoorPOI gml:id="IP4">
            <id>Bed_1</id>
            <labels>Bed</labels>
            <category>Products</category>
            <located xlink:href="#IPL4"/>
            <located xlink:href="#IPL4_v1"/>
            <occupying xlink:href="#IPS4"/>
            <occupying xlink:href="#IPS4_v1"/>
        </IndoorPOI>
    </gml:featureMembers>
</gml:FeatureCollection>

7.2. A case of the hospital

One of the primary purposes of POIs is to support generation navigation routes. In this section, we show how to make IndoorGML navigation data with IndoorPOI data.

Let’s start with a specific scenario: medicine delivery in a hospital. If we use an autonomous robot for medicine delivery, we need to set an end-to-end navigation route, at least. For example, as shown in Figure 16, if we want to deliver medicine 'A' to John located in ward 4, we need to take the following steps.

usecasehospital
Figure 16. The indoor layout of medicine delivery scenario in the hospital.[2]
  1. Firstly, we have to retrieve attributes of POIs, to find where medicine 'A' and John are in this hospital.

  2. Then, we calculate the navigation route using State (and IndoorPOIState), Transition, and TopoLayerConnection instances.

  3. Finally, we provide the navigation route as Route instance in the indoor navigation module.

Note that we assume that we have all of the necessary information as a form of IndoorGML core and POI data. We can easily make these data as described in the previous section. Additionally, we can add any property (e.g., the remaining capacity of medicine, patient name) as attributes element in the IndoorPOI instance. The result is shown in Example 4. For simplicity, we don’t generate CellSpace instances. If we want to generate a natural navigation route, e.g., don’t intersect with the indoor layout, the user makes the geometry of Transition (or RouteSegment) by considering the indoor layout, as shown in Example 4. Or the user can make a sub CellSpace for solving this issue.

Example 4. medicine_delivery.gml
<gml:FeatureCollection xmlns:gml="http://www.opengis.net/gml/3.2"
                       xmlns:xlink="http://www.w3.org/1999/xlink"
                       xmlns:core="http://www.opengis.net/indoorgml/1.0/core"
                       xmlns:navi="http://www.opengis.net/indoorgml/1.0/navigation"
                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xmlns="http://www.opengis.net/indoorgml/1.0/poi"
                       xsi:schemaLocation="http://www.opengis.net/indoorgml/1.0/core http://schemas.opengis.net/indoorgml/1.0/indoorgmlcore.xsd
    http://www.opengis.net/indoorgml/1.0/navigation http://schemas.opengis.net/indoorgml/1.0/indoorgmlnavi.xsd
    http://www.opengis.net/indoorgml/1.0/poi indoorPOI.xsd">
    <gml:featureMembers>
        <!-- ====================================================================== -->
        <core:IndoorFeatures gml:id="IFs">
            <core:multiLayeredGraph>
                <core:MultiLayeredGraph gml:id="MLG1">
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_Topology">
                                <core:nodes>
                                    <core:stateMember>
                                        <core:State gml:id="S_Pharmacy">
                                            <gml:name>Pharmacy</gml:name>
                                            <core:geometry>
                                                <gml:Point gml:id="S_Pharmacy_geom">
                                                    <gml:pos>40 5</gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                        </core:State>
                                    </core:stateMember>
                                    <core:stateMember>
                                        <core:State gml:id="S_Ward_4">
                                            <gml:name>Ward_4</gml:name>
                                            <core:geometry>
                                                <gml:Point gml:id="S_Ward_4_geom">
                                                    <gml:pos>80 80</gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                        </core:State>
                                    </core:stateMember>
                                    <core:stateMember>
                                        <core:State gml:id="S_Corridor">
                                            <gml:name>Corridor</gml:name>
                                            <core:geometry>
                                                <gml:Point gml:id="S_Corridor_geom">
                                                    <gml:pos>120 0</gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                        </core:State>
                                    </core:stateMember>
                                </core:nodes>
                                <core:edges>
                                    <core:transitionMember>
                                        <core:Transition gml:id="Topo_T_1">
                                            <core:connects xlink:href="#CS_Pharmacy"/>
                                            <core:connects xlink:href="#CS_Corridor"/>
                                            <core:geometry>
                                                <gml:LineString gml:id="Topo_T_1_geom">
                                                    <gml:pos>40 5</gml:pos>
                                                    <gml:pos>40 0</gml:pos>
                                                    <gml:pos>120 0</gml:pos>
                                                </gml:LineString>
                                            </core:geometry>
                                        </core:Transition>
                                    </core:transitionMember>
                                    <core:transitionMember>
                                        <core:Transition gml:id="Topo_T_2">
                                            <core:connects xlink:href="#CS_Ward_4"/>
                                            <core:connects xlink:href="#CS_Corridor"/>
                                            <core:geometry>
                                                <gml:LineString gml:id="Topo_T_2_geom">
                                                    <gml:pos>80 80</gml:pos>
                                                    <gml:pos>80 75</gml:pos>
                                                    <gml:pos>120 75</gml:pos>
                                                    <gml:pos>120 0</gml:pos>
                                                </gml:LineString>
                                            </core:geometry>
                                        </core:Transition>
                                    </core:transitionMember>
                                </core:edges>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPS_Cabinet_1">
                                            <gml:name>Cabinet_1</gml:name>
                                            <core:geometry>
                                                <gml:Point gml:id="IPS_Cabinet_1_geom">
                                                    <gml:pos>30 15</gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2020-01-01T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP_Cabinet_1"/>
                                            <attached xlink:href="#AT1"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPS_Bed_4_1">
                                            <gml:name>Bed_4_1</gml:name>
                                            <core:geometry>
                                                <gml:Point gml:id="IPS_Bed_4_1_geom">
                                                    <gml:pos>50 95</gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2020-01-01T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP_Bed_4_1"/>
                                            <attached xlink:href="#AT2"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                                <core:edges>
                                    <core:transitionMember>
                                        <core:Transition gml:id="POI_T_1">
                                            <core:connects xlink:href="#IPS_Cabinet_1"/>
                                            <core:connects xlink:href="#CS_Pharmacy"/>
                                            <core:geometry>
                                                <gml:LineString gml:id="POI_T_1_geom">
                                                    <gml:pos>30 15</gml:pos>
                                                    <gml:pos>40 5</gml:pos>
                                                </gml:LineString>
                                            </core:geometry>
                                        </core:Transition>
                                    </core:transitionMember>
                                    <core:transitionMember>
                                        <core:Transition gml:id="POI_T_2">
                                            <core:connects xlink:href="#IP_Bed_4_1"/>
                                            <core:connects xlink:href="#CS_Ward_4"/>
                                            <core:geometry>
                                                <gml:LineString gml:id="POI_T_2_geom">
                                                    <gml:pos>50 95</gml:pos>
                                                    <gml:pos>50 90</gml:pos>
                                                    <gml:pos>80 90</gml:pos>
                                                    <gml:pos>80 80</gml:pos>
                                                </gml:LineString>
                                            </core:geometry>
                                        </core:Transition>
                                    </core:transitionMember>
                                </core:edges>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:interEdges>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT1">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S_Pharmacy"/>
                                <core:interConnects xlink:href="#IPS_Cabinet_1"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI"/>
                                <inState xlink:href="#S_Pharmacy"/>
                                <poiState xlink:href="#IPS_Cabinet_1"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT2">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S_Ward_4"/>
                                <core:interConnects xlink:href="#IPS_Bed_4_1"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI"/>
                                <inState xlink:href="#S_Ward_4"/>
                                <poiState xlink:href="#IPS_Bed_4_1"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                    </core:interEdges>
                </core:MultiLayeredGraph>
            </core:multiLayeredGraph>
        </core:IndoorFeatures>
        <!-- ====================================================================== -->
        <IndoorPOI gml:id="IP_Cabinet_1">
            <id>Cabinet_1</id>
            <labels>Cabinet</labels>
            <labels>Cabinet_located_at_Pharmacy</labels>
            <category>Products</category>
            <located xlink:href="#IPS_Cabinet_1"/>
            <attributes>
                <IndoorPOIAttribute gml:id="IPA_Cabinet_1_1">
                    <attributeName>Medicine_A</attributeName>
                    <valueHistory>250</valueHistory>
                    <updateHistory>2020-02-20T09:00:00Z</updateHistory>
                </IndoorPOIAttribute>
            </attributes>
            <attributes>
                <IndoorPOIAttribute gml:id="IPA_Cabinet_1_2">
                    <attributeName>Medicine_B</attributeName>
                    <valueHistory>100</valueHistory>
                    <updateHistory>2020-02-20T09:00:00Z</updateHistory>
                </IndoorPOIAttribute>
            </attributes>
        </IndoorPOI>
        <IndoorPOI gml:id="IP_Bed_4_1">
            <id>Bed_4_1</id>
            <labels>Bed</labels>
            <labels>Bed_located_at_Ward4</labels>
            <category>Products</category>
            <located xlink:href="#IPS_Bed_4_1"/>
            <attributes>
                <IndoorPOIAttribute gml:id="IPA_Bed_4_1">
                    <attributeName>Patient_Name</attributeName>
                    <valueHistory>John Smith</valueHistory>
                    <updateHistory>2020-03-21T08:00:00Z</updateHistory>
                </IndoorPOIAttribute>
            </attributes>
        </IndoorPOI>
        <!-- ====================================================================== -->
        <navi:Route gml:id="R1">
            <navi:startRouteNode xlink:href="#IPS_Cabinet_1"/>
            <navi:endRouteNode xlink:href="#IPS_Bed_4_1"/>
            <navi:routeNodes>
                <navi:nodeMember>
                    <navi:RouteNode gml:id="RN_1">
                        <navi:referencedState xlink:href="#IPS_Cabinet_1"/>
                        <navi:geometry xlink:href="#IPS_Cabinet_1_geom"/>
                    </navi:RouteNode>
                </navi:nodeMember>
                <navi:nodeMember>
                    <navi:RouteNode gml:id="RN_2">
                        <navi:referencedState xlink:href="#S_Pharmacy"/>
                        <navi:geometry xlink:href="#S_Pharmacy_geom"/>
                    </navi:RouteNode>
                </navi:nodeMember>
                <navi:nodeMember>
                    <navi:RouteNode gml:id="RN_3">
                        <navi:referencedState xlink:href="#S_Corridor"/>
                        <navi:geometry xlink:href="#S_Corridor_geom"/>
                    </navi:RouteNode>
                </navi:nodeMember>
                <navi:nodeMember>
                    <navi:RouteNode gml:id="RN_4">
                        <navi:referencedState xlink:href="#S_Ward_4"/>
                        <navi:geometry xlink:href="#S_Ward_4_geom"/>
                    </navi:RouteNode>
                </navi:nodeMember>
                <navi:nodeMember>
                    <navi:RouteNode gml:id="RN_5">
                        <navi:referencedState xlink:href="#IPS_Bed_4_1"/>
                        <navi:geometry xlink:href="#IPS_Bed_4_1_geom"/>
                    </navi:RouteNode>
                </navi:nodeMember>
            </navi:routeNodes>
            <navi:path>
                <navi:routeMember>
                    <navi:RouteSegment gml:id="RS_1">
                        <navi:weight>1</navi:weight>
                        <navi:connects xlink:href="#RN_1"/>
                        <navi:connects xlink:href="#RN_2"/>
                        <navi:referencedTransition xlink:href="#POI_T_1"/>
                        <navi:geometry xlink:href="#POI_T_1_geom"/>
                    </navi:RouteSegment>
                </navi:routeMember>
                <navi:routeMember>
                    <navi:RouteSegment gml:id="RS_2">
                        <navi:weight>1</navi:weight>
                        <navi:connects xlink:href="#RN_2"/>
                        <navi:connects xlink:href="#RN_3"/>
                        <navi:referencedTransition xlink:href="#Topo_T_1"/>
                        <navi:geometry xlink:href="#Topo_T_1_geom"/>
                    </navi:RouteSegment>
                </navi:routeMember>
                <navi:routeMember>
                    <navi:RouteSegment gml:id="RS_3">
                        <navi:weight>1</navi:weight>
                        <navi:connects xlink:href="#RN_3"/>
                        <navi:connects xlink:href="#RN_4"/>
                        <navi:referencedTransition xlink:href="#Topo_T_2"/>
                        <navi:geometry>
                            <gml:LineString>
                                <gml:pos>120 0</gml:pos>
                                <gml:pos>120 75</gml:pos>
                                <gml:pos>80 75</gml:pos>
                                <gml:pos>80 80</gml:pos>
                            </gml:LineString>
                        </navi:geometry>
                    </navi:RouteSegment>
                </navi:routeMember>
                <navi:routeMember>
                    <navi:RouteSegment gml:id="RS_4">
                        <navi:weight>1</navi:weight>
                        <navi:connects xlink:href="#RN_4"/>
                        <navi:connects xlink:href="#RN_5"/>
                        <navi:referencedTransition xlink:href="#POI_T_2"/>
                        <navi:geometry>
                            <gml:LineString>
                                <gml:pos>80 80</gml:pos>
                                <gml:pos>80 90</gml:pos>
                                <gml:pos>50 90</gml:pos>
                                <gml:pos>50 95</gml:pos>
                            </gml:LineString>
                        </navi:geometry>
                    </navi:RouteSegment>
                </navi:routeMember>
            </navi:path>
        </navi:Route>
    </gml:featureMembers>
</gml:FeatureCollection>

Annex A: XML Schema for IndoorGML POI Module (Normative)

This Discussion Paper provides the normative XML schema document for IndoorGML POI Module.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.opengis.net/indoorgml/1.0/poi"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:gml="http://www.opengis.net/gml/3.2"
    xmlns:IndoorCore="http://www.opengis.net/indoorgml/1.0/core"
    targetNamespace="http://www.opengis.net/indoorgml/1.0/poi"
    version="1.0"
    elementFormDefault="qualified">
    <xs:import namespace="http://www.opengis.net/gml/3.2"
        schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
    <xs:import namespace="http://www.opengis.net/indoorgml/1.0/core"
        schemaLocation="http://schemas.opengis.net/indoorgml/1.0/indoorgmlcore.xsd"/>
    <!-- ====================================================================== -->
    <xs:element name="IndoorPOIState" type="IndoorPOIStateType" substitutionGroup="IndoorCore:State"/>
    <!-- ====================================================================== -->
    <xs:complexType name="IndoorPOIStatePropertyType">
        <xs:sequence minOccurs="0">
            <xs:element ref="IndoorPOIState"/>
        </xs:sequence>
        <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:complexType name="IndoorPOIStateType">
        <xs:complexContent>
            <xs:extension base="IndoorCore:StateType">
                <xs:sequence>
                    <xs:element name="beginTime" type="gml:TimePositionType"/>
                    <xs:element name="endTime" type="gml:TimePositionType"/>
                    <xs:element name="navigable" type="xs:boolean"/>
                    <xs:element name="poi" type="IndoorPOIPropertyType"/>
                    <xs:element name="attached" type="TopoLayerConnectionPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:element name="IndoorPOISpace" type="IndoorPOISpaceType" substitutionGroup="IndoorCore:CellSpace"/>
    <!-- ====================================================================== -->
    <xs:complexType name="IndoorPOISpacePropertyType">
        <xs:sequence minOccurs="0">
            <xs:element ref="IndoorPOISpace"/>
        </xs:sequence>
        <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:complexType name="IndoorPOISpaceType">
        <xs:complexContent>
            <xs:extension base="IndoorCore:CellSpaceType">
                <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:element name="IndoorPOI" type="IndoorPOIType" substitutionGroup="gml:AbstractFeature"/>
    <!-- ====================================================================== -->
    <xs:complexType name="IndoorPOIPropertyType">
        <xs:sequence minOccurs="0">
            <xs:element ref="IndoorPOI"/>
        </xs:sequence>
        <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:complexType name="IndoorPOIType">
        <xs:complexContent>
            <xs:extension base="gml:AbstractFeatureType">
                <xs:sequence>
                    <xs:element name="id" type="xs:string"/>
                    <xs:element name="labels" type="xs:string" maxOccurs="unbounded"/>
                    <xs:element name="category" type="POICodeType"/>
                    <xs:element name="located" type="IndoorPOIStatePropertyType" maxOccurs="unbounded"/>
                    <xs:element name="occupying" type="IndoorPOISpacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="attributes" type="IndoorPOIAttributePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="parent" type="IndoorPOIPropertyType" minOccurs="0"/>
                    <xs:element name="child" type="IndoorPOIPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:attributeGroup ref="gml:AggregationAttributeGroup"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:element name="IndoorPOIAttribute" type="IndoorPOIAttributeType"/>
    <!-- ====================================================================== -->
    <xs:complexType name="IndoorPOIAttributePropertyType">
        <xs:sequence minOccurs="0">
            <xs:element ref="IndoorPOIAttribute"/>
        </xs:sequence>
        <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:complexType name="IndoorPOIAttributeType">
        <xs:complexContent>
            <xs:extension base="gml:AbstractFeatureType">
                <xs:sequence>
                    <xs:element name="attributeName" type="xs:string"/>
                    <xs:element name="valueHistory" type="xs:anyType" maxOccurs="unbounded"/>
                    <xs:element name="updateHistory" type="gml:TimePositionType" maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:attributeGroup ref="gml:AggregationAttributeGroup"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:element name="TopoLayerConnection" type="TopoLayerConnectionType" substitutionGroup="IndoorCore:InterLayerConnection"/>
    <!-- ====================================================================== -->
    <xs:complexType name="TopoLayerConnectionPropertyType">
        <xs:sequence minOccurs="0">
            <xs:element ref="TopoLayerConnection"/>
        </xs:sequence>
        <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:complexType name="TopoLayerConnectionType">
        <xs:complexContent>
            <xs:extension base="IndoorCore:InterLayerConnectionType">
                <xs:sequence>
                    <xs:element name="inState" type="IndoorCore:StatePropertyType"/>
                    <xs:element name="poiState" type="IndoorPOIStatePropertyType"/>
                    <xs:element name="pathGeometry" type="gml:CurvePropertyType" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ====================================================================== -->
    <xs:simpleType name="POICodeType">
        <xs:union memberTypes="POICodeEnumerationType POICodeOtherType"/>
    </xs:simpleType>
    <!-- ====================================================================== -->
    <xs:simpleType name="POICodeEnumerationType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Complexes"/>
            <xs:enumeration value="Entities"/>
            <xs:enumeration value="Spaces and Locations"/>
            <xs:enumeration value="Activities"/>
            <xs:enumeration value="Elements and Functions"/>
            <xs:enumeration value="Systems"/>
            <xs:enumeration value="Products"/>
            <xs:enumeration value="Events"/>
            <xs:enumeration value="Agents"/>
            <xs:enumeration value="Unknown"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- ====================================================================== -->
    <xs:simpleType name="POICodeOtherType">
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <!-- ====================================================================== -->
</xs:schema>

Annex B: Indoor POI Module Example Document (Informative)

The following are examples of the InPOI module documents generated as described in Section 7.1.

<gml:FeatureCollection xmlns:gml="http://www.opengis.net/gml/3.2"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:core="http://www.opengis.net/indoorgml/1.0/core"
    xmlns:navi="http://www.opengis.net/indoorgml/1.0/navigation"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.opengis.net/indoorgml/1.0/poi"
    xsi:schemaLocation="http://www.opengis.net/indoorgml/1.0/core http://schemas.opengis.net/indoorgml/1.0/indoorgmlcore.xsd
    http://www.opengis.net/indoorgml/1.0/navigation http://schemas.opengis.net/indoorgml/1.0/indoorgmlnavi.xsd
    http://www.opengis.net/indoorgml/1.0/poi indoorPOI.xsd">
    <gml:featureMembers>
        <core:IndoorFeatures gml:id="IFs">
            <core:primalSpaceFeatures>
                <core:PrimalSpaceFeatures gml:id="PSs">
                    <core:cellSpaceMember>
                        <core:CellSpace gml:id="CS1">
                            <gml:name>Room1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 15 15 15 255 255 255 255 270 320 270
                                                  320 255 450 255 420 130 380 130 380 15 15 15
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#S1"/>
                        </core:CellSpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS1">
                            <gml:name>Wardrobe</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 15 15 110 15 110 85 110 15 15 15
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL1"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS2">
                            <gml:name>Desk_1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 260 15 260 50 310 55 350 90 350 140
                                                  380 140 380 15 260 15 </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL2"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS3">
                            <gml:name>Bookcase</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 380 130 380 255 420 255 420 130 380
                                                  130 </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL3"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS4">
                            <gml:name>Bed_1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 60 110 60 255 220 255 220 110 60 110
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL4"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS4_v1">
                            <gml:name>Bed_1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 15 110 15 255 175 255 175 110 15 110
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL4_v1"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS5">
                            <gml:name>Chair_1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 310 70 330 90 350 70 330 50 310 70
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL5"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS6">
                            <gml:name>TV_1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 320 30 365 80 375 80 330 20 320 30
                                                </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL6"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                    <core:cellSpaceMember>
                        <IndoorPOISpace gml:id="IPS7">
                            <gml:name>Door_1</gml:name>
                            <core:cellSpaceGeometry>
                                <core:Geometry2D>
                                    <gml:Polygon>
                                        <gml:exterior>
                                            <gml:LinearRing>
                                                <gml:posList> 255 260 255 270 320 270 320 260 255
                                                  260 </gml:posList>
                                            </gml:LinearRing>
                                        </gml:exterior>
                                    </gml:Polygon>
                                </core:Geometry2D>
                            </core:cellSpaceGeometry>
                            <core:duality xlink:href="#IPL7"/>
                        </IndoorPOISpace>
                    </core:cellSpaceMember>
                </core:PrimalSpaceFeatures>
            </core:primalSpaceFeatures>
            <core:multiLayeredGraph>
                <core:MultiLayeredGraph gml:id="MLG1">
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_Topology">
                                <core:nodes>
                                    <core:stateMember>
                                        <core:State gml:id="S1">
                                            <core:duality xlink:href="#CS1"/>
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 210 130 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                        </core:State>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI_big">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL1">
                                            <core:duality xlink:href="#IPS1"/>
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 65 40 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP1"/>
                                            <attached xlink:href="#AT1"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL2">
                                            <core:duality xlink:href="#IPS2"/>
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 340 60 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP2"/>
                                            <attached xlink:href="#AT2"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL3">
                                            <core:duality xlink:href="#IPS3"/>
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 400 190 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP3"/>
                                            <attached xlink:href="#AT3"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL4">
                                            <core:duality xlink:href="#IPS4"/>
                                            <core:geometry>
                                                <gml:Point>
                                                  <gml:pos> 140 180 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>2019-12-21T12:00:00Z</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP4"/>
                                            <attached xlink:href="#AT4"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI_small">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL5">
                                            <core:duality xlink:href="#IPS5"/>
                                            <core:geometry>
                                                <gml:Point>
                                                    <gml:pos> 330 70 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP5"/>
                                            <attached xlink:href="#AT5"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI_optional">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL6">
                                            <core:duality xlink:href="#IPS6"/>
                                            <core:geometry>
                                                <gml:Point>
                                                    <gml:pos> 350 50 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP6"/>
                                            <attached xlink:href="#AT6"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI_door">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL7">
                                            <core:duality xlink:href="#IPS7"/>
                                            <core:geometry>
                                                <gml:Point>
                                                    <gml:pos> 287 265 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-20T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>true</navigable>
                                            <poi xlink:href="#IP7"/>
                                            <attached xlink:href="#AT7"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:spaceLayers>
                        <core:spaceLayerMember>
                            <core:SpaceLayer gml:id="SL_POI_versioning">
                                <core:nodes>
                                    <core:stateMember>
                                        <IndoorPOIState gml:id="IPL4_v1">
                                            <core:duality xlink:href="#IPS4_v1"/>
                                            <core:geometry>
                                                <gml:Point>
                                                    <gml:pos> 95 180 </gml:pos>
                                                </gml:Point>
                                            </core:geometry>
                                            <beginTime>2019-12-21T12:00:00Z</beginTime>
                                            <endTime>now</endTime>
                                            <navigable>false</navigable>
                                            <poi xlink:href="#IP4"/>
                                            <attached xlink:href="#AT4_v1"/>
                                        </IndoorPOIState>
                                    </core:stateMember>
                                </core:nodes>
                            </core:SpaceLayer>
                        </core:spaceLayerMember>
                    </core:spaceLayers>
                    <core:interEdges>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT1">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL1"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_big"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL1"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT2">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL2"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_big"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL2"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT3">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL3"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_big"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL3"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT4">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL4"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_big"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL4"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT4_v1">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL4_v1"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_versioning"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL4_v1"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT5">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL5"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_small"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL5"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT6">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL6"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_optional"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL6"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                        <core:interLayerConnectionMember>
                            <TopoLayerConnection gml:id="AT7">
                                <core:typeOfTopoExpression>CONTAINS</core:typeOfTopoExpression>
                                <core:interConnects xlink:href="#S1"/>
                                <core:interConnects xlink:href="#IPL7"/>
                                <core:ConnectedLayers xlink:href="#SL_Topology"/>
                                <core:ConnectedLayers xlink:href="#SL_POI_door"/>
                                <inState xlink:href="#S1"/>
                                <poiState xlink:href="#IPL7"/>
                            </TopoLayerConnection>
                        </core:interLayerConnectionMember>
                    </core:interEdges>
                </core:MultiLayeredGraph>
            </core:multiLayeredGraph>
        </core:IndoorFeatures>
        <!-- ====================================================================== -->
        <IndoorPOI gml:id="IP1">
            <id>Wardrobe</id>
            <labels>Wardrobe</labels>
            <category>Products</category>
            <located xlink:href="#IPL1"/>
            <occupying xlink:href="#IPS1"/>
        </IndoorPOI>
        <IndoorPOI gml:id="IP2">
            <id>Desk_1</id>
            <labels>Desk</labels>
            <category>Products</category>
            <located xlink:href="#IPL2"/>
            <occupying xlink:href="#IPS2"/>
        </IndoorPOI>
        <IndoorPOI gml:id="IP3">
            <id>Bookcase</id>
            <labels>Bookcase</labels>
            <category>Products</category>
            <located xlink:href="#IPL3"/>
            <occupying xlink:href="#IPS3"/>
        </IndoorPOI>
        <IndoorPOI gml:id="IP4">
            <id>Bed_1</id>
            <labels>Bed</labels>
            <category>Products</category>
            <located xlink:href="#IPL4"/>
            <located xlink:href="#IPL4_v1"/>
            <occupying xlink:href="#IPS4"/>
            <occupying xlink:href="#IPS4_v1"/>
        </IndoorPOI>
        <IndoorPOI gml:id="IP5">
            <id>Chair_1</id>
            <labels>Chair</labels>
            <category>Products</category>
            <located xlink:href="#IPL5"/>
            <occupying xlink:href="#IPS5"/>
        </IndoorPOI>
        <IndoorPOI gml:id="IP6">
            <id>TV_1</id>
            <labels>TV</labels>
            <category>Products</category>
            <located xlink:href="#IPL6"/>
            <occupying xlink:href="#IPS6"/>
        </IndoorPOI>
        <IndoorPOI gml:id="IP7">
            <id>Door_1</id>
            <labels>Door</labels>
            <category>Elements and Functions</category>
            <located xlink:href="#IPL7"/>
            <occupying xlink:href="#IPS7"/>
        </IndoorPOI>
    </gml:featureMembers>
</gml:FeatureCollection>

Annex C: Revision History

Date Release Editor Primary clauses modified Description

2019-10-24

0.1

Kyong-Sook Kim, Teahoon Kim

all

initial version

2020-03-05

0.2

Kyong-Sook Kim, Teahoon Kim, Jiyeong Lee, In-Hye Lee, Hye-Young Kang

all

first draft

2020-05-30

1.0

Kyong-Sook Kim, Teahoon Kim, Jiyeong Lee

all

submission draft

Annex D: Bibliography

[1] ISO 24099:2011 Navigation data delivery structures and protocols, https://www.iso.org/standard/42016.html

[2] ISO 14825:2011 Intelligent transport systems — Geographic Data Files (GDF) — GDF5.0, https://www.iso.org/standard/54610.html

[3] POIX: Point Of Interest eXchange Language Specification, https://www.w3.org/1999/06/NOTE-poix-19990624/

[4] OGC 07-074: OpenGIS Location Service (OpenLS) Implementation Specification: Core Services, http://portal.opengeospatial.org/files/?artifact_id=22122

[5] OGC 11-122r1: Gazetteer Service - Application Profile of the Web Feature Service Best Practice (1.0), https://portal.opengeospatial.org/files/?artifact_id=46964

[6] ISO 19112:2019 International Organization for Standardization: Geographic Information: Spatial referencing by geographic identifiers, 2019, https://www.iso.org/standard/70742.html

[7] ISO 19155:2012 International Organization for Standardization: Geographic Information: Geographic information – Place Identifier (PI) architecture, https://www.iso.org/standard/32573.html

[8] W3C Points of Interest Core: Working Draft, https://www.w3.org/TR/poi-core/

[10] Apple Indoor Mapping Data Format (1.0.0.rc.1), https://register.apple.com/resources/imdf/

[11] Uniclass 2015: A unified classification for the UK industry covering all construction sectors, https://www.thenbs.com/our-tools/uniclass-2015.

[12] J. Park, H. Y. Kang, and J. Lee, “A Spatial-temporal POI Data Model for Implementing Location-based Services,” J. Korean Soc. Surv. Geod. Photogramm. Cartogr., vol. 34, no. 6, pp. 609–618, 2017.

[13] A. R. Claridades, I. Park, and J. Lee, "Integrating IndoorGML and Indoor POI Data for Navigation Applications in Indoor Space," J. Korean Soc. Surv. Geod. Photogramm. Cartogr., vol. 37, no 5, pp. 359-366, 2019.


1. floorplan source: https://online.visual-paradigm.com/ja/diagrams/templates/floor-plan/
2. floorplan source: http://www.nhsborders.scot.nhs.uk/patients-and-visitors/our-services/other-services/bgh-floor-plan/