lootils/geo

一个简单的处理地球地理坐标操作库。

0.1.1 2013-06-10 12:28 UTC

This package is not auto-updated.

Last update: 2024-09-20 21:17:08 UTC


README

这个库是Lootils项目的一部分,处理地球坐标系(大地测量)的计算。例如,找出两个坐标位置之间的距离,将坐标转换为度分秒表示法,或者找出在纬度上的地球半径。

Build Status

安装

推荐使用 composer 进行安装。创建一个composer文件,内容如下:

{
  "require": {
    "lootils/geo": "*"
  }
}

除了composer,Geo在src目录中与PSR-0兼容。它可以与任何PSR-0自动加载器一起使用。

使用方法

首先包括一个自动加载器以获取类。如果您使用composer,它将看起来像这样:

require_once 'vendor/autoload.php';

从这里,我们可以开始使用Location类做一些有趣的事情。

位置

位置是在地球上进行方程运算的独立地点。

$location = new \Lootils\Geo\Location($latitude, $longitude);  // The numbers as dec format floats.
$cartesian = $location->cartesian();  // An array with keys of x, y, z.
$dmsLat = $location->DMSLatitude();  // Get the degrees, minutes, seconds format (e.g., 42 43 6.96 N)

有关更多详细信息,请参阅Location类。

距离

目前有两种方法可以计算两点之间的距离。更准确但计算资源消耗更大的Vincenty公式,以及更容易计算但准确性较低的Yee公式。

$distance = $location1->distance($location2);  // These two objects are instances of Location

此方法使用默认公式。要指定方法,您可以使用:

$distance = $location1->distance($location2, 'vincenty');
$distance = $location1->distance($location2, 'yee');

范围

当我们使用手机等设备上的发光矩形时,范围很重要。如果您知道中心点和半径,范围可以显示屏幕的边缘。使用这些坐标,您可以查询数据库以找到该区域内的所有点。

// Arrays with min and max keys for the range are returned.
$latRange = $location->latitudeRange($distance);
$longRange = $location->longitudeRange($distance);  

转换

Location对象或Earth对象上可以运行计算。例如:

$nauticalMiles = $location->convertMetersToNauticalMiles($meters);
$dms = $location->convertDecToDMS($coordinate); // An array with the degrees, minutes, and seconds.

有一些转换。请参阅Earth的源代码以获取所有选项。

动机

我最近在读Longitude: The True Story of a Lone Genius Who Solved the Greatest Scientific Problem of His Time这本书,关于如何准确地计算海上的经度可能意味着生死之别。这本书讲述了过去这是一个重大的技术问题,以及它是如何解决的。阅读这本书让我开始思考现代地球位置计算方程。这是因为地球是一个地球椭球体(类似于椭圆),而不是一个球体。与其只是阅读方程式并研究它们,我决定创建一个库,因为在Packagist上找不到这样的库。

许可证

此库在MIT许可证下提供。