Doctrine2 multi-platform support for spatial types and functions

Installs: 61 984

Dependents: 8

Stars: 96

Watchers: 18

Forks: 57

Open Issues: 32

Language: PHP

0.0.1 2014-03-17 13:45 UTC


Doctrine2 multi-platform support for spatial types and functions. Currently MySQL and PostgreSQL with PostGIS are supported. Could potentially add support for other platforms if an interest is expressed.

This package is a refactor/continuation of my doctrine2-mysql-spatial package.


The following SQL/OpenGIS types have been implemented as PHP objects and accompanying Doctrine types:


  • Point
  • LineString
  • Polygon
  • MultiPoint
  • MultiLineString
  • MultiPolygon


Similar to Geometry but SRID value is always used (SRID supported in PostGIS only), and accepts only valid "geographic" coordinates.

  • Point
  • LineString
  • Polygon


  • GeometryCollection
  • 3D/4D geometries ??
  • Rasters ??????

There is support for both WKB/WKT and EWKB/EWKT return values. Currently only WKT/EWKT is used in statements.


Currently the following SQL functions are supported in DQL (more coming):


  • ST_Area
  • ST_AsBinary
  • ST_AsText
  • ST_Centroid
  • ST_ClosestPoint
  • ST_Contains
  • ST_ContainsProperly
  • ST_CoveredBy
  • ST_Covers
  • ST_Crosses
  • ST_Disjoint
  • ST_Distance
  • ST_Envelope
  • ST_GeomFromText
  • ST_Length
  • ST_LineCrossingDirection
  • ST_StartPoint
  • ST_Summary


  • Area
  • AsBinary
  • AsText
  • Contains
  • Disjoint
  • Envelope
  • GeomFromText
  • GLength
  • MBRContains
  • MBRDisjoint
  • StartPoint


If you're using Doctrine with Symfony2 take a look at, otherwise the OrmTest.php test class shows their use with Doctrine alone.

DQL AST Walker

A DQL AST walker is included which when used with the following DQL functions will return the appropriate Geometry type object from queries instead of strings:

  • AsText
  • ST_AsText
  • AsBinary
  • ST_AsBinary

EWKT/EWKB function support planned.


    $query = $this->em->createQuery('SELECT AsText(StartPoint(l.lineString)) MyLineStringEntity l');

    $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'CrEOF\Spatial\ORM\Query\GeometryWalker');

    $result = $query->getResult();

$result[n][1] will now be of type Point instead of the string 'POINT(X Y)'