phpgeo は地理座標の抽象化 (さまざまな楕円体のサポートを含む) を提供し、座標間の地理的距離を高精度で計算できるようにします。
最低限必要な PHP バージョンは 8.1 です。 phpgeoは PHP 8.3 までテストされています。
新機能はメイン ブランチにのみ導入され、バックポートされません。
古い PHP バージョンの場合は、古いバージョンのphpgeo をインストールすることができます。互換性マトリックスについては、次の表を参照してください。
PHPのバージョン | phpgeoのバージョン | サポート状況 | Composerのインストール |
---|---|---|---|
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 アルゴリズム (別名 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 には、点が含まれているかどうかを判断するために使用できるポリゴン実装があります。多角形は少なくとも 3 つの点で構成されます。ポイントは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
actを使用して、CI テスト マトリックス全体をローカルで実行できます。
act --rm -P ubuntu-latest=shivammathur/node:latest