الجيولوكيشن والخرائط في C# (.NET): نظرة عامة على المكتبات والأدوات الرئيسية
العمل مع البيانات الجغرافية ورسم الخرائط هو مهمة مطلوبة في تطبيقات .NET الحديثة. من تتبع الموقع إلى التصور على الخريطة، يقدم نظام C# البيئي عدة حلول قوية. في هذه المقالة، سنستعرض المكتبات الرئيسية للعمل مع الجيولوكيشن والخرائط، وإمكانياتها وأمثلة على استخدامها.
1. المكتبة المدمجة System.Device.Location (GeoCoordinate)
للعمل الأساسي مع إحداثيات GPS في .NET Framework، تتوفر الفئة GeoCoordinate من مساحة الأسماء System.Device.Location. تتيح هذه الفئة الحصول على الموقع الحالي للجهاز (Windows) وحساب المسافة بين نقطتين.
مثال على الاستخدام:
using System.Device.Location;
var watcher = new GeoCoordinateWatcher();watcher.TryStart(false, TimeSpan.FromMilliseconds(1000));
if (watcher.Status == GeoPositionStatus.Ready){ GeoCoordinate coord = watcher.Position.Location; Console.WriteLine($"خط العرض: {coord.Latitude}, خط الطول: {coord.Longitude}");}
// المسافة بين نقطتينvar point1 = new GeoCoordinate(55.7558, 37.6176); // موسكوvar point2 = new GeoCoordinate(59.9343, 30.3351); // سانت بطرسبرغdouble distance = point1.GetDistanceTo(point2); // بالأمتارConsole.WriteLine($"المسافة: {distance / 1000:F2} كم");2. NetTopologySuite — عمل متقدم مع الهندسة
NetTopologySuite (NTS) هو منفذ .NET لمكتبة JTS الشهيرة بلغة Java. يوفر أدوات قوية للعمل مع الكائنات الهندسية (النقاط، الخطوط، المضلعات) والعمليات المكانية (التقاطع، الاتحاد، التخزين المؤقت).
الإمكانيات الرئيسية:
- إنشاء وتحليل الأشكال الهندسية (Point, LineString, Polygon).
- المسندات المكانية (Contains, Intersects, Within).
- تحويل الإحداثيات والإسقاط (بالتعاون مع ProjNet).
- قراءة/كتابة WKT، WKB، GeoJSON.
مثال:
using NetTopologySuite.Geometries;using NetTopologySuite.IO;
var geometryFactory = new GeometryFactory();Point point1 = geometryFactory.CreatePoint(new Coordinate(37.6176, 55.7558));Point point2 = geometryFactory.CreatePoint(new Coordinate(30.3351, 59.9343));
double distance = point1.Distance(point2); // بالدرجاتConsole.WriteLine($"المسافة بالدرجات: {distance:F4}");
// القراءة من WKTvar reader = new WKTReader();Polygon polygon = reader.Read("POLYGON ((30 20, 45 40, 10 40, 30 20))") as Polygon;Console.WriteLine($"مساحة المضلع: {polygon.Area}");3. Mapsui — مكتبة خرائط متعددة المنصات
Mapsui هي مكتبة حديثة لعرض الخرائط في .NET (Windows، Android، iOS، WebAssembly). تدعم مصادر البلاط المختلفة (OpenStreetMap، Bing، MapBox)، بالإضافة إلى رسم الطبقات المخصصة (علامات، خطوط، مضلعات).
الميزات الرئيسية:
- دعم WPF، MAUI، Avalonia، Blazor.
- API بسيط لإضافة العلامات والطبقات.
- الرسوم المتحركة والتفاعل (التكبير، السحب).
- إمكانية استخدام الخرائط دون اتصال (MBTiles).
مثال لـ WPF:
using Mapsui;using Mapsui.Projections;using Mapsui.Tiling;
var map = new Map();map.Layers.Add(OpenStreetMap.CreateTileLayer());
// إضافة علامةvar pin = new PointFeature(37.6176, 55.7558);pin["label"] = "موسكو";map.Layers.Add(new Layer { Name = "العلامات", DataSource = new MemoryProvider(pin) });
// في XAML: <MapControl Map="{Binding Map}" />// مثال على الربط في الكود:// mapControl.Map = map;4. SharpMap — المكتبة الكلاسيكية لأنظمة المعلومات الجغرافية
SharpMap هي