void gpsFixCallback (const gps_common::GPSFix::ConstPtr & msg)
{
    // **** get GTK thread lock
    gdk_threads_enter ();

    gint pixel_x, pixel_y;

    OsmGpsMapPoint *point = osm_gps_map_point_new_degrees (msg->latitude, msg->longitude);
    osm_gps_map_convert_geographic_to_screen (data->map, point, &pixel_x, &pixel_y);

    if (OSM_IS_GPS_MAP (data->map))
    {

        // **** Center map on gps data received
        if (data->lock_view)
        {
            update_uav_pose_osd (data->osd, TRUE, pixel_x, pixel_y);
            osm_gps_map_set_center (data->map, msg->latitude, msg->longitude);
        }
        else
        {
            update_uav_pose_osd (data->osd, FALSE, pixel_x, pixel_y);
            osm_gps_map_gps_clear (data->map);
        }

        // **** Add point to the track
        osm_gps_map_track_add_point (data->uav_track, point);
    }

    // **** release GTK thread lock
    gdk_threads_leave ();
}
Example #2
0
int
main (int   argc,
      char *argv[])
{
	OsmGpsMap *map;
	OsmGpsMapPolygon* poly;
    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "Window");
    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);


	map = g_object_new (OSM_TYPE_GPS_MAP, NULL);
	gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(map));

	poly = osm_gps_map_polygon_new();
	OsmGpsMapTrack* polytrack = osm_gps_map_track_new();

	OsmGpsMapPoint* p1, *p2, *p3;
	p1 = osm_gps_map_point_new_radians(1.25663706, -0.488692191);
	p2 = osm_gps_map_point_new_radians(1.06465084, -0.750491578);
	p3 = osm_gps_map_point_new_radians(1.064650849, -0.191986218);

	osm_gps_map_track_add_point(polytrack, p1);
	osm_gps_map_track_add_point(polytrack, p2);
	osm_gps_map_track_add_point(polytrack, p3);

	g_object_set(poly, "track", polytrack, NULL);
	g_object_set(poly, "editable", TRUE, NULL);

	osm_gps_map_polygon_add(map, poly);

	gtk_widget_show (GTK_WIDGET(map));
    gtk_widget_show (window);

    gtk_main ();

    return 0;
}
Example #3
0
static gboolean
on_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
    OsmGpsMapPoint coord;
    float lat, lon;
    OsmGpsMap *map = OSM_GPS_MAP(widget);
    OsmGpsMapTrack *othertrack = OSM_GPS_MAP_TRACK(user_data);

    if (event->type == GDK_3BUTTON_PRESS) {
        if (event->button == 1) {
            if (g_last_image)
                osm_gps_map_image_remove (map, g_last_image);
        }
        if (event->button == 3) {
            osm_gps_map_track_remove(map, othertrack);
        }
    }

    if (event->type == GDK_2BUTTON_PRESS) {
        osm_gps_map_convert_screen_to_geographic(map, event->x, event->y, &coord);
        osm_gps_map_point_get_degrees(&coord, &lat, &lon);
        if (event->button == 1) {
            osm_gps_map_gps_add (map,
                                 lat,
                                 lon,
                                 g_random_double_range(0,360));
        }
        if (event->button == 3) {
            osm_gps_map_track_add_point(othertrack, &coord);
        }
    }

    if (event->type == GDK_BUTTON_PRESS) {
        if (event->button == 2) {
        osm_gps_map_convert_screen_to_geographic(map, event->x, event->y, &coord);
        osm_gps_map_point_get_degrees(&coord, &lat, &lon);
            g_last_image = osm_gps_map_image_add (
                                    map,
                                    lat,
                                    lon,
                                    g_star_image);
        }
    }
    return FALSE;
}
void fcuGpsCallback(const sensor_msgs::NavSatFixConstPtr& gps) {
	// **** get GTK thread lock
	gdk_threads_enter();
	//fcuGpsData_ = (*gps);

	if (gps->status.status == sensor_msgs::NavSatStatus::STATUS_NO_FIX) {
		gtk_container_remove(GTK_CONTAINER(data->box_Gps), GTK_WIDGET (data->status_ok_icon_gps));
		gtk_box_pack_end(GTK_BOX (data->box_Gps), data->status_fail_icon_gps, TRUE, TRUE, 0);
	}
	else {
		gtk_container_remove(GTK_CONTAINER(data->box_Gps), GTK_WIDGET (data->status_fail_icon_gps));
		gtk_box_pack_end(GTK_BOX (data->box_Gps), data->status_ok_icon_gps, TRUE, TRUE, 0);

		gint pixel_x, pixel_y;

		ROS_DEBUG_STREAM("GPS coordinates: " << gps->latitude << ", " << gps->longitude);
		ROS_DEBUG_STREAM("GPS altitude information: " << gps->altitude);

		OsmGpsMapPoint *point = osm_gps_map_point_new_degrees(gps->latitude, gps->longitude);
		osm_gps_map_convert_geographic_to_screen(data->map, point, &pixel_x, &pixel_y);

		if (OSM_IS_GPS_MAP (data->map)) {
			// **** Centre map on GPS data received
			if (data->lock_view) {
				update_uav_pose_osd(data->osd, TRUE, pixel_x, pixel_y);
				osm_gps_map_set_center(data->map, gps->latitude, gps->longitude);
			}
			else {
				update_uav_pose_osd(data->osd, FALSE, pixel_x, pixel_y);
				osm_gps_map_gps_clear(data->map);
			}
			// **** Add point to the track
			osm_gps_map_track_add_point(data->uav_track, point);
		}
	}

	// **** release GTK thread lock
	gdk_threads_leave();
}