Create test controller for st_distance functionality in database

This commit is contained in:
Kendrick Chan 2018-01-15 02:39:23 +08:00
parent 20756296e6
commit 6737099278
3 changed files with 133 additions and 7 deletions

View file

@ -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

View file

@ -8,3 +8,6 @@ test_gmap:
path: /test/gmap
controller: App\Controller\TestController::gmap
test_distance:
path: /test/distance
controller: App\Controller\TestController::distance

View file

@ -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);
}
}