mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00: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:
@@ -773,12 +773,6 @@ BEGIN
|
|||||||
and (linked_place is null or linked_place_id != linked_place);
|
and (linked_place is null or linked_place_id != linked_place);
|
||||||
-- update not necessary for osmline, cause linked_place_id does not exist
|
-- 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
|
-- Postcodes are just here to compute the centroids. They are not searchable
|
||||||
-- unless they are a boundary=postal_code.
|
-- unless they are a boundary=postal_code.
|
||||||
-- There was an error in the style so that boundary=postal_code used to be
|
-- 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.class, NEW.type, NEW.admin_level,
|
||||||
(NEW.extratags->'capital') = 'yes',
|
(NEW.extratags->'capital') = 'yes',
|
||||||
NEW.address->'postcode');
|
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.
|
-- We must always increase the address level relative to the admin boundary.
|
||||||
IF NEW.class = 'boundary' and NEW.type = 'administrative'
|
IF NEW.class = 'boundary' and NEW.type = 'administrative'
|
||||||
and NEW.osm_type = 'R' and NEW.rank_address > 0
|
and NEW.osm_type = 'R' and NEW.rank_address > 0
|
||||||
@@ -1001,7 +1005,14 @@ BEGIN
|
|||||||
-- Full indexing
|
-- Full indexing
|
||||||
{% if debug %}RAISE WARNING 'Using full index mode for % %', NEW.osm_type, NEW.osm_id;{% endif %}
|
{% if debug %}RAISE WARNING 'Using full index mode for % %', NEW.osm_type, NEW.osm_id;{% endif %}
|
||||||
IF linked_place is not null THEN
|
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 %}
|
{% if debug %}RAISE WARNING 'Linked %', location;{% endif %}
|
||||||
|
|
||||||
@@ -1012,11 +1023,11 @@ BEGIN
|
|||||||
NEW.centroid := geom;
|
NEW.centroid := geom;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
{% if debug %}RAISE WARNING 'parent address: % rank address: %', parent_address_level, location.rank_address;{% endif %}
|
{% if debug %}RAISE WARNING 'parent address: % rank address: %', parent_address_level, location.address_rank;{% endif %}
|
||||||
IF location.rank_address > parent_address_level
|
IF location.address_rank > parent_address_level
|
||||||
and location.rank_address < 26
|
and location.address_rank < 26
|
||||||
THEN
|
THEN
|
||||||
NEW.rank_address := location.rank_address;
|
NEW.rank_address := location.address_rank;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- merge in extra tags
|
-- merge in extra tags
|
||||||
|
|||||||
Reference in New Issue
Block a user