gehgassi_backend/gehGassi.Core/Interfaces/IGeoLocationService.cs

158 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Domain.Common;
namespace gehGassi.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der zu einer Adresse Längen- und Breitengrad ermittelt, oder zu Längen- und Breitengrad eine Adresse
/// </summary>
public interface IGeoLocationService
{
/// <summary>
/// Längen und Breitengrad zu einer Adresse suchen.
/// Zuerst wird versucht die Position mit Strasse, PLZ, Ort und Land zu finden.
/// Wenn das nicht klappt, dann mit PLZ, Ort, Land.
/// Wenn das nicht klappt, dann PLZ Land.
/// </summary>
/// <param name="address">Adresse</param>
/// <param name="language">Gewünschte Sprache ISO2</param>
/// <returns>Geo-Position</returns>
Task<GeoLocation> GetLocationAsync(Address address, string language);
/// <summary>
/// Längen und Breitengrad zu einer Adresse suchen.
/// </summary>
/// <param name="address">Adresse als Text-Zeile</param>
/// <param name="language">Gewünschte Sprache ISO2</param>
/// <returns>Geo-Position</returns>
Task<GeoLocation> GetLocationAsync(string address, string language);
/// <summary>
/// Längen und Breitengrad zu einer Adresse suchen. Adresse wird mit Details mitgeliefert.
/// Zuerst wird versucht die Position mit Strasse, PLZ, Ort und Land zu finden.
/// Wenn das nicht klappt, dann mit PLZ, Ort, Land.
/// Wenn das nicht klappt, dann PLZ Land.
/// </summary>
/// <param name="address">Adresse</param>
/// <param name="language">Gewünschte Sprache ISO2</param>
/// <returns>Geo-Position</returns>
Task<GeoLocationFill> GetLocationFillAsync(Address address, string language);
/// <summary>
/// Längen und Breitengrad zu einer Adresse suchen. Adresse wird mit Details mitgeliefert.
/// </summary>
/// <param name="address">Adresse als Text-Zeile</param>
/// <param name="language">Gewünschte Sprache ISO2</param>
/// <returns>Geo-Position</returns>
Task<GeoLocationFill> GetLocationFillAsync(string address, string language);
/// <summary>
/// Reverse-Geocoding
/// </summary>
/// <param name="lat">Breitengrad</param>
/// <param name="lng">Längengrad</param>
/// <param name="language">Gewünschte Sprache ISO2</param>
/// <returns>ReverseLocation</returns>
Task<ReverseLocation> GetReverseAsync(double lat, double lng, string language);
}
/// <summary>
/// Hilfsklasse - Ergebnis einer Geolokalisierung
/// </summary>
public class GeoLocation
{
/// <summary>
/// Breitengrad
/// </summary>
public double Latitude { get; set; }
/// <summary>
/// Längengrad
/// </summary>
public double Longitude { get; set; }
/// <summary>
/// Anfrage erfolgreich?
/// </summary>
public bool Success { get; set; }
/// <summary>
/// Optionale Fehlermeldung wenn kein Erfolg
/// </summary>
public string ErrorMessage { get; set; }
}
/// <summary>
/// Hilfsklasse - Ergbenis einer Geolokalisierung um Adresse ergänzt
/// </summary>
public class GeoLocationFill : GeoLocation
{
/// <summary>
/// Adresse die gefunden wurde
/// </summary>
public Address Address { get; set; }
/// <summary>
/// Erstellt eine Instanz
/// </summary>
public GeoLocationFill()
{
Address = new Address();
}
}
/// <summary>
/// Hilfsklasse - Ergebnis einer Geolokalisierung nach Lat Long
/// </summary>
public class ReverseLocation
{
/// <summary>
/// Adresse die gefunden wurde
/// </summary>
public Address Address { get; set; }
/// <summary>
/// Anfrage erfolgreich?
/// </summary>
public bool Success { get; set; }
/// <summary>
/// Optionale Fehlermeldung wenn kein Erfolg
/// </summary>
public string ErrorMessage { get; set; }
/// <summary>
/// Erstellt eine Instanz
/// </summary>
public ReverseLocation()
{
Address = new Address();
}
}
/// <summary>
/// Optionen für den Geolokalisierungs-Service
/// </summary>
public class GeoLocationOptions
{
/// <summary>
/// Basis-URI
/// </summary>
public string BaseUri { get; set; }
/// <summary>
/// Name des Useragents der im Header gesetzt werden soll
/// </summary>
public string UserAgentName { get; set; }
/// <summary>
/// Version des UserAgents der im Header gesetzt werden soll
/// </summary>
public string UserAgentVersion { get; set; }
}
}