mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-24 13:31:37 +03:00
icu: switch postcodes to using the pre-formatted one
This commit is contained in:
parent
ca7b46511d
commit
b7704833e4
@ -156,7 +156,6 @@ DECLARE
|
|||||||
linegeo GEOMETRY;
|
linegeo GEOMETRY;
|
||||||
splitline GEOMETRY;
|
splitline GEOMETRY;
|
||||||
sectiongeo GEOMETRY;
|
sectiongeo GEOMETRY;
|
||||||
interpol_postcode TEXT;
|
|
||||||
postcode TEXT;
|
postcode TEXT;
|
||||||
stepmod SMALLINT;
|
stepmod SMALLINT;
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -174,8 +173,6 @@ BEGIN
|
|||||||
ST_PointOnSurface(NEW.linegeo),
|
ST_PointOnSurface(NEW.linegeo),
|
||||||
NEW.linegeo);
|
NEW.linegeo);
|
||||||
|
|
||||||
interpol_postcode := token_normalized_postcode(NEW.address->'postcode');
|
|
||||||
|
|
||||||
NEW.token_info := token_strip_info(NEW.token_info);
|
NEW.token_info := token_strip_info(NEW.token_info);
|
||||||
IF NEW.address ? '_inherited' THEN
|
IF NEW.address ? '_inherited' THEN
|
||||||
NEW.address := hstore('interpolation', NEW.address->'interpolation');
|
NEW.address := hstore('interpolation', NEW.address->'interpolation');
|
||||||
@ -207,6 +204,11 @@ BEGIN
|
|||||||
FOR nextnode IN
|
FOR nextnode IN
|
||||||
SELECT DISTINCT ON (nodeidpos)
|
SELECT DISTINCT ON (nodeidpos)
|
||||||
osm_id, address, geometry,
|
osm_id, address, geometry,
|
||||||
|
-- Take the postcode from the node only if it has a housenumber itself.
|
||||||
|
-- Note that there is a corner-case where the node has a wrongly
|
||||||
|
-- formatted postcode and therefore 'postcode' contains a derived
|
||||||
|
-- variant.
|
||||||
|
CASE WHEN address ? 'postcode' THEN placex.postcode ELSE NULL::text END as postcode,
|
||||||
substring(address->'housenumber','[0-9]+')::integer as hnr
|
substring(address->'housenumber','[0-9]+')::integer as hnr
|
||||||
FROM placex, generate_series(1, array_upper(waynodes, 1)) nodeidpos
|
FROM placex, generate_series(1, array_upper(waynodes, 1)) nodeidpos
|
||||||
WHERE osm_type = 'N' and osm_id = waynodes[nodeidpos]::BIGINT
|
WHERE osm_type = 'N' and osm_id = waynodes[nodeidpos]::BIGINT
|
||||||
@ -260,13 +262,10 @@ BEGIN
|
|||||||
endnumber := newend;
|
endnumber := newend;
|
||||||
|
|
||||||
-- determine postcode
|
-- determine postcode
|
||||||
postcode := coalesce(interpol_postcode,
|
postcode := coalesce(prevnode.postcode, nextnode.postcode, postcode);
|
||||||
token_normalized_postcode(prevnode.address->'postcode'),
|
IF postcode is NULL and NEW.parent_place_id > 0 THEN
|
||||||
token_normalized_postcode(nextnode.address->'postcode'),
|
SELECT placex.postcode FROM placex
|
||||||
postcode);
|
WHERE place_id = NEW.parent_place_id INTO postcode;
|
||||||
IF postcode is NULL THEN
|
|
||||||
SELECT token_normalized_postcode(placex.postcode)
|
|
||||||
FROM placex WHERE place_id = NEW.parent_place_id INTO postcode;
|
|
||||||
END IF;
|
END IF;
|
||||||
IF postcode is NULL THEN
|
IF postcode is NULL THEN
|
||||||
postcode := get_nearest_postcode(NEW.country_code, nextnode.geometry);
|
postcode := get_nearest_postcode(NEW.country_code, nextnode.geometry);
|
||||||
|
@ -992,7 +992,7 @@ BEGIN
|
|||||||
{% if debug %}RAISE WARNING 'Got parent details from search name';{% endif %}
|
{% if debug %}RAISE WARNING 'Got parent details from search name';{% endif %}
|
||||||
|
|
||||||
-- determine postcode
|
-- determine postcode
|
||||||
NEW.postcode := coalesce(token_normalized_postcode(NEW.address->'postcode'),
|
NEW.postcode := coalesce(token_get_postcode(NEW.token_info),
|
||||||
location.postcode,
|
location.postcode,
|
||||||
get_nearest_postcode(NEW.country_code, NEW.centroid));
|
get_nearest_postcode(NEW.country_code, NEW.centroid));
|
||||||
|
|
||||||
@ -1150,8 +1150,7 @@ BEGIN
|
|||||||
|
|
||||||
{% if debug %}RAISE WARNING 'RETURN insert_addresslines: %, %, %', NEW.parent_place_id, NEW.postcode, nameaddress_vector;{% endif %}
|
{% if debug %}RAISE WARNING 'RETURN insert_addresslines: %, %, %', NEW.parent_place_id, NEW.postcode, nameaddress_vector;{% endif %}
|
||||||
|
|
||||||
NEW.postcode := coalesce(token_normalized_postcode(NEW.address->'postcode'),
|
NEW.postcode := coalesce(token_get_postcode(NEW.token_info), NEW.postcode);
|
||||||
NEW.postcode);
|
|
||||||
|
|
||||||
-- if we have a name add this to the name search table
|
-- if we have a name add this to the name search table
|
||||||
IF NEW.name IS NOT NULL THEN
|
IF NEW.name IS NOT NULL THEN
|
||||||
|
@ -104,6 +104,13 @@ AS $$
|
|||||||
$$ LANGUAGE SQL IMMUTABLE STRICT;
|
$$ LANGUAGE SQL IMMUTABLE STRICT;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION token_get_postcode(info JSONB)
|
||||||
|
RETURNS TEXT
|
||||||
|
AS $$
|
||||||
|
SELECT info->>'postcode';
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE STRICT;
|
||||||
|
|
||||||
|
|
||||||
-- Return token info that should be saved permanently in the database.
|
-- Return token info that should be saved permanently in the database.
|
||||||
CREATE OR REPLACE FUNCTION token_strip_info(info JSONB)
|
CREATE OR REPLACE FUNCTION token_strip_info(info JSONB)
|
||||||
RETURNS JSONB
|
RETURNS JSONB
|
||||||
|
@ -675,6 +675,9 @@ class _TokenInfo:
|
|||||||
if self.address_tokens:
|
if self.address_tokens:
|
||||||
out['addr'] = self.address_tokens
|
out['addr'] = self.address_tokens
|
||||||
|
|
||||||
|
if self.postcode:
|
||||||
|
out['postcode'] = self.postcode
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user