phpgeo fournit des abstractions sur les coordonnées géographiques (y compris la prise en charge de différents ellipsoïdes) et vous permet de calculer les distances géographiques entre les coordonnées avec une grande précision.
La version PHP minimale requise est 8.1. phpgeo est testé jusqu'à PHP 8.3.
Les nouvelles fonctionnalités n'iront que dans la branche principale et ne seront pas rétroportées.
Il est possible d'installer des anciennes versions de phpgeo pour les anciennes versions de PHP. Veuillez vous référer au tableau suivant pour la matrice de compatibilité :
Version PHP | Version phpgeo | Statut d'assistance | Installation du compositeur |
---|---|---|---|
8.3 | 5.x | actif | composer require mjaschen/phpgeo |
8.2 | 5.x | actif | composer require mjaschen/phpgeo |
8.1 | 5.x | actif | 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 | fin de vie | composer require mjaschen/phpgeo:^3.0 |
7.1 | 2.x | fin de vie | composer require mjaschen/phpgeo:^2.0 |
7.0 | 2.x | fin de vie | composer require mjaschen/phpgeo:^2.0 |
5.6 | 1.x | fin de vie | composer require mjaschen/phpgeo:^1.0 |
5.5 | 1.x | fin de vie | composer require mjaschen/phpgeo:^1.0 |
5.4 | 1.x | fin de vie | composer require mjaschen/phpgeo:^1.0 |
La documentation est disponible sur phpgeo.marcusjaschen.de.
À l'aide de Composer, ajoutez-le simplement à votre composer.json
en exécutant :
composer require mjaschen/phpgeo
Mettez à jour la contrainte de version dans le composer.json
du projet et exécutez composer update
ou exigez la nouvelle version en exécutant :
composer require mjaschen/phpgeo:^5.0
phpgeo a quelques changements importants dans la ligne de version 5.x. Veuillez vous référer à la liste suivante pour voir ce qui a changé et ce que vous devez faire pour mettre à niveau votre code.
Changement | Description | Action |
---|---|---|
Méthodes setPoint1() et setPoint2() supprimées de Line | La classe Line est désormais immuable. | Utilisez le constructeur pour créer une nouvelle instance de Line . |
suppression du support pour PHP 7.3, 7.4 et 8.0 | Les anciennes versions de PHP ne sont plus prises en charge. | Mettez à niveau vers au moins PHP 8.1. |
À partir de la version 2.0.0, phpgeo est sous licence MIT. Les anciennes versions étaient sous licence GPL.
Info : Veuillez visiter le site de documentation pour une documentation complète et à jour avec de nombreux exemples !
phpgeo fournit les fonctionnalités suivantes (suivez les liens pour des exemples) :
18° 54′ 41″ -155° 40′ 42″
)Cette liste est incomplète, veuillez visiter le site de documentation pour la totalité de la documentation et des exemples !
Utilisez directement l'objet calculatrice :
<?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)
ou appelez la méthode getDistance()
d'un objet Coordonnée en injectant un objet calculatrice :
<?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)
Les polylignes peuvent être simplifiées pour économiser de l'espace de stockage ou de la bande passante. La simplification se fait avec l'algorithme de Ramer – Douglas – Peucker (alias algorithme de 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 a une implémentation de polygone qui peut être utilisée pour déterminer si un point y est contenu ou non. Un polygone est constitué d'au moins trois points. Les points sont des instances de la classe Coordinate
.
Attention : Le calcul donne des résultats erronés si les polygones ont des points de part et d'autre du méridien 180/-180 degrés.
<?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
Vous pouvez formater une coordonnée dans différents styles.
<?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 ] }
Avant de soumettre une pull request, assurez-vous d'effectuer toutes les vérifications et tous les tests et de vous assurer que tout est vert.
composer ci:lint
composer ci:psalm
composer ci:tests
Pour exécuter toutes les vérifications et tests en même temps, utilisez simplement composer ci
.
Bien entendu, il est possible d'utiliser directement les lanceurs de tests, par exemple pour PHPUnit :
./vendor/bin/phpunit
Psaume:
./vendor/bin/psalm
Il est possible d'exécuter localement toute la matrice de test CI avec act :
act --rm -P ubuntu-latest=shivammathur/node:latest