تحديد المواقع والخرائط في PHP: المكتبات وواجهات برمجة التطبيقات وأمثلة الكود

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

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

ابدأ الدورة

تحديد المواقع والخرائط في PHP: نظرة عامة على الأدوات وأمثلة الكود



في تطوير الويب الحديث، أصبحت وظيفة تحديد المواقع والعمل مع الخرائط جزءًا لا يتجزأ من العديد من المشاريع. PHP، كونها لغة خادم، تتعامل بشكل ممتاز مع معالجة البيانات الجغرافية، وتكامل خدمات الخرائط، وتحديد موقع المستخدمين. في هذه المقالة، سنستعرض بالتفصيل المكتبات والأدوات الرئيسية للعمل مع تحديد المواقع والخرائط في PHP، بالإضافة إلى تقديم أمثلة عملية للكود.



1. تحديد الموقع عبر عنوان IP (GeoIP)



أبسط طريقة للحصول على موقع تقريبي للمستخدم هي تحديد دولته ومدينته عبر عنوان IP. لهذا الغرض، توجد عدة حلول في PHP:



مكتبة geoip2 (MaxMind GeoIP2)



توفر MaxMind قاعدة بيانات مجانية GeoLite2 ومدفوعة GeoIP2. التثبيت عبر Composer:



composer require geoip2/geoip2


مثال لتحديد الموقع:



<?phprequire_once 'vendor/autoload.php';

use GeoIp2\\Database\\Reader;

// حدد المسار إلى قاعدة البيانات التي تم تنزيلها GeoLite2-City.mmdb$reader = new Reader('/path/to/GeoLite2-City.mmdb');$record = $reader->city('8.8.8.8'); // عنوان IP للتحقق

echo "الدولة: " . $record->country->name . "<br>";echo "المدينة: " . $record->city->name . "<br>";echo "خط العرض: " . $record->location->latitude . "<br>";echo "خط الطول: " . $record->location->longitude . "<br>";?>


الدالة المدمجة geoip_record_by_name()



إذا كان امتداد GeoIP (قديم) مثبتًا على الخادم، يمكن استخدام:



<?php$record = geoip_record_by_name('8.8.8.8');echo "المدينة: " . $record['city'];?>


2. العمل مع الخرائط عبر JavaScript + PHP



يقوم PHP بإنشاء HTML/JavaScript، بينما يتم رسم الخرائط على جانب العميل. أشهر المكتبات:



  • Leaflet — خفيفة، مجانية، بدون مفاتيح API
  • OpenLayers — قوية، للمهام الجغرافية المكانية المعقدة
  • Google Maps JavaScript API — تتطلب مفتاحًا، لكنها توفر وظائف غنية


مثال لتكامل Leaflet مع PHP



لننشئ خريطة بسيطة مع علامة، يتم تمرير إحداثياتها من PHP:



<?php$lat = 55.7558;  // موسكو$lng = 37.6173;?><!DOCTYPE html><html><head>    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script></head><body>    <div id="map" style="height: 400px; width: 100%;"></div>    <script>        var map = L.map('map').setView([<?= $lat ?>, <?= $lng ?>], 10);        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {            attribution: '&copy; OpenStreetMap contributors'        }).addTo(map);        L.marker([<?= $lat ?>, <?= $lng ?>]).addTo(map)            .bindPopup('علامة من PHP');    </script></body></html>


3. الترميز الجغرافي (تحويل العنوان إلى إحداثيات)



للحصول على الإحداثيات من عنوان، استخدم واجهات برمجة التطبيقات:



  • Nominatim (OpenStreetMap) — مجاني، لكن مع قيود (طلب واحد في الثانية)
  • Google Geocoding API — مدفوع بعد تجاوز الحد المسموح
  • Yandex Geocoder — شائع في روسيا


مثال للترميز الجغرافي عبر Nominatim



<?phpfunction geocode($address) {    $url = "https://nominatim.openstreetmap.org/search?format=json&q=" . urlencode($address);    $opts = [        'http' => [            'method' => 'GET',            'header' => "User-Agent: MyApp/1.0\\r"                    

توصيات