use only computed postcode when getting address

Postcodes from address parts are now ignored as they have
been already taken into account when computing the postcode.
This commit is contained in:
Sarah Hoffmann
2017-07-02 14:16:48 +02:00
parent d0cc4006d3
commit 9a86c0cebc

View File

@@ -804,7 +804,6 @@ BEGIN
RETURN NULL; RETURN NULL;
END IF; END IF;
NEW.postcode := NEW.address->'postcode';
NEW.name := hstore('ref', NEW.postcode); NEW.name := hstore('ref', NEW.postcode);
SELECT * FROM get_postcode_rank(NEW.country_code, NEW.postcode) SELECT * FROM get_postcode_rank(NEW.country_code, NEW.postcode)
@@ -2430,9 +2429,8 @@ BEGIN
found := 1000; found := 1000;
hadcountry := false; hadcountry := false;
FOR location IN FOR location IN
select placex.place_id, osm_type, osm_id, select placex.place_id, osm_type, osm_id, name,
CASE WHEN class = 'place' and type = 'postcode' THEN hstore('name', postcode) ELSE name END as name, class, type, admin_level, true as isaddress,
class, type, admin_level, true as fromarea, true as isaddress,
CASE WHEN rank_address = 0 THEN 100 WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address, CASE WHEN rank_address = 0 THEN 100 WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
0 as distance, country_code, postcode 0 as distance, country_code, postcode
from placex from placex
@@ -2442,13 +2440,9 @@ BEGIN
IF searchcountrycode IS NULL AND location.country_code IS NOT NULL THEN IF searchcountrycode IS NULL AND location.country_code IS NOT NULL THEN
searchcountrycode := location.country_code; searchcountrycode := location.country_code;
END IF; END IF;
IF searchpostcode IS NOT NULL and location.type = 'postcode' THEN IF location.type in ('postcode', 'postal_code') THEN
location.isaddress := FALSE; location.isaddress := FALSE;
END IF; ELSEIF location.rank_address = 4 THEN
IF searchpostcode IS NULL and location.postcode IS NOT NULL THEN
searchpostcode := location.postcode;
END IF;
IF location.rank_address = 4 AND location.isaddress THEN
hadcountry := true; hadcountry := true;
END IF; END IF;
IF location.rank_address < 4 AND NOT hadcountry THEN IF location.rank_address < 4 AND NOT hadcountry THEN
@@ -2459,15 +2453,14 @@ BEGIN
END IF; END IF;
END IF; END IF;
countrylocation := ROW(location.place_id, location.osm_type, location.osm_id, location.name, location.class, countrylocation := ROW(location.place_id, location.osm_type, location.osm_id, location.name, location.class,
location.type, location.admin_level, location.fromarea, location.isaddress, location.rank_address, location.type, location.admin_level, true, location.isaddress, location.rank_address,
location.distance)::addressline; location.distance)::addressline;
RETURN NEXT countrylocation; RETURN NEXT countrylocation;
found := location.rank_address; found := location.rank_address;
END LOOP; END LOOP;
FOR location IN FOR location IN
select placex.place_id, osm_type, osm_id, select placex.place_id, osm_type, osm_id, name,
CASE WHEN class = 'place' and type = 'postcode' THEN hstore('name', postcode) ELSE name END as name,
CASE WHEN extratags ? 'place' THEN 'place' ELSE class END as class, CASE WHEN extratags ? 'place' THEN 'place' ELSE class END as class,
CASE WHEN extratags ? 'place' THEN extratags->'place' ELSE type END as type, CASE WHEN extratags ? 'place' THEN extratags->'place' ELSE type END as type,
admin_level, fromarea, isaddress, admin_level, fromarea, isaddress,
@@ -2484,12 +2477,9 @@ BEGIN
IF searchcountrycode IS NULL AND location.country_code IS NOT NULL THEN IF searchcountrycode IS NULL AND location.country_code IS NOT NULL THEN
searchcountrycode := location.country_code; searchcountrycode := location.country_code;
END IF; END IF;
IF searchpostcode IS NOT NULL and location.type = 'postcode' THEN IF location.type in ('postcode', 'postal_code') THEN
location.isaddress := FALSE; location.isaddress := FALSE;
END IF; END IF;
IF searchpostcode IS NULL and location.isaddress and location.type != 'postcode' and location.postcode IS NOT NULL and location.postcode not similar to '%(,|;)%' THEN
searchpostcode := location.postcode;
END IF;
IF location.rank_address = 4 AND location.isaddress THEN IF location.rank_address = 4 AND location.isaddress THEN
hadcountry := true; hadcountry := true;
END IF; END IF;
@@ -2523,7 +2513,6 @@ BEGIN
IF searchhousename IS NOT NULL THEN IF searchhousename IS NOT NULL THEN
location := ROW(in_place_id, null, null, searchhousename, searchclass, searchtype, null, true, true, 29, 0)::addressline; location := ROW(in_place_id, null, null, searchhousename, searchclass, searchtype, null, true, true, 29, 0)::addressline;
-- location := ROW(in_place_id, null, null, searchhousename, 'place', 'house_name', null, true, true, 29, 0)::addressline;
RETURN NEXT location; RETURN NEXT location;
END IF; END IF;