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