Geospatial utilities for distance, bounding box, and point-in-polygon calculations

Maintainers

Package info

github.com/philiprehberger/php-geo

pkg:composer/philiprehberger/php-geo

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.0.3 2026-03-17 20:06 UTC

This package is auto-updated.

Last update: 2026-03-17 20:07:46 UTC


README

Tests Latest Version on Packagist License

Geospatial utilities for distance, bounding box, and point-in-polygon calculations.

Requirements

Dependency Version
PHP ^8.2

No external dependencies.

Installation

composer require philiprehberger/php-geo

Usage

Distance Calculation (Haversine)

use PhilipRehberger\Geo\Coordinate;
use PhilipRehberger\Geo\Geo;

$nyc = new Coordinate(40.7128, -74.0060);
$la = new Coordinate(33.9425, -118.4081);

$km = Geo::distance($nyc, $la);          // ~3944 km
$miles = Geo::distance($nyc, $la, 'mi'); // ~2451 mi

Vincenty Distance

$km = Geo::distanceVincenty($nyc, $la); // More accurate for long distances

Bounding Box

$center = new Coordinate(40.7128, -74.0060);
$box = Geo::boundingBox($center, 10.0); // 10 km radius

$box->contains($center); // true
$box->toArray();          // ['min_lat' => ..., 'max_lat' => ..., 'min_lng' => ..., 'max_lng' => ...]

Point in Polygon

$polygon = [
    new Coordinate(40.800, -73.970),
    new Coordinate(40.800, -73.950),
    new Coordinate(40.760, -73.950),
    new Coordinate(40.760, -73.970),
];

$point = new Coordinate(40.780, -73.960);
Geo::contains($polygon, $point); // true

Bearing

$bearing = Geo::bearing($nyc, $la); // Initial bearing in degrees (0-360)

Midpoint

$mid = Geo::midpoint($nyc, $la); // Geographic midpoint

Destination

// Travel 100 km north from the equator
$start = new Coordinate(0.0, 0.0);
$dest = Geo::destination($start, 0.0, 100.0); // bearing=0 (north), 100 km

Units

Supported units: km (kilometers), mi (miles), m (meters), nmi (nautical miles).

Geo::distance($a, $b, 'mi');   // miles
Geo::distance($a, $b, 'm');    // meters
Geo::distance($a, $b, 'nmi');  // nautical miles

API

Method Description
Geo::distance($a, $b, $unit) Haversine distance between two coordinates
Geo::distanceVincenty($a, $b, $unit) Vincenty distance between two coordinates
Geo::boundingBox($center, $radius, $unit) Bounding box around a center point
Geo::contains($polygon, $point) Point-in-polygon test (ray casting)
Geo::bearing($from, $to) Initial bearing in degrees
Geo::midpoint($a, $b) Geographic midpoint
Geo::destination($start, $bearing, $distance, $unit) Destination from start given bearing and distance

Development

composer install
vendor/bin/phpunit
vendor/bin/pint --test
vendor/bin/phpstan analyse

License

MIT