chriscollins / gis-utils
A PHP库,用于执行GIS任务,如地理编码地址和坐标转换。
Requires
- php: >=7.4.0
- chriscollins/general-utils: ~2.0.0
- pimple/pimple: ~3.5
Requires (Dev)
- phpunit/phpunit: ~9.5.22
- squizlabs/php_codesniffer: ~3.7.1
This package is not auto-updated.
Last update: 2024-10-01 09:11:12 UTC
README
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\EllipsoidFactory
、ChrisCollins\GisUtils\Datum\DatumFactory
和ChrisCollins\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生成代码文档以获取更多信息。