الجغرافيا والخرائط في Go (Golang): المكتبات والأمثلة

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

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

ابدأ الدورة

الجغرافيا والخرائط في Go (Golang): مراجعة المكتبات وأمثلة برمجية



Go (Golang) هي لغة برمجة حديثة ومترجمة تكتسب شعبية في تطوير الواجهات الخلفية (backend) بفضل أدائها العالي، وبساطتها، ودعمها المدمج للتوازي (concurrency). عند إنشاء خدمات ويب تعليمية، لوجستية، سياحية وغيرها، غالباً ما تظهر الحاجة للعمل مع البيانات الجغرافية: حساب المسافات بين النقاط، التحقق من وجود الإحداثيات داخل مناطق معينة، بناء المسارات وعرض الخرائط. في هذه المقالة، سنستعرض المكتبات الرئيسية في Go للعمل مع الجغرافيا والخرائط، وسنقدم أمثلة عملية.



المكتبات الرئيسية للعمل مع الجغرافيا



1. github.com/paulmach/orb — مكتبة شاملة للعمل مع الكائنات الهندسية

توفر مكتبة orb أنواعاً ودوالاً للعمل مع النقاط، الخطوط، المضلعات وغيرها من العناصر الهندسية الأساسية. وهي تدعم GeoJSON، وعمليات الهندسة البوليانية (Boolean geometry)، والإسقاطات (projections)، وتحويل الإحداثيات. تعتبر هذه المكتبة أساسية تُبنى عليها العديد من الحلول الأخرى.



package main

import ( "fmt" "github.com/paulmach/orb" "github.com/paulmach/orb/geo")

func main() { // تعريف نقطتين (خط العرض، خط الطول) moscow := orb.Point{37.6173, 55.7558} spb := orb.Point{30.3351, 60.0000}

// حساب المسافة بالكيلومترات (باستخدام صيغة هافرسين) distance := geo.Distance(moscow, spb) fmt.Printf("المسافة من موسكو إلى سانت بطرسبرغ: %.2f كم", distance)}


2. github.com/twpayne/go-geom — مكتبة قوية للعمليات الهندسية

تقدم هذه المكتبة وصولاً منخفض المستوى إلى الهندسة وتدعم العديد من معايير OGC (الاتحاد الجغرافي المكاني المفتوح). وهي مثالية للحسابات المعقدة: تقاطع المضلعات، إنشاء مناطق عازلة (buffering)، وتحويل الإسقاطات.



import (    "github.com/twpayne/go-geom"    "github.com/twpayne/go-geom/encoding/geojson")

// مثال: إنشاء نقطة وتحويلها إلى صيغة GeoJSONpoint := geom.NewPoint(geom.XY).SetCoords(geom.Coord{37.6173, 55.7558})data, _ := geojson.Marshal(point)fmt.Println(string(data))// الإخراج: {"type":"Point","coordinates":[37.6173,55.7558]}


3. github.com/kellydunn/golang-geo — مكتبة بسيطة لحساب المسافات والترميز الجغرافي

توفر مكتبة golang-geo واجهة برمجة تطبيقات (API) بسيطة للعمل مع النقاط، وحساب المسافات (بالأميال والكيلومترات)، وكذلك للترميز الجغرافي (geocoding) عبر Google Maps API أو OpenStreetMap (Nominatim).



import "github.com/kellydunn/golang-geo"

func main() { p1 := geo.NewPoint(55.7558, 37.6173) p2 := geo.NewPoint(60.0000, 30.3351) dist := p1.GreatCircleDistance(p2) // بالكيلومترات fmt.Printf("المسافة: %.2f كم", dist)}


مكتبات العمل مع الخرائط والعرض المرئي



4. github.com/umahmood/leaflet-go — التكامل مع Leaflet.js في Go

Leaflet هي واحدة من أشهر مكتبات JavaScript للخرائط التفاعلية. تتيح leaflet-go إنشاء كود HTML يحتوي على خرائط مباشرة من تطبيق Go. هذا مفيد للمواقع التعليمية وخدمات الويب البسيطة.



import "github.com/umahmood/leaflet-go"

func main() { // إنشاء خريطة مركزها موسكو m := leaflet.NewMap( leaflet.Center(55.7558, 37.6173), leaflet.Zoom(10), leaflet.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"), )

// إضافة علامة (marker) m.AddMarker(leaflet.Marker( leaflet.LatLng(55.7558, 37.6173), leaflet.Popup("موسكو، الكرملين"), ))

// طباعة كود HTML للخريطة html, _ := m.Render() fmt.Println(html)}


5. github.com/ringsaturn/leaflet — غلاف بديل لـ Leaflet

هذه المكتبة

توصيات