C++ में भू-स्थान और मानचित्र: libcurl, nlohmann/json, Leaflet लाइब्रेरीज़

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में भू-स्थान और मानचित्र: उपकरणों का अवलोकन और कार्यान्वयन के उदाहरण



आधुनिक दुनिया में, भू-स्थान डेटा और इंटरैक्टिव मानचित्र कई अनुप्रयोगों का एक अभिन्न अंग बन गए हैं - नेविगेशन सेवाओं से लेकर गेम और निगरानी प्रणालियों तक। C++ में विकास कोई अपवाद नहीं है: हालांकि भाषा स्वयं भू-डेटा के साथ काम करने के लिए अंतर्निहित साधन प्रदान नहीं करती है, लेकिन लाइब्रेरीज़ का एक शक्तिशाली पारिस्थितिकी तंत्र मौजूद है जो आपको अपनी परियोजनाओं में भू-स्थान और मानचित्रों को एकीकृत करने की अनुमति देता है। इस लेख में, हम प्रमुख उपकरणों पर विचार करेंगे: HTTP अनुरोधों के लिए libcurl, API JSON प्रतिक्रियाओं को पार्स करने के लिए nlohmann/json, और मानचित्र प्रदर्शित करने के लिए (HTML/JavaScript जनरेशन के माध्यम से) Leaflet।



1. भू-स्थान के साथ काम करने के लिए मुख्य लाइब्रेरीज़



libcurl HTTP/HTTPS सहित विभिन्न प्रोटोकॉल पर डेटा स्थानांतरित करने के लिए एक शक्तिशाली और समय-परीक्षित लाइब्रेरी है। यह भू-स्थान API (उदाहरण के लिए, OpenStreetMap Nominatim या Google Maps Geocoding) को अनुरोध भेजने के लिए आदर्श है।



nlohmann/json JSON के साथ काम करने के लिए एक आधुनिक, हल्की और सहज ज्ञान युक्त लाइब्रेरी है। यह भू-स्थान सेवाओं से प्राप्त डेटा को आसानी से सीरियलाइज़ और डीसीरियलाइज़ करने की अनुमति देता है।



Leaflet इंटरैक्टिव मानचित्र बनाने के लिए एक अग्रणी JavaScript लाइब्रेरी है। C++ प्रोजेक्ट में, आप एक HTML फ़ाइल जनरेट कर सकते हैं जो आपके C++ एप्लिकेशन द्वारा प्राप्त डेटा को प्रदर्शित करने के लिए Leaflet का उपयोग करती है।



2. आवश्यक घटकों की स्थापना



शुरू करने के लिए, आपको लाइब्रेरीज़ स्थापित करनी होंगी। अधिकांश Linux वितरणों में, यह पैकेज मैनेजर के माध्यम से किया जाता है:



# libcurl और nlohmann-json की स्थापनाsudo apt-get install libcurl4-openssl-dev nlohmann-json3-dev  # Debian/Ubuntusudo dnf install libcurl-devel json-devel                    # Fedora


Leaflet के साथ काम करने के लिए, नवीनतम संस्करण डाउनलोड करें और जनरेट किए गए HTML में CSS/JS फ़ाइलों को शामिल करें।



3. उदाहरण: पते से निर्देशांक प्राप्त करना (Geocoding)



हम एक फ़ंक्शन लागू करेंगे जो शहर का नाम लेता है और Nominatim API (OpenStreetMap) का उपयोग करके उसका अक्षांश और देशांतर लौटाता है।



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

using json = nlohmann::json;

// CURL प्रतिक्रिया को स्ट्रिंग में लिखने के लिए कॉलबैक फ़ंक्शनsize_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("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"); // 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("पता नहीं मिला");

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

int main() { try { auto [lat, lon] = getCoordinates("मॉस्को, क्रेमलिन"); std::cout << "

अनुशंसाएँ