All Projects → jsor → Geokit

jsor / Geokit

Licence: mit
Geo-Toolkit for PHP.

Projects that are alternatives of or similar to Geokit

erkir
Երկիր (Erkir) - a C++ library for geodesic and trigonometric calculations
Stars: ✭ 26 (-88.34%)
Mutual labels:  geometry, distance, geography
wkb-parser
Well-known binary (WKB) Parser.
Stars: ✭ 69 (-69.06%)
Mutual labels:  geometry, geo, geography
Geostats
A tiny and standalone javascript library for classification and basic statistics :
Stars: ✭ 183 (-17.94%)
Mutual labels:  geo, geography
Phidl
Python GDS layout and CAD geometry creation
Stars: ✭ 56 (-74.89%)
Mutual labels:  polygon, geometry
Leaflet.path.drag
Drag functionality for Leaflet vector layers
Stars: ✭ 72 (-67.71%)
Mutual labels:  geo, geometry
Sharpmath
A small .NET math library.
Stars: ✭ 36 (-83.86%)
Mutual labels:  polygon, geometry
Geometry2d
Unity3D: A set of helper classes for 2D geometric calculations.
Stars: ✭ 40 (-82.06%)
Mutual labels:  polygon, geometry
Polyclip Go
Go library for Boolean operations on 2D polygons.
Stars: ✭ 70 (-68.61%)
Mutual labels:  polygon, geometry
Earcut.hpp
Fast, header-only polygon triangulation
Stars: ✭ 447 (+100.45%)
Mutual labels:  polygon, geometry
Polylidar
Polylidar3D - Fast polygon extraction from 3D Data
Stars: ✭ 106 (-52.47%)
Mutual labels:  polygon, geometry
Plexus
Polygonal mesh processing.
Stars: ✭ 90 (-59.64%)
Mutual labels:  polygon, geometry
Doctrine Postgis
Spatial and Geographic Data with PostGIS and Doctrine.
Stars: ✭ 161 (-27.8%)
Mutual labels:  geography, geometry
Wxdraw
几何画图(微信小程序)
Stars: ✭ 36 (-83.86%)
Mutual labels:  polygon, geometry
Pas Coogeo
Pas-CooGeo is coordinate geometry library for Pascal.
Stars: ✭ 25 (-88.79%)
Mutual labels:  geometry, distance
Cgal
The public CGAL repository, see the README below
Stars: ✭ 2,825 (+1166.82%)
Mutual labels:  polygon, geometry
Wicket
A modest library for moving between Well-Known Text (WKT) and various framework geometries
Stars: ✭ 484 (+117.04%)
Mutual labels:  polygon, geometry
Geotools
Geo-related tools PHP 5.4+ library built atop Geocoder and React libraries
Stars: ✭ 1,157 (+418.83%)
Mutual labels:  geo, geometry
Cheap Ruler Go
📏 cheapruler in Go: fast geodesic measurements
Stars: ✭ 176 (-21.08%)
Mutual labels:  geometry, distance
Three Mesh Bvh
A BVH implementation to speed up raycasting against three.js meshes.
Stars: ✭ 302 (+35.43%)
Mutual labels:  geometry, distance
Geolib
Zero dependency library to provide some basic geo functions
Stars: ✭ 3,675 (+1547.98%)
Mutual labels:  geography, distance

Geokit

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

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

Build Status Code Coverage

Installation

Install the latest version with Composer.

composer require geokit/geokit

Check the Packagist page for all available versions.

Reference

Distance

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

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 in x (or longitude) and y (or latitude) coordinates.

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

  • Longitudes range between -180 and 180 degrees, inclusive. Longitudes above 180 or below -180 are normalized. For example, 480, 840 and 1200 will all be normalized to 120 degrees.
  • Latitudes range between -90 and 90 degrees, inclusive. Latitudes above 90 or below -90 are normalized. For example, 100 will be normalized to 80 degrees.
use Geokit\Position;

$position = Position::fromXY(181, 91);

$x = $position->x(); // Returns -179.0, normalized
$y = $position->y(); // 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 a BoundingBox 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 Polygon instance.

$polygon = $boundingBox->toPolygon();

Polygon

A Polygon instance represents a two-dimensional shape of connected line segments and 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 two points using the Haversine formula.
  • distanceVincenty(Position $from, Position $to): Calculates the geodetic distance between two points using the Vincenty inverse formula 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 from the first point to the second point in degrees.
  • midpoint(Position $from, Position $to): Calculates an intermediate point on the geodesic between the two given points.
  • endpoint(Position $start, float $heading, Geokit\Distance $distance): Calculates the destination point along a geodesic, given an initial heading and distance, from the given start point.

License

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].