#1 Mon 18 April 2016 12:43
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
[POSTGIS] : requête (min et <) avec résultat curieux
Bonjour,
Je possède une couche de triangles qui ont un poids (le poids correspond à la valeur Z du plus petit des 3 sommets). Je cherche à savoir si dans mes triangles, je n'ai pas des objets (points) qui sont inférieurs (Z) à mon poids du triangle.
Ca fonctionne très bien, excepté pour certains cas, pour lesquels je me retrouve avec des points dont le Z est égal à mon poids de triangle.
La question que je me pose est double, pourquoi le strictement inférieur ou (supérieur selon comment on fait la requête) ne fonctionne pas correctement et pourquoi, il ne me remonte que quelques objets alors que vu son fonctionnement dans mes requêtes, il devrait m'en faire remonter beaucoup plus.
Code:
select distinct TR_mini.id_triangle as IDENTIFIANT_TRIANGLE, TR_mini.mindepth as Poids_du_TRIANGLE, SDG_REF.F03 as Depth_sonde, SDG_REF.F02, SDG_REF.F01, SDG_REF.source as SORIND_SONDES, st_asewkt(SDG_REF.geom) as geometry from "triangle_mini" TR_mini join "7444_total_30" SDG_REF on st_contains(TR_mini.geometry_tr, SDG_REF.geom) where TR_mini.mindepth > SDG_REF.f03
En espérant être clair?
D'avance merci
Dernière modification par Ted (Mon 18 April 2016 14:06)
Hors ligne
#2 Mon 18 April 2016 12:57
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : requête (min et <) avec résultat curieux
Bonjour,
Sans un échantillon des données difficile de dire ce qui se passe:
Peut etre un problème de précision avec st_contains ? (un point sur le contour du triangle ne sera pas renvoyé: utiliser st_intersects pour cela)
Essayer peut etre aussi de faire le JOIN avec les deux conditions de jointure: on st_contains(...) AND TR_mini.mindepth > SDG_REF.f03.
Nicolas
Hors ligne
#3 Mon 18 April 2016 14:09
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] : requête (min et <) avec résultat curieux
Nicolas,
Je viens de tester tes deux idées, ça me fait la même chose. J'ai ajouté un échantillon de données ( 2 shp, l'un contenant mes triangles, l'autre mes ponctuels).
Pour visualiser je fais cette requête :
Code:
select distinct TR_mini.id_triangle as IDENTIFIANT_TRIANGLE, TR_mini.mindepth as Poids_du_TRIANGLE, SDG_REF.F03 as Depth_sonde, SDG_REF.F02, SDG_REF.F01, SDG_REF.source as SORIND_SONDES, st_asewkt(SDG_REF.geom) as geometry from "triangle_mini" TR_mini join "7444_total_30" SDG_REF on st_contains(TR_mini.geometry_tr, SDG_REF.geom) where TR_mini.mindepth > SDG_REF.f03
d'avance merci
Hors ligne
#4 Mon 18 April 2016 15:49
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : requête (min et <) avec résultat curieux
Je ne suis pas sûr de comprendre votre problème.
La requete renvoie bien des points ayant les conditions demandées.
Quels sont les points qui posent pb ?
Nicolas
Hors ligne
#5 Mon 18 April 2016 15:51
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: [POSTGIS] : requête (min et <) avec résultat curieux
Bonjour.
Est-ce que le fait d'avoir des attributs de type double avec une précision de 15 n'est pas la source de votre problème ?
En arrondissant à 2 ou 3 chiffres après la virgule le résultat ne serait-il pas plus probant ?
Cordialement
JPL
Hors ligne
#6 Mon 18 April 2016 16:18
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] : requête (min et <) avec résultat curieux
@Nicolas,
La requête renvoie bien des résultats, mais pourquoi sur certains sommets j'ai une anomalies (voir les triangles Id 592,593,594), je me retrouve avec une sonde en anomalie (valeur 0.7 sur le triangle id 593 avec mindepth à 0.7, les valeurs sont égales et non > ou <), je devrai retrouver aucunes anomalies pour mon cas
@JPL,
C'est ce que je me suis dit, mais j'ai laissé faire la requête "bêtement". Postgis prend-il des valeurs "autres" sans qu'on le voit dans l'interface de la table?
QGIS m'avait quelque-chose de semblable!
Hors ligne
#7 Mon 18 April 2016 16:19
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : requête (min et <) avec résultat curieux
Sinon, je vois aussi que les coord ont l'air d'etre en lat/long.
Ca serait mieux de reprojeter dans un système métrique, 2154 ou France nord, pour travailler avec des coordonnées représentant des metres.
Peu d'opérations spatiales de postgis marchent avec des coordonnées sphériques, et il faut travailler avec un type GEOGRAPHY et non GEOMETRY dans ce cas.
nicolas
Hors ligne
#8 Mon 18 April 2016 16:45
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : requête (min et <) avec résultat curieux
Il n'y a pas les points correspondant aux triangles en question dans l'échantillon.
Je suis d'accord avec JP, ca sent les erreurs d'arrondis dans les données de points (range de valeurs entre -11.5 et 40.700000000000003) j'imagine que la bonne valeur doit etre 40.7, non ?
Nicolas
Hors ligne
#9 Mon 18 April 2016 17:00
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: [POSTGIS] : requête (min et <) avec résultat curieux
Ma réponse était basée sur une simple intuition. J'ai toujours la crainte en travaillant sur des valeurs avec une précision élevée que non seulement les traitements aient tendance à faire un arrondi en "toute transparence", mais aussi que les temps de traitements soient un peu plombés (mes craintes ne sont peut être pas fondées !). D'autant plus qu'en brossant rapidement vos données, une telle précision ne semble pas nécessaire.
JPL
Hors ligne
#10 Mon 18 April 2016 17:06
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] : requête (min et <) avec résultat curieux
A tous les deux,
Je vais faire de nouveaux tests demain.
Je suis obligé de travailler en WGS84. J'ai chargé mes données en shp, et elles ont été automatiquement mises en Geometry et avec les types d'attributs.
merci
Hors ligne
#11 Mon 18 April 2016 18:02
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : requête (min et <) avec résultat curieux
On est obligé à rien avec PostgreSQL/PostGIS
Vos données sont reprojetables en 2154 sans souci, si tant est qu'elles soient bien en WGS84 (ce que je crois, vu le calage avec la cote):
par ex pour les triangles:
Code:
alter table triangle alter column geom type geometry (polygon, 2154) using st_transform(st_setSRID(st_geometryN(geom, 1), 4326), 2154);
C'est encore mieux de préciser le SRID au chargement des données, ca permet d'utiliser st_transform plus proprement, sans forcer le srid.
Le alter montré fait aussi une extraction de vos Multipolygon, qui ne contiennent en fait que des MPG avec un seul élément.
Nicolas
Hors ligne
#12 Tue 19 April 2016 10:55
- Ted
- Participant assidu
- Date d'inscription: 16 Jan 2007
- Messages: 181
Re: [POSTGIS] : requête (min et <) avec résultat curieux
merci à tous les 2
le changement de float à numéric m'a corrigé pas mal de problèmes.
cordialement
Hors ligne