Awesome
DEM-Net Samples
Summary
Please note that the DEM tiles will be downloaded on first run if they are not present on the local system.
Elevation Samples
Get Elevation on SRTM_GL3 dataset from a location (lat/lng) :
// download missing DEM files if necessary
ElevationService.DownloadMissingFiles(DEMDataSet.SRTM_GL3, lat, lon);
// get elevation
GeoPoint point = ElevationService.GetPointElevation(lat, lon, DEMDataSet.SRTM_GL3);
double? elevation = point.Elevation;
Get Elevation from multiple locations at once :
This sample get elevations for all line/DEM intersections (it can return a LOT of points). The line can be generalized and return only points where elevation change is relevant AND keeping the local maximas.
IEnumerable<GeoPoint> geoPoints = ElevationService.GetPointsElevation(points, dataSet);
Get line elevation :
This sample get elevations for all line/DEM intersections (it can return a LOT of points). The line can be generalized and return only points where elevation change is relevant AND keeping the local maximas.
// Straight line crossing exactly Mt Ventoux peak
var elevationLine = GeometryService.ParseGeoPointAsGeometryLine(new GeoPoint(44.078873, 5.144899), new GeoPoint(44.225876, 5.351516));
// Download DEM tiles if necessary
ElevationService.DownloadMissingFiles(DEMDataSet.AW3D30, elevationLine.GetBoundingBox());
// Get line elevation : 1274 points !
var geoPoints = ElevationService.GetLineGeometryElevation(elevationLine, dataSet);
// Compute metrics (to get distance from origin)
var metrics = geoPoints.ComputeMetrics();
// Simplify line with 50m resolution
var simplified = DouglasPeucker.DouglasPeuckerReduction(geoPoints.ToList(), 50 /* meters */);
//
// Now we have only 20 points but all the peaks and coves
//
GPX Samples
Get elevations for a GPX track
// Read GPX points and flatten the segments into a list of points
var gpxFile = Path.Combine("SampleData", "lauzannier.gpx");
var points = GpxImport.ReadGPX_Segments(gpxFile)
.SelectMany(segment => segment);
// Retrieve elevation for each point on DEM
List<GeoPoint> gpxPointsElevated = ElevationService.GetPointsElevation(points, DEMDataSet.AW3D30)
.ToList();
Dataset samples
A DEM.Net Dataset is a public data source of DEM files. DEM.Net supports global datasets in OpenTopography.org.
Get a report of all downloaded files
RasterService.GenerateReportAsString();
This will produce this nice output :
glTF 3D samples
DEMDataSet dataset = DEMDataSet.AW3D30;
var modelName = $"Montagne Sainte Victoire {dataset.Name}";
// You can get your boox from https://geojson.net/ (save as WKT)
string bboxWKT = "POLYGON((5.54888 43.519525, 5.61209 43.519525, 5.61209 43.565225, 5.54888 43.565225, 5.54888 43.519525))";
var bbox = GeometryService.GetBoundingBox(bboxWKT);
var heightMap = _elevationService.GetHeightMap(bbox, dataset)
.ReprojectGeodeticToCartesian() // Reproject to 3857 (useful to get coordinates in meters)
.ZScale(2f) // Elevation exageration
.CenterOnOrigin();
// Triangulate height map
var mesh = _glTFService.GenerateTriangleMesh(heightMap);
var model = _glTFService.GenerateModel(mesh, modelName);
// Export Binary model file
_glTFService.Export(model, Directory.GetCurrentDirectory(), modelName, exportglTF: false, exportGLB: true);
This will run in less than 500ms and produce this nice model (you can natively open it in Windows 10's 3D viewer):
All elevations are linked together as a triangle mesh.
STL samples
Docs coming soon...
Imagery samples
Docs coming soon...