Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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é ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Sun 11 December 2022 16:50

pyrenees-refuges
Juste Inscrit !
Date d'inscription: 11 Dec 2022
Messages: 3

ST_Contains avec du Multi Polygon

Bonjour

Je souhaite savoir si un point X,Y appartient a une commune.
J'ai une base de donnée commune de France avec une ligne par commune
Ma requête fonctionne très bien sauf si la commune possède plusieurs polygone.
Etant donné que mon point n'est pas compris dans les deux polygone la fonction me retourne false
Avez vous déjà rencontré ce problème, avez vous une solution ?

Code:

SELECT nom_commune FROM commune WHERE  ST_Contains(commune.geom,GeomFromText(  'Point( $x $y)' ))

Merci, Cordialement

Hors ligne

 

#2 Mon 12 December 2022 09:47

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

Re: ST_Contains avec du Multi Polygon

Bonjour.
Si les communes sont de type polygon simple, peut-être faut-il forcer la main en les transformant en multi-polygon :

Code:

SELECT nom_commune FROM commune WHERE  ST_Contains(st_multi(commune.geom),GeomFromText(  'Point( $x $y)' ))

A tester !
Bonne journée.
JP

Hors ligne

 

#3 Mon 12 December 2022 18:28

pyrenees-refuges
Juste Inscrit !
Date d'inscription: 11 Dec 2022
Messages: 3

Re: ST_Contains avec du Multi Polygon

Bonjour

Désolé, je n'ai pas précisé : je suis sous MySQL 5.7, cette fonction n'existe pas
Une autre idée ?

Hors ligne

 

#4 Mon 12 December 2022 22:38

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 375

Re: ST_Contains avec du Multi Polygon

As-tu essayé avec st_intersects() plutôt que st_contains() ?

Hors ligne

 

#5 Tue 13 December 2022 20:29

pyrenees-refuges
Juste Inscrit !
Date d'inscription: 11 Dec 2022
Messages: 3

Re: ST_Contains avec du Multi Polygon

Je viens de faire le test, sans succès.
Par contre si le point est sur la limite cela fonctionne mais dans mon cas le point peut-être n'importe où sur la commune ...
Une autre idée ? HELP !

Hors ligne

 

#6 Tue 13 December 2022 21:25

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 375

Re: ST_Contains avec du Multi Polygon

Je ne connais pas MySQL mais en tout cas st_contains et st_intersects fonctionnent bien avec des multipolygones dans postgres.
Peut-être commencer par vérifier que tes géométries sont correctes (valides) ?
Si la géométrie de ton multipolygone est erronée la fonction peut mal fonctionner.

Hors ligne

 

#7 Wed 14 December 2022 14:37

Alban Kraus
Participant occasionnel
Lieu: Tulle (19)
Date d'inscription: 13 Jan 2022
Messages: 44

Re: ST_Contains avec du Multi Polygon

J'ai une base de donnée commune de France avec une ligne par commune
Ma requête fonctionne très bien sauf si la commune possède plusieurs polygone.
[...] la fonction me retourne false


je suis sous MySQL 5.7


si le point est sur la limite cela fonctionne


Se pourrait-il que votre base de communes soit de type linéaire (avec seulement les contours des communes), ET que MySQL convertisse implicitement les anneaux en polygones ?

Que dit :

Code:

SELECT DISTINCT ST_GeometryType(geom) FROM commune

Si cette hypothèse se vérifie, il faudra alors convertir les données en multipolygones, mais je ne sais pas faire cela en MySQL.

Etant donné que mon point n'est pas compris dans les deux polygone


Normalement, ST_Contains est censé faire un OU...

Hors ligne

 

Pied de page des forums

Powered by FluxBB