gint16 a_dems_list_get_elev_by_coord ( GList *dems, const VikCoord *coord ) { static struct UTM utm_tmp; static struct LatLon ll_tmp; GList *iter = dems; VikDEM *dem; gint elev; while ( iter ) { dem = a_dems_get ( (gchar *) iter->data ); if ( dem ) { if ( dem->horiz_units == VIK_DEM_HORIZ_LL_ARCSECONDS ) { vik_coord_to_latlon ( coord, &ll_tmp ); ll_tmp.lat *= 3600; ll_tmp.lon *= 3600; elev = vik_dem_get_east_north(dem, ll_tmp.lon, ll_tmp.lat); if ( elev != VIK_DEM_INVALID_ELEVATION ) return elev; } else if ( dem->horiz_units == VIK_DEM_HORIZ_UTM_METERS ) { vik_coord_to_utm ( coord, &utm_tmp ); if ( utm_tmp.zone == dem->utm_zone && (elev = vik_dem_get_east_north(dem, utm_tmp.easting, utm_tmp.northing)) != VIK_DEM_INVALID_ELEVATION ) return elev; } } iter = iter->next; } return VIK_DEM_INVALID_ELEVATION; }
static void dem_layer_draw ( VikDEMLayer *vdl, VikViewport *vp ) { GList *dems_iter = vdl->files; VikDEM *dem; /* search for SRTM3 90m */ if ( vdl->source == DEM_SOURCE_SRTM ) srtm_draw_existence ( vp ); #ifdef VIK_CONFIG_DEM24K else if ( vdl->source == DEM_SOURCE_DEM24K ) dem24k_draw_existence ( vp ); #endif while ( dems_iter ) { dem = a_dems_get ( (const char *) (dems_iter->data) ); if ( dem ) vik_dem_layer_draw_dem ( vdl, vp, dem ); dems_iter = dems_iter->next; } }