def testCooper(): ies.setDataUri( dataUri ) #Make sure that any auto-generated IDs follow the URI stub we're using. mmsis = ['234234000', '235083854', '356793000'] startTime = "2021-08-11T10:47:48" endTime = "2021-08-11T14:01:22" vesselSTs = [ "2021-08-11T10:47:48", "2021-08-11T10:47:48", "2021-08-11T11:18:15" ] #The third vessel joins late vesselETs = [ "2021-08-11T14:01:22", "2021-08-11T12:50:41", "2021-08-11T14:01:22" ] #The second vessel leaves early cooper = cooperingAtSea(iesGraph, startTime, endTime, mmsis, 0.3, "2021-08-12T09:00:00", True, vesselSTs, vesselETs) ies.saveRdf(iesGraph, "track-analytics.ttl")
def testDestination(): predictedDestination( iesGraph, '234234000', [["Pontefract", "GB POF", "GBR", 0.5], ["Hull", "GB HUL", "GBR", 0.3], ["Ackworth", "GB AMT ", "GBR", 0.2]], "2021-08-12T09:00:00") ies.saveRdf(iesGraph, "ta-pred-dest.ttl")
def exportTrack(iesGraph, track, output="file", epsgCode="4326"): #The track dictionary should already have min and max timestamps for the pings it contains ies.initialiseGraph(iesGraph=iesGraph) #Add a parent observation obs = ies.instantiate(iesGraph=iesGraph, _class=ies.observation) ies.startsIn(iesGraph=iesGraph, item=obs, timeString=track["minDateTime"].isoformat()) ies.endsIn(iesGraph=iesGraph, item=obs, timeString=track["maxDateTime"].isoformat()) measures = dict({}) #Now add the measure classes for Speed Over Ground and Course Over Ground...and knots for the Unit Of Measure measures["sogClass"] = ies.instantiate(iesGraph=iesGraph, _class=ies.classOfMeasure, instance=URIRef(ies.dataUri + "SpeedOverGround")) measures["cogClass"] = ies.instantiate(iesGraph=iesGraph, _class=ies.classOfMeasure, instance=URIRef(ies.dataUri + "CourseOverGround")) measures["knots"] = ies.instantiate(iesGraph=iesGraph, _class=ies.unitOfMeasure, instance=URIRef(ies.dataUri + "Knots")) measures["degTN"] = ies.instantiate(iesGraph=iesGraph, _class=ies.unitOfMeasure, instance=URIRef(ies.dataUri + "DegreesTrueNorth")) ies.addName(iesGraph=iesGraph, item=measures["sogClass"], nameString="Speed Over Ground") ies.addName(iesGraph=iesGraph, item=measures["cogClass"], nameString="Course Over Ground") ies.addName(iesGraph=iesGraph, item=measures["knots"], nameString="knots") ies.addName(iesGraph=iesGraph, item=measures["degTN"], nameString="degrees true North") #add the location transponder - We don't know this is necessarily a vessel. All we know is that we have a LocationTransponder. lt = ies.createLocationTransponder(iesGraph=iesGraph, mmsi=track["id"]) obsvd = ies.instantiate(iesGraph=iesGraph, _class=ies.observedTarget) ies.addToGraph(iesGraph=iesGraph, subject=obsvd, predicate=ies.ipo, obj=lt) ies.addToGraph(iesGraph=iesGraph, subject=obsvd, predicate=ies.ipi, obj=obs) #now go through the individual location observations and add those... for ping in track["pings"]: createLocationObservation(iesGraph=iesGraph, ping=ping, transponder=lt, obs=obs, measures=measures) if output == "kafka": ies.sendToKafka(iesGraph=iesGraph, kProducer=kafkaBroker, kTopic=iesKafkaTopic) else: ies.saveRdf( iesGraph, './data/track' + track["id"] + '-' + str(track["counter"]) + '.ies.ttl')
import pickle import ies_stone_soup as iesss import ies_functions as ies import stonesoup import numpy as np from stonesoup.models.measurement.linear import LinearGaussian measurement_model = LinearGaussian(ndim_state=4, mapping=[0, 2], noise_covar=np.diag([15, 15])) file = open("./ss.pkl", "rb") tracks = pickle.load(file) iesGraph = ies.initialiseGraph() for track in tracks: print(track.metadata) iesss.exportStoneSoupTrack(iesGraph, track.id, track.states, measurement_model.mapping, targetId=track.metadata["MMSI"], epsgCode=32630) ies.saveRdf(iesGraph, "./ss.ttl")
assr = ies.instantiate(iesGraph=iesGraph, _class=ies.assessor) ies.addToGraph(iesGraph=iesGraph, subject=assr, predicate=ies.ipi, obj=assessment) ies.addToGraph(iesGraph=iesGraph, subject=assr, predicate=ies.ipo, obj=inferenceSystem) #Now put the assessment in a period - i.e. when the assessment was done ies.putInPeriod(iesGraph=iesGraph, item=assessment, timeString="2007-01-02T09:17:04") #Set up the rdf graph graph = ies.initialiseGraph(None) #Now say one is following the other (they're not, but I didn't have any data where ships followed each other) #First we create an object for the system that detected it. hal = ies.instantiate(iesGraph=graph, _class=ies.system) ies.addName(iesGraph=graph, item=hal, nameString="HAL") #now create the following pattern, with our system included as the assessor following(iesGraph=graph, followerMMSI="367000150", followedMMSI="366952890", startTimeStamp="2007-01-01T00:00:09", endTimeStamp="2007-01-01T00:05:40", inferenceSystem=hal) ies.saveRdf(graph=graph, filename='following.ies.ttl')