Overview
1. Meta graph
The following graph gives a quick overview about the nodes and edges of the data inside the Neo4j database.
1.1. Example graph
The following graph gives a quick overview about the nodes and edges of the data inside the Neo4j database. It is a simple representation and doesn’t contain all required properties:
2. Nodes
As it can be seen in the previous example graph, there are 4 main nodes (or entities):
2.1. Scenarios
PROPERTIES
scenario_id
(Integer): generated by Neo4jcreated
(Integer): generated with functiontimestamp()
updated
(Integer): generated with functiontimestamp()
s_id
(String): import-/export-id, will be automatically generated byuuid()
inside apiControllersname
(String): name of the scenariodescription
(String): optional description of the scenario
2.2. Locations
PROPERTIES
location_id
(Integer): generated by Neo4jcreated
(Integer): generated with functiontimestamp()
updated
(Integer): generated with functiontimestamp()
l_id
(String): import-/export-id, can be automatically generated byuuid()
inside apiControllersname
(String): name of the locationdescription
(String): optional description of the locationlat
(Float): Latitude value of the locationlng
(Float): Longitude value of the locationlocation_type
(String, options:indoor
,outdoor
,abstract
): type of the location
2.3. Videos
PROPERTIES
video_id
(Integer): generated by Neo4jcreated
(Integer): generated with functiontimestamp()
updated
(Integer): generated with functiontimestamp()
v_id
(String): import-/export-id, can be automatically generated byuuid()
inside apiControllersname
(String): name of the videodescription
(String): optional description of the videourl
(String): url of the videorecorded
(String): optional timestamp, when the video was recorded
2.4. Overlays
PROPERTIES
overlay_id
(Integer): generated by Neo4jcreated
(Integer): generated with functiontimestamp()
updated
(Integer): generated with functiontimestamp()
o_id
(String): import-/export-id, can be automatically generated byuuid()
inside apiControllersname
(String): name of the overlaydescription
(String): optional description of the overlaycategory
(String, options:website
,picture
,video
): type of the overlayurl
(String): url of the overlay
3. Relationships
3.1. BELONGS_TO
i/o:Location (1) -[BELONGS_TO]->
(1..n) Scenario
Video (1) -[BELONGS_TO]->
(1..n) Scenario
(1) -[BELONGS_TO]->
(1..n) Scenario
The relationship -[BELONGS_TO]->
is used for filtering the data for a specific Scenario. All Locations, Videos and can also be used multiple times in different Scenarios.
3.2. CONNECTED_TO
i/o:Location (1) -[CONNECTED_TO]->
(1..n) i/o:Location
This relationship builds a path between two i/o:Locations, which is responsible for the main navigation. If your
PROPERTIES
i_id
(String): optional intent-ID to reference to all related intents inside a Postgres table (only required for for the voice-control-extension)
3.3. HAS_PARENT_LOCATION
i/o:Location (1) -[HAS_PARENT_LOCATION]->
(1) abstract:Location
The parent location approach was introduced to the graph to provide a better map representation of many locations. Clustering might be an option, but especially for indoor:Locations the map markers can be very densed. To avoid that, the map makers can generated from an parent location.
It is easy to connect outdoor:Locations with a -[CONNECTED_TO]->
relationship:
But when it comes to indoor:Locations, it is difficult to click them on a map, because the coordinates are very close to each other. The following graph demonstrates the problem with indoor:Locations of the institute building:
The solution is to aggregate the indoor:Locations to a single marker representation:
Therefore each indoor:Location has to be connected with the relationship -[HAS_PARENT_LOCATION]->
to a so called abstract:Location.
An abstract:Location is a representative location to provide the coordinates for the marker, which means all related indoor:Locations can have empty coordinates (lng: 0.0, lat: 0.0
or lng: null, lat: null
).
It is highly recommended to connect all indoor:Locations to an abstract:Location, so that the transition between outdoor and indoor comes clear and is well defined for later.
For specifying a Location use the location_type
property, which can have the following values:
indoor
outdoor
abstract
The parent location approach also allows the normal usage of -[CONNECTED_TO]->
relationships between
indoor:Locations as well as outdoor:Locations. The following example shows a graph of the institute building and the relationships between the Locations:
3.4. RECORDED_AT
Video (1) -[RECORDED_AT]->
(1) i/o:Location
This relationship is used to attach one (or more) video(s) to a location, where they have been recorded.
PROPERTIES
preferred
(Boolean): the default value istrue
and becomes necessary, if you have multiple videos, which were recorded at two different times (for example: one at daylight, one at nightlight). To specify, which video should be played first in the IVE, set this property totrue
for your starting video and for all other videos tofalse
.
3.5. EMBEDDED_IN
-[EMBEDDED_IN]->
(1..n) Video
This relationship is used to embed an overlay into a video. Its spatial orientation and position inside the video differs from video to video. Therefore these parameters are stored inside this relationship, so that an overlay can be used multiple times.
PROPERTIES
w
(Float): width of the overlayh
(Float): height of the overlayd
(Float): distortion of the overlayx
(Float): translation of the overlay on the x-axisy
(Float): translation of the overlay on the y-axisz
(Float): translation of the overlay on the z-axisrx
(Float): rotation of the overlay on the x-axisry
(Float): rotationof the overlay on the y-axisrz
(Float): rotationof the overlay on the z-axisdisplay
(Boolean): the default value istrue
. If you want to hide the overlay by default, set the value tofalse
, so when you enter a location in the IVE the overlay is hidden and can be enabled manually.
4. Available scenarios
If you want to test the IVE and don’t want to create own data, you can import the data of the following scenarios. All required data are stored in CSV files in the folder data/*
. Use the setup-script to automatically import all files.
4.1. First scenario
This scenario contains the area of Münsters city center as well as an overlay.
MATCH (n)-[r:belongs_to]->(s:Scenarios) WHERE s.s_id='s_01' RETURN n;
4.2. Second scenario
This scenario contains the area around and from Münsters main station as well as two overlays.
MATCH (n)-[r:belongs_to]->(s:Scenarios) WHERE s.s_id='s_02' RETURN n;
4.3. Third scenario
This scenario contains the GEO-1 building and was used in a bachelor thesis. The thesis focused on a voice control system for the IVE.
MATCH (n)-[r:belongs_to]->(s:Scenarios) WHERE s.s_id='s_03' RETURN n;
4.4. Fourth scenario
This scenario contains in much more detailed way the second floor of the GEO-1 building, but the relationships of this scenario have not been finished until yet.
MATCH (n)-[r:belongs_to]->(s:Scenarios) WHERE s.s_id='s_04' RETURN n;