phpgeo bietet Abstraktionen für geografische Koordinaten (einschließlich Unterstützung für verschiedene Ellipsoide) und ermöglicht die Berechnung geografischer Entfernungen zwischen Koordinaten mit hoher Präzision.
Die minimal erforderliche PHP-Version ist 8.1. phpgeo ist bis PHP 8.3 getestet.
Neue Funktionen werden nur in den Hauptzweig übernommen und nicht zurückportiert.
Es ist möglich, ältere Versionen von phpgeo für ältere PHP-Versionen zu installieren. Die Kompatibilitätsmatrix finden Sie in der folgenden Tabelle:
PHP-Version | phpgeo-Version | Supportstatus | Composer-Installation |
---|---|---|---|
8.3 | 5.x | aktiv | composer require mjaschen/phpgeo |
8.2 | 5.x | aktiv | composer require mjaschen/phpgeo |
8.1 | 5.x | aktiv | 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 | Ende des Lebens | composer require mjaschen/phpgeo:^3.0 |
7.1 | 2.x | Ende des Lebens | composer require mjaschen/phpgeo:^2.0 |
7.0 | 2.x | Ende des Lebens | composer require mjaschen/phpgeo:^2.0 |
5.6 | 1.x | Ende des Lebens | composer require mjaschen/phpgeo:^1.0 |
5.5 | 1.x | Ende des Lebens | composer require mjaschen/phpgeo:^1.0 |
5.4 | 1.x | Ende des Lebens | composer require mjaschen/phpgeo:^1.0 |
Die Dokumentation ist unter phpgeo.marcusjaschen.de verfügbar.
Wenn Sie Composer verwenden, fügen Sie es einfach zu Ihrer composer.json
hinzu, indem Sie Folgendes ausführen:
composer require mjaschen/phpgeo
Aktualisieren Sie die Versionseinschränkung in der composer.json
des Projekts und führen Sie composer update
aus oder fordern Sie die neue Version an, indem Sie Folgendes ausführen:
composer require mjaschen/phpgeo:^5.0
phpgeo hat einige wichtige Änderungen in der 5.x-Release-Reihe. Bitte sehen Sie sich die folgende Liste an, um zu sehen, was sich geändert hat und was Sie tun müssen, um Ihren Code zu aktualisieren.
Ändern | Beschreibung | Aktion |
---|---|---|
Die Methoden setPoint1() und setPoint2() wurden aus Line entfernt | Die Line Klasse ist jetzt unveränderlich. | Verwenden Sie den Konstruktor, um eine neue Instanz von Line zu erstellen. |
Unterstützung für PHP 7.3, 7.4 und 8.0 entfernt | Ältere PHP-Versionen werden nicht mehr unterstützt. | Aktualisieren Sie auf mindestens PHP 8.1. |
Ab Version 2.0.0 steht phpgeo unter der MIT-Lizenz. Ältere Versionen waren GPL-lizenziert.
Info: Bitte besuchen Sie die Dokumentationsseite für eine vollständige und aktuelle Dokumentation mit vielen Beispielen!
phpgeo bietet die folgenden Funktionen (folgen Sie den Links für Beispiele):
18° 54′ 41″ -155° 40′ 42″
)Diese Liste ist unvollständig. Bitte besuchen Sie die Dokumentationsseite für die vollständige Dokumentation und Beispiele!
Verwenden Sie das Rechnerobjekt direkt:
<?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)
oder rufen Sie die getDistance()
Methode eines Coordinate-Objekts auf, indem Sie ein Taschenrechnerobjekt einfügen:
<?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)
Polylinien können vereinfacht werden, um Speicherplatz oder Bandbreite zu sparen. Die Vereinfachung erfolgt mit dem Ramer-Douglas-Peucker-Algorithmus (auch bekannt als Douglas-Peucker-Algorithmus).
<?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 verfügt über eine Polygon-Implementierung, mit der festgestellt werden kann, ob ein Punkt darin enthalten ist oder nicht. Ein Polygon besteht aus mindestens drei Punkten. Punkte sind Instanzen der Coordinate
-Klasse.
Warnung: Die Berechnung liefert falsche Ergebnisse, wenn die Polygone Punkte auf beiden Seiten des 180/-180-Grad-Meridians haben.
<?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
Sie können eine Koordinate in verschiedenen Stilen formatieren.
<?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 ] }
Bevor Sie eine Pull-Anfrage senden, führen Sie bitte unbedingt alle Prüfungen und Tests durch und stellen Sie sicher, dass alles grün ist.
composer ci:lint
composer ci:psalm
composer ci:tests
Um alle Prüfungen und Tests auf einmal auszuführen, verwenden Sie einfach composer ci
.
Natürlich ist es möglich, die Testläufer direkt zu verwenden, z. B. für PHPUnit:
./vendor/bin/phpunit
Psalm:
./vendor/bin/psalm
Es ist möglich, die gesamte CI-Testmatrix lokal mit act auszuführen:
act --rm -P ubuntu-latest=shivammathur/node:latest