Recette
#14 |
|
Février 2011 |
Le problème Vous vous souvenez ?
Il est maintenant temps de résoudre ce "petit" problème. |
PopulatedPlaceId |
PopulatedPlaceName |
LocalCouncilId |
LocalCouncilName |
County |
Region |
... |
... |
... |
... |
... |
... |
12383 |
Acitrezza |
NULL |
NULL |
NULL |
NULL |
12384 |
Lavinio |
NULL |
NULL |
NULL |
NULL |
11327 |
Altino |
69001 |
ALTINO |
CHIETI |
ABRUZZO |
11265 |
Archi |
69002 |
ARCHI |
CHIETI |
ABRUZZO |
11247 |
Ari |
69003 |
ARI |
CHIETI |
ABRUZZO |
... |
... |
... |
... |
... |
... |
SELECT pp.id AS
PopulatedPlaceId, |
On va commencer par une requête simple
la fonction ST_Contains(geom1, geom2) (Contains=Contient) évalue la relation spatiale existant entre les tables Local Councils et Populated Places.
il n'y a rien d'étrange dans cette requête: on utilise simplement une jointure spatiale.
L'utilisation de la fonction Transform() permet de reprojeter la géométrie afin de travailler qu'avec un seul SRID.
Mais comme vous le savez, utiliser une approche aussi simple (ie sans R*Tress) produira nécessairement une requète peu efficace et un temps de traitement important.
SELECT pp.id AS
PopulatedPlaceId, |
Cette nouvelle requête est la même
que la précédente, mais utilise l'Index Spatial R*Tree.
note: l'utilisation de la fonction Transform()
à chaque étape est absolument nécessaire, afin de ne travailler
que sous un seul SRID
Cependant, un problème persiste: la
requête ci dessus ne permet pas d'identifier les Populated Place non
inclus dans les Local Councils.
Pour ce faire, il est nécessaire
de mettre en place un LEFT
JOIN.
SELECT pp.id AS
PopulatedPlaceId, |
Voici la version finale.
on a simplement ajouté une clause LEFT JOIN , afin de caractérisé chaque Local Council en reportant les County et Region approprié.
IL n'est pas si surprenant que 20
Populated Places ne correspondent à aucun Local Council
(on
s'y attendait, car les deux jeux de données proviennent de sources
différentes).
Il est possible d'utiliser QGIS pour inspecter ces données: vous vous rendrez vite compte qu'il s'agit de points situés près de la mer. Ce qui explique les quelques petites incohérences de positionnement des points
|
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 |