الجغرافيا والخرائط في Rust: نظرة عامة على المكتبات للعمل مع الإحداثيات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الجغرافيا والخرائط في 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();

// الحصول على جميع العقد (nodes) ضمن نصف قطر محدد 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());

// استخراج الطرق (highways) 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                    

توصيات