zero-config/geo-distance

计算坐标之间的距离。

1.0.1 2017-05-26 07:35 UTC

This package is auto-updated.

Last update: 2024-08-29 04:42:57 UTC


README

计算坐标之间的距离。

Build Status Scrutinizer Code Quality Code Coverage SensioLabsInsight

此包使用了来自 nmarfurt/measurementsUnitAngleUnitLength 类。此外,结果测量值,如距离,由一个 Measurement 表示。为了充分利用这个库,建议首先熟悉该包。

安装

composer require zero-config/geo-distance

过程式方法

要过程式地使用坐标和距离计算的数据模型,请尝试以下操作

<?php
use function ZeroConfig\GeoDistance\coordinates;
use function ZeroConfig\GeoDistance\distance;

// Returns a distance of approximately 361 kilometers.
// The distance function uses the distance calculator under the hood.
// It assumes earth as base sphere for calculations.
echo distance(
    coordinates(50.0, 5.0),
    coordinates(53.0, 3.0)
) . PHP_EOL;

坐标

坐标函数接受

  • float $latitude
  • float $longitude

两者都是表示角度的数字。

它返回一个实例

ZeroConfig\GeoDistance\PositionInterface

<?php
use function ZeroConfig\GeoDistance\coordinates;

// This outputs: 50.6 °
echo coordinates(50.6, 5.0)->getLatitude() . PHP_EOL;

距离

距离函数接受

  • ZeroConfig\GeoDistance\PositionInterface $start
  • ZeroConfig\GeoDistance\PositionInterface $end

两者都是在球体上的位置。

它返回一个实例

Measurements\Measurement

<?php
use function ZeroConfig\GeoDistance\coordinates;
use function ZeroConfig\GeoDistance\distance;
use Measurements\Units\UnitLength;

// Outputs: 36113.471850273 dam
echo distance(
    coordinates(50.0, 5.0),
    coordinates(53.0, 3.0)
)->convertTo(UnitLength::decameters()) . PHP_EOL;

面向对象方法

以下数据模型存在

  • 位置,组合纬度和经度
  • 球体,计算距离时坐标所绘制的对象
<?php
use ZeroConfig\GeoDistance\ConvertedDistanceCalculator;
use ZeroConfig\GeoDistance\DistanceCalculator;
use ZeroConfig\GeoDistance\Position;
use ZeroConfig\GeoDistance\Sphere\CelestialBody\Mars;
use Measurements\Units\UnitLength;

$marsDistanceCalculator = new ConvertedDistanceCalculator(
    new DistanceCalculator(new Mars()),
    UnitLength::kilometers()
);

// On Mars, the same coordinates as on earth, give a distance of only 192 kilometers.
echo $marsDistanceCalculator->calculate(
    Position::create(50.0, 5.0),
    Position::create(53.0, 3.0)
) . PHP_EOL;