kopia lustrzana https://github.com/openmaptiles/openmaptiles
Convert semi-colon separated house numbers to a range (#1562)
This PR collapses housenumber values into the form min(housenumber)-max(housenumber) for cases where housenumber is a semi-colon separated list. If the list is all numbers, the bounds are the smallest and largest numbers. If the list includes non-numeric characters, it falls back to the first and last values in the list.pull/1579/head^2
rodzic
48a2b1af72
commit
a7a50d84bc
|
@ -14,7 +14,7 @@ SELECT
|
||||||
-- etldoc: osm_housenumber_point -> layer_housenumber:z14_
|
-- etldoc: osm_housenumber_point -> layer_housenumber:z14_
|
||||||
osm_id,
|
osm_id,
|
||||||
geometry,
|
geometry,
|
||||||
housenumber
|
display_housenumber(housenumber)
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
osm_id,
|
osm_id,
|
||||||
|
|
|
@ -7,12 +7,14 @@ layer:
|
||||||
buffer_size: 8
|
buffer_size: 8
|
||||||
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
|
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
|
||||||
fields:
|
fields:
|
||||||
housenumber: Value of the [`addr:housenumber`](http://wiki.openstreetmap.org/wiki/Key:addr) tag.
|
housenumber: Value of the [`addr:housenumber`](http://wiki.openstreetmap.org/wiki/Key:addr) tag.
|
||||||
|
If there are multiple values separated by semi-colons, the first and last value separated by a dash.
|
||||||
datasource:
|
datasource:
|
||||||
geometry_field: geometry
|
geometry_field: geometry
|
||||||
srid: 900913
|
srid: 900913
|
||||||
query: (SELECT geometry, housenumber FROM layer_housenumber(!bbox!, z(!scale_denominator!))) AS t
|
query: (SELECT geometry, housenumber FROM layer_housenumber(!bbox!, z(!scale_denominator!))) AS t
|
||||||
schema:
|
schema:
|
||||||
|
- ./housenumber_display.sql
|
||||||
- ./housenumber_centroid.sql
|
- ./housenumber_centroid.sql
|
||||||
- ./housenumber.sql
|
- ./housenumber.sql
|
||||||
datasources:
|
datasources:
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
CREATE OR REPLACE FUNCTION display_housenumber_nonnumeric(raw_housenumber text)
|
||||||
|
RETURNS text AS $$
|
||||||
|
-- Find the position of the semicolon in the input string
|
||||||
|
-- and extract the first and last value
|
||||||
|
SELECT substring(raw_housenumber from 1 for position(';' in raw_housenumber) - 1)
|
||||||
|
|| '–'
|
||||||
|
|| substring(raw_housenumber from position(';' in raw_housenumber) + 1);
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION display_housenumber(raw_housenumber text)
|
||||||
|
RETURNS text AS $$
|
||||||
|
SELECT CASE
|
||||||
|
WHEN raw_housenumber !~ ';' THEN raw_housenumber
|
||||||
|
WHEN raw_housenumber ~ '[^0-9;]' THEN display_housenumber_nonnumeric(raw_housenumber)
|
||||||
|
ELSE
|
||||||
|
(SELECT min(value)::text || '–' || max(value)::text
|
||||||
|
FROM unnest(string_to_array(raw_housenumber, ';')::int[]) AS value)
|
||||||
|
END
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE;
|
Ładowanie…
Reference in New Issue