toneflix-code / php-geo-location
强大的地理编码库,基于anthonymartin/geo-location进行分支,并积极维护:使用GeoLocation for PHP检索边界框坐标、地理点间的距离、点在多边形内等问题,并从地址获取经纬度等。
1.0.4
2023-12-29 18:57 UTC
Requires
- php: ^8.0|^8.1|8.2
Requires (Dev)
- phpunit/phpunit: ^9.0
README
GeoLocation for PHP提供方便且易于使用的地理编码、地理定位和几何功能的方法。
此库是从anthonymartin/GeoLocation分支的,并且正在积极维护。
功能包括
- 检索边界框坐标。只需定义坐标和边界框的大小。
- 计算地理点/坐标之间的距离
- 解决点在多边形内的问题(确定一个给定点是否位于多边形的边界内)
安装
composer require toneflix-code/php-geo-location
示例
获取两点之间的距离
<?php use ToneflixCode\PhpGeoLocation\GeoPoint; $geopointA = new GeoPoint(40.5187154, -74.4120953); $geopointB = new GeoPoint(40.65, -73.95); $geopointB = $geopointA->distanceTo($geopointB, 'miles');
从地址或位置获取纬度和经度
为了使用此方法,您需要注册Google Cloud Console并启用地理编码API
<?php use ToneflixCode\PhpGeoLocation\GeoPoint; $geopoint = GeoPoint::fromAddress('New York, NY 10001', 'google-api-key-goes-here'); $latitude = $geopoint->getLatitude(); $longitude = $geopoint->getLongitude();
获取边界框坐标
<?php use ToneflixCode\PhpGeoLocation\GeoPoint; $geopointA = new GeoPoint(40.5187154, -74.4120953); $boundingBox = $geopointA->boundingBox(3, 'miles'); $boundingBox->getMaxLatitude(); $boundingBox->getMaxLongitude(); $boundingBox->getMinLatitude(); $boundingBox->getMinLongitude();
如何确定坐标/地理点是否在多边形内。
<?php use ToneflixCode\PhpGeoLocation\GeoPoint; use ToneflixCode\PhpGeoLocation\Polygon; $geopointA = new GeoPoint(40.5187154, -74.4120953); $polygon = Polygon::fromArray(array( [$lat1, $lon1], [$lat2, $lon2], [$lat3, $lon3], [$lat4, $lon4] )); if ($geopointA->inPolygon($polygon)) { echo "GeoPoint is in Polygon!"; }
将边界框坐标转换为多边形
<?php use ToneflixCode\PhpGeoLocation\GeoPoint; $geopointA = new GeoPoint(40.5187154, -74.4120953); $boundingBox = $geopointA->boundingBox(5, 'mi'); $polygon = $boundingBox->toPolygon();
现在您可以检查GeoPoint是否是多边形/边界框
if ($geopointA->inPolygon($polygon)) { echo "GeoPoint is in Polygon / Bounding Box!"; }
运行测试
从项目目录中运行以下命令
./vendor/bin/phpunit tests
致谢和法理
这是Anthony Martin编写的PHP类的集合。GeoLocation.php的部分是从最初在 http://JanMatuschek.de/LatitudeLongitudeBoundingCoordinates发布的Java代码中派生出来的。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途的适用性、所有权和非侵权性保证。在任何情况下,版权所有者或任何分发软件的人都不会因合同、侵权或其他方式产生的任何损害或其它责任。
版权所有 (c) 2019 Anthony Martin
特此授予任何获得此软件及其相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的任何副本或实质性部分中。