Vector Layer
The SmartOpenHamburg model implements a number of vector-layers (more about vector-layers and how to define them can be found here).
Vector layers are used in the model to map environmental information of the city. This environmental information includes the following types:
- Point Layer
- Point of interests
- Public transport stations
- Polygon Layer
- Landuse Layer data
- Buildings footprints
- Line Layer
- Walk network
- Drive network
- Bicycle network
Point of Interests
The VectorPoiLayer (POI) is a point layer that includes service points. It supports the Daily Schedule Model of the Citizen Agents.
The VectorPoiLayer is used to fulfill the Freetime category.

Public Transport Stations
The public transport layer is a point layer that includes public train stations, bus stops and landing stages, decoupled from the POI layer. It can be used to identify multimodal routes for public transport.
Landuse Layer
Der Landuse Layer wird verwendet um Service Gebiete in der Stadt zu identifizieren, anhand dere der Tageplan des Citizen Agenten ausgelegt werden kann. Er enthält weitere nicht nach Service Punkten benannnte Orte wie Grünflächen oder Inndustrie Bezirke. Desweiteren wird er verwendet um Wohnsitutation in der Stadt abzubilden um daraus die Home Lokalität im Tagesplan zu ermitteln.

Die obige Abbildung zeigt den Landuse Layer mit hervorgehobenen residential (blau) Bezirken und allen anderen Bezirken (orange).
K-NN Anfrange könen an den VectorLanduseLayer gestellt werden um nach naheliegenden Grünflächen zu suchen:
var nearestLands = VectorLanduseLayer.Explore(new []{9.941650, 53.587268}, 100, 1, land => land.Type == "grass");
Buildings Footprint
The Buildings Footprint is multi-polygon based layer and represents the positioned buildings of the city to support the categories for using the Daily Schedule Model
A VectorBuildingsLayer can be used similar to the VectorLanduseLayer to search for nearby service locations. The following figure shows the integrated buildings' footprint of Hamburg, highlighting the universities (red):

The following code searches for a supermarket to fulfill Errands:
var nearestShops = VectorLanduseLayer.Explore(new []{9.941650, 53.587268}, 100, 1, buildings => land.Type == "supermarket");
Modality Networks
To map the areas in which agents can move and to differentiate within the modality route planning, a separate network is provided for each available modality.
Networks are integrated at runtime and implemented in the model by the SpatialGraphEnvironment.
We differentiate between several nets, since certain routes are only passable for a subset of modalities to a limited extent. The following picture shows the integrated network for vehicle and walk modality:

The walk network is managed by the CitizenLayer for the walk modality, the CarLayer for the drive modality and the BicycleLayer for the bicycle modality. The networks contain the moving agents can be queried against other agents, obstacles or to resolve multi-modality routes.
CarParkingLayer
A CarParkingLayer is a VectorLayer that holds CarParkingSpaces.
It can be filled with data that hold the geocoordinates of parking areas and parking spaces. Each feature of the imported vector layer maps to one CarParkingSpace in the CarParkingLayer. Below is a screenshot of a vector layer in QGIS that shows the geocoordinates of parking areas and parking spaces in the inner city of Hamburg, Germany.
A CarParkingLayer offers methods for managing and interacting with CarParkingSpace objects. Below are some examples:
Nearest(position, freeCapacity=true): returns theCarParkingSpacewith shortest distance toposition. The parameterfreeCapacityis optional and denotes if the requestedCarParkingSpaceshould be free at the time of calling (if it is set tofalse, the method will return theCarParkingSpacethat is closest toposition, regardless of its occupation status at the time of calling).Explore(position=null, maxDistance=-1, freeCapacity=true): returns a list ofCarParkingSpaceswith shortest distance (in ascending order) toposition. Ifpositionis not specified, the method uses the geocoordinates of the calling agent.maxDistanceis optional and denotes the radius in which the exploration should occur.freeCapacityis also optional and denotes whether the returnedCarParkingSpaceobjects should be free at the time of calling (if it is set tofalse, the method will return allCarParkingSpaceobjects within the exploration radius, regardless of their occupation status at the time of calling).
CarParkingSpace
Each feature of the imported vector layer maps to one CarParkingSpace in the CarParkingLayer. A feature of a vector layer contains an attribute area (in m²) which is used by the CarParkingLayer to compute the Capacity of each CarParkingSpace. Capacity has three categories:
- If
Capacity < 10, then theCarParkingSpacehas space for a singleCar - If
10 <= Capacity < 500, then the parking area of theCarParkingSpaceis divided into parking spaces of 15 m² each - If
Capacity >= 500, then the parking area of theCarParkingSpaceis divided into parking spaces of 20 m² each
A CarParkingSpace object can be interacted with via several methods. Below are some examples:
HasCapacity: returns whether theCarParkingSpacecurrently has free parking spacesEnter(Car)andLeave(Car): can be used by the calling agent to enter or leave (respectively) theCarParkingSpacewith his/herCar
Interaction with Parking Spaces at the Beginning and End of a Trip
A trip of an agent who travels from point A to point B using a Car can be divided into three sections (broadly speaking):
- Travel on foot from
Ato the position of theCarParkingSpacethat holds theCar - Travel from the position of the
CarParkingSpaceto theCarParkingspacewith shortest distance toBfor whichHasCapacity == true - If the
CarParkingSpaceis still free upon the agent's arrival, it is occupied and the agent moves on foot from its position toB. If theCarParkingSpacehas is occupied upon arrival, the agent will search for theCarParkingSpacewith shortest distance to his/her current position.