banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Wed 19 April 2023 16:40

tireau_maylis
Juste Inscrit !
Date d'inscription: 19 Apr 2023
Messages: 8

Sélection objets

Bonjour,

Je travaille sur deux couches : Referentiel foncier public et la BD TOPO. Je souhaite sélectionner les bâtiments de la BD TOPO qui se situent sur le RFP grâce à une requête SQL car il y a beaucoup de données. Mais les bâtiments de la BD TOPO dépassent un petit peu des limites duRFP.
Je ne peux pas utiliser st_intersect car il va me sélectionner tous les bâtiments qui intersectent mais pas forcément ceux sur la couche RFP. Je ne peux pas non utiliser st_contains puisqu'ils ne me les sélectionnent pas.

Quelle commande SQL pourrais je utiliser pour avoir seulement les bâtiments qui sont sur le RFP ?

Merci par avance

Hors ligne

 

#2 Wed 19 April 2023 18:03

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 994

Re: Sélection objets

Bonjour Maylis,

pour avoir seulement les bâtiments qui sont sur le RFP ?


J'ai personnellement du voir les bâtiments que vous souhaitez et ceux que vous ne souhaitez pas : vous pourriez peut-être faire un petit dessin pour illustrer ceux qui sortent avec ST_Intersect que vous ne voulez pas ?

Sinon, les fonctions de relations spatiales sont illustrées ici :
http://postgis.net/workshops/postgis-in … ships.html


Sylvain M.

Hors ligne

 

#3 Wed 19 April 2023 19:01

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1542

Re: Sélection objets

Bonsoir,

Ce qui se fait parfois pour identifier des polygones contenus dans d'autres alors que les couches sont mal calées (donc intersection entre les deux couches) est de faire l'intersection entre les objets des deux couches et de regarder le % d'intersection d'un objet vs un autre:
un batiment "un peu a cheval" va avoir 99% de sa surface en intersection avec un RFP => il est dans ce RFP.

Il faut décider d'une valeur (plus de x% de la surface en intersection) pour choisir quel polygone associer avec un polygone de l'autres couche.

Nicolas

Hors ligne

 

#4 Thu 20 April 2023 14:44

tireau_maylis
Juste Inscrit !
Date d'inscription: 19 Apr 2023
Messages: 8

Re: Sélection objets

Oui c'est exactement ce que j'ai pensé à faire mais je n'arrive pas à trouver la formule sql.

Nicolas Ribot a écrit:

Bonsoir,

Ce qui se fait parfois pour identifier des polygones contenus dans d'autres alors que les couches sont mal calées (donc intersection entre les deux couches) est de faire l'intersection entre les objets des deux couches et de regarder le % d'intersection d'un objet vs un autre:
un batiment "un peu a cheval" va avoir 99% de sa surface en intersection avec un RFP => il est dans ce RFP.

Il faut décider d'une valeur (plus de x% de la surface en intersection) pour choisir quel polygone associer avec un polygone de l'autres couche.

Nicolas

Hors ligne

 

#5 Thu 20 April 2023 14:47

tireau_maylis
Juste Inscrit !
Date d'inscription: 19 Apr 2023
Messages: 8

Re: Sélection objets

Sur la première photo, j'ai utilisé "intersecter" les bâtiments sélectionnés en jaune dépassent sur la couche RFP mais ne se situent pas dessus.
Sur la seconde photo, j'ai utilisé "contient" mais les bâtiments ne sont pas sélectionnés puisqu'ils dépassent



Sylvain M. a écrit:

Bonjour Maylis,

pour avoir seulement les bâtiments qui sont sur le RFP ?


J'ai personnellement du voir les bâtiments que vous souhaitez et ceux que vous ne souhaitez pas : vous pourriez peut-être faire un petit dessin pour illustrer ceux qui sortent avec ST_Intersect que vous ne voulez pas ?

Sinon, les fonctions de relations spatiales sont illustrées ici :
http://postgis.net/workshops/postgis-in … ships.html

Dernière modification par tireau_maylis (Thu 20 April 2023 14:57)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#6 Thu 20 April 2023 15:24

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 994

Re: Sélection objets

Je vois mieux la problématique.

La solution proposée par Nicolas est la plus propre : il faut calculer la surface de la zone d'intersection des bâtis avec le RFP, via quelque chose comme :
ST_Area(ST_Intersection(bati.geom,rfp.geom))

(à diviser par la surface d'origine du bâti, pour connaitre le pourcentage dans la RFP).

Mais dans ce cas, ce qui marche souvent est de se baser non pas sur la géométrie des bâtiments, mais uniquement sur leur centroide, via ST_Centroid(bati.geom), ou ST_PointOnSurface(bati.geom) (et donc => ST_Intersects(ST_PointOnSurface(bati.geom),rfp.geom) )
En faisant l'intersection dessus, ça marche dans 99.9% des géométries, et c'est plus rapide que la découpe des géométries intersectées (si le volume de données est important par exemple).

A+


Sylvain M.

Hors ligne

 

#7 Thu 20 April 2023 15:53

tireau_maylis
Juste Inscrit !
Date d'inscription: 19 Apr 2023
Messages: 8

Re: Sélection objets

Je n'ai pas bien compris quand j'utilise ST_Intersects(ST_PointOnSurface(bati.geom),rfp.geom) , faut-il que je divise par la surface d'origine du bâti, pour connaitre le pourcentage dans la RFP ou je divise seulement si j'utilise la première fonction (st_area) ?

Merci de votre réponse

Maylis

Dernière modification par tireau_maylis (Thu 20 April 2023 15:55)

Hors ligne

 

#8 Thu 20 April 2023 16:17

JP LLORENS
Participant assidu
Date d'inscription: 12 Nov 2008
Messages: 231

Re: Sélection objets

Bonjour.
La solution de Sylvain est la plus simple, il suffit de croiser le centre de gravité(ST_pointonsurface) de l'objet graphique d'origine (le bati) avec les emprises du RFP. Inutile de chercher à connaître les pourcentages de surface à l'intérieur ou à l'extérieure.
JP

Hors ligne

 

#9 Thu 20 April 2023 18:09

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 994

Re: Sélection objets

En effet, je me suis peut-être mal exprimé.
Voici la requête complète, à adapter aux noms de vos tables/champs :

Code:

SELECT    bati.*
FROM    bati
JOIN    rfp ON ST_Intersects(ST_PointOnSurface(bati.geom), rfp.geom)

Sylvain M.

Hors ligne

 

#10 Fri 21 April 2023 09:12

tireau_maylis
Juste Inscrit !
Date d'inscription: 19 Apr 2023
Messages: 8

Re: Sélection objets

merci !

Hors ligne

 

Pied de page des forums

Powered by FluxBB