move linked place type into linked_place extratags

Using linked_place means that we don't overwrite any
place tags on the boundary. This is important when we
wanto to use the information for linking.
This commit is contained in:
Sarah Hoffmann
2020-02-09 22:26:53 +01:00
parent b00d16fd7d
commit 00ca493f33
4 changed files with 23 additions and 6 deletions

View File

@@ -202,8 +202,9 @@ BEGIN
FOR location IN FOR location IN
SELECT placex.place_id, osm_type, osm_id, name, SELECT placex.place_id, osm_type, osm_id, name,
CASE WHEN extratags ? 'place' THEN 'place' ELSE class END as class, CASE WHEN extratags ? 'place' or extratags ? 'linked_place'
CASE WHEN extratags ? 'place' THEN extratags->'place' ELSE type END as type, THEN 'place' ELSE class END as class,
coalesce(extratags->'place', extratags->'linked_place', type) as type,
admin_level, fromarea, isaddress, admin_level, fromarea, isaddress,
CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address, CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
distance, country_code, postcode distance, country_code, postcode

View File

@@ -818,7 +818,7 @@ BEGIN
--DEBUG: RAISE WARNING 'Using full index mode for % %', NEW.osm_type, NEW.osm_id; --DEBUG: RAISE WARNING 'Using full index mode for % %', NEW.osm_type, NEW.osm_id;
SELECT * INTO location FROM find_linked_place(NEW); SELECT * INTO location FROM find_linked_place(NEW);
IF location.place_id is not null THEN IF location.place_id is not null THEN
--DEBUG: RAISE WARNING 'Linked %', location; --DEBUG: RAISE WARNING 'Linked %', location;
-- Use this as the centre point of the geometry -- Use this as the centre point of the geometry
NEW.centroid := coalesce(location.centroid, NEW.centroid := coalesce(location.centroid,
@@ -830,7 +830,7 @@ BEGIN
END IF; END IF;
-- merge in extra tags -- merge in extra tags
NEW.extratags := hstore(location.class, location.type) NEW.extratags := hstore('linked_' || location.class, location.type)
|| coalesce(location.extratags, ''::hstore) || coalesce(location.extratags, ''::hstore)
|| coalesce(NEW.extratags, ''::hstore); || coalesce(NEW.extratags, ''::hstore);

View File

@@ -127,3 +127,19 @@ Feature: Linking of places
| N3:natural | - | | N3:natural | - |
| N3:place | R1 | | N3:place | R1 |
Scenario: Nodes with 'role' label are always linked
Given the places
| osm | class | type | admin | name | geometry |
| R13 | boundary | administrative | 6 | Garbo | poly-area:0.1 |
| N2 | place | hamlet | 15 | Vario | 0.006 0.00001 |
And the relations
| id | members | tags+type |
| 13 | N2:label | boundary |
When importing
Then placex contains
| object | linked_place_id |
| N2 | R13 |
And placex contains
| object | centroid | name+name | extratags+linked_place |
| R13 | 0.006 0.00001 | Garbo | hamlet |

View File

@@ -125,11 +125,11 @@ Feature: Updates of linked places
When importing When importing
Then placex contains Then placex contains
| object | extratags | | object | extratags |
| R1 | 'wikidata' : '34', 'place' : 'city' | | R1 | 'wikidata' : '34', 'linked_place' : 'city' |
When updating places When updating places
| osm | class | type | name | extra+oneway | admin | geometry | | osm | class | type | name | extra+oneway | admin | geometry |
| N3 | place | city | newname | yes | 30 | 0.00001 0 | | N3 | place | city | newname | yes | 30 | 0.00001 0 |
Then placex contains Then placex contains
| object | extratags | | object | extratags |
| R1 | 'wikidata' : '34', 'oneway' : 'yes', 'place' : 'city' | | R1 | 'wikidata' : '34', 'oneway' : 'yes', 'linked_place' : 'city' |