Skip to content

.NET API Cheat Sheet

This page contains short code snippets (C#) that demonstrate usage of the .NET API for some of the most common domain services.

Time Series

NuGet package: DHI.Services.TimeSeries

There are 6 different types (levels) of time series services:

  • CoreTimeSeriesService: the most basic time series service for retrieving time series values. Read-only.
  • TimeSeriesService: a time series service with more advanced methods for retrieving time series values - for example GetLastValueBefore(). Read-only.
  • DiscreteTimeSeriesService: a discrete time series service with a finite number of time series. Exposes a SetValues() method for adding or updating time series values to a given time series.
  • GroupedDiscreteTimeSeriesService: a discrete time series service with a finite number of time series. The time series are organized in hierarchical groups. Exposes for example a GetByGroup() method.
  • UpdatableTimeSeriesService: a discrete time series service with a finite number of time series. New time series can be added, removed and updated.
  • GroupedUpdatableTimeSeriesService: a discrete time series service with a finite number of time series. The time series are organized in hierarchical groups. New time series can be added, removed and updated.

Initializing a time series service

A specific time series repository instance is injected into a time series service.

// Dfs0
var timeSeriesRepository = new DHI.Services.Provider.MIKE.Dfs0TimeSeriesRepository(filePath);
var timeSeriesService = new DiscreteTimeSeriesService(timeSeriesRepository);
// MIKE OPERATIONS
var timeSeriesRepository = new DHI.Services.Provider.MCLite.TimeSeriesRepository(connectionString);
var timeSeriesService = new GroupedUpdatableTimeSeriesService(timeSeriesRepository);

Retrieving time series values

var values = timeSeriesService.GetValues("PWD", from, to);

Retrieving last time series value

var lastValue = timeSeriesService.GetLast("PWD");

Calculate moving average (asynchronously)

Various time series data analysis are implemented - e.g. calculation of moving average:

var timeSeriesData = timeSeriesService.GetValues("MyTimeSeries");
var movingAverage = await Task.Run(() => timeSeriesData.MovingAverage(20));

Time series repository providers

Currently, the following time series repository providers are available:

  • dfs0, dfs2, dfsu (NuGet package DHI.Services.MIKECore)
  • res1d, crf, res11, prf (NuGet package DHI.Services.MIKE1D)
  • DIMS.CORE (NuGet package DHI.Services.DIMS)
  • CSV (NuGet package DHI.Services.TimeSeries)
  • JSON (NuGet package DHI.Services.TimeSeries)
  • Text (NuGet package DHI.Services.TimeSeries)
  • XML (NuGet package DHI.Services.TimeSeries)
  • Daylight (NuGet package DHI.Services.TimeSeries)
  • MIKE OPERATIONS (NuGet package DHI.Services.MCLite)
  • MIKE Cloud Platform (NuGet package DHI.Services.MIKECloud)
  • ADO.NET (NuGet package DHI.Services.ADONET)
  • WaterForecast (NuGet package DHI.Services.WaterForecast)
  • US Geological Survey (NuGet package DHI.Services.USGS)
  • In-memory (NuGet package DHI.Services.TimeSeries)

Feature Collections

NuGet package: DHI.Services.GIS

There are 4 types (levels) of feature collection (GIS) services:

  • GisService: The most basic service for retrieving and querying geometric feature collections. Read-only.
  • UpdatableGisService: new features and feature collections can be added, removed and updated.
  • GroupedGisService: the feature collections are organized in hierarchical groups. Exposes for example a GetByGroup() method. Read-only.
  • GroupedUpdatableGisService: the feature collections are organized in hierarchical groups. Exposes for example a GetByGroup() method. New features and feature collections can be added, removed and updated.

Initializing a feature collection (GIS) service

A specific feature collection repository instance is injected into a feature collection service.

// Shapefile
var featureRepository = new DHI.Services.Provider.Shapefile.FeatureRepository(path);
var gisService = new GisService(featureRepository);

Retrieving features meeting a specific attribute criteria:

var query = new List<QueryCondition> { new QueryCondition("City", QueryOperator.Equal, "Copenhagen") };
var featureCollection = gisService.Get("stations.shp", query);

Feature collection repository providers:

Currently, the following feature collection repository providers are available:

  • Shapefile (NuGet package DHI.Services.Shapefile)
  • DIMS.CORE (NuGet package DHI.Services.DIMS)
  • MIKE OPERATIONS (NuGet package DHI.Services.Provider.MCLite)
  • MIKE Cloud Platform (NuGet package DHI.Services.MIKECloud)
  • dfs2, dfsu (NuGet package DHI.Services.MIKECore)

Spreadsheets

NuGet package: DHI.Services.Spreadsheets

Initializing a spreadsheet service

A specific spreadsheet repository instance is injected into a spreadsheet service.

// Excel
var spreadsheetRepository = new DHI.Services.Provider.OpenXML.SpreadsheetRepository(rootFolder);
var spreadsheetService = new SpreadsheetService(spreadsheetRepository);

Retrieving all data in a particular sheet:

var data = spreadsheetService.GetUsedRange("sample.xlsx", "sheet2");

Retrieving named data in a particular sheet:

var data = spreadsheetService.GetNamedRange("sample.xlsx", "sheet2", "2016");

Saving a data table as a MS Excel spreadsheet

Using the OpenXml provider, data tables can be directly saved as MS Excel files:

var dataSet = new DataSet();
dataSet.Tables.Add(dataTable.Copy());
dataSet.SaveAsXlsx(filePath, false);   

Spreadsheet repository providers:

Currently, the following spreadsheet repository providers are available:

  • Microsoft Excel (NuGet package DHI.Services.OpenXml)
  • MIKE OPERATIONS (NuGet package DHI.Services.MCLite)

Tables

NuGet package: DHI.Services.Tables

Initializing a table service

A specific table repository instance is injected into a table service.

var tableRepository = new DHI.Services.Provider.ODBC.TableRepository(connectionString);
var tableService = new TableService(tableRepository);

Retrieving a list of tables:

var listOfTables = tableService.GetIds().ToList();

Retrieving all data from a particular table as a DataTable object:

var dataTable = tableService.GetData(id).ToDataTable();

Retrieving filtered data:

var filter = new List<QueryCondition> { new QueryCondition("WaterLevel", QueryOperator.GreaterThan, 23.1) };
var data = tableService.GetData(id, filter);

Table repository providers:

Currently, the following table repository providers are available:

  • ODBC (NuGet package DHI.Services.ODBC)

Maps

There are 2 types of map-related services:

  • MapService: a service for retrieving bitmap images - e.g. to be used as map overlays.
  • MapStyleService: a service for managing map styles (map color palettes).

Initializing a map style service

A specific map style repository instance is injected into a map style service.

var mapStyleRepository = new MapStyleRepository(Path.Combine(binFolder, "styles.json"));
var mapStyleService = new MapStyleService(mapStyleRepository);

Create a map style

var mapStyle = new MapStyle("MyStyle", "My Style");
mapStyle.StyleCode = "0^10:#800080,#5500AB,#2A00D5,#0000FF,#FF5500,#FF0000...";
mapStyleService.Add(mapStyle);

Initializing a map service

A specific map source instance and a map style service instance is injected into a map service:

var mapSource = new Dfs2MapSource("R20141001.dfs2", new Parameters());
var mapService = new MapService(mapSource, mapStyleService);

Retrieving a map image

var image = mapService.GetMap("MyStyle", "EPSG:3857", BoundingBox.Parse("11584184.510675031,78271.51696402066,11623320.26915704,117407.27544603013"), 256, 256, new Parameters());

Map source providers:

Currently, the following map source providers are available:

  • dfs2, dfsu (NuGet package DHI.Services.MIKECore)

Radar Images

NuGet package: DHI.Services.Rasters

The radar image service RadarImageService<TImage> is a generic type. The generic type parameter TImage is the type of radar image (e.g. X00.RadarImage).

Read a DHI LAWR P00 radar image from file and convert the pixel values to rain intensity

var image = RadarImage.CreateNew("AROS1245.p00")).ToIntensity();

Read a EUMETNET ODIM HDF5 CAPPI radar image from file

var image = H5CRadarImage.CreateNew("comp_max201008180310.h5"));

Create a bitmap image of a radar image using a specific color gradient

var bitmap = image.ToBitmap(colorGradient);

Initializing a radar image service

A specific radar image repository instance is injected into a radar image service.

var repository = new RadarImageRepository<RadarImage>(token, timeSeriesName);
var radarImageService = new RadarImageService<RadarImage>(repository);

Initializing a zone service

A specific zone repository instance is injected into a zone service.

var zoneRepository = new ZoneRepository("zones.json"));
var zoneService = new ZoneService(zoneRepository);

Retrieving zones

var zones = zoneService.GetAll();
var zone = zoneService.Get("MyZone");

Retrieving last available image in radar image repository

var lastImage = radarImageService.Last;

Calculate the accumulated depth in the given zone within the last 24 hours

var to = radarImageService.LastDateTime;
var from = to.AddHours(-24);
var depth = radarImageService.GetDepth(zone, from, to);

Radar Image providers:

Currently, the following radar image providers are available:

  • P00, I00 (NuGet package DHI.Services.Rasters)
  • IRIS CAPPI (NuGet package DHI.Services.Rasters)
  • ESRIASCII (NuGet package DHI.Services.Rasters)
  • DELIMITEDASCII (NuGet package DHI.Services.Rasters)
  • EUMETNET ODIM HDF5 CAPPI (NuGet package DHI.Services.HDF5)

Radar Image repository providers:

Currently, the following radar image repository providers are available:

  • DIMS.CORE (NuGet package DHI.Services.DIMS)
  • Generic file based (NuGet package DHI.Services.Rasters)

Units

NuGet package: DHI.Services.Physics

Custom units can be created. Units can be created from multiplication or division of earlier created units. The units can be registered in a unit repository. Unit conversion is available for compatible units (with equal dimensions).

Create some units

var meter = new Unit("m", "meter", Dimension.Length);
var kilometer = new Unit("km", "kilometer", 1000 * meter);
var second = new Unit("s", "second", Dimension.Time);
var hour = new Unit("h", "hour", 60 * 60 * second);

Convert a value from one unit to another

const int speedInMeterPrSecond = 10;
var speedInKilometerPerHour = Unit.Convert(speedInMeterPrSecond, meter / second, kilometer / hour);

Initializing a unit service

A specific unit repository instance is injected into a unit service.

var unitRepository = new UnitRepository("units.json"));
var unitService = new UnitService(unitRepository);

Create and register some units

var meterPerSecond = new Unit("m/s", "meter/second", meter / second);
var kilometerPerHour = new Unit("km/h", "kilometer/hour", kilometer / hour);
unitService.Add(meterPerSecond);
unitService.Add(kilometerPerHour);

Convert a value using some registered units

const int speedInMeterPrSecond = 10;
speedInKilometerPerHour = unitService.Convert(speedInMeterPrSecond, "m/s", "km/h");

Register some custom conversion functions for temperature units

unitService.RegisterConversion("F", "C", d => (d - 32.0) * 5.0 / 9.0);
unitService.RegisterConversion("C", "F", d => d * 9.0 / 5.0 + 32.0);

Convert a temperature value

const double temperatureInFahrenheit = 68;
var temperatureInCelcius = unitService.Convert(temperatureInFahrenheit, "F", "C");