anthonymartin/geo-location

强大的地理编码库:使用GeoLocation for PHP检索边界框坐标、地理点之间的距离、点在多边形内、从地址获取经纬度等。

v2.0.1 2019-09-18 19:00 UTC

This package is auto-updated.

Last update: 2024-09-19 06:01:46 UTC


README

GeoLocation for PHP提供了方便且易于使用的地理编码、地理定位和几何函数方法。

特性包括

  1. 检索边界框坐标。只需定义一个坐标和边界框的大小。
  2. 计算地理点/坐标之间的距离
  3. 解决点在多边形问题(确定一个给定点是否在多边形的范围内)

示例

获取两点之间的距离

<?php

use AnthonyMartin\GeoLocation\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 AnthonyMartin\GeoLocation\GeoPoint;

$geopoint = GeoPoint::fromAddress('New York, NY 10001', 'google-api-key-goes-here');
$latitude = $geopoint->getLatitude();
$longitude = $geopoint->getLongitude();

获取边界框坐标

<?php

use AnthonyMartin\GeoLocation\GeoPoint;

$geopointA = new GeoPoint(40.5187154, -74.4120953);
$boundingBox = $geopointA->boundingBox(3, 'miles');
$boundingBox->getMaxLatitude();
$boundingBox->getMaxLongitude();
$boundingBox->getMinLatitude();
$boundingBox->getMinLongitude();

如何确定坐标/地理点是否在多边形内。

<?php

use AnthonyMartin\GeoLocation\GeoPoint;
use AnthonyMartin\GeoLocation\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 AnthonyMartin\GeoLocation\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

特此授予任何获得本软件和关联文档副本(“软件”)的人免费处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。