- Radar *radar = level2->radar;
- g_debug("GisPluginRadar: _load_gui_success - %p", radar);
- /* Clear existing items */
- _load_gui_clear(self);
-
- 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);
- }
+ static gdouble min_dist = EARTH_R / 20;
+ 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);
+}