idée long terme : gérer les catégories dans un pmtiles ?
publié le , mis à jourJe note ici une idée bizarre, pour si jamais on se retrouve un jour avec l'instance overpass débordé par trop d'utilisateurs 😀
De la même façon qu'on calcule un fond de cartes dans un pmtiles avec un layer POI, on pourrait pré-calculer un pmtiles avec un layer pour chacune de nos catégories. Quand l'utilisateur activerait une catégorie, au lieu de faire une requête overpass sur la zone affichée, ça activerait l'affichage du layer du pmtiles.
J'avais fait ici une preuve de concept pour PlayGuide. Les marqueurs de lieux sont lus dans un pmtiles. On y voit un des avantages : aux zooms <14, la tuile ne contient pas forcément les lieux individuels mais bien plus souvent uniquement l'info du nb de lieux dans la zone géographique, qui permet d'afficher un cluster avec le nombre de lieux. Ca permet de proposer cet affichage des catégories quel que soit le zoom sans générer des requêtes overpass trop lourdes car sur une zone géographique trop grande, car tout a été précalculé dans le pmtiles.
En revanche, si je n'ai pas sauté le pas pour PlayGuide, c'était à cause de la mise à jour du pmtiles. Pour cartes.app, pour avoir la mise à jour minute de ces tuiles catégories (comme on a aujourd'hui la mise à jour minute de l'instance overpass), il faudrait déployer une instance tilekiln et tout paramétrer pour que les tuiles soient générées non pas au format shortbread, mais qu'elles contiennent nos catégories.
laem
Ah oui c'est intéressant comme idée !
etienneJr
j'ai commencé à regarder tilekiln (poussé par la proposition de cquest de l'utiliser pour un cyclosm vectoriel), mais j'ai biaisé le principe :
- d'habitude osm2pgsql est utilisé comme pour les tuiles raster, le filtrage se fait au remplissage de la base, avec 1 table par type d'objet, qui ici deviendront chacune des couches vectorielles. Ca oblige à avoir figé le schéma quand on crée la base.
- ici je prépare (comme j'avais fait quand on avait testé Underpass-API à la place d'overpass) une base osm2pgsql qui contient tout OSM. Puis je crée des
VIEWpour la filtrer selon les tags. Enfin, une requête sql classique de tilekiln fait unSELECTdans la view en choisissant les tags à afficher.- une modif dans le
SELECTest bien prise en compte après redémarrage detilekiln servepour générer une tuile à jour - je n'ai pas encore géré la fusion des nodes/ways/relations
- je n'ai pas encore testé les mises à jours minute
- une modif dans le
Exemple simpliste ici, j'ai préparé :
- une couche
buildinggrâce à :- une
VIEW(au lieu d'une table) qui sélectionne tous les ways qui ont le tagbuilding=*. - puis un
SELECTqui prend tous les objets, mais choisit d'inclure les valeurs debuildingetsourcedans la tuile
- une
- une couche
amenitygrâce à :- une
VIEW(au lieu d'une table) qui sélectionne tous les nodes qui ont le tagamenity=*. - puis un
SELECTqui prend tous les objets, mais choisit d'inclurename,amenityetopening_hoursdans la tuile
- une