mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
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:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user