recette
#15 |
|
Février 2011 |
Le problème Un nouveau problème basé sur la table populated_places. Cette fois la question est:
note: ce problème cache une petite complication.
|
PopulatedPlace #1 |
Distance (meters) |
PopulatedPlace #2 |
Vallarsa |
49.444299 |
Raossi |
Raossi |
49.444299 |
Vallarsa |
Seveso |
220.780551 |
Meda |
Meda |
220.780551 |
Seveso |
... |
... |
... |
SELECT pp1.name AS
"PopulatedPlace
#1", |
Cette fois ci, nous allons directement à la solution
Je
suppose que maintenant vous avez bien compris la nécessite
d'utiliser un Index Spatial pour obtenir une requète performante et
qu'une jointure entre deux instances d'une même table est également
nécessaire pour ce type d'analyse spatiale.
On va
s’intéresser aux points les plus importants:
la fonction MakeLine() construit un segment reliant deux POINT
la fonction GeodesicLength()
calcule la longueur totale (en mètres) d'un segment
(LINESTRING,long-lat).
Cette fonction donne des résultats très précis, car elle se
base sur l’ellipsoïde
Malheureusement, cela implique des
calculs complexes, et représente une tâche gourmande en temps.
Cependant, un usage adéquat de l'Index Spatial réduit
grandement cette complexité.
L'utilisation de la clause MATCH
RTreeDistWithin() permet d'estimer une première distance
directement au niveau de l'Index Spatial.
note: 0.02
signifie 2/100 de degrés (environs 2Km, au niveau de
l'équateur).
Les coordonnées de l'Index Spatial sont en
long-lat (4326 SRID), d'où la distance
angulaire.
la clause pp1.id <> pp2.id évite l'évaluation de la distance entre une Populated Place et elle même (toujours égale à 0.0)
Exécuter une requête de ce type sans se préoccuper des
performances (ie sans R*Tree) nécessite un temps de calcul
extrêmement long, même pour les processeurs les plus récents et
les plus performants. |
|
Author: Alessandro Furieri a.furieri@lqt.it |
This work is licensed under the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license. |
|
|
|
Permission is granted to copy, distribute and/or modify this
document under the terms of the |