يوفر phpgeo تجريدات للإحداثيات الجغرافية (بما في ذلك دعم الأشكال الناقصية المختلفة) ويسمح لك بحساب المسافات الجغرافية بين الإحداثيات بدقة عالية.
الحد الأدنى المطلوب لإصدار PHP هو 8.1. تم اختبار phpgeo حتى PHP 8.3.
ستنتقل الميزات الجديدة إلى الفرع الرئيسي فقط ولن يتم نقلها إلى الخلف.
من الممكن تثبيت الإصدارات الأقدم من phpgeo لإصدارات PHP الأقدم. يرجى الرجوع إلى الجدول التالي للتعرف على مصفوفة التوافق:
نسخة PHP | نسخة فبجيو | حالة الدعم | تثبيت الملحن |
---|---|---|---|
8.3 | 5.x | نشيط | composer require mjaschen/phpgeo |
8.2 | 5.x | نشيط | composer require mjaschen/phpgeo |
8.1 | 5.x | نشيط | composer require mjaschen/phpgeo |
8.0 | 4.x | composer require mjaschen/phpgeo:^4.0 | |
7.4 | 4.x | composer require mjaschen/phpgeo:^4.0 | |
7.3 | 4.x | composer require mjaschen/phpgeo:^4.0 | |
7.2 | 3.x | نهاية الحياة | composer require mjaschen/phpgeo:^3.0 |
7.1 | 2.x | نهاية الحياة | composer require mjaschen/phpgeo:^2.0 |
7.0 | 2.x | نهاية الحياة | composer require mjaschen/phpgeo:^2.0 |
5.6 | 1.x | نهاية الحياة | composer require mjaschen/phpgeo:^1.0 |
5.5 | 1.x | نهاية الحياة | composer require mjaschen/phpgeo:^1.0 |
5.4 | 1.x | نهاية الحياة | composer require mjaschen/phpgeo:^1.0 |
الوثائق متاحة على phpgeo.marcusjaschen.de.
باستخدام Composer، ما عليك سوى إضافته إلى composer.json
الخاص بك عن طريق تشغيل:
composer require mjaschen/phpgeo
قم بتحديث قيد الإصدار في composer.json
الخاص بالمشروع وقم بتشغيل composer update
أو اطلب الإصدار الجديد عن طريق تشغيل:
composer require mjaschen/phpgeo:^5.0
يحتوي phpgeo على بعض التغييرات العاجلة في سطر الإصدار 5.x. يرجى الرجوع إلى القائمة التالية لمعرفة ما تغير وما عليك القيام به لترقية التعليمات البرمجية الخاصة بك.
يتغير | وصف | فعل |
---|---|---|
تمت إزالة أساليب setPoint1() و setPoint2() من Line | فئة Line الآن غير قابلة للتغيير. | استخدم المُنشئ لإنشاء مثيل جديد لـ Line . |
تمت إزالة الدعم لإصدارات PHP 7.3 و7.4 و8.0 | لم تعد إصدارات PHP الأقدم مدعومة. | الترقية إلى PHP 8.1 على الأقل. |
بدءًا من الإصدار 2.0.0، يتم ترخيص phpgeo بموجب ترخيص MIT. الإصدارات الأقدم كانت مرخصة بـ GPL.
معلومات: يرجى زيارة موقع التوثيق للحصول على وثائق كاملة وحديثة مع العديد من الأمثلة!
يوفر phpgeo الميزات التالية (اتبع الروابط للحصول على أمثلة):
18° 54′ 41″ -155° 40′ 42″
)هذه القائمة غير كاملة، يرجى زيارة موقع التوثيق للحصول على كامل الوثائق والأمثلة!
استخدم كائن الآلة الحاسبة مباشرة:
<?php
use Location Coordinate ;
use Location Distance Vincenty ;
$ coordinate1 = new Coordinate ( 19.820664 , - 155.468066 ); // Mauna Kea Summit
$ coordinate2 = new Coordinate ( 20.709722 , - 156.253333 ); // Haleakala Summit
$ calculator = new Vincenty ();
echo $ calculator -> getDistance ( $ coordinate1 , $ coordinate2 ); // returns 128130 . 850 (meters ; ≈ 128 kilometers)
أو قم باستدعاء طريقة getDistance()
لكائن الإحداثيات عن طريق إدخال كائن حاسبة:
<?php
use Location Coordinate ;
use Location Distance Vincenty ;
$ coordinate1 = new Coordinate ( 19.820664 , - 155.468066 ); // Mauna Kea Summit
$ coordinate2 = new Coordinate ( 20.709722 , - 156.253333 ); // Haleakala Summit
echo $ coordinate1 -> getDistance ( $ coordinate2 , new Vincenty ()); // returns 128130 . 850 (meters ; ≈ 128 kilometers)
يمكن تبسيط الخطوط المتعددة لتوفير مساحة التخزين أو عرض النطاق الترددي. يتم التبسيط باستخدام خوارزمية Ramer-Douglas-Peucker (خوارزمية AKA Douglas-Peucker).
<?php
use Location Coordinate ;
use Location Polyline ;
use Location Distance Vincenty ;
$ polyline = new Polyline ();
$ polyline -> addPoint ( new Coordinate ( 10.0 , 10.0 ));
$ polyline -> addPoint ( new Coordinate ( 20.0 , 20.0 ));
$ polyline -> addPoint ( new Coordinate ( 30.0 , 10.0 ));
$ processor = new Simplify ( $ polyline );
// remove all points which perpendicular distance is less
// than 1500 km from the surrounding points .
$ simplified = $ processor -> simplify ( 1500000 );
// simplified is the polyline without the second point ( which
// perpendicular distance is ~ 1046 km and therefore below
// the simplification threshold)
يحتوي phpgeo على تطبيق مضلع يمكن استخدامه لتحديد ما إذا كانت هناك نقطة موجودة فيه أم لا. يتكون المضلع من ثلاث نقاط على الأقل. النقاط هي مثيلات لفئة Coordinate
.
تحذير: العملية الحسابية تعطي نتائج خاطئة إذا كانت المضلعات تحتوي على نقاط على جانبي خط الطول 180/-180 درجة.
<?php
use Location Coordinate ;
use Location Polygon ;
$ geofence = new Polygon ();
$ geofence -> addPoint ( new Coordinate (- 12.085870 ,- 77.016261 ));
$ geofence -> addPoint ( new Coordinate (- 12.086373 ,- 77.033813 ));
$ geofence -> addPoint ( new Coordinate (- 12.102823 ,- 77.030938 ));
$ geofence -> addPoint ( new Coordinate (- 12.098669 ,- 77.006476 ));
$ outsidePoint = new Coordinate (- 12.075452 , - 76.985079 );
$ insidePoint = new Coordinate (- 12.092542 , - 77.021540 );
var_dump ( $ geofence -> contains ( $ outsidePoint )); // returns bool ( false ) the point is outside the polygon
var_dump ( $ geofence -> contains ( $ insidePoint )); // returns bool ( true ) the point is inside the polygon
يمكنك تنسيق الإحداثيات في أنماط مختلفة.
<?php
use Location Coordinate ;
use Location Formatter Coordinate DecimalDegrees ;
$ coordinate = new Coordinate ( 19.820664 , - 155.468066 ); // Mauna Kea Summit
echo $ coordinate -> format ( new DecimalDegrees ());
<?php
use Location Coordinate ;
use Location Formatter Coordinate DMS ;
$ coordinate = new Coordinate ( 18.911306 , - 155.678268 ); // South Point , HI , USA
$ formatter = new DMS ();
echo $ coordinate -> format ( $ formatter ); // 18° 54′ 41″ -155° 40′ 42″
$ formatter -> setSeparator ( " , " )
-> useCardinalLetters ( true )
-> setUnits ( DMS :: UNITS_ASCII );
echo $ coordinate -> format ( $ formatter ); // 18° 54' 41" N , 155° 40 ' 42" W
<?php
use Location Coordinate ;
use Location Formatter Coordinate GeoJSON ;
$ coordinate = new Coordinate ( 18.911306 , - 155.678268 ); // South Point , HI , USA
echo $ coordinate -> format ( new GeoJSON ()); // { " type " : " point " , " coordinates " : [ -155.678268, 18.911306 ] }
قبل إرسال طلب السحب، يرجى التأكد من إجراء كافة الفحوصات والاختبارات والتأكد من أن كل شيء باللون الأخضر.
composer ci:lint
composer ci:psalm
composer ci:tests
لتشغيل كافة الفحوصات والاختبارات مرة واحدة، ما عليك سوى استخدام composer ci
.
بالطبع، من الممكن استخدام برامج الاختبار مباشرة، على سبيل المثال لـ PHPUnit:
./vendor/bin/phpunit
مزمور:
./vendor/bin/psalm
من الممكن تشغيل مصفوفة اختبار CI بأكملها محليًا باستخدام الفعل :
act --rm -P ubuntu-latest=shivammathur/node:latest