chriscollins/gis-utils

A PHP库,用于执行GIS任务,如地理编码地址和坐标转换。

2.0.2 2022-08-22 23:51 UTC

This package is not auto-updated.

Last update: 2024-10-01 09:11:12 UTC


README

Build Status

A PHP库,用于执行GIS任务,如地理编码地址和坐标转换。

https://github.com/chriscollins/gis-utils

安装

通过以下方式在您的项目中使用composer

{
    "require": {
        "chriscollins/gis-utils": "~2.0.0"
    }
}

运行 composer install

使用方法

大部分功能可以通过ChrisCollins\GisUtils\Coordinate\LatLong类访问。

手动创建LatLong对象

首先,您需要为您希望表示的基准创建一个ChrisCollins\GisUtils\Datum\Datum对象。基准由名称、代表地球的ChrisCollins\GisUtils\Ellipsoid\Ellipsoid以及将坐标从常用WGS84基准转换为您的基准的ChrisCollins\GisUtils\Equation\HelmertTransform组成。

$airy1830Ellipsoid = new ChrisCollins\GisUtils\Ellipsoid\Ellipsoid(
    'AIRY_1830', // Name.
    6377563.396, // Semi-major axis.
    6356256.910, // Semi-minor axis.
    299.3249646 // Flattening.
);

$osgb36ToWgs84HelmertTransform = new ChrisCollins\GisUtils\Equation\HelmertTransform(
    -446.448, // Translation X.
    125.157, // Translation Y.
    -542.060, // Translation Z.
    -0.1502, // Rotation X.
    -0.2470, // Rotation Y.
    -0.8421, // Rotation Z.
    20.4894 // Scale factor.
);

$osgb36Datum = new Datum('OSGB36', $airy1830Ellipsoid, $osgb36ToWgs84HelmertTransform);

ChrisCollins\GisUtils\Ellipsoid\EllipsoidFactoryChrisCollins\GisUtils\Datum\DatumFactoryChrisCollins\GisUtils\Equation\HelmertTransformFactory类可供创建一些常用选项。

$ellipsoidFactory = new ChrisCollins\GisUtils\Ellipsoid\EllipsoidFactory();
$helmertTransformFactory = new ChrisCollins\GisUtils\Equation\HelmertTransformFactory();

$datumFactory = new ChrisCollins\GisUtils\Datum\DatumFactory(
    $ellipsoidFactory,
    $helmertTransformFactory
);

$wgs84Datum = $datumFactory->create(ChrisCollins\GisUtils\Datum\DatumFactory::DATUM_WGS84);

还有一个ChrisCollins\GisUtils\Facade类,它可以通过Pimple为您处理依赖注入,但灵活性稍差。

$facade = new ChrisCollins\GisUtils\Facade();

$wgs84Datum = $facade->createDatum(ChrisCollins\GisUtils\Datum\DatumFactory::DATUM_WGS84);

一旦您有了您的Datum,如果您知道所选点的纬度、经度和高度,您就可以创建LatLong对象。

$latLong = new ChrisCollins\GisUtils\Coordinate\LatLong(
    51.88328, // Latitude.
    -3.43684, // Longitude.
    886, // Height in metres.
    $wgs84Datum // Datum.
);

从查询创建LatLong对象

此库还提供通过ChrisCollins\GisUtils\Lookup\GoogleLookup类创建LatLong对象的方法,该类通过使用Google的地理编码服务查找地址的坐标。请注意Google的使用条款和API限制,以使用地理编码服务。此服务创建的坐标将使用WGS84基准。要使用此类,您需要实例化一个ChrisCollins\GisUtils\Address\Address(或实现ChrisCollins\GisUtils\Address\AddressInterface的您自己的类)。

$address = new ChrisCollins\GisUtils\Address\Address();
$address->setHouseNumber(10)
    ->setAddress1('Downing Street')
    ->setTown('London')
    ->setCountry('England')
    ->setPostcode('SW1A 2AA');

然后您可以按以下方式进行查找

$googleLookup = new ChrisCollins\GisUtils\Lookup\GoogleLookup(
    $datumFactory,
    ChrisCollins\GeneralUtils\Curl\CurlHandle(),
    new ChrisCollins\GeneralUtils\Json\JsonCodec()
);

$latLong = $googleLookup->addressToLatLong($address);

同样,此功能可以通过Facade类提供,如果您希望有人为您处理依赖注入

$facade = new ChrisCollins\GisUtils\Facade();

$latLong = $facade->googleAddressToLatLong($address);

可用的功能

一旦您有了LatLong对象,您可以进行计算来计算它与其他LatLong对象之间的距离(支持余弦定律和更准确、计算成本更高的Vincenty公式),将其转换为其他基准中的等效坐标,计算到其他LatLong的起始和最终方位,以及计算如果按照给定的起始方位行进一定距离将到达的目的地LatLong。还有支持将LatLong转换为笛卡尔坐标(ChrisCollins\GisUtils\Coordinate\CartesianCoordinate)以及反向转换。

通过phpdox生成代码文档以获取更多信息。