NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #1472 most downloaded on Packagist
Simple Yet Powerful Geo Library
Last release 2 months ago
06 Aug 2026
Release timing varies
gaps range from 3 weeks to 1.4 years
Most releases are documented
notes for 44 of 54 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
54 releases · first in 2013
update uv install action version string
update uv install action version string
Manage *mkdocs* Python project with *uv.*
Incorrect intersection checking for lines in some cases, see #96.
One column per quarter.
update change log + README
change command for static analysis in CI
change command for static analysis in CI
Warning: Backwards-compatibility-breaking changes (see README for upgrade details)
GeometryLinesInterface for geometries containing lines (Line, Polyline, Polygon)getBounds() method to GeometryInterfaceWarning: Backwards-compatibility-breaking changes
Warning: Backwards-compatibility-breaking changes
setPoint1() and setPoint2() from Linemaster is now renamed to mainGeometryFactoryInterface::fromString() now has GeometryInterface as return typegetDestination() and getBearingFinal() from DirectVincentyBearinggetDistance(), getBearingInitial() and getBearingFinal() from InverseVincentyBearinggetX(), getY() and getZ() from CartesiangetPoint1() and getPoint2() from Lineuse proper variable as index for array access
use proper variable as index for array access
Merge fix/github-92 into master
Merge fix/github-92 into master
This release has no breaking changes.
This release has no breaking changes.
Thanks, @nilshoerrmann, for contributing!
Bounds::getAsPolygon() which returns a polygon containing the four nodes of the Bounds instanceBounds::getNorthEast() and Bounds::getSouthWest()CardinalDirection::isStrictlyNorth(), CardinalDirection::isStrictlyEast(), CardinalDirection::isStrictlySouth() and CardinalDirection::isStrictlyWest()Direction for checking if one point is north, eat, south or west from another pointIntersection for checking if two geometries intersect each otherdrop support for PHP 7.2 breaking change
DMS and Line classesDivision by zero in SimplifyBearing if two consecutive points share the same location, fixes #79.
SimplifyBearing if two consecutive points share the same location, fixes #79.Calculation of Cardinal Distances between two points. Thanks @LeoVie!
static to self to prevent accidentally calling the constructor with wrong arguments in child classes (Ellipsoid, Line, Polygon, Polyline)Simplifying polygons is now supported as well, see simplifyGeometry() methods in SimplifyBearing and SimplifyDouglasPeucker classes (fixes #69).
simplifyGeometry() methods in SimplifyBearing and SimplifyDouglasPeucker classes (fixes #69).\#68 CoordinateFactory emitted a warning if a coordindates string without arc seconds was passed to the fromString() method
CoordinateFactory emitted a warning if a coordindates string without arc seconds was passed to the fromString() method*phpgeo* requires PHP >= 7.2 now
World␣Geodetic␣System␣␣1984 → World␣Geodetic␣System␣1984 (#49)Nothing published for this version
method getIntermediatePoint() to the Line class which calculates an intermediate point on a line by following the Great Circle between the two line en
getIntermediatePoint() to the Line class which calculates an intermediate point on a line by following the Great Circle between the two line ends and dividing the line by the given fraction (0.0 ... 1.0)method getMidpoint() to the Line class which calculates the midpoint of a line by following the Great Circle between the two line ends and dividing th
getMidpoint() to the Line class which calculates the midpoint of a line by following the Great Circle between the two line ends and dividing the line into two halves.Cartesian which abstracts three-dimensional cartesian coordinates x, y, and zaccess modifier for the tolerance attribute is now protected (SimplifyDouglasPeucker)
tolerance attribute is now protected (SimplifyDouglasPeucker)BoundsFactory to create a bounds instance for a center point and a given distance to the bounds' corners. Thanks @sdennler!
BoundsFactory to create a bounds instance for a center point and a given distance to the bounds' corners. Thanks @sdennler!improve precision in PointToLineDistance
PointToLineDistancePointToLineDistance calculates the smallest distance between a point and a line
PointToLineDistance calculates the smallest distance between a point and a linehasSameLocation() checks if two points share the same location (optionally within a distance which defaults to 0.001 m = 1 mm)
hasSameLocation() checks if two points share the same location (optionally within a distance which defaults to 0.001 m = 1 mm)addUniquePoint adds unique points to a polyline (i.e., points that doesn't already exist in that polyline)getAveragePoint() returns the average value of latitude and longitude values for a polylinePolygon::contains()The bounds for a Polyline can now be retrieved in form of a Bound object.
Polyline can now be retrieved in form of a Bound object.improvements to the Douglas-Peucker processor. Thanks @iamskey!
Nothing published for this version
Links to documentation in README. Thanks @JonathanMH
VincentyVincentyCoordinateFactoryInformation on how to run checks and tests for developers in the README.
BearingEllipsoidal::inverseVincenty().new supported format for coordinates parser. Thanks to @petrknap
deprecated class Simplify was removed; alternatives: SimplifyBearing or SimplifyDouglasPeucker
Simplify was removed; alternatives: SimplifyBearing or SimplifyDouglasPeuckerArea calculation for polygons works now. Thanks to @felixveysseyre
GeoJSON output for polygon is now compliant with RFC 7946. Thanks to @arsonik
Nothing published for this version
add method for calculating the final bearing for a Line object
Line objectNothing published for this version
bugifx for a division-by-zero error which occurred when symplifying a polyline with the Douglas-Peucker algorithm.
add an utility class to calculate the perpendicular distance between a point and a line; documentation
add method to calculate the bearing of a Line instance (point 1 -> point 2)
Line instance (point 1 -> point 2)The Simplify processor class is now deprecated and will be removed in the 2.0 release.
SimplifyInterface was introduced and is implemented in two classes:
SimplifyDouglasPeucker and SimplifyBearingSimplify processor class is now deprecated and will be removed in the
2.0 release.Added functionality to change the direction of Polygon instances
Added geofence check for arbitrary geometry objects
Added formatter for "Decimal Minutes" format, e.g. 43° 37.386' N, 070° 12.472' W
43° 37.386' N, 070° 12.472' WAdded calculation of the bearing angle between two points (initial and final bearing)
Added functionality to change the direction of Line/Polyline instances
Added documentation sources in mkdocs format. Documentation is now available online at http://phpgeo.marcusjaschen.de/
several optimizations in control structures
Nothing published for this version
Added license information. *phpgeo* is now licensed under the GPL 3. (see issue #8)
added the new Polyline class (thanks @paulvl)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →