Rust में जियोलोकेशन और मैप्स: लाइब्रेरीज़ और टूल्स की समीक्षा
Rust एक सिस्टम प्रोग्रामिंग भाषा है जिसका उपयोग अब हाई-लोड और सुरक्षित एप्लिकेशन बनाने में तेज़ी से बढ़ रहा है, जिसमें जियोडेटा के साथ काम करने वाले ऐप्स भी शामिल हैं। इस लेख में हम Rust इकोसिस्टम की मुख्य लाइब्रेरीज़ पर नज़र डालेंगे जो जियोलोकेशन, कोऑर्डिनेट्स और मैप्स के लिए हैं, और प्रैक्टिकल कोड उदाहरण भी देंगे।
1. geo लाइब्रेरी — ज्यामितीय ऑपरेशनों की नींव
geo एक बुनियादी लाइब्रेरी है जो ज्यामितीय टाइप्स (पॉइंट्स, लाइन्स, पॉलीगॉन) के साथ काम करती है। यह दूरी, क्षेत्रफल, इंटरसेक्शन और बफर ज़ोन की गणना के लिए एल्गोरिदम प्रदान करती है। इसका उपयोग कई अन्य क्रेट्स के आधार के रूप में किया जाता है।
use geo::{Point, LineString, EuclideanDistance};
fn main() {
let p1 = Point::new(37.6173, 55.7558); // मॉस्को
let p2 = Point::new(30.3156, 59.9386); // सेंट पीटर्सबर्ग
let distance = p1.euclidean_distance(&p2);
println!("यूक्लिडियन दूरी: {:.2} डिग्री", distance);
// एक लाइन (रूट) बनाना
let line = LineString::from(vec![
(37.6173, 55.7558),
(30.3156, 59.9386),
]);
// डिग्री में लाइन की लंबाई
let length: f64 = line.euclidean_length();
println!("लाइन की लंबाई: {:.2} डिग्री", length);
}
2. georust — जियोस्पेशियल डेटा के लिए इकोसिस्टम
georust क्रेट्स का एक समूह है जिसमें कई पूरक लाइब्रेरीज़ शामिल हैं:
geo-types— डेटा टाइप्स (Point, Polygon, MultiPolygon)।geo-algorithms— एल्गोरिदम (बफरिंग, डेलाउने त्रिभुजन, कन्वेक्स हल)।proj— कोऑर्डिनेट सिस्टम ट्रांसफॉर्मेशन (जैसे WGS84 से मर्केटर प्रोजेक्शन)।gpx— GPX फ़ाइलों को पढ़ना/लिखना (GPS ट्रैक्स के लिए फ़ॉर्मेट)।
proj के साथ कोऑर्डिनेट ट्रांसफॉर्मेशन का उदाहरण:
use proj::Proj;
fn main() {
// WGS84 (EPSG:4326) से Web Mercator (EPSG:3857) में ट्रांसफॉर्मर बनाएँ
let from = "EPSG:4326";
let to = "EPSG:3857";
let transform = Proj::new_known_crs(from, to, None).unwrap();
// मॉस्को के कोऑर्डिनेट्स
let (x, y) = transform.convert((37.6173, 55.7558)).unwrap();
println!("Web Mercator: x={:.2}, y={:.2}", x, y);
}
3. navi — OpenStreetMap मैप्स के साथ काम करना
navi एक लाइब्रेरी है जो OpenStreetMap (OSM) से मैप डेटा डाउनलोड और प्रोसेस करती है। यह सड़कों, इमारतों, POI (पॉइंट्स ऑफ़ इंटरेस्ट) को निकालने और रूट बनाने की सुविधा देती है। इसके लिए PBF फ़ॉर्मेट में मैप फ़ाइल चाहिए।
use navi::{Map, NodeId, WayId};
fn main() {
// PBF फ़ाइल से मैप लोड करें
let map = Map::from_pbf("moscow.osm.pbf").unwrap();
// दिए गए रेडियस में सभी नोड्स प्राप्त करें
let center = (37.6173, 55.7558);
let nodes_in_radius: Vec<NodeId> = map.nodes_within_radius(center, 1000.0).unwrap();
println!("नोड्स मिले: {}", nodes_in_radius.len());
// सड़कें (हाइवे) निकालें
let ways: Vec<WayId> = map.ways().filter(|w| w.is_highway()).collect();
println!("सड़कों की संख्या: {}", ways.len());
}
4. मैप विज़ुअलाइज़ेशन: plotters + geo
Rust में मैप्स प्रदर्शित करने के लिए plotters लाइब्रेरी को geo के साथ इस्तेमाल किया जा सकता है। यह कैनवास पर पॉलीगॉन, लाइन्स और पॉइंट्स बनाने और PNG/SVG में सेव करने की सुविधा देती है।
use plotters::prelude::*;
use geo::{Point, LineString};
fn main() -> Result<(),