تحديد المواقع والخرائط في PHP: نظرة عامة على الأدوات والمكتبات
يعد العمل مع البيانات الجغرافية أحد المهام الرئيسية لتطبيقات الويب الحديثة. في PHP، على الرغم من عدم وجود دعم مدمج لرسم الخرائط، إلا أن هناك العديد من المكتبات القوية لمعالجة البيانات الجغرافية، والترميز الجغرافي، والعمل مع الإحداثيات، والتكامل مع خدمات رسم الخرائط. في هذه المقالة، سنستعرض أشهر الأدوات للعمل مع تحديد المواقع والخرائط في PHP.
1. مكتبات العمل مع البيانات الجغرافية
geoPHP (phayes/geoPHP)
geoPHP هي مكتبة للعمل مع الكائنات الهندسية (النقاط، الخطوط، المضلعات) بتنسيقات WKT، WKB، GeoJSON، KML، GPX. وهي تطبق معايير Open Geospatial Consortium (OGC).
الإمكانيات الرئيسية:
- إنشاء ومعالجة الكائنات الهندسية
- التحويل بين التنسيقات (WKT ↔ GeoJSON ↔ KML)
- حساب المسافات، المساحات، التقاطعات
- التحقق من انتماء نقطة إلى مضلع (point-in-polygon)
مثال على الكود:
use geoPHP\\geoPHP;
// إنشاء نقطة$point = geoPHP::load('POINT(30.5234 50.4501)', 'wkt');echo $point->out('json'); // {"type":"Point","coordinates":[30.5234,50.4501]}
// إنشاء مضلع والتحقق من وجود النقطة داخله$polygon = geoPHP::load('POLYGON((30 50, 31 50, 31 51, 30 51, 30 50))', 'wkt');echo $point->intersects($polygon) ? 'النقطة داخل' : 'النقطة خارج';
// حساب المسافة بين نقطتين (بالأمتار)$point2 = geoPHP::load('POINT(30.7 50.5)', 'wkt');$distance = $point->distance($point2);echo "المسافة: " . $distance . " متر";PHPGeo (mjaschen/phpgeo)
PHPGeo هي مكتبة حديثة للعمل مع الإحداثيات، المسافات، المسارات، والقيود الجغرافية. تدعم نماذج مختلفة للأرض (كرة، إهليلج).
الميزات:
- حساب المسافات باستخدام صيغ Vincenty، Haversine، Great Circle
- العمل مع الإحداثيات (خط العرض/خط الطول) والاتجاهات
- إنشاء والتحقق من المناطق الجغرافية (geofencing)
- دعم وحدات قياس مختلفة (كم، أميال، أميال بحرية)
مثال على الكود:
use Location\\Coordinate;use Location\\Distance\\Vincenty;use Location\\Formatter\\Coordinate\\DecimalDegrees;
$coord1 = new Coordinate(50.4501, 30.5234); // كييف$coord2 = new Coordinate(55.7558, 37.6173); // موسكو
$calculator = new Vincenty();$distance = $calculator->getDistance($coord1, $coord2);
echo "المسافة بين كييف وموسكو: " . round($distance / 1000, 1) . " كم";
// تنسيق الإحداثيات$formatter = new DecimalDegrees();echo $coord1->format($formatter); // 50.45010 30.52340
// إنشاء منطقة جغرافية بسيطة (دائرة نصف قطرها 100 كم)$center = new Coordinate(50.0, 30.0);$radius = 100000; // بالأمتار$targetCoord = new Coordinate(50.5, 30.5);$distanceFromCenter = $calculator->getDistance($center, $targetCoord);
if ($distanceFromCenter <= $radius) { echo "النقطة داخل المنطقة";} else { echo "النقطة خارج المنطقة";}2. التكامل مع خدمات رسم الخرائط
Google Maps API عبر Guzzle
للعمل مع Google Maps API (الترميز الجغرافي، المسارات، الأماكن)، يُوصى باستخدام عميل HTTP Guzzle. تتيح المكتبة إرسال الطلبات إلى API ومعالجة الردود.
مثال على الترميز الجغرافي:
require 'vendor/autoload.php';
use GuzzleHttp\\Client;
$apiKey = 'مفتاح_API_الخاص_بك';$address = 'كييف، كريشاتيك، 1';
$client = new Client();$response = $client->get('https://maps.googleapis.com/maps/api/geocode/json', [ 'query' => [ 'address' => $address, 'key' => $apiKey, 'language' => 'ar' ]]);
$data = json_decode($response->getBody(), true);
if ($data['statu