Bonjour,
J’avance dans la création de requête de (un peu) plus en plus longues dans Tilemill. Mais je bloque sur ce point.
Est-il possible (surement) de créer une table avec uniquement (ou une colonne de table avec un true/false) les polygones contenus dans un polygone défini (et éventuellement présent dans la base de données utilisée) ?
Du genre :
(SELECT name, ref, admin_level, way, way_area
FROM planet_osm_polygon
WHERE (c’est ici, l’élément est contenu dans le polygone ayant l’osm_id n°…, ou les tags …)
Merci, avec ça, j’ai de quoi essayer… Je vais regarder ça ce soir ou ce week-end.
Christian, c’est pour délimiter une carte à une région géographique. J’avais aussi essayé de limiter les données à la surface en filtrant en amont avec osmconvert, mais je ne sais pas pourquoi il me perdait certains éléments (multipolygones à l’intérieur avec une surface en commun, mais pas tous) malgré l’option de garder ce qui dépasse.
JB
Le gros avantage : on contrôle plus finement le rendu final : le masque peut être agrandi (avec un line-width assez grand) et flouté.
L’inconvénient : tilemil utilise toutes les géométries pour le rendu, postgis ne filtre rien. Donc c’est plus lourd en calcul, mais dans ce cas il ne s’agit pas de rendre la terre entière.
Il y a aussi une solution de masque simple à base de d’openlayers/leaflet pour les cartes en ligne mais je ne retrouve pas
Salut,
Effectivement, la requête fonctionne bien. La table des éléments affichée dans Tilemill semble être bonne (mais elle est bien longue à charger). Par contre, plus moyen de faire afficher un rendu à Tilemill. Est-ce lié à la lourdeur de l’analyse ? Ou à autre chose ? Je vois que le processus Postgre tourne au maximum.
JB.
PS : la requête :
(SELECT p1.“ref:FR:CEF”, split_part(p1.“ref:FR:CEF”,’_’,2) AS “ref:FR:CEF:short”, p1.admin_level, p1.name, p1.way
FROM planet_osm_polygon p1, planet_osm_polygon p2
WHERE p2.“ref:FR:CEF”=‘Be’ AND p1.boundary=‘religious_administration’ AND ST_Contains(p2.way, p1.way) and p1.way && !bbox! and p2.way && !bbox!
)as toto
C’est sur une région. La base OSM ne contient que la région (récupérée sur Géofabrik), le polygone de délimitation fait à peu près la moitié de cette région.
Je n’ai pas créé d’index supplémentaire (à ceux fait par défaut lors de l’importation). Ça se fait facilement ?
JB.
CREATE INDEX ON planet_osm_polygon USING GIST (way) WHERE boundary=‘religious_administration’;
Ca crée un index partiel (clause WHERE), mais je ne pense pas que tu y gagne grand chose sur une petite base. Sur une grosse, ça peut être très intéressant.