Пример #1
0
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')
Пример #2
0
                iso3166ThreeLetterCountryCode,
                idClass=ies.iso3166A3,
                idUri=URIRef("http://iso.org/iso3166-alpha3#" +
                             iso3166ThreeLetterCountryCode + "_code"))
        ies.addToGraph(iesGraph, port, ies.ipao, country)
        sailing = ies.instantiate(iesGraph, ies.sailing)
        vu = ies.instantiate(iesGraph, ies.vehicleUsed)
        ies.addToGraph(iesGraph, vu, ies.ipo, vessel)
        ies.addToGraph(iesGraph, vu, ies.ipi, sailing)
        arrival = ies.instantiate(iesGraph, ies.arrival)
        ies.addToGraph(iesGraph, arrival, ies.ieo, sailing)
        ies.addToGraph(iesGraph, arrival, ies.il, port)
        ies.assessPwProbability(
            iesGraph, [sailing, vu, arrival], TrackAnalytics, probability,
            True, assessmentDT)  #Add the probability of the coopering


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")


iesGraph = ies.initialiseGraph()
TrackAnalytics = ies.createSystem(
    iesGraph, "TrackAnalytics",
    URIRef("http://trackanalytics.dstl.gov.uk/TrackAnalytics"))
testCooper()
#testDestination()
Пример #3
0
                trackDict[mmsi]["minDateTime"] = dt

            if len(trackDict[mmsi]["pings"]) >= batchSize:
                #batch size for track has been reached, time to export a track
                exportTrack(graph, trackDict[mmsi], output)
                trackDict[mmsi]["minDateTime"] = None
                trackDict[mmsi]["maxDateTime"] = None
                trackDict[mmsi]["pings"] = []
                trackDict[mmsi]["counter"] = trackDict[mmsi]["counter"] + 1
        else:
            trackDict[mmsi] = {
                "id": mmsi,
                "pings": [row],
                "minDateTime": dt,
                "maxDateTime": dt,
                "counter": 0
            }
        sleep(delay)


#Set up the rdf graph
graph = ies.initialiseGraph(None)
#Now process the data in the database (each row comes out as a tuple)
#   0       1               2       3       4       5       6           7           8       9           10          11      12      13      14      15
#  MMSI,    BaseDateTime,   LAT,    LON,    SOG,    COG,    Heading,    VesselName, IMO,    CallSign,   VesselType, Status, Length, Width, Draft,   Cargo
#The important thing here is whether or not you use Kafka. Change the global useKafka variable at the top of the script to change this.
processDatabase(dbFileName=aisDB,
                delay=pingDelay,
                batchSize=trackSize,
                output=iesOutput)