NL OV kaart
Jump to navigation
Jump to search
Preparing the database
Stored Procedure
CREATE OR REPLACE FUNCTION unnest_rel_members_ways(ANYARRAY) RETURNS SETOF ANYELEMENT LANGUAGE SQL AS $$SELECT substring($1[i] from E'w(\\d+)') FROM generate_series(array_lower($1,1),array_upper($1,1)) i WHERE $1[i] LIKE 'w%';$$;
Array Aggregate
CREATE AGGREGATE array_accum (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = '{}'
);
The awesome query
SELECT ways, array_accum(ref)
FROM
(
SELECT DISTINCT unnest_rel_members_ways(members) AS ways, ref
FROM planet_osm_rels AS rels,
(
SELECT -osm_id AS osm_id, ref
FROM planet_osm_line
WHERE
(
(
route='bus' OR
route='subway' OR
route='tram'
)
AND osm_id < 0)
GROUP BY osm_id, ref
) AS routes
WHERE rels.id=routes.osm_id
) AS unique_routes
GROUP BY ways;