diff --git a/layers/housenumber/housenumber.sql b/layers/housenumber/housenumber.sql index 84cb4d8..54cccef 100644 --- a/layers/housenumber/housenumber.sql +++ b/layers/housenumber/housenumber.sql @@ -15,9 +15,19 @@ SELECT osm_id, geometry, housenumber -FROM osm_housenumber_point -WHERE zoom_level >= 14 - AND geometry && bbox; +FROM ( + SELECT + osm_id, + geometry, + housenumber, + row_number() OVER(PARTITION BY concat(street, block_number, housenumber) ORDER BY has_name ASC) as rn + FROM osm_housenumber_point + WHERE 1=1 + AND zoom_level >= 14 + AND geometry && bbox +) t +WHERE rn = 1; + $$ LANGUAGE SQL STABLE -- STRICT PARALLEL SAFE; diff --git a/layers/housenumber/housenumber.yaml b/layers/housenumber/housenumber.yaml index e3df878..7fa1e6e 100644 --- a/layers/housenumber/housenumber.yaml +++ b/layers/housenumber/housenumber.yaml @@ -3,6 +3,7 @@ layer: description: | Everything in OpenStreetMap which contains a `addr:housenumber` tag useful for labelling housenumbers on a map. This adds significant size to *z14*. For buildings the centroid of the building is used as housenumber. + Duplicates within a tile are dropped if they have the same street/block_number (records without name tag are prioritized for preservation). 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 fields: diff --git a/layers/housenumber/housenumber_centroid.sql b/layers/housenumber/housenumber_centroid.sql index c7a0bf2..66db8a1 100644 --- a/layers/housenumber/housenumber_centroid.sql +++ b/layers/housenumber/housenumber_centroid.sql @@ -22,6 +22,16 @@ $$ WHERE (full_update OR osm_id IN (SELECT osm_id FROM housenumber.osm_ids)) AND ST_GeometryType(geometry) <> 'ST_Point' AND ST_IsValid(geometry); + + -- we don't need exact name just to know if it's present + UPDATE osm_housenumber_point + SET has_name = + CASE + WHEN has_name = '' THEN '0' + ELSE '1' + END + WHERE (full_update OR osm_id IN (SELECT osm_id FROM housenumber.osm_ids)); + $$ LANGUAGE SQL; SELECT convert_housenumber_point(true); diff --git a/layers/housenumber/mapping.yaml b/layers/housenumber/mapping.yaml index 174335b..4bb0fbe 100644 --- a/layers/housenumber/mapping.yaml +++ b/layers/housenumber/mapping.yaml @@ -12,6 +12,15 @@ tables: - name: housenumber key: addr:housenumber type: string + - name: street + key: addr:street + type: string + - name: block_number + key: addr:block_number + type: string + - name: has_name + key: name + type: string type_mappings: points: addr:housenumber: