Ensure that postcode relations are used in addresses

Postcode nodes are normally thrown away as they only play
a role for computing artifical postcodes. However, if we
have a postcode area this still should take part of the
address.

Fixes #1330.
This commit is contained in:
Sarah Hoffmann
2019-04-14 11:20:03 +02:00
parent 2a4198f94d
commit 403ee260f6

View File

@@ -2318,6 +2318,7 @@ DECLARE
searchhousename HSTORE; searchhousename HSTORE;
searchrankaddress INTEGER; searchrankaddress INTEGER;
searchpostcode TEXT; searchpostcode TEXT;
postcode_isaddress BOOL;
searchclass TEXT; searchclass TEXT;
searchtype TEXT; searchtype TEXT;
countryname HSTORE; countryname HSTORE;
@@ -2325,6 +2326,8 @@ BEGIN
-- The place ein question might not have a direct entry in place_addressline. -- The place ein question might not have a direct entry in place_addressline.
-- Look for the parent of such places then and save if in for_place_id. -- Look for the parent of such places then and save if in for_place_id.
postcode_isaddress := true;
-- first query osmline (interpolation lines) -- first query osmline (interpolation lines)
IF in_housenumber >= 0 THEN IF in_housenumber >= 0 THEN
SELECT parent_place_id, country_code, in_housenumber::text, 30, postcode, SELECT parent_place_id, country_code, in_housenumber::text, 30, postcode,
@@ -2441,7 +2444,10 @@ BEGIN
searchcountrycode := location.country_code; searchcountrycode := location.country_code;
END IF; END IF;
IF location.type in ('postcode', 'postal_code') THEN IF location.type in ('postcode', 'postal_code') THEN
location.isaddress := FALSE; postcode_isaddress := false;
IF location.osm_type != 'R' THEN
location.isaddress := FALSE;
END IF;
END IF; END IF;
countrylocation := ROW(location.place_id, location.osm_type, location.osm_id, countrylocation := ROW(location.place_id, location.osm_type, location.osm_id,
location.name, location.class, location.type, location.name, location.class, location.type,
@@ -2485,7 +2491,7 @@ BEGIN
IF searchpostcode IS NOT NULL THEN IF searchpostcode IS NOT NULL THEN
location := ROW(null, null, null, hstore('ref', searchpostcode), 'place', location := ROW(null, null, null, hstore('ref', searchpostcode), 'place',
'postcode', null, true, true, 5, 0)::addressline; 'postcode', null, false, postcode_isaddress, 5, 0)::addressline;
RETURN NEXT location; RETURN NEXT location;
END IF; END IF;