[OSM-talk-fr] Requête Overpass API sur France entière
Roland Olbricht
roland.olbricht at gmx.de
Ven 4 Oct 21:44:46 UTC 2013
Am Mittwoch, 2. Oktober 2013, 23:36:49 schrieb Christian Quest:
> Si on indique une bbox, overpass passera en revue tout les objets dans
> cette bbox sans pouvoir tirer partie de ses index.
> Si on utilise seulement un tag, overpass utilise l'index sur ce tag pour
> trouver les objets correspondants qui si ils sont peu nombreux donneront le
> résultat très rapidement.
Je voudrais adjouter quelque détails:
Au prémier, on peut forcer overpass d'utiliser ses indexes dans l'ordre qui
convient. Regardons encore un fois le requête:
> way
> ["power"="sub_station"]
> ["operator"="RTE"]
> (41.333740, -5.140600, 51.089062, 9.559320);
> (._;>;);
> out body;
Si on écrit
way
["power"="sub_station"]
["operator"="RTE"];
way
._
(41.333740, -5.140600, 51.089062, 9.559320);
(._;>;);
out body;
on enforce overpass d'amasser au premier tous les ways avec les deux tags,
puis les filtrer pour le bbox. Les deux requêtes ont le méme résultat, mais la
deuxieme est plus vite.
Plus compliqué, c'est plus vite à overpass-api.de depuis une heure, parce-que
je viens de corriger un bogue qui à ralentisse tous les requêtes avec grand
bbox, mais n'a pas changé les résultat (et pour ça a été jamais trouvé par des
testes).
> overpass n'a pas la puissance (relative) du query planner de postgres qui
> va tenter d'exploiter le meilleur index et la meilleure méthode en fonction
> de la requête et des données (via des statistiques).
Un "query planner" ne serais pas un grande aide ici, parce-que il n'y a pas
beaucoup des indexes pour choisir dans overpass. Au contraire, il faut
seulement connâitre en avance combien des objets sont dans un bbox
particulière. Si on connâit ça, on peut compter si suivre des objets
individuel ou lire tous les objets au bbox et plus vite.
Il voire existe le code pour compter des résultat. Mais je prefère faire des
testes nombreux avant d'integrer ce code, parce-que avoir toujours les
résultats corrects est plus important que faire les requêtes plus vite. Ce
code n'est pas encore bien testé.
On va gangner en plus si on utilise les deux indexes géographiques (de bbox et
des le objets trouvés) en parallel. C'est une chance pour gagner vitesse dans
des versions subséquentes. Au moment, j'implemente à overpass de stocker aussi
l'histoire d'OSM. Ca va simplifier de retrouver des objects supprimer et
également de suivre des changes au base des donées. Mais parce-que c'est un
grand étape, j'ai repousse tous les autres changes.
En totale, dans quelque mois les deux requêtes seront également vite, mais au
moment on devrait preferer le deuxième.
Roland
Plus d'informations sur la liste de diffusion Talk-fr