diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index e35208b2..2ff608d4 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -31,11 +31,107 @@ doctrine: prefix: 'App\Entity' alias: App dql: + string_functions: + # for postgresql + geometry: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\Geometry + stbuffer: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STBuffer + stcollect: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STCollect + stsnaptogrid: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STSnapToGrid + stoverlaps: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STOverlaps numeric_functions: - st_contains: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STContains - contains: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Contains - st_area: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Area - st_geomfromtext: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\GeomFromText - st_intersects: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STIntersects - st_buffer: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STBuffer - point: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Point + # for postgresql + starea: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STArea + stasbinary: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STAsBinary + stasgeojson: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STAsGeoJson + stastext: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STAsText + stazimuth: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STAzimuth + stboundary: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STBoundary + stcentroid: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STCentroid + stclosestpoint: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STClosestPoint + stcontains: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STContains + stcontainsproperly: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STContainsProperly + stcoveredby: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STCoveredBy + stcovers: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STCovers + stcrosses: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STCrosses + stdisjoint: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STDisjoint + stdistance: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STDistance + stdistancesphere: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STDistanceSphere + stdwithin: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STDWithin + stenvelope: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STEnvelope + stexpand: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STExpand + stextent: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STExtent + stgeomfromtext: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STGeomFromText + stintersection: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STIntersection + stintersects: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STIntersects + stlength: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STLength + stlinecrossingdirection: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STLineCrossingDirection + stlineinterpolatepoint: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STLineInterpolatePoint + stmakebox2d: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STMakeBox2D + stmakeline: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STMakeLine + stmakepoint: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STMakePoint + stperimeter: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STPerimeter + stpoint: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STPoint + stscale: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STScale + stsetsrid: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STSetSRID + stsimplify: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STSimplify + ststartpoint: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STStartPoint + stsummary: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STSummary + sttouches: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STTouches + sttransform: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STTransform + + # for mysql + area: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Area + asbinary: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\AsBinary + astext: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\AsText + buffer: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Buffer + centroid: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Centroid + contains: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Contains + crosses: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Crosses + dimension: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Dimension + distance: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Distance + disjoint: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Disjoint + distancefrommultyLine: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\DistanceFromMultyLine + endpoint: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\EndPoint + envelope: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Envelope + equals: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Equals + exteriorring: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\ExteriorRing + geodistpt: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\GeodistPt + geometrytype: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\GeometryType + geomfromtext: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\GeomFromText + glength: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\GLength + interiorringn: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\InteriorRingN + intersects: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Intersects + isclosed: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\IsClosed + isempty: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\IsEmpty + issimple: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\IsSimple + linestringfromwkb: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\LineStringFromWKB + linestring: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\LineString + mbrcontains: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\MBRContains + mbrdisjoint: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\MBRDisjoint + mbrequal: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\MBREqual + mbrintersects: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\MBRIntersects + mbroverlaps: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\MBROverlaps + mbrtouches: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\MBRTouches + mbrwithin: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\MBRWithin + numinteriorrings: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\NumInteriorRings + numpoints: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\NumPoints + overlaps: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Overlaps + pointfromwkb: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\PointFromWKB + pointn: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\PointN + point: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Point + srid: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\SRID + startpoint: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\StartPoint + st_buffer: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STBuffer + st_contains: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STContains + st_crosses: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STCrosses + st_disjoint: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STDisjoint + st_distance: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STDistance + st_equals: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STEquals + st_intersects: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STIntersects + st_overlaps: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STOverlaps + st_touches: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STTouches + st_within: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\STWithin + touches: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Touches + within: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Within + x: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\X + y: CrEOF\Spatial\ORM\Query\AST\Functions\MySql\Y diff --git a/config/routes/dev/test.yaml b/config/routes/dev/test.yaml index a3fd4e19..ccad499a 100644 --- a/config/routes/dev/test.yaml +++ b/config/routes/dev/test.yaml @@ -8,3 +8,6 @@ test_gmap: path: /test/gmap controller: App\Controller\TestController::gmap +test_distance: + path: /test/distance + controller: App\Controller\TestController::distance diff --git a/src/Controller/TestController.php b/src/Controller/TestController.php index 70b44760..ae23f439 100644 --- a/src/Controller/TestController.php +++ b/src/Controller/TestController.php @@ -5,6 +5,10 @@ namespace App\Controller; use App\Ramcar\BaseController; use App\Access\Generator; +use CrEOF\Spatial\PHP\Types\Geometry\Point; + +use App\Entity\Outlet; + class TestController extends BaseController { public function index(Generator $acl_gen) @@ -32,4 +36,27 @@ class TestController extends BaseController return $this->render('test/map.html.twig', $params); } + + public function distance() + { + $params = $this->initParameters('home'); + + $point = new Point(121.0495453, 14.6042567); + + // test if we can get the top 5 closest outlets to a point + $em = $this->getDoctrine()->getManager(); + $query = $em->createQuery('SELECT o, st_distance(o.coordinates, point(:lng, :lat)) as dist FROM App\Entity\Outlet o ORDER BY dist') + ->setParameter('lat', $point->getLatitude()) + ->setParameter('lng', $point->getLongitude()) + ->setMaxResults(5); + error_log($query->getSql()); + $result = $query->getResult(); + + foreach ($result as $row) + { + error_log($row[0]->getName() . ' - ' . $row['dist']); + } + + return $this->render('home.html.twig', $params); + } }