X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/6be2077d922098d65f069557dea55542c15a5c98..1879cf902c8271b8f5e15a8272adebe3c0d10193:/lib-sql/functions/address_lookup.sql?ds=sidebyside diff --git a/lib-sql/functions/address_lookup.sql b/lib-sql/functions/address_lookup.sql index eded2f7c..26ce2073 100644 --- a/lib-sql/functions/address_lookup.sql +++ b/lib-sql/functions/address_lookup.sql @@ -43,8 +43,7 @@ BEGIN END IF; END LOOP; - -- change this code below - -- anything will do as a fallback - just take the first name type thing there is + -- as a fallback - take the last element since it is the default name RETURN trim((avals(name))[array_length(avals(name), 1)]); END; $$ @@ -57,7 +56,6 @@ CREATE OR REPLACE FUNCTION get_address_by_language(for_place_id BIGINT, languagepref TEXT[]) RETURNS TEXT AS $$ - -- ARRAY['zh','default','brand','official_name:zh','short_name:zh','official_name','short_name','ref','type'] DECLARE result TEXT[]; currresult TEXT; @@ -189,6 +187,7 @@ BEGIN -- --- Return the record for the base entry. + current_rank_address := 1000; FOR location IN SELECT placex.place_id, osm_type, osm_id, name, coalesce(extratags->'linked_place', extratags->'place') as place_type, @@ -263,7 +262,7 @@ BEGIN -- If the place had a postcode assigned, take this one only -- into consideration when it is an area and the place does not have -- a postcode itself. - IF location.fromarea AND location.isaddress + IF location.fromarea AND location_isaddress AND (place.address is null or not place.address ? 'postcode') THEN place.postcode := null; -- remove the less exact postcode @@ -322,6 +321,11 @@ BEGIN location := ROW(null, null, null, hstore('ref', place.postcode), 'place', 'postcode', null, null, false, true, 5, 0)::addressline; RETURN NEXT location; + ELSEIF place.address is not null and place.address ? 'postcode' + and not place.address->'postcode' SIMILAR TO '%(,|;)%' THEN + location := ROW(null, null, null, hstore('ref', place.address->'postcode'), 'place', + 'postcode', null, null, false, true, 5, 0)::addressline; + RETURN NEXT location; END IF; RETURN;