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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 php : Sélectionner tout - Visualiser dans une fenêtre à part
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();