mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-11-22 21:28:10 +03:00
fix rank inheritance from linked places
When taking over the address rank from a linked place, it needs to be the originally computed rank, not the one that might have been adjusted in the meantime. The adjustment was made under the assumption that the node is not linked.
This commit is contained in:
parent
a024c7665c
commit
2c05fc858a
@ -773,12 +773,6 @@ BEGIN
|
||||
and (linked_place is null or linked_place_id != linked_place);
|
||||
-- update not necessary for osmline, cause linked_place_id does not exist
|
||||
|
||||
IF NEW.linked_place_id is not null THEN
|
||||
NEW.token_info := null;
|
||||
{% if debug %}RAISE WARNING 'place already linked to %', OLD.linked_place_id;{% endif %}
|
||||
RETURN NEW;
|
||||
END IF;
|
||||
|
||||
-- Postcodes are just here to compute the centroids. They are not searchable
|
||||
-- unless they are a boundary=postal_code.
|
||||
-- There was an error in the style so that boundary=postal_code used to be
|
||||
@ -823,6 +817,16 @@ BEGIN
|
||||
NEW.class, NEW.type, NEW.admin_level,
|
||||
(NEW.extratags->'capital') = 'yes',
|
||||
NEW.address->'postcode');
|
||||
|
||||
-- Short-cut out for linked places. Note that this must happen after the
|
||||
-- address rank has been recomputed. The linking might nullify a shift in
|
||||
-- address rank.
|
||||
IF NEW.linked_place_id is not null THEN
|
||||
NEW.token_info := null;
|
||||
{% if debug %}RAISE WARNING 'place already linked to %', OLD.linked_place_id;{% endif %}
|
||||
RETURN NEW;
|
||||
END IF;
|
||||
|
||||
-- We must always increase the address level relative to the admin boundary.
|
||||
IF NEW.class = 'boundary' and NEW.type = 'administrative'
|
||||
and NEW.osm_type = 'R' and NEW.rank_address > 0
|
||||
@ -1001,7 +1005,14 @@ BEGIN
|
||||
-- Full indexing
|
||||
{% if debug %}RAISE WARNING 'Using full index mode for % %', NEW.osm_type, NEW.osm_id;{% endif %}
|
||||
IF linked_place is not null THEN
|
||||
SELECT * INTO location FROM placex WHERE place_id = linked_place;
|
||||
-- Recompute the ranks here as the ones from the linked place might
|
||||
-- have been shifted to accomodate surrounding boundaries.
|
||||
SELECT place_id, osm_id, class, type, extratags,
|
||||
centroid, geometry,
|
||||
(compute_place_rank(country_code, osm_type, class, type, admin_level,
|
||||
(extratags->'capital') = 'yes', null)).*
|
||||
INTO location
|
||||
FROM placex WHERE place_id = linked_place;
|
||||
|
||||
{% if debug %}RAISE WARNING 'Linked %', location;{% endif %}
|
||||
|
||||
@ -1012,11 +1023,11 @@ BEGIN
|
||||
NEW.centroid := geom;
|
||||
END IF;
|
||||
|
||||
{% if debug %}RAISE WARNING 'parent address: % rank address: %', parent_address_level, location.rank_address;{% endif %}
|
||||
IF location.rank_address > parent_address_level
|
||||
and location.rank_address < 26
|
||||
{% if debug %}RAISE WARNING 'parent address: % rank address: %', parent_address_level, location.address_rank;{% endif %}
|
||||
IF location.address_rank > parent_address_level
|
||||
and location.address_rank < 26
|
||||
THEN
|
||||
NEW.rank_address := location.rank_address;
|
||||
NEW.rank_address := location.address_rank;
|
||||
END IF;
|
||||
|
||||
-- merge in extra tags
|
||||
|
Loading…
Reference in New Issue
Block a user