def create_imagefile(options, filename, latlon, ground_width, path_objs, mission_obj, fence_obj, width=600, height=600, used_flightmodes=[], mav_type=None): '''create path and mission as an image file''' mt = mp_tile.MPTile(service=options.service) map_img = mt.area_to_image(latlon[0], latlon[1], width, height, ground_width) while mt.tiles_pending() > 0: print("Waiting on %u tiles" % mt.tiles_pending()) time.sleep(1) map_img = mt.area_to_image(latlon[0], latlon[1], width, height, ground_width) # a function to convert from (lat,lon) to (px,py) on the map pixmapper = functools.partial(pixel_coords, ground_width=ground_width, mt=mt, topleft=latlon, width=width) for path_obj in path_objs: path_obj.draw(map_img, pixmapper, None) if mission_obj is not None: for m in mission_obj: m.draw(map_img, pixmapper, None) if fence_obj is not None: fence_obj.draw(map_img, pixmapper, None) if (options is not None and mav_type is not None and options.colour_source == "flightmode"): tuples = [ (mode, colour_for_flightmode(mav_type, mode)) for mode in used_flightmodes.keys() ] legend = mp_slipmap.SlipFlightModeLegend("legend", tuples) legend.draw(map_img, pixmapper, None) map_img = cv2.cvtColor(map_img, cv2.COLOR_BGR2RGB) cv2.imwrite(filename, map_img)
def mavflightview_show(path, wp, fen, used_flightmodes, mav_type, options, instances, title=None, timelim_pipe=None): if not title: title='MAVFlightView' boundary_path = [] for p in path[0]: boundary_path.append((p[0],p[1])) fence = fen.polygon() if options.fencebounds: for p in fence: boundary_path.append((p[0],p[1])) bounds = mp_util.polygon_bounds(boundary_path) (lat, lon) = (bounds[0]+bounds[2], bounds[1]) (lat, lon) = mp_util.gps_newpos(lat, lon, -45, 50) ground_width = mp_util.gps_distance(lat, lon, lat-bounds[2], lon+bounds[3]) while (mp_util.gps_distance(lat, lon, bounds[0], bounds[1]) >= ground_width-20 or mp_util.gps_distance(lat, lon, lat, bounds[1]+bounds[3]) >= ground_width-20): ground_width += 10 path_objs = [] for i in range(len(path)): if len(path[i]) != 0: path_objs.append(mp_slipmap.SlipPolygon('FlightPath[%u]-%s' % (i,title), path[i], layer='FlightPath', linewidth=2, colour=(255,0,180))) plist = wp.polygon_list() mission_obj = None if len(plist) > 0: mission_obj = [] for i in range(len(plist)): mission_obj.append(mp_slipmap.SlipPolygon('Mission-%s-%u' % (title,i), plist[i], layer='Mission', linewidth=2, colour=(255,255,255))) else: mission_obj = None if len(fence) > 1: fence_obj = mp_slipmap.SlipPolygon('Fence-%s' % title, fen.polygon(), layer='Fence', linewidth=2, colour=(0,255,0)) else: fence_obj = None kml = getattr(options,'kml',None) if kml is not None: kml_objects = load_kml(kml) else: kml_objects = None if options.imagefile: create_imagefile(options, options.imagefile, (lat,lon), ground_width, path_objs, mission_obj, fence_obj, kml_objects, used_flightmodes=used_flightmodes, mav_type=mav_type) else: global multi_map if options.multi and multi_map is not None: map = multi_map else: map = mp_slipmap.MPSlipMap(title=title, service=options.service, elevation=True, width=600, height=600, ground_width=ground_width, lat=lat, lon=lon, debug=options.debug, show_flightmode_legend=options.show_flightmode_legend, timelim_pipe=timelim_pipe) if options.multi: multi_map = map for path_obj in path_objs: map.add_object(path_obj) if mission_obj is not None: display_waypoints(wp, map) if fence_obj is not None: map.add_object(fence_obj) if kml_objects is not None: for obj in kml_objects: map.add_object(obj) for flag in options.flag: a = flag.split(',') lat = a[0] lon = a[1] icon = 'flag.png' if len(a) > 2: icon = a[2] + '.png' icon = map.icon(icon) map.add_object(mp_slipmap.SlipIcon('icon - %s' % str(flag), (float(lat),float(lon)), icon, layer=3, rotation=0, follow=False)) if options.colour_source == "flightmode": tuples = [ (mode, colour_for_flightmode(mav_type, mode)) for mode in used_flightmodes.keys() ] map.add_object(mp_slipmap.SlipFlightModeLegend("legend", tuples)) elif options.colour_source == "type": tuples = [ (t, map_colours[instances[t]]) for t in instances.keys() ] map.add_object(mp_slipmap.SlipFlightModeLegend("legend", tuples)) else: print("colour-source: min=%f max=%f" % (colour_source_min, colour_source_max))