请选择 进入手机版 | 继续访问电脑版
  • 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

geokit: Geokit 是一个 PHP 工具包,用于解决与地理相关的任务,例如: 距离计算 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

geokit

开源软件地址:

https://gitee.com/mirrors/geokit

开源软件介绍:

Geokit

Geokit is a PHP toolkit to solve geo-related tasks like:

  • Distance calculations.
  • Heading, midpoint and endpoint calculations.
  • Rectangular bounding box calculations.

Build StatusCoverage Status

Installation

Install the latest version with Composer.

composer require geokit/geokit

Check the Packagist page for allavailable versions.

Reference

Distance

A Distance instance allows for a convenient representation of a distance unit ofmeasure.

use Geokit\Distance;$distance = new Distance(1000); // Defaults to meters// or$distance = new Distance(1, Distance::UNIT_KILOMETERS);$meters = $distance->meters();$kilometers = $distance->kilometers();$miles = $distance->miles();$yards = $distance->yards();$feet = $distance->feet();$inches = $distance->inches();$nauticalMiles = $distance->nautical();

A Distance can also be created from a string with an optional unit.

use Geokit\Distance;$distance = Distance::fromString('1000'); // Defaults to meters$distance = Distance::fromString('1000m');$distance = Distance::fromString('1km');$distance = Distance::fromString('100 miles');$distance = Distance::fromString('100 yards');$distance = Distance::fromString('1 foot');$distance = Distance::fromString('1 inch');$distance = Distance::fromString('234nm');

Position

A Position is a fundamental construct representing a geographical position inx (or longitude) and y (or latitude) coordinates.

Note, that x/y coordinates are kept as is, while longitude/latitude arenormalized.

  • Longitudes range between -180 and 180 degrees, inclusive. Longitudes above 180or below -180 are normalized. For example, 480, 840 and 1200 will all benormalized to 120 degrees.
  • Latitudes range between -90 and 90 degrees, inclusive. Latitudes above 90 orbelow -90 are normalized. For example, 100 will be normalized to 80 degrees.
use Geokit\Position;$position = new Position(181, 91);$x = $position->x(); // Returns 181.0$y = $position->y(); // Returns 91.0$longitude = $position->longitude(); // Returns -179.0, normalized$latitude = $position->latitude(); // Returns 89.0, normalized

BoundingBox

A BoundingBox instance represents a rectangle in geographical coordinates,including one that crosses the 180 degrees longitudinal meridian.

It is constructed from its left-bottom (south-west) and right-top (north-east)corner points.

use Geokit\BoundingBox;use Geokit\Position;$southWest = Position::fromXY(2, 1);$northEast = Position::fromXY(2, 1);$boundingBox = BoundingBox::fromCornerPositions($southWest, $northEast);$southWestPosition = $boundingBox->southWest();$northEastPosition = $boundingBox->northEast();$center = $boundingBox->center();$span = $boundingBox->span();$boolean = $boundingBox->contains($position);$newBoundingBox = $boundingBox->extend($position);$newBoundingBox = $boundingBox->union($otherBoundingBox);

With the expand() and shrink() methods, you can expand or shrink aBoundingBox instance by a distance.

use Geokit\Distance;$expandedBoundingBox = $boundingBox->expand(    Distance::fromString('10km'));$shrinkedBoundingBox = $boundingBox->shrink(    Distance::fromString('10km'));

The toPolygon() method converts the BoundingBox to an equivalent Polygoninstance.

$polygon = $boundingBox->toPolygon();

Polygon

A Polygon instance represents a two-dimensional shape of connected line segmentsand may either be closed (the first and last point are the same) or open.

use Geokit\BoundingBox;use Geokit\Polygon;use Geokit\Position;$polygon = Polygon::fromPositions(    Position::fromXY(0, 0),    Position::fromXY(1, 0),    Position::fromXY(1, 1));$closedPolygon = $polygon->close();/** @var Position $position */foreach ($polygon as $position) {}$polygon->contains(Position::fromXY(0.5, 0.5)); // true/** @var BoundingBox $boundingBox */$boundingBox = $polygon->toBoundingBox();

Functions

Geokit provides several functions to perform geographic calculations.

Distance calculations

  • distanceHaversine(Position $from, Position $to):Calculates the approximate sea level great circle (Earth) distance between twopoints using the Haversine formula.
  • distanceVincenty(Position $from, Position $to):Calculates the geodetic distance between two points using the Vincenty inverseformula for ellipsoids.
use function Geokit\distanceHaversine;use function Geokit\distanceVincenty;$distance1 = distanceHaversine($from, $to);$distance2 = distanceVincenty($from, $to);

Both functions return a Distance instance.

Transformations

The circle() function calculates a closed circle Polygon given a center,radius and steps for precision.

use Geokit\Distance;use Geokit\Position;use function Geokit\circle;$circlePolygon = circle(    Position::fromXY(8.50207515, 49.50042565),     Distance::fromString('5km'),    32);

Other calculations

Other useful functions are:

  • heading(Position $from, Position $to): Calculates the (initial) heading fromthe first point to the second point in degrees.
  • midpoint(Position $from, Position $to): Calculates an intermediate point onthe geodesic between the two given points.
  • endpoint(Position $start, float $heading, Geokit\Distance $distance):Calculates the destination point along a geodesic, given an initial headingand distance, from the given start point.

License

Copyright (c) 2011-2022 Jan Sorgalla.Released under the MIT License.


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap