الجيولوكيشن والخرائط في C# (.NET): أدوات التعامل مع البيانات المكانية
يعد تطوير التطبيقات التي تتعامل مع الإحداثيات الجغرافية والخرائط والمسارات مهمة مطلوبة لمطوري C#. في النظام البيئي لـ .NET، توجد العديد من المكتبات القوية التي تسمح بحل المهام بدءًا من التحديد البسيط للإحداثيات وصولاً إلى بناء أنظمة المعلومات الجغرافية (GIS) المعقدة. في هذه المقالة، سنستعرض الأدوات الرئيسية للتعامل مع الجيولوكيشن والخرائط في C#.
1. الأدوات المضمنة: فئة GeoCoordinate
توفر منصة .NET الفئة الأساسية System.Device.Location.GeoCoordinate (متوفرة في .NET Framework وعبر الحزمة System.Device.Location.Portable لـ .NET Core). تسمح هذه الفئة بتخزين خط العرض وخط الطول، بالإضافة إلى حساب المسافة بين نقطتين باستخدام صيغة هافرسين (haversine).
using System.Device.Location;
public class GeoService{ public double CalculateDistance(double lat1, double lon1, double lat2, double lon2) { var point1 = new GeoCoordinate(lat1, lon1); var point2 = new GeoCoordinate(lat2, lon2); return point1.GetDistanceTo(point2); // النتيجة بالمتر }
public void ShowDistance() { double distance = CalculateDistance(55.7558, 37.6176, 59.9343, 30.3351); Console.WriteLine($"المسافة موسكو-سانت بطرسبرغ: {distance / 1000:F2} كم"); }}القيود: لا تدعم الفئة العمل مع الخرائط أو الترميز الجغرافي (تحويل العنوان إلى إحداثيات) أو بناء المسارات. للعمل الكامل مع الخرائط، ستكون هناك حاجة إلى مكتبات خارجية.
2. Mapsui — مكتبة متعددة المنصات لعرض الخرائط
Mapsui هي مكتبة حديثة متعددة المنصات لـ .NET (تدعم WPF, MAUI, Avalonia, Blazor). تسمح بعرض الخرائط من مصادر مختلفة: OpenStreetMap (OSM), Bing Maps, Stamen، بالإضافة إلى خوادم البلاطات (tile servers) الخاصة. المكتبة مفتوحة المصدر ويتم تطويرها بنشاط.
الإمكانيات الرئيسية:
- عرض البلاطات النقطية والمتجهة
- دعم الطبقات (علامات، مضلعات، خطوط)
- التفاعلية: التكبير، التحريك، النقر على الكائنات
- التكامل مع مزودي الخرائط (OSM, CartoDB, MapTiler)
- دعم الإسقاطات (EPSG:4326, EPSG:3857)
using Mapsui;using Mapsui.Providers;using Mapsui.Tiling;using Mapsui.Widgets.MapInfo;using Mapsui.Widgets;
// إنشاء خريطة ببلاطات OpenStreetMapvar map = new Map();map.Layers.Add(OpenStreetMap.CreateTileLayer());
// إضافة علامة (نقطة)var pointLayer = new MemoryLayer{ DataSource = new PointsProvider(new[] { new Feature(new MPoint(37.6176, 55.7558)) { ["Name"] = "موسكو" } }), Style = new SymbolStyle { Fill = new Brush(Color.Red), SymbolScale = 1.5 }};map.Layers.Add(pointLayer);
// العرض في WPF MapControl// mapControl.Map = map;متى تستخدم: إذا كنت بحاجة إلى تضمين خريطة في تطبيق سطح مكتب أو تطبيق جوال على .NET MAUI/WPF، دون الاعتماد على مفاتيح API خارجية (OSM مجاني).
3. NetTopologySuite (NTS) — العمل مع الهندسة والاستعلامات المكانية
NetTopologySuite هو منفذ لمكتبة Java المعروفة JTS (Java Topology Suite) لـ .NET. توفر أدوات قوية للعمل مع الكائنات الهندسية: النقاط، الخطوط، المضلعات، المضلعات المتعددة. تُستخدم NTS كأساس للعديد من تطبيقات GIS و ORM (على سبيل المثال، Entity Framework Core مع مزود Npgsql لـ PostgreSQL/PostGIS).
الإمكانيات الرئيسية:
- إنشاء ومعالجة الأشكال الهندسية
- المسندات المكانية: التقاطع، الاحتواء، التماس
- إنشاء مناطق عازلة (buffering)، الدمج، تقاطع المضلعات
- قراءة/كتابة صيغ