Rust में भू-स्थान और मानचित्र: उपकरणों का अवलोकन और कोड उदाहरण
Rust एक सिस्टम प्रोग्रामिंग भाषा है जिसका उपयोग स्थानिक डेटा के साथ काम करने वाली उच्च-लोड सेवाओं के निर्माण के लिए तेजी से किया जा रहा है। प्रदर्शन, मेमोरी सुरक्षा और सक्रिय समुदाय के कारण, Rust पारिस्थितिकी तंत्र भू-स्थान, मानचित्र और भू-डेटा प्रारूपों के साथ काम करने के लिए कई परिपक्व पुस्तकालय प्रदान करता है। इस लेख में हम प्रमुख उपकरणों की समीक्षा करेंगे: geo, georust (जिसमें gpx और geojson शामिल हैं), साथ ही WebAssembly के माध्यम से मानचित्रण पुस्तकालयों के साथ एकीकरण।
1. मुख्य पुस्तकालय: geo
geo पुस्तकालय Rust में भू-स्थानिक गणना पारिस्थितिकी तंत्र का मूल है। यह डेटा प्रकार (बिंदु, रेखाएं, बहुभुज), एल्गोरिदम (दूरी, क्षेत्रफल, प्रतिच्छेदन की गणना) और लोकप्रिय समन्वय प्रणालियों (WGS84, UTM) के लिए समर्थन प्रदान करता है।
स्थापना
# Cargo.toml[dependencies]geo = "0.27"उदाहरण: दो बिंदुओं के बीच दूरी की गणना
use geo::{point, Distance};
fn main() { let moscow = point!(x: 37.6173, y: 55.7558); let london = point!(x: -0.1276, y: 51.5074);
// गोले पर दूरी (हैवरसाइन एल्गोरिदम) let distance = moscow.distance_haversine(&london); println!("मास्को से लंदन की दूरी: {:.2} किमी", distance / 1000.0);}पुस्तकालय समर्थन करता है:
- ज्यामिति प्रकार:
Point,LineString,Polygon,MultiPointऔर अन्य। - एल्गोरिदम: बफरिंग, रेखा सरलीकरण (Ramer-Douglas-Peucker), केंद्रक गणना।
projक्रेट के माध्यम से CRS के साथ कार्य।
2. प्रारूपों के साथ कार्य: GeoJSON और GPX
भू-डेटा को पढ़ने और लिखने के लिए georust पारिस्थितिकी तंत्र से अलग-अलग क्रेट का उपयोग किया जाता है।
GeoJSON
geojson क्रेट GeoJSON को क्रमबद्ध/अक्रमबद्ध करने की अनुमति देता है - भू-डेटा विनिमय के लिए मानक प्रारूप।
use geojson::{Feature, GeoJson, Geometry, Value};use serde_json;
fn main() { let geojson_str = r#"{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [37.6173, 55.7558] }, "properties": { "name": "Moscow" } }"#;
let geojson: GeoJson = geojson_str.parse().unwrap(); if let GeoJson::Feature(feature) = geojson { println!("ज्यामिति: {:?}", feature.geometry); }}GPX (GPS Exchange Format)
gpx क्रेट GPS उपकरणों द्वारा रिकॉर्ड किए गए ट्रैक और वेपॉइंट के साथ काम करने के लिए है।
use gpx::read;use std::fs::File;
fn main() { let file = File::open("track.gpx").unwrap(); let gpx = read(file).unwrap();
for track in gpx.tracks { println!("ट्रैक का नाम: {:?}", track.name); for segment in track.segments { for point in segment.points { println!("बिंदु: ({:.4}, {:.4})", point.point().x(), point.point().y()); } } }}3. मानचित्र विज़ुअलाइज़ेशन: WASM के माध्यम से Leaflet.js
वेब पेज पर मानचित्र प्रदर्शित करने के लिए, WebAssembly के माध्यम से Rust के साथ Leaflet.js का उपयोग किया जा सकता है। एक लोकप्रिय दृष्टिकोण wasm-bindgen क्रेट का उपयोग करके Rust पक्ष पर HTML/JavaScript उत्पन्न करना और leaflet.js के माध्यम से मानचित्र को एम्बेड करना है।
उदाहरण: मार्कर के साथ मानचित्र बनाना
// cargo.toml[dependencies]wasm-bindgen = "0.2"
// main.rsuse wasm_bindgen::prelude::*;
#[wasm_bindgen]pub fn init_map() { let window = web_sys::window().unwrap(); let document = window.document().unwrap();
// मानचित्र के लिए div बनाएं let map_div = document.create_element("div").unwrap(); map_div.set_attribute("id", "map").u