diff --git a/analysers/analyser_osmosis_wikipedia.py b/analysers/analyser_osmosis_wikipedia.py index ff1bccca4..18591d6a2 100644 --- a/analysers/analyser_osmosis_wikipedia.py +++ b/analysers/analyser_osmosis_wikipedia.py @@ -24,16 +24,11 @@ from .Analyser_Osmosis import Analyser_Osmosis sql10 = """ -SELECT - (array_agg(tid))[1:10], - ST_AsText(any_locate((array_agg(type))[1], (array_agg(id))[1])), - w -FROM (( +WITH t AS (( SELECT tags->'wikipedia' AS w, - 'N' || id AS tid, - 'N' AS type, - id + 'N' AS type, + id AS id FROM nodes WHERE @@ -41,12 +36,9 @@ tags?'wikipedia' AND NOT tags->'wikipedia' LIKE '%#%' AND NOT tags?| ARRAY['highway', 'railway', 'waterway', 'power', 'place', 'shop', 'network', 'operator'] - ORDER BY - id -) UNION ALL ( + ) UNION ALL ( SELECT tags->'wikipedia' AS w, - 'W' || id AS tid, 'W' AS type, id FROM @@ -56,12 +48,9 @@ tags?'wikipedia' AND NOT tags->'wikipedia' LIKE '%#%' AND NOT tags?| ARRAY['highway', 'railway', 'waterway', 'power', 'place', 'shop', 'network', 'operator'] - ORDER BY - id -) UNION ALL ( + ) UNION ALL ( SELECT tags->'wikipedia' AS w, - 'R' || id AS tid, 'R' AS type, id FROM @@ -72,11 +61,30 @@ NOT tags->'wikipedia' LIKE '%#%' AND NOT tags->'type' IN ('route', 'boundary') AND NOT tags?| ARRAY['highway', 'railway', 'waterway', 'power', 'place', 'shop', 'network', 'operator'] - ORDER BY - id -)) AS t -GROUP BY +)), +b AS ( + SELECT + w, + type, + id, + first_value(type) OVER (PARTITION BY w ORDER BY type, id) || first_value(id) OVER (PARTITION BY w ORDER BY type, id) AS tid + FROM + t +) +SELECT + (array_agg(type || id))[1:10], + ST_AsText( + any_locate( + substring(tid, 1, 1), + substring(tid, 2)::bigint + ) + ), w +FROM + b +GROUP BY + w, + tid HAVING count(*) > 1 """