Exemple #1
0
    def _identify_pattern(self, previous, current, next, cell):

        """
        Given three consecutive locations(from the same trace) identify a pair of numbers
        indicating the source_cell and the destination_cell relative the the following diagram
        where current would be 'x'.
        |---|---|---|  
        | 0 | 1 | 2 |
        |---|---|---|
        | 3 | x | 4 |
        |---|---|---|
        | 5 | 6 | 7 |
        |---|---|---|

        If a pattern is found then the current position is added to a list in the patterns dictionary
        """

        #get the total distance traveled
        total_distance = Trajectory.distance(previous.latitude, previous.longitude, current.latitude, current.longitude) + Trajectory.distance(next.latitude, next.longitude, current.latitude, current.longitude)
        in_speed = Trajectory.velocity(previous.latitude, previous.longitude, current.latitude, current.longitude, previous.time, current.time)
        out_speed = Trajectory.velocity(current.latitude, current.longitude, next.latitude, next.longitude, current.time, next.time)
        # If the distance traveled between the three points is moer than 15 mts
        if total_distance > 3 and in_speed < 30 and out_speed < 30:
            in_bearing = Trajectory.initial_heading(previous.latitude, previous.longitude, current.latitude, current.longitude)
            out_bearing = Trajectory.initial_heading(current.latitude, current.longitude, next.latitude, next.longitude)

            #Get a cardinal representation of the bearing
            in_direction = Trajectory.direction((in_bearing + 180) % 360) #reverse the bearing to get the incoming direction
            out_direction = Trajectory.direction(out_bearing)

            #Create a new key on the dictionary if the pattern hasn't been encountered before
            if  (in_direction, out_direction) not in cell.patterns:
                cell.patterns[in_direction,out_direction] = []

            cell.patterns[in_direction,out_direction].append(current)
Exemple #2
0
    def _edges_to_kml(self, output = "default.kml"):

        os.chdir("/home/moyano/Projects/Tracks/kml/")

        sys.stdout.write("\nWriting output to kml ... ")
        sys.stdout.flush()

        _file = open(output,"w")
        #Header
        _file.write("<?xml version='1.0' encoding='UTF-8'?>\n")
        _file.write( "<kml xmlns='http://www.opengis.net/kml/2.2'>\n")
        _file.write(  "<Document>\n")

        #Line Style)
        _file.write(  "<Style id='myStyle'>\n")
        _file.write(      "<LineStyle>\n")
        _file.write(        "<color>7f00ff00</color>\n")
        _file.write(        "<width>1</width>\n")
        _file.write(      "</LineStyle>\n")
        _file.write(      "<PolyStyle>\n")
        _file.write(        "<color>7f00ff00</color>\n")
        _file.write(      "</PolyStyle>\n")
        _file.write(  "</Style>\n")
       
               #Line Style)
        _file.write(  "<Style id='myStyle2'>\n")
        _file.write(      "<LineStyle>\n")
        _file.write(        "<color>ffff0000</color>\n")
        _file.write(        "<width>4</width>\n")
        _file.write(      "</LineStyle>\n")
        _file.write(      "<PolyStyle>\n")
        _file.write(        "<color>ff0000ff</color>\n")
        _file.write(      "</PolyStyle>\n")
        _file.write(  "</Style>\n")

        _file.write(  "<Style id='myStyle3'>\n")
        _file.write(      "<LineStyle>\n")
        _file.write(        "<color>df0000ff</color>\n")
        _file.write(        "<width>4</width>\n")
        _file.write(      "</LineStyle>\n")
        _file.write(      "<PolyStyle>\n")
        _file.write(        "<color>ff0000ff</color>\n")
        _file.write(      "</PolyStyle>\n")
        _file.write(  "</Style>\n")
        count = 0
        for edge in self.pattern_edges:
            count +=1
            _in = edge[0]
            _out = edge[1]

            _dir = Trajectory.direction(Trajectory.initial_heading(_in.latitude, _in.longitude, _out.latitude, _out.longitude))
   
            _file.write( "<Placemark>\n")
            _file.write( "<name>" + str(count) + "</name>\n")
            if _dir == '0' or _dir == '1' or _dir == '2' or _dir == '4':
                _file.write( "<styleUrl>#myStyle2</styleUrl>\n")
            else:
                _file.write( "<styleUrl>#myStyle3</styleUrl>\n")

            _file.write( "<LineString>\n")
            _file.write(  "<altitudeMode>relative</altitudeMode>\n")
            _file.write(  "<coordinates>\n")
            _file.write(      str(_in.longitude) + "," + str(_in.latitude) + "\n")
            _file.write(      str(_out.longitude) + "," + str(_out.latitude) + "\n")
            _file.write(   "</coordinates>\n")
            _file.write(  "</LineString>\n")
            _file.write( "</Placemark>\n")

        #Print the grid

        for k in self.all_nodes.iterkeys():
            node = self.all_nodes[k]
            _file.write( "<Placemark>\n")
            _file.write( "<name>" + str(count) + "</name>\n")
            _file.write( "<styleUrl>#myStyle</styleUrl>\n")
            _file.write( "<LineString>\n")
            _file.write(  "<altitudeMode>relative</altitudeMode>\n")
            _file.write(  "<coordinates>\n")
            _file.write(      str(node.x0) + "," + str(node.y0) + "\n")
            _file.write(      str(node.x1) + "," + str(node.y0) + "\n")
            _file.write(      str(node.x1) + "," + str(node.y1) + "\n")
            _file.write(      str(node.x0) + "," + str(node.y1) + "\n")
            _file.write(      str(node.x0) + "," + str(node.y0) + "\n")
            _file.write(   "</coordinates>\n")
            _file.write(  "</LineString>\n")
            _file.write( "</Placemark>\n")
        #Close tags
        _file.write(  "</Document>\n")       
        _file.write( "</kml>\n")
        _file.close()

        sys.stdout.write("\nDone ... ")
        sys.stdout.flush()