J'ai écrit une requête sur un principe légèrement différent. Il ne
cherche les culs de sac d'écart de niveau d'highway mais que sur les
intersections.
CASE tags-'highway'
WHEN 'motorway' THEN 0
WHEN 'motorway_link' THEN 0
WHEN 'primary' THEN 1
WHEN 'primary_link' THEN 1
WHEN 'trunk' THEN 1
WHEN 'trunk_link' THEN 1
WHEN 'secondary' THEN 2
WHEN 'tertiary' THEN 3
WHEN 'unclassified' THEN 4
WHEN 'residential' THEN 4
ELSE 5
END AS level
Le principe est par exemple de trouver des primary (level:1) connectées
directement et uniquement sur des level=3.
J'ai par contre un doute sur le level des trunks.
Voila un exemple d'erreur, il y a une unclassified pour relier deux
secondary :
http://www.openstreetmap.org/browse/node/820904393
Fred
Le 16/03/2011 21:16, Vincent de Chateau-Thierry a écrit :
Le 16/03/2011 15:08, Frédéric Rodrigo a écrit :
Effectivement les way sont brutalement coupé aux limites de région.
Suivant les test ça crée de faux positifs. Il faut peut être trouver
une solution à ça.
L'idéal serait d'avoir tous les objets connectés à ceux s'arrêtant à la
frontière, et tous ceux connectés à ceux qui la chevauchent. On pourrait
alors produire des analyses en restant dans l'emprise de la région, en
tolérant les ways chevauchant la limite, mais avec au moins la garantie
que tous les objets considérés sont complets.
Le 16/03/2011 18:56, Eric Marsden a écrit :
Un test similaire est implanté dans OsmInspector (vue routing), qui
identifie les discontinuités par le fait que deux noeuds appartenant à
des highway sont proches mais distincts. Très utile pour détecter et
corriger les bugs non visibles dans les rendus cartographiques mais
qui affectent le routage.
http://tools.geofabrik.de/osmi/
Oui, on reste sur la même thématique. La vue de Geofabrik permet
d'identifier des nodes à déplacer pour boucher les fuites de réseau.
Le filtre que je propose, même s'il détecte aussi les ways
géométriquement non connexes, vise plutôt à modifier les tags que la
géométrie, en reclassant des highways. Ça se complète.
vincent
275007763
288121371
288125619
290215802
313889099
339587652
341873998
389440584
393445285
393445295
393445296
415315237
415315238
415315270
456262626
461591701
465201330
470274638
472456500
485639083
501581092
501581135
512506812
535373322
541408583
541408594
548395984
559576000
563270068
567920816
567920874
568116425
599021844
599021857
599133449
599863628
674039235
682527371
755810608
755810612
755810628
773250635
774473535
796990658
796990676
796990787
796990884
796991027
796991103
807108406
820904393
823170683
830372058
832093389
843099532
848164936
848164944
848165034
873908687
880806366
880806369
881455476
884729941
885860071
885860087
885860115
885860118
892700540
892701523
900698333
900698340
916453538
921929672
930314554
961432388
981589125
981644862
1008125641
1043924229
1044724951
1044725038
1045612955
1051094727
1051660970
1067816919
1139668295
1139722430
1276843344
1304783031
1309066673
1314232033
1358272433
1362213898
1366573764
1366645022
1367771363
1368766593
1389360437
1389360449
1392894254
DROP VIEW highway_level CASCADE;
CREATE VIEW highway_level AS
SELECT
id,
nodes,
tags?'junction' AS junction,
CASE tags-'highway'
WHEN 'motorway' THEN 0
WHEN 'motorway_link' THEN 0
WHEN 'primary' THEN 1
WHEN 'primary_link' THEN 1
WHEN 'trunk' THEN 1
WHEN 'trunk_link' THEN 1
WHEN 'secondary' THEN 2
WHEN 'tertiary' THEN 3
WHEN 'unclassified' THEN 4
WHEN 'residential' THEN 4
ELSE 5
END AS level
FROM
ways
WHERE
tags?'highway'
;
DROP VIEW way_ends CASCADE;
CREATE VIEW way_ends AS
(
SELECT
id,
nodes[1] AS nid,
level
FROM
highway_level
WHERE
NOT junction
)
UNION
(
SELECT
id,
nodes[array_length(nodes,1)] AS nid,
level
FROM
highway_level
WHERE
NOT junction
)
;
DROP VIEW h CASCADE;
CREATE VIEW h AS
SELECT
way_ends.nid,
way_ends.level AS nlevel,
highway_level.level
FROM
way_ends
JOIN way_nodes ON
way_ends.nid = way_nodes.node_id
JOIN highway_level ON
way_ends.id != highway_level.id AND
way_nodes.way_id = highway_level.id
GROUP BY
way_ends.nid,
way_ends.level,
highway_level.level
;
SELECT
nothaving.nid
FROM
h AS nothaving
LEFT JOIN h AS having_ ON
having_.level = nothaving.nlevel+1 AND
having_.nid = nothaving.nid
WHERE
having_.nid IS NULL
GROUP BY
nothaving.nid
;
___
dev-fr mailing list
dev-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/dev-fr