phpgeo fornece abstrações para coordenadas geográficas (incluindo suporte para diferentes elipsóides) e permite calcular distâncias geográficas entre coordenadas com alta precisão.
A versão mínima necessária do PHP é 8.1. phpgeo é testado até PHP 8.3.
Novos recursos irão apenas para o branch principal e não serão portados.
É possível instalar versões mais antigas do phpgeo para versões mais antigas do PHP. Consulte a tabela a seguir para a matriz de compatibilidade:
Versão PHP | Versão do phpgeo | Status de suporte | Instalação do compositor |
---|---|---|---|
8.3 | 5.x | ativo | composer require mjaschen/phpgeo |
8.2 | 5.x | ativo | composer require mjaschen/phpgeo |
8.1 | 5.x | ativo | 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 | fim da vida | composer require mjaschen/phpgeo:^3.0 |
7.1 | 2.x | fim da vida | composer require mjaschen/phpgeo:^2.0 |
7,0 | 2.x | fim da vida | composer require mjaschen/phpgeo:^2.0 |
5.6 | 1.x | fim da vida | composer require mjaschen/phpgeo:^1.0 |
5.5 | 1.x | fim da vida | composer require mjaschen/phpgeo:^1.0 |
5.4 | 1.x | fim da vida | composer require mjaschen/phpgeo:^1.0 |
A documentação está disponível em phpgeo.marcusjaschen.de.
Usando o Composer, basta adicioná-lo ao seu composer.json
executando:
composer require mjaschen/phpgeo
Atualize a restrição de versão no composer.json
do projeto e execute composer update
ou exija a nova versão executando:
composer require mjaschen/phpgeo:^5.0
O phpgeo tem algumas alterações importantes na linha de lançamento 5.x. Consulte a lista a seguir para ver o que mudou e o que você precisa fazer para atualizar seu código.
Mudar | Descrição | Ação |
---|---|---|
Métodos setPoint1() e setPoint2() removidos da Line | A classe Line agora é imutável. | Use o construtor para criar uma nova instância de Line . |
suporte removido para PHP 7.3, 7.4 e 8.0 | Versões mais antigas do PHP não são mais suportadas. | Atualize para pelo menos PHP 8.1. |
A partir da versão 2.0.0, o phpgeo é licenciado sob a licença MIT. Versões mais antigas eram licenciadas pela GPL.
Informações: Visite o site de documentação para obter documentação completa e atualizada com muitos exemplos!
phpgeo fornece os seguintes recursos (siga os links para exemplos):
18° 54′ 41″ -155° 40′ 42″
)Esta lista está incompleta, visite o site de documentação para obter toda a documentação e exemplos!
Use o objeto calculadora diretamente:
<?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 chame o método getDistance()
de um objeto Coordinate injetando um objeto calculadora:
<?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)
As polilinhas podem ser simplificadas para economizar espaço de armazenamento ou largura de banda. A simplificação é feita com o algoritmo Ramer – Douglas – Peucker (também conhecido como algoritmo 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)
O phpgeo possui uma implementação de polígono que pode ser usada para determinar se um ponto está contido nele ou não. Um polígono consiste em pelo menos três pontos. Os pontos são instâncias da classe Coordinate
.
Aviso: O cálculo dá resultados errados se os polígonos tiverem pontos em ambos os lados do meridiano de 180/-180 graus.
<?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
Você pode formatar uma coordenada em diferentes estilos.
<?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 ] }
Antes de enviar uma solicitação pull, certifique-se de executar todas as verificações e testes e garantir que tudo esteja verde.
composer ci:lint
composer ci:psalm
composer ci:tests
Para executar todas as verificações e testes de uma vez, basta usar composer ci
.
Claro, é possível usar os executores de teste diretamente, por exemplo, para PHPUnit:
./vendor/bin/phpunit
Salmo:
./vendor/bin/psalm
É possível executar toda a matriz de teste de CI localmente com act :
act --rm -P ubuntu-latest=shivammathur/node:latest