Géolocalisation et cartes en C++ : bibliothèques libcurl, nlohmann/json, Leaflet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Géolocalisation et cartes en C++ : aperçu des outils et exemples de mise en œuvre



Dans le monde moderne, les données de géolocalisation et les cartes interactives sont devenues une partie intégrante de nombreuses applications – des services de navigation aux jeux et systèmes de surveillance. Le développement en C++ ne fait pas exception : bien que le langage lui-même ne fournisse pas d'outils intégrés pour travailler avec les données géographiques, il existe un écosystème puissant de bibliothèques permettant d'intégrer la géolocalisation et les cartes dans vos projets. Dans cet article, nous examinerons les outils clés : libcurl pour les requêtes HTTP, nlohmann/json pour l'analyse des réponses JSON des API et Leaflet (via la génération de HTML/JavaScript) pour l'affichage des cartes.



1. Bibliothèques principales pour la géolocalisation



libcurl est une bibliothèque puissante et éprouvée pour le transfert de données via divers protocoles, y compris HTTP/HTTPS. Elle est idéale pour envoyer des requêtes aux API de géolocalisation (par exemple, OpenStreetMap Nominatim ou Google Maps Geocoding).



nlohmann/json est une bibliothèque moderne, légère et intuitive pour travailler avec JSON. Elle permet de sérialiser et désérialiser facilement les données reçues des services de géolocalisation.



Leaflet est la bibliothèque JavaScript de premier plan pour créer des cartes interactives. Dans un projet C++, vous pouvez générer un fichier HTML qui utilise Leaflet pour afficher les données obtenues par votre application C++.



2. Installation des composants nécessaires



Pour commencer, vous devrez installer les bibliothèques. Dans la plupart des distributions Linux, cela se fait via le gestionnaire de paquets :



# Installation de libcurl et nlohmann-jsonsudo apt-get install libcurl4-openssl-dev nlohmann-json3-dev  # Debian/Ubuntusudo dnf install libcurl-devel json-devel                    # Fedora


Pour travailler avec Leaflet, il suffit de télécharger la dernière version et d'inclure les fichiers CSS/JS dans le HTML généré.



3. Exemple : obtention de coordonnées par adresse (Geocoding)



Implémentons une fonction qui prend le nom d'une ville et retourne sa latitude et sa longitude, en utilisant l'API Nominatim (OpenStreetMap).



#include <iostream>#include <string>#include <curl/curl.h>#include <nlohmann/json.hpp>

using json = nlohmann::json;

// Fonction de rappel pour écrire la réponse CURL dans une chaînesize_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { size_t totalSize = size * nmemb; output->append(static_cast<char*>(contents), totalSize); return totalSize;}

std::pair<double, double> getCoordinates(const std::string& address) { CURL* curl = curl_easy_init(); if (!curl) throw std::runtime_error("Erreur d'initialisation de CURL");

std::string response; std::string url = "https://nominatim.openstreetmap.org/search?q=" + curl_easy_escape(curl, address.c_str(), address.length()) + "&format=json&limit=1";

curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); curl_easy_setopt(curl, CURLOPT_USERAGENT, "CppGeoApp/1.0"); // Obligatoire pour Nominatim

CURLcode res = curl_easy_perform(curl); curl_easy_cleanup(curl);

if (res != CURLE_OK) throw std::runtime_error(curl_easy_strerror(res));

json jsonData = json::parse(response); if (jsonData.empty()) throw std::runtime_error("Adresse non trouvée");

double lat = jsonData[0]["lat"].get<double>(); double lon = jsonData[0]["lon"].get<double>(); return {lat, lon};}

int main() { try { auto [lat, lon] = getCoordinates("Moscou, Kremlin"); std::cout << "

Recommendations