|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Inscription : mai 2002 Messages : 635 ![]() |
Bonjour,
J'ai une requête qui permet de chercher des personnes dans un rayon de x kms autour de chez soi du genre : Code :
Mais pour n'oublier personne, je ne peux me limiter à une recherche dans la même région car des membres se situent aux abords de régions limitrophes. Alors dans ce cas la requête scanne toute la base et là ça prend un temps fou. J'ai pensé à limiter la recherche aux régions limitrophes mais je ne vois pas comment faire cela à part connaitre pour chaque région ces régions limitrophes et tout rentrer dans une base...Bref pas évident. Avez-vous une idée pour améliorer la rapidité ? Cordialement |
||
|
|
00
|
|
|
#2 |
![]() ![]() |
Je ne suis pas spécialiste en SIG mais n'y a t-il pas dans Postgis une fonction qui permet de trouver les voisins d'un polygone ou de dire si le polygone X est voisin du polygone Y ?
Avec une auto-jointure ça devrait être possible ? En parlant des jointures, la syntaxe normalisée depuis 1992 utilise l'opérateur JOIN !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
|
|
#3 |
|
Membre habitué
![]() Inscription : mai 2002 Messages : 635 ![]() |
Je vous avoue que moi non plus je ne suis pas un "spécialiste " en SIG . Mes connaissance sont limitées à la base...
|
|
|
00
|
|
|
#4 |
![]() ![]() |
Regarde déjà chez SQLPro si tu trouves ton bonheur.
Il y a aussi ce forum spécialisé en SIG dans lequel tu trouveras peut-être plus facilement de l'aide qu'ici.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : mai 2002 Messages : 635 ![]() |
Merci !
|
|
|
00
|
|
|
#6 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 930 ![]() |
Votre prédicat n'est pas sargeable contains(buffer)... + departement
Il faut utiliser distance et pas buffer Avez vous posé un index spatial sur la colonne geom ? Au passage je remarque que votre façon de faire des jointures date de près de 20 ans. Depuis 1992 c'est JOIN qu'il faut utiliser : Au final quelque chose comme ça : Code :
Bref, apprenez SQL. C'est un vrai langage. Mon site web comme mon bouquin, peuvent vous y aider ! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
10
|
|
|
#7 |
|
Membre habitué
![]() Inscription : mai 2002 Messages : 635 ![]() |
Rassurez-vous ! je ne fais pas mes jointures comme celà et j'utilise JOIN depuis plus de 15 ans !!!
Ne pouvant pas mettre le vrai code de ma requête sur le site je comprends que cela puisse vous froisser à sa lecture mais c'est ainsi ce n'est qu'un exemple.. Quant à l'utilisation de buffer, c'est ce que l'on m'a conseillé sur un forum de SIG et c'est la requête que je retrouve dans des tutoriaux consacrés à POSTGIS. Cordialement PS : oui il y a des index spatiaux sur la colonne geom et je débute en SIG. Merci pour vos encouragements |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : mai 2002 Messages : 635 ![]() |
PS : je viens d'acheter votre bouquin !
Qui sait, il va peut-être me permettre d'optimiser mes requêtes... En tous cas merci pour le conseil sur l'utilisation de distance() au lieu de buffer() dans la recherche dans un rayon de x kms. Effectivement c'est beaucoup plus rapide. J'utilisais déjà distance() pour le calcul des kms mais on me l'avait pas préconisé pour une recherche dans un rayon de x kms. Cordialement |
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 930 ![]() |
L'utilisation de buffer dans ce cas est d'une grande bêtise. Lisez des articles intelligent. Évitez les articles rédigés par des Experts Néophytes, conséquence de la popularisation de l'informatique....
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#10 | ||
|
Membre habitué
![]() Inscription : mai 2002 Messages : 635 ![]() |
Voici ce qu'un expert en SIG me dit :
Code :
|
||
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Inscription : mai 2002 Messages : 635 ![]() |
Une fois testée la requête est 10 fois plus lente que celle n'utilisant pas buffer mais distance()
Démonstration faite qu'il ne faut pas utiliser buffer dans ce cas. Par contre ce que j'aimerais savoir est s'il vaut mieux utiliser distance() ou distance_sphere() Cordialement PS : Quels articles intelligents sur Postgis me conseillez-vous ? |
|
|
00
|
|
|
#12 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 930 ![]() |
Je ne connais pas distance_sphere qui ne fait pas partie de la norme SQL ou du standard OGC, mais je suppose que c'est pour palier les défaut de PostGIS qui ne sait pas travailler sur le géoïde terrestre, c'est à dire calculer la distance sur la courbure de la terre.
Pour cela la norme impose le passage par un SRID. D'après ce que j'ai vu cela calcule sur une sphere proche de la terre, mais pas sur le géoïde terrestre qui n'est pas sphérique ! Donc tout dépend de votre besoin. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#13 |
|
Membre habitué
![]() Inscription : mai 2002 Messages : 635 ![]() |
mais pourquoi est-ce idiot d'utiliser Buffer() dans mon cas ?
Cordialement |
|
|
00
|
|
|
#14 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 930 ![]() |
A votre avis, appliquer 2 fonctions à la place cela va
1) aller plus vite 2) aller aussi vite 3) aller moins vite qu'une seule fonction ? En sus, comme je crois l'avoir déjà dit, ces fonctions ne sont pas "sargeable". A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com