philiprehberger / php-geo
Geospatial utilities for distance, bounding box, and point-in-polygon calculations
v1.0.3
2026-03-17 20:06 UTC
Requires
- php: ^8.2
Requires (Dev)
- laravel/pint: ^1.0
- phpstan/phpstan: ^1.12|^2.0
- phpunit/phpunit: ^11.0
README
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