mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
correctly handle housenumber lists
Lists are now standardised to use a semicolon separator.
This commit is contained in:
@@ -48,6 +48,22 @@ $$
|
|||||||
LANGUAGE plpgsql;
|
LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION create_housenumber_id(housenumber TEXT)
|
||||||
|
RETURNS TEXT
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
normtext TEXT;
|
||||||
|
BEGIN
|
||||||
|
SELECT array_to_string(array_agg(trans), ';')
|
||||||
|
INTO normtext
|
||||||
|
FROM (SELECT transliteration(lookup_word) as trans, getorcreate_housenumber_id(lookup_word)
|
||||||
|
FROM (SELECT make_standard_name(h) as lookup_word
|
||||||
|
FROM regexp_split_to_table(housenumber, '[,;]') h) x) y;
|
||||||
|
|
||||||
|
return normtext;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql STABLE STRICT;
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION getorcreate_housenumber_id(lookup_word TEXT)
|
CREATE OR REPLACE FUNCTION getorcreate_housenumber_id(lookup_word TEXT)
|
||||||
RETURNS INTEGER
|
RETURNS INTEGER
|
||||||
AS $$
|
AS $$
|
||||||
|
|||||||
@@ -666,21 +666,17 @@ BEGIN
|
|||||||
NEW.housenumber := NULL;
|
NEW.housenumber := NULL;
|
||||||
IF NEW.address is not NULL THEN
|
IF NEW.address is not NULL THEN
|
||||||
IF NEW.address ? 'conscriptionnumber' THEN
|
IF NEW.address ? 'conscriptionnumber' THEN
|
||||||
i := getorcreate_housenumber_id(make_standard_name(NEW.address->'conscriptionnumber'));
|
|
||||||
IF NEW.address ? 'streetnumber' THEN
|
IF NEW.address ? 'streetnumber' THEN
|
||||||
i := getorcreate_housenumber_id(make_standard_name(NEW.address->'streetnumber'));
|
NEW.housenumber := (NEW.address->'conscriptionnumber') || ';' || (NEW.address->'streetnumber');
|
||||||
NEW.housenumber := (NEW.address->'conscriptionnumber') || '/' || (NEW.address->'streetnumber');
|
|
||||||
ELSE
|
ELSE
|
||||||
NEW.housenumber := NEW.address->'conscriptionnumber';
|
NEW.housenumber := NEW.address->'conscriptionnumber';
|
||||||
END IF;
|
END IF;
|
||||||
ELSEIF NEW.address ? 'streetnumber' THEN
|
ELSEIF NEW.address ? 'streetnumber' THEN
|
||||||
NEW.housenumber := NEW.address->'streetnumber';
|
NEW.housenumber := NEW.address->'streetnumber';
|
||||||
i := getorcreate_housenumber_id(make_standard_name(NEW.address->'streetnumber'));
|
|
||||||
ELSEIF NEW.address ? 'housenumber' THEN
|
ELSEIF NEW.address ? 'housenumber' THEN
|
||||||
NEW.housenumber := NEW.address->'housenumber';
|
NEW.housenumber := NEW.address->'housenumber';
|
||||||
i := getorcreate_housenumber_id(make_standard_name(NEW.housenumber));
|
|
||||||
END IF;
|
END IF;
|
||||||
NEW.housenumber := transliteration(NEW.housenumber);
|
NEW.housenumber := create_housenumber_id(NEW.housenumber);
|
||||||
|
|
||||||
addr_street := NEW.address->'street';
|
addr_street := NEW.address->'street';
|
||||||
addr_place := NEW.address->'place';
|
addr_place := NEW.address->'place';
|
||||||
|
|||||||
Reference in New Issue
Block a user