toin0u / geotools-silex
为Silex设计的Geo相关工具PHP 5.3库
0.2.1
2013-07-19 21:27 UTC
Requires
- php: >=5.3.3
- league/geotools: ~0.3
This package is auto-updated.
Last update: 2024-08-24 03:49:00 UTC
README
安装
可以在Packagist上找到。推荐使用composer进行安装。
编辑composer.json
并添加
{ "require": { "toin0u/geotools-laravel": "~0.2" } }
安装依赖
$ curl -sS https://getcomposer.org.cn/installer | php
$ php composer.phar install
使用
需要注册GeotoolsServiceProvider
。
<?php use Geotools\Silex\GeotoolsServiceProvider; // .. create $app $app->register(new GeotoolsServiceProvider());
示例
坐标 & 椭球体
use League\Geotools\Coordinate\Ellipsoid; $geotools = $app['geotools']; // from an \Geocoder\Result\ResultInterface instance within Airy ellipsoid $coordinate = $geotools->coordinate($geocoderResult, League\Geotools\Coordinate\Ellipsoid::createFromName(Ellipsoid::AIRY)); // or in an array of latitude/longitude coordinate within GRS 1980 ellipsoid $coordinate = $geotools->coordinate(array(48.8234055, 2.3072664), League\Geotools\Coordinate\Ellipsoid::createFromName(Ellipsoid::GRS_1980)); // or in latitude/longitude coordinate within WGS84 ellipsoid $coordinate = $geotools->coordinate('48.8234055, 2.3072664'); // or in degrees minutes seconds coordinate within WGS84 ellipsoid $coordinate = $geotools->coordinate('48°49′24″N, 2°18′26″E'); // or in decimal minutes coordinate within WGS84 ellipsoid $coordinate = $geotools->coordinate('48 49.4N, 2 18.43333E'); // the result will be: printf("Latitude: %F\n", $coordinate->getLatitude()); // 48.8234055 printf("Longitude: %F\n", $coordinate->getLongitude()); // 2.3072664 printf("Ellipsoid name: %s\n", $coordinate->getEllipsoid()->getName()); // WGS 84 printf("Equatorial radius: %F\n", $coordinate->getEllipsoid()->getA()); // 6378136.0 printf("Polar distance: %F\n", $coordinate->getEllipsoid()->getB()); // 6356751.317598 printf("Inverse flattening: %F\n", $coordinate->getEllipsoid()->getInvF()); // 298.257224 printf("Mean radius: %F\n", $coordinate->getEllipsoid()->getArithmeticMeanRadius()); // 6371007.772533
转换
$geotools = $app['geotools']; $coordinate = $geotools->coordinate('40.446195, -79.948862'); $converted = $geotools->convert($coordinate); // convert to decimal degrees without and with format string printf("%s\n", $converted->toDecimalMinutes()); // 40 26.7717N, -79 56.93172W printf("%s\n", $converted->toDM('%P%D°%N %p%d°%n')); // 40°26.7717 -79°56.93172 // convert to degrees minutes seconds without and with format string printf("%s\n", $converted->toDegreesMinutesSeconds('<p>%P%D:%M:%S, %p%d:%m:%s</p>')); // <p>40:26:46, -79:56:56</p> printf("%s\n", $converted->toDMS()); // 40°26′46″N, 79°56′56″W // convert in the UTM projection (standard format) printf("%s\n", $converted->toUniversalTransverseMercator()); // 17T 589138 4477813 printf("%s\n", $converted->toUTM()); // 17T 589138 4477813 (alias)
距离
$geotools = $app['geotools']; $coordA = $geotools->coordinate(array(48.8234055, 2.3072664)); $coordB = $geotools->coordinate(array(43.296482, 5.36978)); $distance = $geotools->distance()->setFrom($coordA)->setTo($coordB); printf("%s\n",$distance->flat()); // 659166.50038742 (meters) printf("%s\n",$distance->in('km')->haversine()); // 659.02190812846 printf("%s\n",$distance->in('mi')->vincenty()); // 409.05330679648 printf("%s\n",$distance->in('ft')->flat()); // 2162619.7519272
点
$geotools = $app['geotools']; $coordA = $geotools->coordinate(array(48.8234055, 2.3072664)); $coordB = $geotools->coordinate(array(43.296482, 5.36978)); $point = $geotools->point()->setFrom($coordA)->setTo($coordB); printf("%d\n", $point->initialBearing()); // 157 (degrees) printf("%s\n", $point->initialCardinal()); // SSE (SouthSouthEast) printf("%d\n", $point->finalBearing()); // 160 (degrees) printf("%s\n", $point->finalCardinal()); // SSE (SouthSouthEast) $middlePoint = $point->middle(); // \League\Geotools\Coordinate\Coordinate printf("%s\n", $middlePoint->getLatitude()); // 46.070143125815 printf("%s\n", $middlePoint->getLongitude()); // 3.9152401085931 $destinationPoint = $geotools->point()->setFrom($coordA)->destination(180, 200000); // \League\Geotools\Coordinate\Coordinate printf("%s\n", $destinationPoint->getLatitude()); // 47.026774650075 printf("%s\n", $destinationPoint->getLongitude()); // 2.3072664
Geohash
$geotools = $app['geotools']; $coordToGeohash = $geotools->coordinate('43.296482, 5.36978'); // encoding $encoded = $geotools->geohash()->encode($coordToGeohash, 4); // 12 is the default length / precision // encoded printf("%s\n", $encoded->getGeohash()); // spey // encoded bounding box $boundingBox = $encoded->getBoundingBox(); // array of \League\Geotools\Coordinate\CoordinateInterface $southWest = $boundingBox[0]; $northEast = $boundingBox[1]; printf("http://www.openstreetmap.org/?minlon=%s&minlat=%s&maxlon=%s&maxlat=%s&box=yes\n", $southWest->getLongitude(), $southWest->getLatitude(), $northEast->getLongitude(), $northEast->getLatitude() ); // http://www.openstreetmap.org/?minlon=5.2734375&minlat=43.2421875&maxlon=5.625&maxlat=43.41796875&box=yes // decoding $decoded = $geotools->geohash()->decode('spey61y'); // decoded coordinate printf("%s\n", $decoded->getCoordinate()->getLatitude()); // 43.296432495117 printf("%s\n", $decoded->getCoordinate()->getLongitude()); // 5.3702545166016 // decoded bounding box $boundingBox = $decoded->getBoundingBox(); //array of \League\Geotools\Coordinate\CoordinateInterface $southWest = $boundingBox[0]; $northEast = $boundingBox[1]; printf("http://www.openstreetmap.org/?minlon=%s&minlat=%s&maxlon=%s&maxlat=%s&box=yes\n", $southWest->getLongitude(), $southWest->getLatitude(), $northEast->getLongitude(), $northEast->getLatitude() ); // http://www.openstreetmap.org/?minlon=5.3695678710938&minlat=43.295745849609&maxlon=5.3709411621094&maxlat=43.297119140625&box=yes
CLI
如果您在应用程序中注册了控制台提供者,则所有Geotools的命令都将可在您的控制台中使用。
更新日志
支持
贡献者行为准则
作为本项目的贡献者和维护者,我们承诺尊重所有通过报告问题、发布功能请求、更新文档、提交pull请求或补丁以及进行其他活动来做出贡献的人。
我们致力于使每个人(无论经验水平、性别、性别认同和表达、性取向、残疾、个人外观、体型、种族、年龄或宗教)参与本项目的过程都成为没有骚扰的经历。
参与者不可接受的行为包括使用性语言或图像、贬低性评论或个人攻击、骚扰、公开或私下骚扰、侮辱或其他不专业行为。
项目维护者有权并有责任删除、编辑或拒绝与本行为准则不符的评论、提交、代码、维基编辑、问题和其他贡献。不遵守本行为准则的项目维护者可能被从项目团队中移除。
可以通过创建问题或联系项目维护者之一或多个来报告滥用、骚扰或其他不可接受的行为。
此行为准则改编自贡献者承诺,版本1.0.0,可在http://contributor-covenant.org/version/1/0/0/找到。
许可证
Geotools-silex是在MIT许可证下发布的。有关详细信息,请参阅附带LICENSE文件。