TileDefinitions.xid.xml 11.6 KB
<?xml version="1.0" encoding="UTF-8" ?>

<specification xmlns="https://xid.location.studio/schema/V1.0.0/XtensibleInterfaceDefinition.xsd"
               xmlns:xid="https://xid.location.studio/schema/V1.0.0/XtensibleInterfaceDefinition.xsd"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="https://xid.location.studio/schema/V1.0.0/XtensibleInterfaceDefinition.xsd https://xid.location.studio/schema/V1.0.0/XtensibleInterfaceDefinition.xsd"
               identity="TileDefinitions.xid.xml">
  <title>SLAM Tile Definitions</title>
  <comment>This file defines the SLAM tile definitions and related data types.</comment>

  <!-- Include all known definitions -->
  <import ref="https://xid.location.studio/ILP/SLAM/V1.0.0_alpha/CommonDefs.xid.xml" local="SLAM/CommonDefs.xid.xml" />

  <namespace name="SLAM">

    <using namespace="HPE"/>
    <using namespace="Tensor"/>

    <!-- 
    *************************************
    * Enumerations 
    *************************************
    -->    
    <enum name="TileType" type="Tensor.int8" default="Unknown">
      <comment>Tile data processing status.</comment>
      <literal name="Unknown" value="0"/>
      <literal name="SparseMeasurementTile" value="1"/>
      <literal name="GridModelTile" value="2"/>
      <literal name="AggregateTile" value="3"/>
    </enum>


    <enum name="TileStatus" type="Tensor.int8" default="Unknown">
      <comment>Tile data processing status.</comment>
      <literal name="Unknown" value="0"/>
      <literal name="Unprocessed" value="1"/>
      <literal name="Processed" value="2"/>
    </enum>

    <enum name="ComputationalMethod" type="Tensor.int8" default="Unknown">
      <comment>Data computational method associated with data contained within the tile.</comment>
      <literal name="Unknown" value="0"/>
      <literal name="GridSmoothing" value="1"/>
      <literal name="GaussianProcess" value="2"/>
    </enum>

    <!-- 
    *************************************
    * Tile definition. 
    *************************************
    -->
    <struct name="Tile" >
      <comment>defines the base structure of a tile</comment>

      <elem name="type" type="TileType" multiplicity="1" rttd="true">
        <comment>identify the type of the tile</comment>
      </elem>

      <elem name ="tileid" type="Tensor.UUID" multiplicity="1" >
        <comment>Identifies the unique id of the tile</comment>
      </elem>

      <elem name="createdate" type="datetime" multiplicity="1">
        <comment>time stamp of tile creation</comment>
      </elem>

      <elem name="lastmodified" type="datetime" multiplicity="1">
        <comment>time stamp of last modification</comment>
      </elem>
      
       
      <elem name="bounding" multiplicity="1" type="BoundingBox" >
        <comment> Bounding of the tile</comment>
      </elem>

      <elem name="floormin" type="int8" multiplicity="1" >
        <comment>Identifies the minimum floor number</comment>
      </elem>

      <elem name="floormax" type="int8" multiplicity="1" >
        <comment>Identifies the maximum floor number</comment>
      </elem>
      

      <elem name="revision" type="Tensor.uint32" multiplicity="1">
        <comment>revision number</comment>
      </elem>

      <elem name="datatype" multiplicity="1" type="ObservationType" >
        <comment>The type of the observation data within the tile .</comment>
      </elem>
      
      <elem name="status" type="TileStatus" multiplicity="1" >
        <comment>Identifies the data processing status within the tile</comment>
      </elem>

      <elem name="method" type="ComputationalMethod" multiplicity="1" >
        <comment>Identifies the data processing method within the tile</comment>
      </elem>

      <elem name="source" type="Tensor.uri" multiplicity="1">
        <comment>URI identifies the source of the information provided.</comment>
      </elem>

      <elem name="label" type="Tensor.string" multiplicity="0..1" >
        <comment>label of the tile</comment>
      </elem>
      <elem name="validbegin" type="datetime" multiplicity="1">
        <comment>time stamp of tile creation</comment>
      </elem>

      <elem name="validend" type="datetime" multiplicity="1">
        <comment>time stamp of tile creation</comment>
      </elem>

    </struct>

    <!-- 
    *************************************
    * SparseMeasurementTile definition. 
    *************************************
    -->
    <struct name="SparseMeasurementTile" type="Tile" rttkey="SLAM.TileType.SparseMeasurementTile">
      <comment>The tile is the unit of management for RF reference data, which can overlap, intersect, or be disjoint with other tiles</comment>

      <!-- Contained Type Definitions -->
      <struct name="RfData" pack="true">
        <comment>Each RF data value is an observed/estimated value of a particular RF signal reference and at a particular position.</comment>
        <elem name="idxPos" type ="Tensor.uint16" multiplicity="1">
          <comment>index of the Position element.</comment>
        </elem>
        <elem name="value" type="Tensor.byte" multiplicity="1">
          <comment>The RF signal strengh value in scaled units where unscaled scaled value = (value + dataOffset)/dataScale.</comment>
        </elem>
        <elem name="reserved" type="Tensor.byte" multiplicity="1">
          <comment>Reserved storage space.</comment>
        </elem>
      </struct>

      <struct name="Position" pack="true">
        <comment>Each position element represents the physical location of one or more measurements</comment>
        <elem name="x" type="Tensor.int24" multiplicity="1">
          <comment>x component of the location of the tile data record</comment>
        </elem>
        <elem name="y" type="Tensor.int24" multiplicity="1">
          <comment>y component of the location of the tile data record</comment>
        </elem>
        <elem name="z" type="Tensor.int24" multiplicity="1">
          <comment>z component of the location of the tile data record</comment>
        </elem>
        <elem name="ux" type="Tensor.uint8" multiplicity="1">
          <comment>uncertainty of x component of the locations</comment>
        </elem>
        <elem name="uy" type="Tensor.uint8" multiplicity="1">
          <comment>uncertainty of y component of the locations</comment>
        </elem>
        <elem name="uz" type="Tensor.uint8" multiplicity="1">
          <comment>uncertainty of z component of the locations</comment>
        </elem>
        <elem name="floor" type="Tensor.int8" multiplicity="1" default="0">
          <comment> the floor number of the measurement record</comment>
        </elem>

      </struct>

      <struct name="RfReference" pack="true">
        <comment>Each RfRerence element identifies a specific RF Reference Point</comment>
        <elem name="idRef" type="HashKey" multiplicity="1">
          <comment>UUID of the reference point</comment>
        </elem>
        <elem name="start" type="Tensor.uint16" multiplicity="1">
          <comment>start index in the RfData array</comment>
        </elem>
        <elem name="end" type="Tensor.uint16" multiplicity="1">
          <comment>end index in the RFData array.</comment>
        </elem>
      </struct>

      <array name="RfReferenceArray" type="RfReference"/>
      <array name="RfDataArray" type="RfData"/>
      <array name="PositionArray" type="Position"/>

      <!-- Structure Element Definitions -->

      <elem name="reframe" type="CoordRefFrameType" multiplicity="1">
        <comment>The type of coordinate frame of the relative locations in the records.</comment>
      </elem>

      <elem name="posRef" type="Point3D" multiplicity="1">
        <comment>
          The reference position of the tile. In the specified coordinate system. Typically
          WGS84.
        </comment>
      </elem>

      <elem name="posUncertScale" type="Tensor.float32" multiplicity="1" default="1">
        <comment>The scale of the location uncertainty in Position data.</comment>
      </elem>

      <elem name="dataScale" type="Tensor.float32" multiplicity="1" default="1">
        <comment>The scale of the measurement in measurement record.</comment>
      </elem>
      
      <elem name="dataOffset" type="Tensor.float32" multiplicity="1" default="0">
        <comment>The unscaled offset of the unscaled RfData value.</comment>
      </elem>

      <elem name="references" type="RfReferenceArray" multiplicity="1"/>
      <elem name="rfdata" type="RfDataArray" multiplicity="1"/>
      <elem name="positions" type="PositionArray" multiplicity="1"/>
    </struct>

    <!-- 
    *************************************
    * TileSet definition. 
    *************************************
    -->    
    <struct name="TileSet">
      <comment>A set of tiles in an unpacked list.</comment>
      <elem name="tiles" type="Tile" multiplicity="0..*"  polymorphic="true"/>
    </struct>

    <!-- 
    *************************************
    * SpatialIndex definition. 
    *************************************
    -->
    <struct name="SpatialIndex" >
      <comment>  </comment>
      <elem name="sourceuri" multiplicity="1" type="Tensor.uri" >
        <comment> </comment>
      </elem>

      <elem name="tileid" multiplicity="1" type="Tensor.UUID" >
        <comment>The UUID of the tile </comment>
      </elem>

      <elem name="bounding" multiplicity="1" type="BoundingBox" >
        <comment> Bounding of the tile</comment>
      </elem>

      <elem name="floormin" type="int8" multiplicity="1" >
        <comment>Identifies the minimum floor number</comment>
      </elem>

      <elem name="floormax" type="int8" multiplicity="1" >
        <comment>Identifies the maximum floor number</comment>
      </elem>

      <elem name="datatype" multiplicity="1" type="ObservationType" >
        <comment>The type of the observation data within the tile .</comment>
      </elem>
      
      <elem name="createdate" type="datetime" multiplicity="1">
        <comment>time stamp of tile creation</comment>
      </elem>

      <elem name="lastmodified" type="datetime" multiplicity="1">
        <comment>time stamp of last modification</comment>
      </elem>

      <elem name="validbegin" type="datetime" multiplicity="1">
        <comment>time stamp of tile creation</comment>
      </elem>

      <elem name="validend" type="datetime" multiplicity="1">
        <comment>time stamp of tile creation</comment>
      </elem>
      
    </struct>

    <!-- 
    *************************************
    * ElementIndex Definition. 
    *************************************
    -->
    <struct name="RefPointIndex" >
      <comment>  </comment>

      <elem name="id" multiplicity="1" type="HashKey" >
        <comment> </comment>
      </elem>
      <elem name="sourceUri" multiplicity="1" type="Tensor.uri" >
        <comment> </comment>
      </elem>
    
      <elem name="type" multiplicity="1" type="RefPointType" >
        <comment> </comment>
      </elem>

      <elem name="position" multiplicity="1" type="Spheroid">
        <comment> coarse location of the tile</comment>
      </elem>

      <elem name="floor" type="int8" multiplicity="1" >
        <comment>Identifies the floor number</comment>
      </elem>
      
      <elem name="useStatus" type="RefPointUseStatus" multiplicity="1" >
        <comment>Identifies the status of the validity</comment>
      </elem>

      <elem name="createdate" type="datetime" multiplicity="1">
        <comment>time stamp of tile creation</comment>
      </elem>

      <elem name="lastmodified" type="datetime" multiplicity="1">
        <comment>time stamp of last modification</comment>
      </elem>
    
    </struct>
  
  </namespace>
</specification>