- g_debug("GisPluginRadar: _load_gui_success - %p", radar);
- /* Clear existing items */
- gdk_threads_enter();
- GtkWidget *child = gtk_bin_get_child(GTK_BIN(self->config_body));
- if (child)
- gtk_widget_destroy(child);
-
- gdouble elev;
- guint rows = 1, cols = 1, cur_cols;
- gchar row_label_str[64], col_label_str[64], button_str[64];
- GtkWidget *row_label, *col_label, *button = NULL, *elev_box = NULL;
- GtkWidget *table = gtk_table_new(rows, cols, FALSE);
-
- for (guint vi = 0; vi < radar->h.nvolumes; vi++) {
- Volume *vol = radar->v[vi];
- if (vol == NULL) continue;
- rows++; cols = 1; elev = 0;
-
- /* Row label */
- g_snprintf(row_label_str, 64, "<b>%s:</b>", vol->h.type_str);
- row_label = gtk_label_new(row_label_str);
- gtk_label_set_use_markup(GTK_LABEL(row_label), TRUE);
- gtk_misc_set_alignment(GTK_MISC(row_label), 1, 0.5);
- gtk_table_attach(GTK_TABLE(table), row_label,
- 0,1, rows-1,rows, GTK_FILL,GTK_FILL, 5,0);
-
- for (guint si = 0; si < vol->h.nsweeps; si++) {
- Sweep *sweep = vol->sweep[si];
- if (sweep == NULL || sweep->h.elev == 0) continue;
- if (sweep->h.elev != elev) {
- cols++;
- elev = sweep->h.elev;
-
- /* Column label */
- g_object_get(table, "n-columns", &cur_cols, NULL);
- if (cols > cur_cols) {
- g_snprintf(col_label_str, 64, "<b>%.2f°</b>", elev);
- col_label = gtk_label_new(col_label_str);
- gtk_label_set_use_markup(GTK_LABEL(col_label), TRUE);
- gtk_widget_set_size_request(col_label, 50, -1);
- gtk_table_attach(GTK_TABLE(table), col_label,
- cols-1,cols, 0,1, GTK_FILL,GTK_FILL, 0,0);
- }
-
- elev_box = gtk_hbox_new(TRUE, 0);
- gtk_table_attach(GTK_TABLE(table), elev_box,
- cols-1,cols, rows-1,rows, GTK_FILL,GTK_FILL, 0,0);
- }
-
-
- /* Button */
- g_snprintf(button_str, 64, "%3.2f", elev);
- button = gtk_radio_button_new_with_label_from_widget(
- GTK_RADIO_BUTTON(button), button_str);
- gtk_widget_set_size_request(button, -1, 26);
- //button = gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(button));
- //gtk_widget_set_size_request(button, -1, 22);
- g_object_set(button, "draw-indicator", FALSE, NULL);
- gtk_box_pack_end(GTK_BOX(elev_box), button, TRUE, TRUE, 0);
-
- g_object_set_data(G_OBJECT(button), "type", vol->h.type_str);
- g_object_set_data(G_OBJECT(button), "sweep", sweep);
- g_signal_connect(button, "clicked", G_CALLBACK(_on_sweep_clicked), self);
- }
- }
- gtk_container_add(GTK_CONTAINER(self->config_body), table);
- gtk_widget_show_all(table);
- gdk_threads_leave();
+ static gdouble min_dist = EARTH_R / 30;
+ RadarSite *site = _site;
+
+ /* Calculate distance, could cache xyz values */
+ gdouble eye_xyz[3], site_xyz[3];
+ lle2xyz(lat, lon, elev, &eye_xyz[0], &eye_xyz[1], &eye_xyz[2]);
+ lle2xyz(site->city->pos.lat, site->city->pos.lon, site->city->pos.elev,
+ &site_xyz[0], &site_xyz[1], &site_xyz[2]);
+ gdouble dist = distd(site_xyz, eye_xyz);
+
+ /* Load or unload the site if necessasairy */
+ if (dist <= min_dist && dist < elev*1.25 && site->status == STATUS_UNLOADED)
+ radar_site_load(site);
+ else if (dist > 2*min_dist && site->status != STATUS_UNLOADED)
+ radar_site_unload(site);