Le 25/03/2011 09:15, Nicolas Dumoulin a écrit :
Bonjour,

Ma problématique de départ est de calculer la longueur des aménagements
cyclables d'une commune, sens unique et double-sens. Facile. Sauf que j'ai
deux situations qui posent problèmes :

  - quand il y a deux pistes séparées de la chaussée, une de chaque côté. Ça
fait deux ways dans la base, qui sont détectés avec une approche naïve comme
deux sections en sens-unique. Or, je voudrai comptabiliser une fois la
longueur de la rue équipée. Exemple :
http://www.openstreetmap.org/?lat=45.775679&lon=3.090125&zoom=18&layers=M

  - quand une voie séparée en deux est équipée de bandes cyclables, là aussi ça
donne deux comptages en sens unique. Exemple :
http://www.openstreetmap.org/?lat=45.76286&lon=3.11849&zoom=17&layers=C

L'idée serait donc de trouver un moyen de regrouper les voies parallèles à une
distance en dessous d'un seuil.

1. Est-ce faisable avec postgis ?
Certainement. Mais, si les exceptions ne sont pas trop nombreuses ('osm_id NOT IN (...)' ), il vaut mieux les exclure du calcul général et les calculer à part. Sinon je crois bien il faut une sacrée requête avec de bonnes jointures et avec un buffer
On crée une table dans laquelle chaque way reçoit un buffer
On compte le nombre de buffer dans lequel s'incrit chaque way (>= au moins le sien)
On divise la longueur du way par le nombre de buffers
On réutilise la même table temporaire pour réutiliser les mêmes conditions de sélection de way Après, il suffit d'ajuster les paramètre du buffer. Là, je ne maitrise pas bien (SRID...)

WITH buffered AS (
  SELECT *, ST_BUFFER(...) as buffer
  FROM ma_table
  WHERE conditions
)

SELECT *, ST_LENGTH(cycle.way)/count(buf.osm_id) AS length
FROM buffered AS cycle
  JOIN buffered AS buf
    ON ST_WITHIN(cycle.way, buf.buffer)

Pas testé non plus.
--
FrViPofm




_______________________________________________
dev-fr mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/dev-fr

Répondre à