lootils / geo
一个简单的处理地球地理坐标操作库。
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-20 21:17:08 UTC
README
这个库是Lootils项目的一部分,处理地球坐标系(大地测量)的计算。例如,找出两个坐标位置之间的距离,将坐标转换为度分秒表示法,或者找出在纬度上的地球半径。
安装
推荐使用 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许可证下提供。