19 septembre 2024

L’Institut national de l’information géographique et forestière (IGN) est un établissement public placé sous la tutelle des ministères chargés de l’écologie et de la forêt. Sa vocation est de produire et diffuser des données (open data) et des représentations (cartes en ligne et papier, géo visualisation) de référence relatives à la connaissance du territoire national et des forêts françaises ainsi que de leur évolution.

Le code se trouve dans : https://github.com/Fangorne/CSharpLibrary/tree/master/GeoServices

Ceci est une méthode C# qui utilise l’objet HttpClient pour envoyer une requête HTTP POST à l’API de calcul d’itinéraires de l’IGN (Institut national de l’information géographique et forestière) en France. La méthode prend en entrée deux chaînes de caractères qui représentent les coordonnées GPS de départ et d’arrivée, et renvoie un objet de type Root qui contient les informations sur l’itinéraire calculé.

private static async Task<Root> ComputeWay(string firstCoordinates, string secondCoordinates)
{
    using (var httpClient = new HttpClient())
    {
         using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://wxs.ign.fr/calcul/geoportail/itineraire/rest/1.0.0/route"))
         {
                // Create a new product
                Carto product = new Carto
                {
                    resource = "bdtopo-osrm",
                    start = firstCoordinates,
                    end = secondCoordinates,
                    profile = "car",
                    optimization = "fastest",
                    distanceUnit = "meter",
                    timeUnit = "minute"
                };
                var json = JsonConvert.SerializeObject(product);
                request.Headers.TryAddWithoutValidation("accept", "application/json");

                request.Content = new StringContent(json);
                request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

                var response = await httpClient.SendAsync(request);

                var responseInJson = await response.Content.ReadAsStringAsync();

                var root = JsonConvert.DeserializeObject<Root>(responseInJson);

                Console.WriteLine($"Distance {root.distance} {root.distanceUnit} Durée {root.duration} {root.timeUnit}");

                foreach (var step in root.portions[0].steps)
                {
                    Console.WriteLine(
                        $"{step.instruction} {step.attributes.name} Distance : {step.distance} Durée : {step.duration}");
                }

                return root;
    }
}

Voici comment cette méthode fonctionne en détail :

  1. Création de l’objet HttpClient : l’objet HttpClient est utilisé pour envoyer et recevoir des requêtes HTTP. Il est créé à l’aide de la directive using afin de s’assurer qu’il est automatiquement libéré une fois qu’il n’est plus utilisé.
  2. Création de la requête HTTP : l’objet HttpRequestMessage est utilisé pour représenter la requête HTTP qui sera envoyée à l’API de l’IGN. La requête utilise le verbe HTTP POST et l’URL de l’API de calcul d’itinéraires.
  3. Création de l’objet de données de la requête : l’objet Carto est utilisé pour représenter les données de la requête, qui contiennent les informations sur l’itinéraire à calculer (coordonnées de départ et d’arrivée, type de véhicule, etc.). L’objet est serialisé en chaîne de caractères au format JSON à l’aide de la méthode JsonConvert.SerializeObject.
  4. Configuration de la requête HTTP : les en-têtes de la requête sont configurés pour indiquer le type d’acceptation et le type de contenu de la requête. Le contenu de la requête est défini en utilisant l’objet StringContent qui contient la chaîne de caractères serialisée en JSON.
  5. Envoi de la requête HTTP et réception de la réponse : la méthode SendAsync de l’objet HttpClient est utilisée pour envoyer la requête HTTP et recevoir la réponse de l’API de l’IGN. La réponse est lue en tant que chaîne de caractères

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *