|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
Bonjour,
J'utilise postgis et je cherche à récupérer les valeurs d'une colonne d'une table dont les points correspondants sont les plus proches des points d'une autre table. Les tables sont assez grosses (et encore c'était bien pire avant) 20000 et 300000 points environ. Code :
Qu'en pensez-vous ? Merci. (il n'y a peut être pas beaucoup de géomaticien par ici....) |
||
|
|
00
|
|
|
#2 | ||||
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 227 ![]() |
bonjour je ferais comme ça:
au prealable il faut creer des gist index sur les deux tables Code :
Code :
BOX3D(x1 y1,) definit un rectangle dont coord sommet haut gauche sont x1 y1 et sommet inf droit x2 y2 dans la requete j'ai centré ce rectangle par rapport au poin t de la premiere table , val etant une valeur arbitraire que tu fixes poour etre sur d'avoir le point le plus proche de la deuxieme table tout en limitant la recherche aux points les plus proches(c'est clair...) de plus l'operateur && utilise les gist index |
||||
|
|
00
|
|
|
#3 | ||||
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
Merci pour cette réponse.
Effectivement les index risques d'êtres utiles... Sinon c'est clair pour la box3D, par contre elle est décrite en 2D est-ce normal ??. voila ce que j'execute : Code :
Code :
|
||||
|
|
00
|
|
|
#4 | ||||
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
Code :
Code :
|
||||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
Le problème, c'est ce qu'il y a dans les box3D : x(a.the_geom)+30...
Peut on utiliser une fonction à cette endroit ? Si oui comment ? Merci |
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
Une solution (simple) :
Code :
WHERE d.the_geom && ST_expand(c.the_geom, 30) |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
La requête ne m'a retourné que deux lignes : celles pour lesquelles les points d'une couche avaient les coordonnées x et y égales (sur la partie entière) aux points de l'autre couche.
2 points sur environ 20000 ! |
|
|
00
|
|
|
#8 |
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 227 ![]() |
bonjour ,
peut-etre que 30 est une valeur trop faible essaye une valeur plus importante . autrement tu peux essayer lafonction buffer(the_geom, ta_valeur) |
|
|
00
|
|
|
#9 | ||
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 227 ![]() |
re bonjour , je pense qu'il ya un probleme avec la precision des distances ,on a jamais egalité sauf quand la distance est nulle (=0), je n'arrive pas a faire des arrondis qui permettrai de resoudre ce probleme
je te propose une autre solution (un peu bizarre...) mais qui devrait marcher en gros il faut faire l'egalité sur un champs identifiant de la deuxiieme bas (que j'ai noté id) et dans la sous requete tu ordonne par la distance et tu limite le resultat à la premiere ligne Code :
|
||
|
|
00
|
|
|
#10 |
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
Merci pour cette réponse,
Je test des choses dans ce genre la... |
|
|
00
|
|
|
#11 | ||
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
Bonjour,
Encore mieux, 1 ligne retournée. Code :
![]() Je vais essayer la requête avec lien identifiant... |
||
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Inscription : décembre 2006 Messages : 213 ![]() |
Bonjour,
J'ai résolu mon problème sans fonctionnalité spatiale (en partie seulement). -création d'une table (ID_DIST) avec les identifiants des points des deux tables et la distance qu'il y a entre chacun deux (dans la limite d'un buffer). -auto jointure qui retourne l'occurrence ayant la distance minimale pour chaque identifiant d'une des couches. -mise à jour d'une des tables en fonction de ID_DIST. (L'élévation que je souhaite obtenir sera possible grâce à une macro fournie par le logiciel que j'utilise.) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com