mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
Merge pull request #2737 from lonvia/reset-linking-ranks
Fix rank inheritance from linked places
This commit is contained in:
@@ -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
|
||||
@@ -1025,7 +1036,9 @@ BEGIN
|
||||
|| coalesce(NEW.extratags, ''::hstore);
|
||||
|
||||
-- mark the linked place (excludes from search results)
|
||||
UPDATE placex set linked_place_id = NEW.place_id
|
||||
-- Force reindexing to remove any traces from the search indexes and
|
||||
-- reset the address rank if necessary.
|
||||
UPDATE placex set linked_place_id = NEW.place_id, indexed_status = 2
|
||||
WHERE place_id = location.place_id;
|
||||
-- ensure that those places are not found anymore
|
||||
{% if 'search_name' in db.tables %}
|
||||
|
||||
@@ -238,3 +238,29 @@ Feature: Updates of linked places
|
||||
Then placex contains
|
||||
| object | extratags |
|
||||
| R1 | 'linked_place' : 'town' |
|
||||
|
||||
|
||||
Scenario: Keep linking and ranks when place type changes
|
||||
Given the grid
|
||||
| 1 | | | 2 |
|
||||
| | | 9 | |
|
||||
| 4 | | | 3 |
|
||||
And the places
|
||||
| osm | class | type | name | admin | geometry |
|
||||
| R1 | boundary | administrative | foo | 8 | (1,2,3,4,1) |
|
||||
And the places
|
||||
| osm | class | type | name | geometry |
|
||||
| N1 | place | city | foo | 9 |
|
||||
When importing
|
||||
Then placex contains
|
||||
| object | linked_place_id | rank_address |
|
||||
| N1 | R1 | 16 |
|
||||
| R1 | - | 16 |
|
||||
|
||||
When updating places
|
||||
| osm | class | type | name | geometry |
|
||||
| N1 | place | town | foo | 9 |
|
||||
Then placex contains
|
||||
| object | linked_place_id | rank_address |
|
||||
| N1 | R1 | 16 |
|
||||
| R1 | - | 16 |
|
||||
|
||||
Reference in New Issue
Block a user