Beheer

Verwerking AIS data (BIVAS Console)

Marco Timmer 2021-02-22 13:27:54

Om AIS-data te verwerken en passages uit deze data te bepalen is functionaliteit ontwikkeld welke via de applicatie BIVAS Console kan worden aangeroepen. De applicatie maakt het mogelijk om via de console de volgende opdrachten uit te voeren:

  1. Het inlezen en opslaan van AIS-data naar een database ("voorbewerking")
  2. Creëren van routes op basis van AIS-data ("route bepaling")
  3. Bepalen van (sluis)passages ("rapportage")

Deze stappen kunnen los van elkaar uitgevoerd worden, maar ook met elkaar gecombineerd binnen één actie. Zo kan bijvoorbeeld eerst alle AIS-data ingelezen worden om vervolgens voor een specifiek deel van de dataset de routes en de passages te bepalen. Daarnaast is het ook mogelijk om AIS-data in te lezen en, zonder deze op te slaan in de database, routes en sluispassages hieruit te bepalen.

Toepassing

De ontwikkelde functionaliteit kan worden aangeroepen door onderstaande opdracht uit te voeren in de command prompt:

1 Bivas.Console.Exe [Options] [Input …]

In de volgende tabel wordt een overzicht gegeven van de verschillende opties met een korte inhoudelijke omschrijving. De importbestanden dienen als laatste in de opdracht te worden opgegeven. Er kunnen meerdere bestanden tegelijkertijd worden meegegeven.

OptieOmschrijving
--BatchSize=<Integer> Het aantal records wat per keer verwerkt dient te worden. Deze waarde heeft geen invloed op de output. Standaard staat deze op 1000 ingesteld.
--Chronological De applicatie kan ervan uitgaan dat de AIS-data chronologisch is aangeleverd.
--Filter=<Expression> Alle AIS-data wordt gefilterd met het opgegeven filter. Binnen expressies kan gebruik worden gemaakt van de volgende identifiers: Latitude, Longitude, Ship.Length, Ship.Width, Ship.VesselType, Ship.HazardousCargo. En van de volgende operatoren: =, <, >, <=, >=, AND, OR, NOT.
--LoadPassages Passages worden uitgelezen vanuit database. Indien deze indicator wordt meegegeven moet er geen importbestand opgegeven worden. Ook worden er geen heuristieken toegepast.
--LoadPositions AIS-data wordt uit de database ingelezen. Indien deze indicator wordt meegegeven moet er geen importbestand opgegeven worden.
--MappingDistance=<FloatingPoint> Maximale afstand (kilometer) tussen een AIS-punt en een BIVAS-vaarweg/knooppunt om direct gekoppeld te worden aan een BIVAS-vaarweg/knooppunt. Standaard staat deze waarde op 0,1. Deze waarde wordt toegepast binnen de MapToNearestNode heuristiek.
--MaximumConnections=<Integer> Het maximaal aantal vaarwegen dat toegevoegd kan worden aan een deeltraject om de route opeenvolgend te maken. Indien er meer vaarwegen nodig zijn om de route aaneengesloten te houden, wordt de route opgeknipt in twee losse routes. Standaard staat deze waarde op 20. Deze waarde wordt toegepast binnen de MapToNearestNode heuristiek.
--MaximumPositionDistance=<FloatingPoint> Maximale afstand (kilometer) tussen twee opeenvolgende datapunten. Indien een volgend punt in afstand meer dan deze waarde van het laatste punt verschilt wordt dit punt als outlier beschouwd en buiten beschouwing gelaten. Standaard staat deze waarde op 20.
--MaximumPositionInterval=<Integer> Maximale tijd (milliseconde) tussen twee opeenvolgende datapunten. Indien een volgend punt in tijd meer dan deze waarde van het laatste punt verschilt wordt de route voor het betreffende schip opgeknipt. Standaard staat deze waarde op 3.600.000 (1 uur).
--MaximumSpeed=<FloatingPoint> Maximale snelheid (kilometer per uur) om het volgende datapunt te bereiken. De snelheid wordt geschat op basis van de tijd en afstand tussen twee opeenvolgende datapunten, hemelsbreed gezien. Indien de geschatte snelheid om het volgende punt te bereiken meer dan deze waarde is wordt dit punt als outlier beschouwd en buiten beschouwing gelaten. Standaard staat deze waarde op 50.
--MinimumPositionDistance=<FloatingPoint> Minimale afstand (kilometer) tussen twee opeenvolgende datapunten. Indien een volgend punt in afstand meer dan deze waarde van het laatste punt verschilt wordt dit punt meegenomen in de verdere bepaling. Standaard staat deze waarde op 0,1.
--MinimumPositionInterval=<Integer> Minimale tijd (milliseconde) tussen twee opeenvolgende datapunten. Indien een volgend punt in tijd meer dan deze waarde van het laatste punt verschilt wordt dit punt meegenomen in de verdere bepaling. Standaard staat deze waarde op 600.000 (10 minuten).
--Output=<Directory> Pad (absoluut) waarnaar de uitvoer wordt weggeschreven.
--PassageOutput=<Csv|GeoJson> Passages worden weggeschreven in het opgegeven formaat.
--PositionOutput=<GeoJson> Posities worden weggeschreven in het opgegeven formaat.
--SavePassages Passages worden opgeslagen in de database.
--SavePositions Posities worden opgeslagen in de database.
--Scenario=<Identifier> Identificatienummer van het BIVAS-scenario dat gebruikt moet worden voor de mapping op knooppunten en vaarwegen.
--SetupDatabase De database voor de output van de applicatie wordt geïnitialiseerd met de benodigde tabellen.
--Ships=<Range> Geeft een selectie van scheepsidentificatienummers waarvoor de actie wordt uitgevoerd. Dit kan voor een enkel identificatienummer (bijvoorbeeld --Ships=1 voor scheepsidentificatienummer 1), of een aaneengesloten reeks van identificatienummers (bijvoorbeeld --Ships=1-10 voor scheepsidentificatienummers 1 tot en met 10). Deze optie is te gebruiken in combinatie met LoadPositions en LoadPassages.
--Steps=<MapToNearestNode> Definieert welke heuristieken worden gebruikt bij het genereren van routes. Er wordt momenteel één heuristiek ondersteund (MapToNearestNode), waarbij per AIS-punt de meest dichtstbijzijnde BIVAS-knooppunt wordt gezocht.

Extra opmerkingen bij de verschillende opties:

  • Er kan gebruik worden gemaakt van een database om posities en passages weg te schrijven. De verwijzing naar deze database wordt ingesteld binnen de configuratie van de applicatie.
  • De verwijzing naar de BIVAS-database waaruit het netwerk geëxtraheerd wordt ingesteld binnen de configuratie van de applicatie.
  • Decimale getallen (floating points) dienen te worden ingevoerd met een punt (.) als decimaalteken.

Voorbeelden

Met het volgende commando wordt het gehele proces in één keer doorlopen. Uit het importbestand "Data.gz" met daarin de AIS-data worden de posities geëxtraheerd, routes gecreëerd en passages worden bepaald. De projectie van de posities wordt uitgevoerd op het netwerk van scenario 53 binnen de gekoppelde BIVAS-database. De gevonden passages worden tot slot weggeschreven naar het bestand "ArcPassages.csv" in het opgegeven pad.

1 2 Bivas.Console.Exe --Steps=MapToNearestNode --Scenario=53 --PassageOutput=Csv --Output=D:\Output\ D:\Input\Data.gz

Het is ook mogelijk om meerdere importbestanden in dezelfde opdracht in te laten lezen. Met het volgende voorbeeld worden drie bestanden met AIS-data ingelezen, verwerkt naar posities en opgeslagen in de database.

1 2 Bivas.Console.Exe --SetupDatabase --SavePositions "D:\Input\Data1.gz" D:\Input\Data2.gz D:\Input\Data3.gz

Om op basis van reeds geïmporteerde posities routes te creëren en de passages weg te schrijven naar een database worden de onderstaande opdrachten gebruikt. In dit voorbeeld wordt vanwege de performance (bijv. het geheugengebruik) de opdrachten ‘opgeknipt’ in twee delen op basis van het scheepsidentificatienummer.

1 2 3 4 Bivas.Console.Exe --LoadPositions --Steps=MapToNearestNode --Scenario=53 --Chronological --BatchSize=10000 --MinimumPositionInterval=600000 --MaximumConnections=20 --MinimumPositionDistance=0.1 --Ships="1-2000" --SavePassages
1 2 3 4 Bivas.Console.Exe --LoadPositions --Steps=MapToNearestNode --Scenario=53 --Chronological --BatchSize=10000 --MinimumPositionInterval=600000 --MaximumConnections=20 --MinimumPositionDistance=0.1 --Ships="2001-99999" --SavePassages

Met de volgende drie commando’s worden de verschillende exports uitgevoerd voor de schepen met identificatienummers 11 en 12. Het resultaat van deze opdrachten is één CSV-bestand met de passages voor beide schepen, twee GeoJSON-bestanden voor de passages en twee voor de posities. Er wordt namelijk voor ieder schip een individueel GeoJSON-bestand gegenereerd voor zowel de posities als de passages.

1 2 Bivas.Console.Exe --Scenario=53 --LoadPassages --PassageOutput=Csv --Output=D:\Output\ --Ships=11-12
1 2 Bivas.Console.Exe --Scenario=53 --LoadPassages --PassageOutput=GeoJson --Output=D:\Output\ --Ships=11-12
1 2 Bivas.Console.exe --Scenario=53 --LoadPositions --PositionOutput=GeoJson --Output=D:\Output\ --Ships=11-12

Het volgende commando laat zien hoe de AIS-data ingelezen kan worden, routes bepaald kunnen worden en de passages berekend en geëxporteerd in een opdracht. Daarbij wordt ook een geografische filter toegepast door alleen de posities mee te nemen welke binnen het gestelde criterium vallen.

1 2 3 Bivas.Console.Exe --Steps=MapToNearestNode --Scenario=53 --Filter="(Latitude > 50) and (Latitude < 51) and (Longitude > 4) and (Longitude < 5)" --PassageOutput=Csv --Output=D:\Output\ D:\Input\bestand.gz

Merk op: In deze voorbeelden zijn de gerefereerde paden allen zonder spaties. Wanneer dit niet het geval is moet het pad omsloten worden door quotes (") en een extra backslash (\) toegevoegd worden. Het commando waarin de AIS-data in één keer wordt ingelezen, en verwerkt tot passages ziet er dan als volgt uit.

1 2 Bivas.Console.Exe --Steps=MapToNearestNode --Scenario=53 --PassageOutput=Csv --Output="D:\Output met spaties\\" D:\Input\Data.gz