Requête spatiale qui fonctionne en SQL mais pas avec Doctrine
Bonjour,
Je dispose de 2 couches de données, l'une contenant les centroides des communes françaises et l'autre des polygones répartis sur le territoire français.
Je souhaite créer un buffer autour du centroide d'une des communes que j'aurai sélectionnée et intersecter ce buffer avec mes polygones pour renvoyer lesquels sont dans le périmètre.
Lorsque je lance ma requête dans PgAdmin, pas de problème.
Pour autant, lorsque mon dev créé la requête en DQL dans Doctrine (Symfony), la requête retourne les polygones présents dans le buffer et contenu dans les limites de la commune sélectionnée.
De fait, si je créé un buffer de 50km autour du centroide de Lyon, la requête ne retournera que les polygones présents dans le périmètre de la commune de Lyon alors que je souhaite également les polygones hors périmètres de Lyon mais contenu dans le buffer.
Ma requête en SQL :
Code:
1 2 3 4 5
| SELECT a.lon,a.lat,a.code_insee,b.geometry
FROM public.commune a, public.polygones b
WHERE ST_Dwithin(ST_Transform(ST_SetSRID(b.geometry, 4326), 2154),
ST_Transform(ST_SetSRID(ST_Point( a.lon, a.lat), 4326), 2154),25000)
AND a.code_insee = '21231' |
La version dans Doctrine :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public function getZoneInPerimeter($id, $perimeter)
{
return $this->createQueryBuilder('b')
->join('b.commune', 'a')
->where('ST_Dwithin(ST_Transform(ST_SetSRID(b.geometry, 4326), 2154),
ST_Transform(ST_SetSRID(ST_Point( a.lon, a.lat), 4326), 2154), :perimeter)) = true')
->andWhere('a.id= :id')
->setParameters(array(
'perimeter' => $perimeter * 1000,
'id' => $id
))
->getQuery()
->getResult(); |