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