Refactor z12-14 transportation filter logic (#1207)
This PR is a refactor. The purpose of this PR is to refactor the logic in the z12-z14 transportation layer to increase readability and reduce code complexity. In addition, this fixes bugs in the original filter code: * Create filter parity between `service` and `service_construction` highway classes. * Removal of unintended `class` values `minor_construction`, `path_construction`, `service_construction`, and `track_construction` from zoom 12 filter by explicitly listing the highway classes that are included.
This commit is contained in:
parent
d19aa5bf24
commit
849aca8da7
@ -56,3 +56,37 @@ SELECT CASE
|
|||||||
$$ LANGUAGE SQL IMMUTABLE
|
$$ LANGUAGE SQL IMMUTABLE
|
||||||
STRICT
|
STRICT
|
||||||
PARALLEL SAFE;
|
PARALLEL SAFE;
|
||||||
|
|
||||||
|
-- Determine which transportation features are shown at zoom 12
|
||||||
|
CREATE OR REPLACE FUNCTION transportation_filter_z12(highway text, construction text) RETURNS boolean AS
|
||||||
|
$$
|
||||||
|
SELECT CASE
|
||||||
|
WHEN highway IN ('unclassified', 'residential') THEN TRUE
|
||||||
|
WHEN highway_class(highway, '', construction) IN
|
||||||
|
(
|
||||||
|
'motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'raceway',
|
||||||
|
'motorway_construction', 'trunk_construction', 'primary_construction',
|
||||||
|
'secondary_construction', 'tertiary_construction', 'raceway_construction'
|
||||||
|
) THEN TRUE --includes ramps
|
||||||
|
ELSE FALSE
|
||||||
|
END
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE
|
||||||
|
STRICT
|
||||||
|
PARALLEL SAFE;
|
||||||
|
|
||||||
|
-- Determine which transportation features are shown at zoom 13
|
||||||
|
-- Assumes that piers have already been excluded
|
||||||
|
CREATE OR REPLACE FUNCTION transportation_filter_z13(highway text,
|
||||||
|
public_transport text,
|
||||||
|
construction text,
|
||||||
|
service text) RETURNS boolean AS
|
||||||
|
$$
|
||||||
|
SELECT CASE
|
||||||
|
WHEN transportation_filter_z12(highway, construction) THEN TRUE
|
||||||
|
WHEN highway = 'service' OR construction = 'service' THEN service NOT IN ('driveway', 'parking_aisle')
|
||||||
|
WHEN highway_class(highway, public_transport, construction) IN ('minor', 'minor_construction') THEN TRUE
|
||||||
|
ELSE FALSE
|
||||||
|
END
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE
|
||||||
|
STRICT
|
||||||
|
PARALLEL SAFE;
|
||||||
|
|||||||
@ -358,26 +358,17 @@ FROM (
|
|||||||
z_order
|
z_order
|
||||||
FROM osm_highway_linestring
|
FROM osm_highway_linestring
|
||||||
WHERE NOT is_area
|
WHERE NOT is_area
|
||||||
AND (
|
AND
|
||||||
zoom_level = 12 AND (
|
CASE WHEN zoom_level = 12 THEN transportation_filter_z12(highway, construction)
|
||||||
highway_class(highway, public_transport, construction) NOT IN ('track', 'path', 'minor', 'service')
|
WHEN zoom_level = 13 THEN
|
||||||
OR highway IN ('unclassified', 'residential')
|
CASE WHEN man_made='pier' THEN NOT ST_IsClosed(geometry)
|
||||||
) AND man_made <> 'pier'
|
ELSE transportation_filter_z13(highway, public_transport, construction, service)
|
||||||
OR zoom_level = 13
|
END
|
||||||
AND (
|
WHEN zoom_level >= 14 THEN
|
||||||
highway_class(highway, public_transport, construction) NOT IN ('track', 'path') AND
|
CASE WHEN man_made='pier' THEN NOT ST_IsClosed(geometry)
|
||||||
man_made <> 'pier'
|
ELSE TRUE
|
||||||
OR
|
END
|
||||||
man_made = 'pier' AND NOT ST_IsClosed(geometry)
|
END
|
||||||
)
|
|
||||||
AND service NOT IN ('driveway', 'parking_aisle')
|
|
||||||
OR zoom_level >= 14
|
|
||||||
AND (
|
|
||||||
man_made <> 'pier'
|
|
||||||
OR
|
|
||||||
NOT ST_IsClosed(geometry)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
UNION ALL
|
UNION ALL
|
||||||
|
|
||||||
-- etldoc: osm_railway_linestring_gen_z8 -> layer_transportation:z8
|
-- etldoc: osm_railway_linestring_gen_z8 -> layer_transportation:z8
|
||||||
|
|||||||
@ -22,7 +22,7 @@ layer:
|
|||||||
[`aerialway`](http://wiki.openstreetmap.org/wiki/Key:aerialway),
|
[`aerialway`](http://wiki.openstreetmap.org/wiki/Key:aerialway),
|
||||||
[`route`](http://wiki.openstreetmap.org/wiki/Key:route) tag (for
|
[`route`](http://wiki.openstreetmap.org/wiki/Key:route) tag (for
|
||||||
shipping ways), or
|
shipping ways), or
|
||||||
[`man_made`](http://wiki.openstreetmap.org/wiki/Key:route).
|
[`man_made`](http://wiki.openstreetmap.org/wiki/Key:man_made).
|
||||||
values:
|
values:
|
||||||
motorway:
|
motorway:
|
||||||
highway: ['motorway', 'motorway_link']
|
highway: ['motorway', 'motorway_link']
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user