|
+- php PHP unit tests
+- python Python unit tests
- +- scenes Geometry test data
+- testdb Base data for generating API test database
+ +- testdata Additional test data used by unit tests
```
## PHP Unit Tests (`test/php`)
| W1 | W10 |
Scenario: buildings with only addr:postcodes do not appear in the address of a way
- Given the scene admin-areas
+ Given the grid with origin DE
+ | 1 | | | | | 8 | | 6 | | 2 |
+ | |10 |11 | | | | | | | |
+ | |13 |12 | | | | | | | |
+ | 20| | | 21| | | | | | |
+ | | | | | | | | | | |
+ | | | | | | 9 | | | | |
+ | 4 | | | | | | | 7 | | 3 |
And the named places
- | osm | class | type | admin | addr+postcode | geometry |
- | R1 | boundary | administrative | 6 | 112 | :b0 |
- | R34 | boundary | administrative | 8 | 112 DE | :b1:E |
- | R4 | boundary | administrative | 10 | 112 DE 34 | :b2:N |
+ | osm | class | type | admin | addr+postcode | geometry |
+ | R1 | boundary | administrative | 6 | 10000 | (1,2,3,4,1)|
+ | R34 | boundary | administrative | 8 | 11200 | (1,6,7,4,1)|
+ | R4 | boundary | administrative | 10 | 11230 | (1,8,9,4,1)|
And the named places
| osm | class | type | geometry |
- | W93 | highway | residential | :w2N |
+ | W93 | highway | residential | 20,21 |
And the places
| osm | class | type | addr+postcode | geometry |
- | W22 | place | postcode | 445023 | :building:w2N |
+ | W22 | place | postcode | 11234 | (10,11,12,13,10) |
When importing
Then place_addressline doesn't contain
| object | address |
| W93 | W22 |
Scenario: postcode boundaries do appear in the address of a way
- Given the scene admin-areas
+ Given the grid with origin DE
+ | 1 | | | | | 8 | | 6 | | 2 |
+ | |10 |11 | | | | | | | |
+ | |13 |12 | | | | | | | |
+ | 20| | | 21| | | | | | |
+ | | | | | | | | | | |
+ | | | | | | 9 | | | | |
+ | 4 | | | | | | | 7 | | 3 |
And the named places
- | osm | class | type | admin | addr+postcode | geometry |
- | R1 | boundary | administrative | 6 | 112 | :b0 |
- | R34 | boundary | administrative | 8 | 112 DE | :b1:E |
+ | osm | class | type | admin | addr+postcode | geometry |
+ | R1 | boundary | administrative | 6 | 10000 | (1,2,3,4,1) |
+ | R34 | boundary | administrative | 8 | 11000 | (1,6,7,4,1) |
And the places
| osm | class | type | addr+postcode | geometry |
- | R4 | boundary | postal_code | 112 DE 34 | :b2:N |
+ | R4 | boundary | postal_code | 11200 | (1,8,9,4,1) |
And the named places
| osm | class | type | geometry |
- | W93 | highway | residential | :w2N |
+ | W93 | highway | residential | 20,21 |
And the places
| osm | class | type | addr+postcode | geometry |
- | W22 | place | postcode | 445023 | :building:w2N |
+ | W22 | place | postcode | 11234 | (10,11,12,13,10) |
When importing
Then place_addressline contains
| object | address |
| osm | display_name |
| N1 | Wenig, Loudou |
Scenario: OSM country relations outside expected boundaries are ignored
+ Given the grid
+ | 1 | | 2 |
+ | 4 | | 3 |
Given the places
| osm | class | type | admin | name+name:xy | country | geometry |
- | R1 | boundary | administrative | 2 | Loudou | de | poly-area:0.1 |
+ | R1 | boundary | administrative | 2 | Loudou | de | (1,2,3,4,1) |
Given the places
| osm | class | type | name | geometry |
| N1 | place | town | Wenig | country:de |
| osm | display_name |
| N1 | Wenig, Germany |
Scenario: Pre-defined country names are used
+ Given the grid with origin CH
+ | 1 |
Given the places
| osm | class | type | name | geometry |
- | N1 | place | town | Ingb | country:ch |
+ | N1 | place | town | Ingb | 1 |
When importing
And sending search query "Ingb"
| accept-language |
Tests that interpolated addresses are added correctly
Scenario: Simple even interpolation line with two points
+ Given the grid with origin 1,1
+ | 1 | | 9 | | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 1 1 |
- | N2 | place | house | 6 | 1 1.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1 1, 1 1.001 |
+ | W1 | place | houses | even | 1,2 |
And the ways
| id | nodes |
| 1 | 1,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 4 | 1 1.0005 |
+ | 4 | 4 | 9 |
Scenario: Backwards even two point interpolation line
+ Given the grid with origin 1,1
+ | 1 | 8 | 9 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 1 1 |
- | N2 | place | house | 8 | 1 1.003 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 8 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1 1.003, 1 1 |
+ | W1 | place | houses | even | 1,2 |
And the ways
| id | nodes |
| 1 | 2,1 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 6 | 1 1.001, 1 1.002 |
+ | 4 | 6 | 8,9 |
Scenario: Simple odd two point interpolation
+ Given the grid with origin 1,1
+ | 1 | 8 | | | 9 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 1 | 1 1 |
- | N2 | place | house | 11 | 1 1.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 1 |
+ | N2 | place | house | 11 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | odd | 1 1, 1 1.001 |
+ | W1 | place | houses | odd | 1,2 |
And the ways
| id | nodes |
| 1 | 1,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 3 | 9 | 1 1.0002, 1 1.0008 |
+ | 3 | 9 | 8,9 |
Scenario: Simple all two point interpolation
+ Given the grid with origin 1,1
+ | 1 | 8 | 9 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 1 | 1 1 |
- | N2 | place | house | 4 | 1 1.003 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 1 |
+ | N2 | place | house | 4 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | all | 1 1, 1 1.003 |
+ | W1 | place | houses | all | 1,2 |
And the ways
| id | nodes |
| 1 | 1,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 2 | 3 | 1 1.001, 1 1.002 |
+ | 2 | 3 | 8,9 |
Scenario: Even two point interpolation line with intermediate empty node
+ Given the grid
+ | 1 | 8 | | 3 | 9 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 1 1 |
- | N2 | place | house | 10 | 1.001 1.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 12 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1 1, 1 1.001, 1.001 1.001 |
+ | W1 | place | houses | even | 1,3,2 |
And the ways
| id | nodes |
| 1 | 1,3,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 8 | 1 1.0005, 1 1.001, 1.0005 1.001 |
+ | 4 | 10 | 8,3,9 |
Scenario: Even two point interpolation line with intermediate duplicated empty node
+ Given the grid
+ | 1 | 8 | 3 | 9 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 1 1 |
- | N2 | place | house | 10 | 1.001 1.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 10 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1 1, 1 1.001, 1.001 1.001 |
+ | W1 | place | houses | even | 1,3,2 |
And the ways
| id | nodes |
| 1 | 1,3,3,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 8 | 1 1.0005, 1 1.001, 1.0005 1.001 |
+ | 4 | 8 | 8,3,9 |
Scenario: Simple even three point interpolation line
+ Given the grid
+ | 1 | 8 | | 9 | 3 | 7 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 1 1 |
- | N2 | place | house | 14 | 1.001 1.001 |
- | N3 | place | house | 10 | 1 1.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 14 |
+ | N3 | place | house | 10 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1 1, 1 1.001, 1.001 1.001 |
+ | W1 | place | houses | even | 1,3,2 |
And the ways
| id | nodes |
| 1 | 1,3,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 8 | 1 1.00025, 1 1.00075 |
- | 12 | 12 | 1.0005 1.001 |
+ | 4 | 8 | 8,9 |
+ | 12 | 12 | 7 |
Scenario: Simple even four point interpolation line
+ Given the grid
+ | 1 | 10 | | 11 | 3 |
+ | | | | | 12|
+ | | | 4 | 13 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 1 1 |
- | N2 | place | house | 14 | 1.001 1.001 |
- | N3 | place | house | 10 | 1 1.001 |
- | N4 | place | house | 18 | 1.001 1.002 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 14 |
+ | N3 | place | house | 10 |
+ | N4 | place | house | 18 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1 1, 1 1.001, 1.001 1.001, 1.001 1.002 |
+ | W1 | place | houses | even | 1,3,2,4 |
And the ways
| id | nodes |
| 1 | 1,3,2,4 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 8 | 1 1.00025, 1 1.00075 |
- | 12 | 12 | 1.0005 1.001 |
- | 16 | 16 | 1.001 1.0015 |
+ | 4 | 8 | 10,11 |
+ | 12 | 12 | 12 |
+ | 16 | 16 | 13 |
Scenario: Reverse simple even three point interpolation line
+ Given the grid
+ | 1 | 8 | | 9 | 3 | 7 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 1 1 |
- | N2 | place | house | 14 | 1.001 1.001 |
- | N3 | place | house | 10 | 1 1.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 14 |
+ | N3 | place | house | 10 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1.001 1.001, 1 1.001, 1 1 |
+ | W1 | place | houses | even | 2,3,1 |
And the ways
| id | nodes |
| 1 | 2,3,1 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 8 | 1 1.00025, 1 1.00075 |
- | 12 | 12 | 1.0005 1.001 |
+ | 4 | 8 | 8,9 |
+ | 12 | 12 | 7 |
Scenario: Even three point interpolation line with odd center point
+ Given the grid
+ | 1 | | 10 | | | 11 | 3 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 1 1 |
- | N2 | place | house | 8 | 1.001 1.001 |
- | N3 | place | house | 7 | 1 1.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 8 |
+ | N3 | place | house | 7 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1 1, 1 1.001, 1.001 1.001 |
+ | W1 | place | houses | even | 1,3,2 |
And the ways
| id | nodes |
| 1 | 1,3,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 6 | 1 1.0004, 1 1.0008 |
+ | 4 | 6 | 10,11 |
Scenario: Interpolation line with self-intersecting way
+ Given the grid
+ | 1 | 9 | 2 |
+ | | | 8 |
+ | | | 3 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 0 0 |
- | N2 | place | house | 6 | 0 0.001 |
- | N3 | place | house | 10 | 0 0.002 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
+ | N3 | place | house | 10 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 0 0, 0 0.001, 0 0.002, 0 0.001 |
+ | W1 | place | houses | even | 1,2,3,2 |
And the ways
| id | nodes |
| 1 | 1,2,3,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 4 | 0 0.0005 |
- | 8 | 8 | 0 0.0015 |
- | 8 | 8 | 0 0.0015 |
+ | 4 | 4 | 9 |
+ | 8 | 8 | 8 |
+ | 8 | 8 | 8 |
Scenario: Interpolation line with self-intersecting way II
+ Given the grid
+ | 1 | 9 | 2 |
+ | | | 3 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | 0 0 |
- | N2 | place | house | 6 | 0 0.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 0 0, 0 0.001, 0 0.002, 0 0.001 |
+ | W1 | place | houses | even | 1,2,3,2 |
And the ways
| id | nodes |
| 1 | 1,2,3,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 4 | 4 | 0 0.0005 |
+ | 4 | 4 | 9 |
Scenario: addr:street on interpolation way
- Given the scene parallel-road
+ Given the grid
+ | | 1 | | 2 | |
+ | 10 | | | | 11 |
+ | 20 | | | | 21 |
And the places
| osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-middle-w |
- | N2 | place | house | 6 | :n-middle-e |
- | N3 | place | house | 12 | :n-middle-w |
- | N4 | place | house | 16 | :n-middle-e |
+ | N1 | place | house | 2 | 1 |
+ | N2 | place | house | 6 | 2 |
+ | N3 | place | house | 12 | 1 |
+ | N4 | place | house | 16 | 2 |
And the places
| osm | class | type | addr+interpolation | street | geometry |
- | W10 | place | houses | even | | :w-middle |
- | W11 | place | houses | even | Cloud Street | :w-middle |
+ | W10 | place | houses | even | | 1,2 |
+ | W11 | place | houses | even | Cloud Street | 1,2 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | tertiary | Sun Way | :w-north |
- | W3 | highway | tertiary | Cloud Street | :w-south |
+ | W2 | highway | tertiary | Sun Way | 10,11 |
+ | W3 | highway | tertiary | Cloud Street | 20,21 |
And the ways
| id | nodes |
- | 10 | 1,100,101,102,2 |
- | 11 | 3,200,201,202,4 |
+ | 10 | 1,2 |
+ | 11 | 3,4 |
When importing
Then placex contains
| object | parent_place_id |
| 0 | W | 11 |
Scenario: addr:street on housenumber way
- Given the scene parallel-road
+ Given the grid
+ | | 1 | | 2 | |
+ | 10 | | | | 11 |
+ | 20 | | | | 21 |
And the places
| osm | class | type | housenr | street | geometry |
- | N1 | place | house | 2 | | :n-middle-w |
- | N2 | place | house | 6 | | :n-middle-e |
- | N3 | place | house | 12 | Cloud Street | :n-middle-w |
- | N4 | place | house | 16 | Cloud Street | :n-middle-e |
+ | N1 | place | house | 2 | | 1 |
+ | N2 | place | house | 6 | | 2 |
+ | N3 | place | house | 12 | Cloud Street | 1 |
+ | N4 | place | house | 16 | Cloud Street | 2 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W10 | place | houses | even | :w-middle |
- | W11 | place | houses | even | :w-middle |
+ | W10 | place | houses | even | 1,2 |
+ | W11 | place | houses | even | 1,2 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | tertiary | Sun Way | :w-north |
- | W3 | highway | tertiary | Cloud Street | :w-south |
+ | W2 | highway | tertiary | Sun Way | 10,11 |
+ | W3 | highway | tertiary | Cloud Street | 20,21 |
And the ways
| id | nodes |
- | 10 | 1,100,101,102,2 |
- | 11 | 3,200,201,202,4 |
+ | 10 | 1,2 |
+ | 11 | 3,4 |
When importing
Then placex contains
| object | parent_place_id |
When importing
Then W1 expands to no interpolation
- Scenario: Ways without nodes without housenumbers are ignored
+ Scenario: Ways with nodes without housenumbers are ignored
+ Given the grid
+ | 1 | | 2 |
+ Given the places
+ | osm | class | type |
+ | N1 | place | house |
+ | N2 | place | house |
Given the places
| osm | class | type | housenr | geometry |
- | N1 | place | house | | 1 1 |
- | N2 | place | house | | 1 1.001 |
- | W1 | place | houses | even | 1 1, 1 1.001 |
+ | W1 | place | houses | even | 1,2 |
When importing
Then W1 expands to no interpolation
Scenario: Two point interpolation starting at 0
+ Given the grid with origin 1,1
+ | 1 | 10 | | | 11 | 2 |
Given the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 0 | 1 1 |
- | N2 | place | house | 10 | 1 1.001 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 0 |
+ | N2 | place | house | 10 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | 1 1, 1 1.001 |
+ | W1 | place | houses | even | 1,2 |
And the ways
| id | nodes |
| 1 | 1,2 |
When importing
Then W1 expands to interpolation
| start | end | geometry |
- | 2 | 8 | 1 1.0002, 1 1.0008 |
+ | 2 | 8 | 10,11 |
When sending jsonv2 reverse coordinates 1,1
Then results contain
| ID | osm_type | osm_id | type | display_name |
Tests for correctly determining linked places
Scenario: Only address-describing places can be linked
- Given the scene way-area-with-center
+ Given the grid
+ | 1 | | | | 2 |
+ | | | 9 | | |
+ | 4 | | | | 3 |
And the places
| osm | class | type | name | geometry |
- | R13 | landuse | forest | Garbo | :area |
- | N256 | natural | peak | Garbo | :inner-C |
+ | R13 | landuse | forest | Garbo | (1,2,3,4,1) |
+ | N256 | natural | peak | Garbo | 9 |
When importing
Then placex contains
| object | linked_place_id |
| N256 | - |
Scenario: Postcode areas cannot be linked
- Given the grid
+ Given the grid with origin US
| 1 | | 2 |
| | 9 | |
| 4 | | 3 |
And the named places
| osm | class | type | addr+postcode | extra+wikidata | geometry |
- | R13 | boundary | postal_code | 123 | Q87493 | (1,2,3,4,1) |
- | N25 | place | suburb | 123 | Q87493 | 9 |
+ | R13 | boundary | postal_code | 12345 | Q87493 | (1,2,3,4,1) |
+ | N25 | place | suburb | 12345 | Q87493 | 9 |
When importing
Then placex contains
| object | linked_place_id |
| N25 | - |
Scenario: Waterways are linked when in waterway relations
- Given the scene split-road
+ Given the grid
+ | 1 | | | | 3 | 4 | | | | 6 |
+ | | | 2 | | | 10 | | 5 | | |
+ | | | | | | 11 | | | | |
And the places
| osm | class | type | name | geometry |
- | W1 | waterway | river | Rhein | :w-2 |
- | W2 | waterway | river | Rhein | :w-3 |
- | R13 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
- | R23 | waterway | river | Limmat| :w-4a |
+ | W1 | waterway | river | Rhein | 1,2,3 |
+ | W2 | waterway | river | Rhein | 3,4,5 |
+ | R13 | waterway | river | Rhein | 1,2,3,4,5,6 |
+ | R23 | waterway | river | Limmat| 4,10,11 |
And the relations
| id | members | tags+type |
| 13 | R23:tributary,W1,W2:main_stream | waterway |
| R |
Scenario: Relations are not linked when in waterway relations
- Given the scene split-road
+ Given the grid
+ | 1 | | | | 3 | 4 | | | | 6 |
+ | | | 2 | | | 10 | | 5 | | |
+ | | | | | | 11 | | | | |
And the places
| osm | class | type | name | geometry |
- | W1 | waterway | stream | Rhein | :w-2 |
- | W2 | waterway | river | Rhein | :w-3 |
- | R1 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
- | R2 | waterway | river | Limmat| :w-4a |
+ | W1 | waterway | stream | Rhein | 1,2,3,4 |
+ | W2 | waterway | river | Rhein | 4,5,6 |
+ | R1 | waterway | river | Rhein | 1,2,3,4 |
+ | R2 | waterway | river | Limmat| 4,10,11 |
And the relations
| id | members | tags+type |
| 1 | R2 | waterway |
| W2 | - |
| R1 | - |
| R2 | - |
+ When sending search query "rhein"
+ Then results contain
+ | ID | osm_type |
+ | 0 | R |
+ | 1 | W |
+
Scenario: Empty waterway relations are handled correctly
- Given the scene split-road
+ Given the grid
+ | 1 | | | | 3 |
And the places
| osm | class | type | name | geometry |
- | R1 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
+ | R1 | waterway | river | Rhein | 1,3 |
And the relations
| id | members | tags+type |
| 1 | | waterway |
| R1 | - |
Scenario: Waterways are not linked when the way type is not a river feature
- Given the scene split-road
+ Given the grid
+ | 1 | | 2 |
+ | | | |
+ | 3 | | 4 |
And the places
| osm | class | type | name | geometry |
- | W1 | waterway | lock | Rhein | :w-2 |
- | R1 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
+ | W1 | waterway | lock | Rhein | 3,4 |
+ | R1 | landuse | meadow | Rhein | (3,1,2,4,3) |
And the relations
- | id | members | tags+type |
- | 1 | N23,N34,W1,R45 | multipolygon |
+ | id | members | tags+type |
+ | 1 | W1,W2 | multipolygon |
When importing
Then placex contains
| object | linked_place_id |
| W1 | - |
| R1 | - |
- When sending search query "rhein"
- Then results contain
- | ID | osm_type |
- | 0 | R |
- | 1 | W |
Scenario: Side streams are linked only when they have the same name
- Given the scene split-road
+ Given the grid
+ | | | | | 8 | | | |
+ | 1 | | 2 | 3 | | 4 | 5 | 6|
+ | | | | | | 9 | | |
And the places
| osm | class | type | name | geometry |
- | W1 | waterway | river | Rhein2 | :w-2 |
- | W2 | waterway | river | Rhein | :w-3 |
- | R1 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
+ | W1 | waterway | river | Rhein2 | 2,8,4 |
+ | W2 | waterway | river | Rhein | 3,9,5 |
+ | R1 | waterway | river | Rhein | 1,2,3,4,5,6 |
And the relations
| id | members | tags+type |
- | 1 | W1:side_stream,W2:side_stream | waterway |
+ | 1 | W1:side_stream,W2:side_stream,W3 | waterway |
When importing
Then placex contains
| object | linked_place_id |
# github #573
Scenario: Boundaries should only be linked to places
+ Given the 0.05 grid
+ | 1 | | 2 |
+ | | 9 | |
+ | 4 | | 3 |
Given the named places
- | osm | class | type | extra+wikidata | admin | geometry |
- | R1 | boundary | administrative | 34 | 8 | poly-area:0.1 |
+ | osm | class | type | extra+wikidata | admin | geometry |
+ | R1 | boundary | administrative | 34 | 8 | (1,2,3,4,1) |
And the named places
- | osm | class | type | geometry |
- | N3 | natural | island | 0.00001 0 |
- | N3 | place | city | 0.00001 0 |
+ | osm | class | type |
+ | N9 | natural | island |
+ | N9 | place | city |
And the relations
| id | members |
- | 1 | N3:label |
+ | 1 | N9:label |
When importing
Then placex contains
| object | linked_place_id |
- | N3:natural | - |
- | N3:place | R1 |
+ | N9:natural | - |
+ | N9:place | R1 |
Scenario: Nodes with 'role' label are always linked
+ Given the 0.05 grid
+ | 1 | | 2 |
+ | | 9 | |
+ | 4 | | 3 |
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 |
+ | osm | class | type | admin | name | geometry |
+ | R13 | boundary | administrative | 6 | Garbo | (1,2,3,4,1) |
+ | N2 | place | hamlet | 15 | Vario | 9 |
And the relations
| id | members | tags+type |
| 13 | N2:label | boundary |
| object | linked_place_id |
| N2 | R13 |
And placex contains
- | object | centroid | name+name | extratags+linked_place |
- | R13 | 0.006 0.00001 | Garbo | hamlet |
+ | object | centroid | name+name | extratags+linked_place |
+ | R13 | 9 | Garbo | hamlet |
Scenario: Boundaries with place tags are linked against places with same type
+ Given the 0.01 grid
+ | 1 | | 2 |
+ | | 9 | |
+ | 4 | | 3 |
Given the places
- | osm | class | type | admin | name | extra+place | geometry |
- | R13 | boundary | administrative | 4 | Berlin | city |poly-area:0.1 |
+ | osm | class | type | admin | name | extra+place | geometry |
+ | R13 | boundary | administrative | 4 | Berlin | city | (1,2,3,4,1) |
And the places
| osm | class | type | name | geometry |
- | N2 | place | city | Berlin | 0.006 0.00001 |
+ | N2 | place | city | Berlin | 9 |
When importing
Then placex contains
| object | linked_place_id |
Scenario: Boundaries without place tags only link against same admin level
+ Given the 0.05 grid
+ | 1 | | 2 |
+ | | 9 | |
+ | 4 | | 3 |
Given the places
| osm | class | type | admin | name | geometry |
- | R13 | boundary | administrative | 4 | Berlin |poly-area:0.1 |
+ | R13 | boundary | administrative | 4 | Berlin | (1,2,3,4,1) |
And the places
| osm | class | type | name | geometry |
- | N2 | place | city | Berlin | 0.006 0.00001 |
+ | N2 | place | city | Berlin | 9 |
When importing
Then placex contains
| object | linked_place_id |
# github #1352
Scenario: Do not use linked centroid when it is outside the area
+ Given the 0.05 grid
+ | 1 | | 2 | |
+ | | | | 9 |
+ | 4 | | 3 | |
Given the named places
| osm | class | type | admin | geometry |
- | R13 | boundary | administrative | 4 | poly-area:0.01 |
+ | R13 | boundary | administrative | 4 | (1,2,3,4,1) |
And the named places
| osm | class | type | geometry |
- | N2 | place | city | 0.1 0.1 |
+ | N2 | place | city | 9 |
And the relations
| id | members | tags+type |
| 13 | N2:label | boundary |
| R13 | in geometry |
Scenario: Place nodes can only be linked once
+ Given the 0.02 grid
+ | 1 | | 2 | | 5 |
+ | | 9 | | | |
+ | 4 | | 3 | | 6 |
Given the named places
| osm | class | type | extra+wikidata | geometry |
- | N2 | place | city | Q1234 | 0 0 |
+ | N2 | place | city | Q1234 | 9 |
And the named places
- | osm | class | type | extra+wikidata | admin | geometry |
- | R1 | boundary | administrative | Q1234 | 8 | poly-area:0.1 |
- | R2 | boundary | administrative | Q1234 | 9 | poly-area:0.01 |
+ | osm | class | type | extra+wikidata | admin | geometry |
+ | R1 | boundary | administrative | Q1234 | 8 | (1,2,5,6,3,4,1) |
+ | R2 | boundary | administrative | Q1234 | 9 | (1,2,3,4,1) |
When importing
Then placex contains
| object | linked_place_id |
Tests that the correct parent is chosen
Scenario: Address inherits postcode from its street unless it has a postcode
- Given the scene roads-with-pois
+ Given the grid with origin DE
+ | 10 | | | | | 11 |
+ | | | | | | |
+ | | 1 | | 2 | | |
And the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 4 | :p-N1 |
+ | osm | class | type | housenr |
+ | N1 | place | house | 4 |
And the places
- | osm | class | type | housenr | postcode | geometry |
- | N2 | place | house | 5 | 99999 | :p-N1 |
+ | osm | class | type | housenr | postcode |
+ | N2 | place | house | 5 | 99999 |
And the places
| osm | class | type | name | postcode | geometry |
- | W1 | highway | residential | galoo | 12345 | :w-north |
+ | W1 | highway | residential | galoo | 12345 | 10,11 |
When importing
Then placex contains
| object | parent_place_id |
When sending search query "4 galoo"
Then results contain
| ID | osm_type | osm_id | display_name |
- | 0 | N | 1 | 4, galoo, 12345 |
+ | 0 | N | 1 | 4, galoo, 12345, Deutschland |
When sending search query "5 galoo"
Then results contain
| ID | osm_type | osm_id | display_name |
- | 0 | N | 2 | 5, galoo, 99999 |
+ | 0 | N | 2 | 5, galoo, 99999, Deutschland |
Scenario: Address without tags, closest street
- Given the scene roads-with-pois
- And the places
- | osm | class | type | geometry |
- | N1 | place | house | :p-N1 |
- | N2 | place | house | :p-N2 |
- | N3 | place | house | :p-S1 |
- | N4 | place | house | :p-S2 |
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 1 | 2 | | | |
+ | | | | 3 | 4 | |
+ | 20 | | | | | 21 |
+ And the places
+ | osm | class | type |
+ | N1 | place | house |
+ | N2 | place | house |
+ | N3 | place | house |
+ | N4 | place | house |
And the named places
| osm | class | type | geometry |
- | W1 | highway | residential | :w-north |
- | W2 | highway | residential | :w-south |
+ | W1 | highway | residential | 10,11 |
+ | W2 | highway | residential | 20,21 |
When importing
Then placex contains
| object | parent_place_id |
| N4 | W2 |
Scenario: Address without tags avoids unnamed streets
- Given the scene roads-with-pois
- And the places
- | osm | class | type | geometry |
- | N1 | place | house | :p-N1 |
- | N2 | place | house | :p-N2 |
- | N3 | place | house | :p-S1 |
- | N4 | place | house | :p-S2 |
- | W1 | highway | residential | :w-north |
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 1 | 2 | | | |
+ | | | | 3 | 4 | |
+ | 20 | | | | | 21 |
+ And the places
+ | osm | class | type |
+ | N1 | place | house |
+ | N2 | place | house |
+ | N3 | place | house |
+ | N4 | place | house |
+ And the places
+ | osm | class | type | geometry |
+ | W1 | highway | residential | 10,11 |
And the named places
| osm | class | type | geometry |
- | W2 | highway | residential | :w-south |
+ | W2 | highway | residential | 20,21 |
When importing
Then placex contains
| object | parent_place_id |
| N4 | W2 |
Scenario: addr:street tag parents to appropriately named street
- Given the scene roads-with-pois
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 1 | 2 | | | |
+ | | | | 3 | 4 | |
+ | 20 | | | | | 21 |
And the places
- | osm | class | type | street| geometry |
- | N1 | place | house | south | :p-N1 |
- | N2 | place | house | north | :p-N2 |
- | N3 | place | house | south | :p-S1 |
- | N4 | place | house | north | :p-S2 |
+ | osm | class | type | street|
+ | N1 | place | house | south |
+ | N2 | place | house | north |
+ | N3 | place | house | south |
+ | N4 | place | house | north |
And the places
| osm | class | type | name | geometry |
- | W1 | highway | residential | north | :w-north |
- | W2 | highway | residential | south | :w-south |
+ | W1 | highway | residential | north | 10,11 |
+ | W2 | highway | residential | south | 20,21 |
When importing
Then placex contains
| object | parent_place_id |
@fail-legacy
Scenario: addr:street tag parents to appropriately named street, locale names
- Given the scene roads-with-pois
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 1 | 2 | | | |
+ | | | | 3 | 4 | |
+ | 20 | | | | | 21 |
And the places
- | osm | class | type | street| addr+street:de | geometry |
- | N1 | place | house | south | Süd | :p-N1 |
- | N2 | place | house | north | Nord | :p-N2 |
- | N3 | place | house | south | Süd | :p-S1 |
- | N4 | place | house | north | Nord | :p-S2 |
+ | osm | class | type | street| addr+street:de |
+ | N1 | place | house | south | Süd |
+ | N2 | place | house | north | Nord |
+ | N3 | place | house | south | Süd |
+ | N4 | place | house | north | Nord |
And the places
| osm | class | type | name | geometry |
- | W1 | highway | residential | Nord | :w-north |
- | W2 | highway | residential | Süd | :w-south |
- And the places
- | osm | class | type | name | name+name:old |
- | N5 | place | hamlet | south | north |
+ | W1 | highway | residential | Nord | 10,11 |
+ | W2 | highway | residential | Süd | 20,21 |
When importing
Then placex contains
| object | parent_place_id |
| N4 | W1 |
Scenario: addr:street tag parents to appropriately named street with abbreviation
- Given the scene roads-with-pois
- And the places
- | osm | class | type | street| geometry |
- | N1 | place | house | south st | :p-N1 |
- | N2 | place | house | north st | :p-N2 |
- | N3 | place | house | south st | :p-S1 |
- | N4 | place | house | north st | :p-S2 |
- And the places
- | osm | class | type | name+name:en | geometry |
- | W1 | highway | residential | north street | :w-north |
- | W2 | highway | residential | south street | :w-south |
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 1 | 2 | | | |
+ | | | | 3 | 4 | |
+ | 20 | | | | | 21 |
+ And the places
+ | osm | class | type | street |
+ | N1 | place | house | south st |
+ | N2 | place | house | north st |
+ | N3 | place | house | south st |
+ | N4 | place | house | north st |
+ And the places
+ | osm | class | type | name+name:en | geometry |
+ | W1 | highway | residential | north street | 10,11 |
+ | W2 | highway | residential | south street | 20,21 |
When importing
Then placex contains
| object | parent_place_id |
| N3 | W2 |
| N4 | W1 |
-
-
Scenario: addr:street tag parents to next named street
- Given the scene roads-with-pois
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 1 | 2 | | | |
+ | | | | 3 | 4 | |
+ | 20 | | | | | 21 |
And the places
- | osm | class | type | street | geometry |
- | N1 | place | house | abcdef | :p-N1 |
- | N2 | place | house | abcdef | :p-N2 |
- | N3 | place | house | abcdef | :p-S1 |
- | N4 | place | house | abcdef | :p-S2 |
+ | osm | class | type | street |
+ | N1 | place | house | abcdef |
+ | N2 | place | house | abcdef |
+ | N3 | place | house | abcdef |
+ | N4 | place | house | abcdef |
And the places
| osm | class | type | name | geometry |
- | W1 | highway | residential | abcdef | :w-north |
- | W2 | highway | residential | abcdef | :w-south |
+ | W1 | highway | residential | abcdef | 10,11 |
+ | W2 | highway | residential | abcdef | 20,21 |
When importing
Then placex contains
| object | parent_place_id |
| N4 | W2 |
Scenario: addr:street tag without appropriately named street
- Given the scene roads-with-pois
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 1 | | | | |
+ | | | | 3 | | |
+ | 20 | | | | | 21 |
And the places
- | osm | class | type | street | geometry |
- | N1 | place | house | abcdef | :p-N1 |
- | N2 | place | house | abcdef | :p-N2 |
- | N3 | place | house | abcdef | :p-S1 |
- | N4 | place | house | abcdef | :p-S2 |
+ | osm | class | type | street |
+ | N1 | place | house | abcdef |
+ | N3 | place | house | abcdef |
And the places
| osm | class | type | name | geometry |
- | W1 | highway | residential | abcde | :w-north |
- | W2 | highway | residential | abcde | :w-south |
+ | W1 | highway | residential | abcde | 10,11 |
+ | W2 | highway | residential | abcde | 20,21 |
When importing
Then placex contains
| object | parent_place_id |
| N1 | W1 |
- | N2 | W1 |
| N3 | W2 |
- | N4 | W2 |
Scenario: addr:place address
- Given the scene road-with-alley
+ Given the grid
+ | 10 | | | |
+ | | 1 | | 2 |
+ | 11 | | | |
And the places
- | osm | class | type | addr_place | geometry |
- | N1 | place | house | myhamlet | :n-alley |
+ | osm | class | type | addr_place |
+ | N1 | place | house | myhamlet |
And the places
| osm | class | type | name | geometry |
- | N2 | place | hamlet | myhamlet | :n-main-west |
- | W1 | highway | residential | myhamlet | :w-main |
+ | N2 | place | hamlet | myhamlet | 2 |
+ | W1 | highway | residential | myhamlet | 10,11 |
When importing
Then placex contains
| object | parent_place_id |
| N1 | N2 |
Scenario: addr:street is preferred over addr:place
- Given the scene road-with-alley
+ Given the grid
+ | 10 | | | |
+ | | | 1 | 2 |
+ | 11 | | | |
And the places
- | osm | class | type | addr_place | street | geometry |
- | N1 | place | house | myhamlet | mystreet| :n-alley |
+ | osm | class | type | addr_place | street |
+ | N1 | place | house | myhamlet | mystreet|
And the places
| osm | class | type | name | geometry |
- | N2 | place | hamlet | myhamlet | :n-main-west |
- | W1 | highway | residential | mystreet | :w-main |
+ | N2 | place | hamlet | myhamlet | 2 |
+ | W1 | highway | residential | mystreet | 10,11 |
When importing
Then placex contains
| object | parent_place_id |
| N1 | W1 |
Scenario: Untagged address in simple associated street relation
- Given the scene road-with-alley
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 2 | | 3 | | |
+ | | | | | | |
+ | 12 | 1 | | | | |
And the places
- | osm | class | type | geometry |
- | N1 | place | house | :n-alley |
- | N2 | place | house | :n-corner |
- | N3 | place | house | :n-main-west |
+ | osm | class | type |
+ | N1 | place | house |
+ | N2 | place | house |
+ | N3 | place | house |
And the places
| osm | class | type | name | geometry |
- | W1 | highway | residential | foo | :w-main |
- | W2 | highway | service | bar | :w-alley |
+ | W1 | highway | residential | foo | 10,11 |
+ | W2 | highway | service | bar | 10,12 |
And the relations
| id | members | tags+type |
| 1 | W1:street,N1,N2,N3 | associatedStreet |
| N3 | W1 |
Scenario: Avoid unnamed streets in simple associated street relation
- Given the scene road-with-alley
+ Given the grid
+ | 10 | | | | | 11 |
+ | | 2 | | 3 | | |
+ | | | | | | |
+ | 12 | 1 | | | | |
And the places
- | osm | class | type | geometry |
- | N1 | place | house | :n-alley |
- | N2 | place | house | :n-corner |
- | N3 | place | house | :n-main-west |
- | W2 | highway | residential | :w-alley |
+ | osm | class | type |
+ | N1 | place | house |
+ | N2 | place | house |
+ | N3 | place | house |
+ And the places
+ | osm | class | type | geometry |
+ | W2 | highway | residential | 10,12 |
And the named places
| osm | class | type | geometry |
- | W1 | highway | residential | :w-main |
+ | W1 | highway | residential | 10,11 |
And the relations
| id | members | tags+type |
| 1 | N1,N2,N3,W2:street,W1:street | associatedStreet |
| N3 | W1 |
Scenario: Associated street relation overrides addr:street
- Given the scene road-with-alley
+ Given the grid
+ | 10 | | | | 11 |
+ | | | | | |
+ | | | 1 | | |
+ | | 20 | | 21 | |
And the places
- | osm | class | type | street | geometry |
- | N1 | place | house | bar | :n-alley |
+ | osm | class | type | street |
+ | N1 | place | house | bar |
And the places
| osm | class | type | name | geometry |
- | W1 | highway | residential | foo | :w-main |
- | W2 | highway | residential | bar | :w-alley |
+ | W1 | highway | residential | foo | 10,11 |
+ | W2 | highway | residential | bar | 20,21 |
And the relations
- | id | members | tags+type |
- | 1 | W1:street,N1,N2,N3 | associatedStreet |
+ | id | members | tags+type |
+ | 1 | W1:street,N1 | associatedStreet |
When importing
Then placex contains
| object | parent_place_id |
| N1 | W1 |
Scenario: Building without tags, closest street from center point
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | 11 |
+ | | | 1 | 2 | |
+ | 12 | | 4 | 3 | |
And the named places
- | osm | class | type | geometry |
- | W1 | building | yes | :w-building |
- | W2 | highway | primary | :w-WE |
- | W3 | highway | residential | :w-NS |
+ | osm | class | type | geometry |
+ | W1 | building | yes | (1,2,3,4,1) |
+ | W2 | highway | primary | 10,11 |
+ | W3 | highway | residential | 10,12 |
When importing
Then placex contains
| object | parent_place_id |
| W1 | W2 |
Scenario: Building with addr:street tags
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | 11 |
+ | | | 1 | 2 | |
+ | 12 | | 4 | 3 | |
And the named places
| osm | class | type | street | geometry |
- | W1 | building | yes | bar | :w-building |
+ | W1 | building | yes | foo | (1,2,3,4,1) |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | W2 | highway | primary | bar | 10,11 |
+ | W3 | highway | residential | foo | 10,12 |
When importing
Then placex contains
| object | parent_place_id |
- | W1 | W2 |
+ | W1 | W3 |
Scenario: Building with addr:place tags
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | |
+ | | 1 | 2 | | 9 |
+ | 11 | 4 | 3 | | |
And the places
| osm | class | type | name | geometry |
- | N1 | place | village | bar | :n-outer |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | N9 | place | village | bar | 9 |
+ | W2 | highway | primary | bar | 10,11 |
And the named places
- | osm | class | type | addr_place | geometry |
- | W1 | building | yes | bar | :w-building |
+ | osm | class | type | addr_place | geometry |
+ | W1 | building | yes | bar | (1,2,3,4,1) |
When importing
Then placex contains
| object | parent_place_id |
- | W1 | N1 |
+ | W1 | N9 |
Scenario: Building in associated street relation
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | 11 |
+ | | | 1 | 2 | |
+ | 12 | | 4 | 3 | |
And the named places
- | osm | class | type | geometry |
- | W1 | building | yes | :w-building |
+ | osm | class | type | geometry |
+ | W1 | building | yes | (1,2,3,4,1) |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | W2 | highway | primary | bar | 10,11 |
+ | W3 | highway | residential | foo | 10,12 |
And the relations
| id | members | tags+type |
- | 1 | W1:house,W2:street | associatedStreet |
+ | 1 | W1:house,W3:street | associatedStreet |
When importing
Then placex contains
| object | parent_place_id |
- | W1 | W2 |
+ | W1 | W3 |
Scenario: Building in associated street relation overrides addr:street
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | 11 |
+ | | | 1 | 2 | |
+ | 12 | | 4 | 3 | |
And the named places
- | osm | class | type | street | geometry |
- | W1 | building | yes | foo | :w-building |
+ | osm | class | type | street | geometry |
+ | W1 | building | yes | foo | (1,2,3,4,1) |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | W2 | highway | primary | bar | 10,11 |
+ | W3 | highway | residential | foo | 10,12 |
And the relations
| id | members | tags+type |
| 1 | W1:house,W2:street | associatedStreet |
| W1 | W2 |
Scenario: Wrong member in associated street relation is ignored
- Given the scene building-on-street-corner
- And the named places
+ Given the grid
+ | 10 | | | | | | | 11 |
+ | | 1 | | 3 | 4 | | | |
+ | | | | 6 | 5 | | | |
+ And the named places
| osm | class | type | geometry |
- | N1 | place | house | :n-outer |
+ | N1 | place | house | 11 |
And the named places
- | osm | class | type | street | geometry |
- | W1 | building | yes | foo | :w-building |
+ | osm | class | type | street | geometry |
+ | W1 | building | yes | foo | (3,4,5,6,3) |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | W3 | highway | residential | foo | 10,11 |
And the relations
| id | members | tags+type |
| 1 | N1:house,W1:street,W3:street | associatedStreet |
| object | parent_place_id |
| N1 | W3 |
-
Scenario: street member in associatedStreet relation can be a relation
Given the grid
| 1 | | | 2 |
| N9 | R14 |
Scenario: POIs in building inherit address
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | | | 11 |
+ | | | 5 | 2 | 6 | | |
+ | | | 3 | 1 | | | |
+ | 12 | | 8 | | 7 | | |
And the named places
- | osm | class | type | geometry |
- | N1 | amenity | bank | :n-inner |
- | N2 | shop | bakery | :n-edge-NS |
- | N3 | shop | supermarket| :n-edge-WE |
+ | osm | class | type |
+ | N1 | amenity | bank |
+ | N2 | shop | bakery |
+ | N3 | shop | supermarket|
And the places
- | osm | class | type | street | addr_place | housenr | geometry |
- | W1 | building | yes | foo | nowhere | 3 | :w-building |
+ | osm | class | type | street | housenr | geometry |
+ | W1 | building | yes | foo | 3 | (5,6,7,8,5) |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | W2 | highway | primary | bar | 10,11 |
+ | W3 | highway | residential | foo | 10,12 |
When importing
Then placex contains
| object | parent_place_id | housenumber |
| 3 |
Scenario: POIs don't inherit from streets
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | 11 |
+ | | 5 | 1 | 6 | |
+ | | 8 | | 7 | |
And the named places
- | osm | class | type | geometry |
- | N1 | amenity | bank | :n-inner |
+ | osm | class | type |
+ | N1 | amenity | bank |
And the places
- | osm | class | type | street | addr_place | housenr | geometry |
- | W1 | highway | path | foo | nowhere | 3 | :w-building |
+ | osm | class | type | name | street | housenr | geometry |
+ | W1 | highway | path | bar | foo | 3 | (5,6,7,8,5) |
And the places
| osm | class | type | name | geometry |
- | W3 | highway | residential | foo | :w-NS |
+ | W3 | highway | residential | foo | 10,11 |
When importing
Then placex contains
| object | parent_place_id | housenumber |
- | N1 | W3 | None |
+ | N1 | W1 | None |
Scenario: POIs with own address do not inherit building address
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | | | 11 |
+ | | | 6 | 2 | 7 | | |
+ | | | 3 | 1 | | 5 | 4 |
+ | 12 | | 9 | | 8 | | |
And the named places
- | osm | class | type | street | geometry |
- | N1 | amenity | bank | bar | :n-inner |
+ | osm | class | type | street |
+ | N1 | amenity | bank | bar |
And the named places
- | osm | class | type | housenr | geometry |
- | N2 | shop | bakery | 4 | :n-edge-NS |
+ | osm | class | type | housenr |
+ | N2 | shop | bakery | 4 |
And the named places
- | osm | class | type | addr_place | geometry |
- | N3 | shop | supermarket| nowhere | :n-edge-WE |
+ | osm | class | type | addr_place |
+ | N3 | shop | supermarket| nowhere |
And the places
- | osm | class | type | name | geometry |
- | N4 | place | isolated_dwelling | theplace | :n-outer |
+ | osm | class | type | name |
+ | N4 | place | isolated_dwelling | theplace |
+ | N5 | place | isolated_dwelling | nowhere |
And the places
- | osm | class | type | addr_place | housenr | geometry |
- | W1 | building | yes | theplace | 3 | :w-building |
+ | osm | class | type | addr_place | housenr | geometry |
+ | W1 | building | yes | theplace | 3 | (6,7,8,9,6) |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | W2 | highway | primary | bar | 10,11 |
+ | W3 | highway | residential | foo | 10,12 |
When importing
Then placex contains
| object | parent_place_id | housenumber |
| W1 | N4 | 3 |
| N1 | W2 | None |
- | N2 | W3 | 4 |
- | N3 | N4 | None |
+ | N2 | W2 | 4 |
+ | N3 | N5 | None |
Scenario: POIs parent a road if they are attached to it
- Given the scene points-on-roads
+ Given the grid
+ | | 10 | |
+ | 20 | 1 | 21 |
+ | | 11 | |
And the named places
- | osm | class | type | street | geometry |
- | N1 | highway | bus_stop | North St | :n-SE |
- | N2 | highway | bus_stop | South St | :n-NW |
- | N3 | highway | bus_stop | North St | :n-S-unglued |
- | N4 | highway | bus_stop | South St | :n-N-unglued |
+ | osm | class | type |
+ | N1 | highway | bus_stop |
And the places
| osm | class | type | name | geometry |
- | W1 | highway | secondary | North St | :w-north |
- | W2 | highway | unclassified | South St | :w-south |
+ | W1 | highway | secondary | North St | 10,11 |
+ | W2 | highway | unclassified | South St | 20,1,21 |
And the ways
| id | nodes |
- | 1 | 100,101,2,103,104 |
- | 2 | 200,201,1,202,203 |
+ | 1 | 10,11 |
+ | 2 | 20,1,21 |
When importing
Then placex contains
| object | parent_place_id |
- | N1 | W1 |
- | N2 | W2 |
- | N3 | W1 |
- | N4 | W2 |
+ | N1 | W2 |
Scenario: POIs do not parent non-roads they are attached to
- Given the scene points-on-roads
+ Given the grid
+ | 10 | | 1 | | 11 | | 30 |
+ | 14 | | | | 15 | | |
+ | 13 | | 2 | | 12 | | 31 |
And the named places
- | osm | class | type | street | geometry |
- | N1 | highway | bus_stop | North St | :n-SE |
- | N2 | highway | bus_stop | South St | :n-NW |
+ | osm | class | type | street |
+ | N1 | highway | bus_stop | North St |
+ | N2 | highway | bus_stop | South St |
And the places
| osm | class | type | name | geometry |
- | W1 | landuse | residential | North St | :w-north |
- | W2 | waterway| river | South St | :w-south |
+ | W1 | landuse | residential | North St | (14,15,12,2,13,14) |
+ | W2 | waterway| river | South St | 10,1,11 |
+ | W3 | highway | residential | foo | 30,31 |
And the ways
| id | nodes |
- | 1 | 100,101,2,103,104 |
- | 2 | 200,201,1,202,203 |
+ | 1 | 10,11,12,2,13,10 |
+ | 2 | 10,1,11 |
When importing
Then placex contains
| object | parent_place_id |
- | N1 | 0 |
- | N2 | 0 |
+ | N1 | W3 |
+ | N2 | W3 |
Scenario: POIs on building outlines inherit associated street relation
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | 11 |
+ | | 5 | 1 | 6 | |
+ | 12 | 8 | | 7 | |
And the named places
- | osm | class | type | geometry |
- | N1 | place | house | :n-edge-NS |
- | W1 | building | yes | :w-building |
+ | osm | class | type | geometry |
+ | N1 | place | house | 1 |
+ | W1 | building | yes | (5,1,6,7,8,5)|
And the places
| osm | class | type | name | geometry |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | W2 | highway | primary | bar | 10,11 |
+ | W3 | highway | residential | foo | 10,12 |
And the relations
| id | members | tags+type |
- | 1 | W1:house,W2:street | associatedStreet |
+ | 1 | W1:house,W3:street | associatedStreet |
And the ways
| id | nodes |
- | 1 | 100,1,101,102,100 |
+ | 1 | 5,1,6,7,8,5 |
When importing
Then placex contains
| object | parent_place_id |
- | N1 | W2 |
+ | N1 | W3 |
# github #1056
Scenario: Full names should be preferably matched for nearest road
Then placex has no entry for N1
Scenario: postcode boundary without postcode is dropped
+ Given the 0.01 grid
+ | 1 | 2 |
+ | 3 | |
Given the places
- | osm | class | type | name+ref | geometry |
- | R1 | boundary | postal_code | 554476 | poly-area:0.1 |
+ | osm | class | type | name+ref | geometry |
+ | R1 | boundary | postal_code | 554476 | (1,2,3,1) |
When importing
Then placex has no entry for R1
| R41 | 8 | 0 |
Scenario: search and address ranks for highways correctly assigned
- Given the scene roads-with-pois
+ Given the grid
+ | 10 | 1 | 11 | | 12 | | 13 | | 14 | | 15 | | 16 |
And the places
| osm | class | type |
| N1 | highway | bus_stop |
And the places
| osm | class | type | geometry |
- | W1 | highway | primary | :w-south |
- | W2 | highway | secondary | :w-south |
- | W3 | highway | tertiary | :w-south |
- | W4 | highway | residential | :w-north |
- | W5 | highway | unclassified | :w-north |
- | W6 | highway | something | :w-north |
+ | W1 | highway | primary | 10,11 |
+ | W2 | highway | secondary | 11,12 |
+ | W3 | highway | tertiary | 12,13 |
+ | W4 | highway | residential | 13,14 |
+ | W5 | highway | unclassified | 14,15 |
+ | W6 | highway | something | 15,16 |
When importing
Then placex contains
| object | rank_search | rank_address |
| W6 | 30 | 30 |
Scenario: rank and inclusion of landuses
+ Given the 0.4 grid
+ | 1 | 2 | | | | | | 5 |
+ | 4 | 3 | | | | | | 6 |
Given the named places
| osm | class | type |
| N2 | landuse | residential |
And the named places
- | osm | class | type | geometry |
- | W2 | landuse | residential | 1 1, 1 1.1 |
- | W4 | landuse | residential | poly-area:0.1 |
- | R2 | landuse | residential | poly-area:0.05 |
- | R3 | landuse | forrest | poly-area:0.5 |
+ | osm | class | type | geometry |
+ | W2 | landuse | residential | 1,2,5 |
+ | W4 | landuse | residential | (1,4,3,1) |
+ | R2 | landuse | residential | (1,2,3,4,1) |
+ | R3 | landuse | forrest | (1,5,6,4,1) |
When importing
Then placex contains
| object | rank_search | rank_address |
| R3 | 22 | 0 |
Scenario: rank and inclusion of naturals
+ Given the 0.4 grid
+ | 1 | 2 | | | | | | 5 |
+ | 4 | 3 | | | | | | 6 |
Given the named places
| osm | class | type |
| N2 | natural | peak |
| N4 | natural | volcano |
| N5 | natural | foobar |
And the named places
- | osm | class | type | geometry |
- | W2 | natural | mountain_range | 12 12,11 11 |
- | W3 | natural | foobar | 13 13,13.1 13 |
- | R3 | natural | volcano | poly-area:0.1 |
- | R4 | natural | foobar | poly-area:0.5 |
- | R5 | natural | sea | poly-area:5.0 |
- | R6 | natural | sea | poly-area:0.01 |
+ | osm | class | type | geometry |
+ | W2 | natural | mountain_range | 1,2,5 |
+ | W3 | natural | foobar | 2,3 |
+ | R3 | natural | volcano | (1,2,4,1) |
+ | R4 | natural | foobar | (1,2,3,4,1) |
+ | R5 | natural | sea | (1,2,5,6,3,4,1) |
+ | R6 | natural | sea | (2,3,4,2) |
When importing
Then placex contains
| object | rank_search | rank_address |
| W3 | 22 | 0 |
Scenario: boundary ways for countries and states are ignored
+ Given the 0.3 grid
+ | 1 | 2 |
+ | 4 | 3 |
Given the named places
| osm | class | type | admin | geometry |
- | W4 | boundary | administrative | 2 | poly-area:0.1 |
- | R4 | boundary | administrative | 2 | poly-area:0.1 |
- | W5 | boundary | administrative | 3 | poly-area:0.1 |
- | R5 | boundary | administrative | 3 | poly-area:0.1 |
- | W6 | boundary | administrative | 4 | poly-area:0.1 |
- | R6 | boundary | administrative | 4 | poly-area:0.1 |
- | W7 | boundary | administrative | 5 | poly-area:0.1 |
- | R7 | boundary | administrative | 5 | poly-area:0.1 |
+ | W4 | boundary | administrative | 2 | (1,2,3,4,1) |
+ | R4 | boundary | administrative | 2 | (1,2,3,4,1) |
+ | W5 | boundary | administrative | 3 | (1,2,3,4,1) |
+ | R5 | boundary | administrative | 3 | (1,2,3,4,1) |
+ | W6 | boundary | administrative | 4 | (1,2,3,4,1) |
+ | R6 | boundary | administrative | 4 | (1,2,3,4,1) |
+ | W7 | boundary | administrative | 5 | (1,2,3,4,1) |
+ | R7 | boundary | administrative | 5 | (1,2,3,4,1) |
When importing
Then placex contains exactly
| object |
Tests for postcode estimation
Scenario: Postcodes on the object are preferred over those on the address
- Given the scene admin-areas
+ Given the grid with origin FR
+ | 1 | | | | 4 | | 6 | | 8 |
+ | | 10 | | 11 | | | | | |
+ | | | 22 | | | | | | |
+ | 2 | | | | 3 | | 5 | | 7 |
And the named places
- | osm | class | type | admin | addr+postcode | geometry |
- | R1 | boundary | administrative | 6 | 112 | :b0 |
- | R34 | boundary | administrative | 8 | 112 DE | :b1:E |
- | R4 | boundary | administrative | 10 | 112 DE 34 | :b2:N |
+ | osm | class | type | admin | addr+postcode | geometry |
+ | R1 | boundary | administrative | 6 | 10000 | (1,8,7,2,1) |
+ | R34 | boundary | administrative | 8 | 11000 | (1,6,5,2,1) |
+ | R4 | boundary | administrative | 10 | 11200 | (1,4,3,2,1) |
And the named places
| osm | class | type | addr+postcode | geometry |
- | W93 | highway | residential | 112 DE 344 | :w2N |
- | W22 | building | yes | 112 DE 344N | :building:w2N |
+ | W93 | highway | residential | 11250 | 10,11 |
+ | N22 | building | yes | 11254 | 22 |
When importing
Then placex contains
- | object | postcode |
- | W22 | 112 DE 344N |
- | W93 | 112 DE 344 |
- | R4 | 112 DE 34 |
- | R34 | 112 DE |
- | R1 | 112 |
+ | object | postcode |
+ | N22 | 11254 |
+ | W93 | 11250 |
+ | R4 | 11200 |
+ | R34 | 11000 |
+ | R1 | 10000 |
Scenario: Postcodes from a road are inherited by an attached building
- Given the scene admin-areas
+ Given the grid with origin DE
+ | 10 | | | | 11 |
+ | | 1 | 2 | | |
+ | | 4 | 3 | | |
And the named places
| osm | class | type | addr+postcode | geometry |
- | W93 | highway | residential | 86034 | :w2N |
+ | W93 | highway | residential | 86034 | 10,11 |
And the named places
- | osm | class | type | geometry |
- | W22 | building | yes | :building:w2N |
+ | osm | class | type | geometry |
+ | W22 | building | yes | (1,2,3,4,1) |
When importing
Then placex contains
| object | postcode | parent_place_id |
| W22 | 86034 | W93 |
Scenario: Postcodes from the lowest admin area are inherited by ways
- Given the scene admin-areas
+ Given the grid with origin FR
+ | 1 | | | | 4 | | 6 | | 8 |
+ | | 10 | | 11 | | | | | |
+ | 2 | | | | 3 | | 5 | | 7 |
And the named places
| osm | class | type | admin | addr+postcode | geometry |
- | R1 | boundary | administrative | 6 | 112 | :b0 |
- | R34 | boundary | administrative | 8 | 112 DE | :b1:E |
- | R4 | boundary | administrative | 10 | 112 DE 34 | :b2:N |
+ | R1 | boundary | administrative | 6 | 10000 | (1,8,7,2,1) |
+ | R34 | boundary | administrative | 8 | 11000 | (1,6,5,2,1) |
+ | R4 | boundary | administrative | 10 | 11200 | (1,4,3,2,1) |
And the named places
| osm | class | type | geometry |
- | W93 | highway | residential | :w2N |
+ | W93 | highway | residential | 10,11 |
When importing
Then placex contains
- | object | postcode |
- | W93 | 112 DE 34 |
+ | object | postcode |
+ | W93 | 11200 |
Scenario: Postcodes from the lowest admin area with postcode are inherited by ways
- Given the scene admin-areas
+ Given the grid with origin FR
+ | 1 | | | | 4 | | 6 | | 8 |
+ | | 10 | | 11 | | | | | |
+ | 2 | | | | 3 | | 5 | | 7 |
And the named places
| osm | class | type | admin | addr+postcode | geometry |
- | R1 | boundary | administrative | 6 | 112 | :b0 |
- | R34 | boundary | administrative | 8 | 112 DE | :b1:E |
+ | R1 | boundary | administrative | 6 | 10000 | (1,8,7,2,1) |
+ | R34 | boundary | administrative | 8 | 11000 | (1,6,5,2,1) |
And the named places
- | osm | class | type | admin | geometry |
- | R4 | boundary | administrative | 10 | :b2:N |
+ | osm | class | type | admin | geometry |
+ | R4 | boundary | administrative | 10 | (1,4,3,2,1) |
And the named places
| osm | class | type | geometry |
- | W93 | highway | residential | :w2N |
+ | W93 | highway | residential | 10,11 |
When importing
Then placex contains
| object | postcode | parent_place_id |
- | W93 | 112 DE | R4 |
+ | W93 | 11000 | R4 |
Scenario: Postcodes from the lowest admin area are inherited by buildings
- Given the scene admin-areas
+ Given the grid with origin FR
+ | 1 | | | | 4 | | 6 | | 8 |
+ | | 10 | | 11 | | | | | |
+ | | 13 | | 12 | | | | | |
+ | 2 | | | | 3 | | 5 | | 7 |
And the named places
| osm | class | type | admin | addr+postcode | geometry |
- | R1 | boundary | administrative | 6 | 112 | :b0 |
- | R34 | boundary | administrative | 8 | 112 DE | :b1:E |
- | R4 | boundary | administrative | 10 | 112 DE 34 | :b2:N |
+ | R1 | boundary | administrative | 6 | 10000 | (1,8,7,2,1) |
+ | R34 | boundary | administrative | 8 | 11000 | (1,6,5,2,1) |
+ | R4 | boundary | administrative | 10 | 11200 | (1,4,3,2,1) |
And the named places
| osm | class | type | geometry |
- | W22 | building | yes | :building:w2N |
+ | W22 | building | yes | (10,11,12,13,10) |
When importing
Then placex contains
- | object | postcode |
- | W22 | 112 DE 34 |
+ | object | postcode |
+ | W22 | 11200 |
Scenario: Roads get postcodes from nearby named buildings without other info
- Given the scene admin-areas
+ Given the grid with origin US
+ | 10 | | | | 11 |
+ | | 1 | 2 | | |
+ | | 4 | 3 | | |
And the named places
| osm | class | type | geometry |
- | W93 | highway | residential | :w2N |
+ | W93 | highway | residential | 10,11 |
And the named places
- | osm | class | type | addr+postcode | geometry |
- | W22 | building | yes | 445023 | :building:w2N |
+ | osm | class | type | addr+postcode | geometry |
+ | W22 | building | yes | 45023 | (1,2,3,4,1) |
When importing
Then placex contains
| object | postcode |
- | W93 | 445023 |
+ | W93 | 45023 |
Scenario: Roads get postcodes from nearby unnamed buildings without other info
- Given the scene admin-areas
+ Given the grid with origin US
+ | 10 | | | | 11 |
+ | | 1 | 2 | | |
+ | | 4 | 3 | | |
And the named places
| osm | class | type | geometry |
- | W93 | highway | residential | :w2N |
- And the named places
- | osm | class | type | addr+postcode | geometry |
- | W22 | place | postcode | 445023 | :building:w2N |
+ | W93 | highway | residential | 10,11 |
+ And the places
+ | osm | class | type | addr+postcode | geometry |
+ | W22 | place | postcode | 45023 | (1,2,3,4,1) |
When importing
Then placex contains
| object | postcode |
- | W93 | 445023 |
+ | W93 | 45023 |
Scenario: Postcodes from admin boundaries are preferred over estimated postcodes
- Given the scene admin-areas
+ Given the grid with origin FR
+ | 1 | | | | 4 | | 6 | | 8 |
+ | | 10 | | 11 | | | | | |
+ | | | 22 | | | | | | |
+ | 2 | | | | 3 | | 5 | | 7 |
And the named places
| osm | class | type | admin | addr+postcode | geometry |
- | R1 | boundary | administrative | 6 | 112 | :b0 |
- | R34 | boundary | administrative | 8 | 112 DE | :b1:E |
- | R4 | boundary | administrative | 10 | 112 DE 34 | :b2:N |
+ | R1 | boundary | administrative | 6 | 10000 | (1,8,7,2,1) |
+ | R34 | boundary | administrative | 8 | 11000 | (1,6,5,2,1) |
+ | R4 | boundary | administrative | 10 | 11200 | (1,4,3,2,1) |
And the named places
| osm | class | type | geometry |
- | W93 | highway | residential | :w2N |
+ | W93 | highway | residential | 10,1 |
And the named places
- | osm | class | type | addr+postcode | geometry |
- | W22 | building | yes | 445023 | :building:w2N |
+ | osm | class | type | addr+postcode |
+ | N22 | building | yes | 45023 |
When importing
Then placex contains
- | object | postcode |
- | W93 | 112 DE 34 |
+ | object | postcode |
+ | W93 | 11200 |
Scenario: Postcodes are added to the postcode and word table
Given the places
| N1 | #Halle Saale, #Halle |
Scenario: Unnamed POIs have no search entry
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | geometry |
- | N1 | place | house | :p-N1 |
+ | osm | class | type |
+ | N1 | place | house |
And the named places
| osm | class | type | geometry |
- | W1 | highway | residential | :w-north |
+ | W1 | highway | residential | 10,11 |
When importing
Then search_name has no entry for N1
Scenario: Unnamed POI has a search entry when it has unknown addr: tags
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | housenr | addr+city | geometry |
- | N1 | place | house | 23 | Walltown | :p-N1 |
+ | osm | class | type | housenr | addr+city |
+ | N1 | place | house | 23 | Walltown |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
+ | W1 | highway | residential | Rose Street | 10,11 |
When importing
Then search_name contains
| object | nameaddress_vector |
| N1 | 23, Rose Street |
Scenario: Searching for unknown addr: tags also works for multiple words
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | housenr | addr+city | geometry |
- | N1 | place | house | 23 | Little Big Town | :p-N1 |
+ | osm | class | type | housenr | addr+city |
+ | N1 | place | house | 23 | Little Big Town |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
+ | W1 | highway | residential | Rose Street | 10,11 |
When importing
Then search_name contains
| object | nameaddress_vector |
| N1 | 23, Rose Street |
Scenario: Unnamed POI has no search entry when it has known addr: tags
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | housenr | addr+city | geometry |
- | N1 | place | house | 23 | Walltown | :p-N1 |
+ | osm | class | type | housenr | addr+city |
+ | N1 | place | house | 23 | Walltown |
And the places
| osm | class | type | name+name | addr+city | geometry |
- | W1 | highway | residential | Rose Street | Walltown | :w-north |
+ | W1 | highway | residential | Rose Street | Walltown | 10,11 |
When importing
Then search_name has no entry for N1
When sending search query "23 Rose Street, Walltown"
| N1 | 23, Rose Street |
Scenario: Unnamed POI must have a house number to get a search entry
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | addr+city | geometry |
- | N1 | place | house | Walltown | :p-N1 |
+ | osm | class | type | addr+city |
+ | N1 | place | house | Walltown |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
+ | W1 | highway | residential | Rose Street | 10,11 |
When importing
Then search_name has no entry for N1
Scenario: Unnamed POIs inherit parent name when unknown addr:place is present
- Given the scene roads-with-pois
+ Given the grid
+ | 100 | | | | | 101 |
+ | | | 1 | | | |
+ | 103 | 10 | | | 11 | 102 |
And the places
- | osm | class | type | housenr | addr+place | geometry |
- | N1 | place | house | 23 | Walltown | :p-N1 |
+ | osm | class | type | housenr | addr+place |
+ | N1 | place | house | 23 | Walltown |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
- | N2 | place | city | Strange Town | :p-N1 |
+ | W1 | highway | residential | Rose Street | 10,11 |
+ | R1 | place | city | Strange Town | (100,101,102,103,100) |
When importing
Then placex contains
| object | parent_place_id |
- | N1 | N2 |
+ | N1 | R1 |
When sending search query "23 Rose Street"
Then exactly 1 results are returned
And results contain
| N1 | 23, Walltown, Strange Town |
Scenario: Named POIs can be searched by housenumber when unknown addr:place is present
- Given the scene roads-with-pois
+ Given the grid
+ | 100 | | | | | 101 |
+ | | | 1 | | | |
+ | 103 | 10 | | | 11 | 102 |
And the places
- | osm | class | type | name | housenr | addr+place | geometry |
- | N1 | place | house | Blue house | 23 | Walltown | :p-N1 |
+ | osm | class | type | name | housenr | addr+place |
+ | N1 | place | house | Blue house | 23 | Walltown |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
- | N2 | place | city | Strange Town | :p-N1 |
+ | W1 | highway | residential | Rose Street | 10,11 |
+ | R1 | place | city | Strange Town | (100,101,102,103,100) |
When importing
When sending search query "23 Walltown, Strange Town"
Then results contain
| N1 | Blue house, 23, Walltown, Strange Town |
Scenario: Named POIs can be found when unknown multi-word addr:place is present
- Given the scene roads-with-pois
+ Given the grid
+ | 100 | | | | | 101 |
+ | | | 1 | | | |
+ | 103 | 10 | | | 11 | 102 |
And the places
- | osm | class | type | name | housenr | addr+place | geometry |
- | N1 | place | house | Blue house | 23 | Moon sun | :p-N1 |
+ | osm | class | type | name | housenr | addr+place |
+ | N1 | place | house | Blue house | 23 | Moon sun |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
- | N2 | place | city | Strange Town | :p-N1 |
+ | W1 | highway | residential | Rose Street | 10,11 |
+ | R1 | place | city | Strange Town | (100,101,102,103,100) |
When importing
When sending search query "23 Moon Sun, Strange Town"
Then results contain
| N1 | Blue house, 23, Moon sun, Strange Town |
Scenario: Unnamed POIs doesn't inherit parent name when addr:place is present only in parent address
- Given the scene roads-with-pois
+ Given the grid
+ | 100 | | | | | 101 |
+ | | | 1 | | | |
+ | 103 | 10 | | | 11 | 102 |
And the places
- | osm | class | type | housenr | addr+place | geometry |
- | N1 | place | house | 23 | Walltown | :p-N1 |
+ | osm | class | type | housenr | addr+place |
+ | N1 | place | house | 23 | Walltown |
And the places
| osm | class | type | name+name | addr+city | geometry |
- | W1 | highway | residential | Rose Street | Walltown | :w-north |
- | N2 | place | suburb | Strange Town | Walltown | :p-N1 |
+ | W1 | highway | residential | Rose Street | Walltown | 10,11 |
+ | R1 | place | suburb | Strange Town | Walltown | (100,101,102,103,100) |
When importing
When sending search query "23 Rose Street, Walltown"
Then exactly 1 result is returned
| N1 | 23, Walltown, Strange Town |
Scenario: Unnamed POIs does inherit parent name when unknown addr:place and addr:street is present
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | housenr | addr+place | addr+street | geometry |
- | N1 | place | house | 23 | Walltown | Lily Street | :p-N1 |
+ | osm | class | type | housenr | addr+place | addr+street |
+ | N1 | place | house | 23 | Walltown | Lily Street |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
+ | W1 | highway | residential | Rose Street | 10,11 |
When importing
Then search_name has no entry for N1
When sending search query "23 Rose Street"
Then exactly 0 results are returned
Scenario: An unknown addr:street is ignored
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | housenr | addr+street | geometry |
- | N1 | place | house | 23 | Lily Street | :p-N1 |
+ | osm | class | type | housenr | addr+street |
+ | N1 | place | house | 23 | Lily Street |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
+ | W1 | highway | residential | Rose Street | 10,11 |
When importing
Then search_name has no entry for N1
When sending search query "23 Rose Street"
Then exactly 0 results are returned
Scenario: Named POIs get unknown address tags added in the search_name table
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | name+name | housenr | addr+city | geometry |
- | N1 | place | house | Green Moss | 26 | Walltown | :p-N1 |
+ | osm | class | type | name+name | housenr | addr+city |
+ | N1 | place | house | Green Moss | 26 | Walltown |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
+ | W1 | highway | residential | Rose Street | 10,11 |
When importing
Then search_name contains
| object | name_vector | nameaddress_vector |
| N1 | Green Moss, 26, Rose Street |
Scenario: Named POI doesn't inherit parent name when addr:place is present only in parent address
- Given the scene roads-with-pois
+ Given the grid
+ | 100 | | | | | 101 |
+ | | | 1 | | | |
+ | 103 | 10 | | | 11 | 102 |
And the places
- | osm | class | type | name+name | addr+place | geometry |
- | N1 | place | house | Green Moss | Walltown | :p-N1 |
+ | osm | class | type | name+name | addr+place |
+ | N1 | place | house | Green Moss | Walltown |
And the places
| osm | class | type | name+name | geometry |
- | W1 | highway | residential | Rose Street | :w-north |
- | N2 | place | suburb | Strange Town | :p-N1 |
+ | W1 | highway | residential | Rose Street | 10,11 |
+ | R1 | place | suburb | Strange Town | (100,101,102,103,100) |
When importing
When sending search query "Green Moss, Rose Street, Walltown"
Then exactly 0 result is returned
| N1 | Green Moss, Walltown, Strange Town |
Scenario: Named POIs inherit address from parent
- Given the scene roads-with-pois
+ Given the grid
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
| osm | class | type | name | geometry |
- | N1 | place | house | foo | :p-N1 |
- | W1 | highway | residential | the road | :w-north |
+ | N1 | place | house | foo | 1 |
+ | W1 | highway | residential | the road | 10,11 |
When importing
Then search_name contains
| object | name_vector | nameaddress_vector |
| N1 | foo | #the road |
Scenario: Some addr: tags are added to address
- Given the scene roads-with-pois
+ Given the grid
+ | | 2 | 3 | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | name | geometry |
- | N2 | place | city | bonn | 81 81 |
- | N3 | place | suburb | smalltown| 80 81 |
+ | osm | class | type | name |
+ | N2 | place | city | bonn |
+ | N3 | place | suburb | smalltown|
And the named places
| osm | class | type | addr+city | addr+municipality | addr+suburb | geometry |
- | W1 | highway | service | bonn | New York | Smalltown | :w-north |
+ | W1 | highway | service | bonn | New York | Smalltown | 10,11 |
When importing
Then search_name contains
| object | nameaddress_vector |
| W1 | bonn, new, york, smalltown |
Scenario: A known addr:* tag is added even if the name is unknown
- Given the scene roads-with-pois
+ Given the grid
+ | 10 | | | | 11 |
And the places
| osm | class | type | name | addr+city | geometry |
- | W1 | highway | residential | Road | Nandu | :w-north |
+ | W1 | highway | residential | Road | Nandu | 10,11 |
When importing
Then search_name contains
| object | nameaddress_vector |
| W1 | nandu |
Scenario: addr:postcode is not added to the address terms
- Given the scene roads-with-pois
+ Given the grid with origin DE
+ | | 1 | | |
+ | 10 | | | 11 |
And the places
- | osm | class | type | name+ref | geometry |
- | N1 | place | state | 12345 | 80 80 |
+ | osm | class | type | name+ref |
+ | N1 | place | state | 12345 |
And the named places
| osm | class | type | addr+postcode | geometry |
- | W1 | highway | residential | 12345 | :w-north |
+ | W1 | highway | residential | 12345 | 10,11 |
When importing
Then search_name contains not
| object | nameaddress_vector |
| W1 | 12345 |
Scenario: a linked place does not show up in search name
+ Given the 0.01 grid
+ | 10 | | 11 |
+ | | 2 | |
+ | 13 | | 12 |
Given the named places
| osm | class | type | admin | geometry |
- | R13 | boundary | administrative | 9 | poly-area:0.01 |
+ | R13 | boundary | administrative | 9 | (10,11,12,13,10) |
And the named places
- | osm | class | type | geometry |
- | N2 | place | city | 0.1 0.1 |
+ | osm | class | type |
+ | N2 | place | city |
And the relations
| id | members | tags+type |
| 13 | N2:label | boundary |
And search_name has no entry for N2
Scenario: a linked waterway does not show up in search name
- Given the scene split-road
+ Given the grid
+ | 1 | | 2 | | 3 |
And the places
| osm | class | type | name | geometry |
- | W1 | waterway | river | Rhein | :w-2 |
- | W2 | waterway | river | Rhein | :w-3 |
- | R13 | waterway | river | Rhein | :w-1 + :w-2 + :w-3 |
+ | W1 | waterway | river | Rhein | 1,2 |
+ | W2 | waterway | river | Rhein | 2,3 |
+ | R13 | waterway | river | Rhein | 1,2,3 |
And the relations
| id | members | tags+type |
| 13 | W1,W2:main_stream | waterway |
Tests that information from linked places can be searched correctly
Scenario: Additional names from linked places are searchable
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 2 | |
+ | 13 | | 12 |
Given the places
| osm | class | type | admin | name | geometry |
- | R13 | boundary | administrative | 6 | Garbo | poly-area:0.1 |
+ | R13 | boundary | administrative | 6 | Garbo | (10,11,12,13,10) |
Given the places
- | osm | class | type | admin | name+name:it | geometry |
- | N2 | place | hamlet | 15 | Vario | 0.006 0.00001 |
+ | osm | class | type | admin | name+name:it |
+ | N2 | place | hamlet | 15 | Vario |
And the relations
| id | members | tags+type |
| 13 | N2:label | boundary |
Scenario: Differing names from linked places are searchable
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 2 | |
+ | 13 | | 12 |
Given the places
| osm | class | type | admin | name | geometry |
- | R13 | boundary | administrative | 6 | Garbo | poly-area:0.1 |
+ | R13 | boundary | administrative | 6 | Garbo | (10,11,12,13,10) |
Given the places
- | osm | class | type | admin | name | geometry |
- | N2 | place | hamlet | 15 | Vario | 0.006 0.00001 |
+ | osm | class | type | admin | name |
+ | N2 | place | hamlet | 15 | Vario |
And the relations
| id | members | tags+type |
| 13 | N2:label | boundary |
| 0 | N3 |
Scenario: Landuse with name are found
+ Given the grid
+ | 1 | 2 |
+ | 3 | |
Given the places
| osm | class | type | name | geometry |
- | R1 | natural | meadow | landuse1 | (0 0, 1 0, 1 1, 0 1, 0 0) |
- | R2 | landuse | industrial | landuse2 | (0 0, -1 0, -1 -1, 0 -1, 0 0) |
+ | R1 | natural | meadow | landuse1 | (1,2,3,1) |
+ | R2 | landuse | industrial | landuse2 | (2,3,1,2) |
When importing
When sending search query "landuse1"
Then results contain
| 0 | R2 |
Scenario: Postcode boundaries without ref
+ Given the grid with origin FR
+ | | 2 | |
+ | 1 | | 3 |
Given the places
| osm | class | type | postcode | geometry |
- | R1 | boundary | postal_code | 12345 | (0 0, 1 0, 1 1, 0 1, 0 0) |
+ | R1 | boundary | postal_code | 12345 | (1,2,3,1) |
When importing
When sending search query "12345"
Then results contain
| 0 | N1 | place | village | 10 -10 |
Scenario: Updating postcode in postcode boundaries without ref
+ Given the grid
+ | 1 | 2 |
+ | 4 | 3 |
Given the places
| osm | class | type | postcode | geometry |
- | R1 | boundary | postal_code | 12345 | poly-area:1.0 |
+ | R1 | boundary | postal_code | 12345 | (1,2,3,4,1) |
When importing
And sending search query "12345"
Then results contain
| 0 | R1 |
When updating places
| osm | class | type | postcode | geometry |
- | R1 | boundary | postal_code | 54321 | poly-area:1.0 |
+ | R1 | boundary | postal_code | 54321 | (1,2,3,4,1) |
And sending search query "12345"
Then exactly 0 results are returned
When sending search query "54321"
Feature: Country handling
Tests for update of country information
+ Background:
+ Given the 1.0 grid with origin DE
+ | 1 | | 2 |
+ | | 10 | |
+ | 4 | | 3 |
+
@fail-legacy
Scenario: When country names are changed old ones are no longer searchable
Given the places
- | osm | class | type | admin | name+name:xy | country | geometry |
- | R1 | boundary | administrative | 2 | Loudou | de | (9 52, 9 53, 10 52, 9 52) |
+ | osm | class | type | admin | name+name:xy | country | geometry |
+ | R1 | boundary | administrative | 2 | Loudou | de | (1,2,3,4,1) |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | town | Wenig | country:de |
+ | osm | class | type | name |
+ | N10 | place | town | Wenig |
When importing
When sending search query "Wenig, Loudou"
Then results contain
| osm |
- | N1 |
+ | N10 |
When updating places
- | osm | class | type | admin | name+name:xy | country | geometry |
- | R1 | boundary | administrative | 2 | Germany | de | (9 52, 9 53, 10 52, 9 52) |
+ | osm | class | type | admin | name+name:xy | country | geometry |
+ | R1 | boundary | administrative | 2 | Germany | de | (1,2,3,4,1) |
When sending search query "Wenig, Loudou"
Then exactly 0 results are returned
@fail-legacy
Scenario: When country names are deleted they are no longer searchable
Given the places
- | osm | class | type | admin | name+name:xy | country | geometry |
- | R1 | boundary | administrative | 2 | Loudou | de | (9 52, 9 53, 10 52, 9 52) |
+ | osm | class | type | admin | name+name:xy | country | geometry |
+ | R1 | boundary | administrative | 2 | Loudou | de | (1,2,3,4,1) |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | town | Wenig | country:de |
+ | osm | class | type | name |
+ | N10 | place | town | Wenig |
When importing
When sending search query "Wenig, Loudou"
Then results contain
| osm |
- | N1 |
+ | N10 |
When updating places
- | osm | class | type | admin | name+name:en | country | geometry |
- | R1 | boundary | administrative | 2 | Germany | de | (9 52, 9 53, 10 52, 9 52) |
+ | osm | class | type | admin | name+name:en | country | geometry |
+ | R1 | boundary | administrative | 2 | Germany | de | (1,2,3,4,1) |
When sending search query "Wenig, Loudou"
Then exactly 0 results are returned
When sending search query "Wenig"
| xy,en |
Then results contain
| osm | display_name |
- | N1 | Wenig, Germany |
+ | N10 | Wenig, Germany |
Scenario: Default country names are always searchable
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | town | Wenig | country:de |
+ | osm | class | type | name |
+ | N10 | place | town | Wenig |
When importing
When sending search query "Wenig, Germany"
Then results contain
| osm |
- | N1 |
+ | N10 |
When sending search query "Wenig, de"
Then results contain
| osm |
- | N1 |
+ | N10 |
When updating places
| osm | class | type | admin | name+name:en | country | geometry |
- | R1 | boundary | administrative | 2 | Lilly | de | (9 52, 9 53, 10 52, 9 52) |
+ | R1 | boundary | administrative | 2 | Lilly | de | (1,2,3,4,1) |
When sending search query "Wenig, Germany"
| accept-language |
| en,de |
Then results contain
| osm | display_name |
- | N1 | Wenig, Lilly |
+ | N10 | Wenig, Lilly |
When sending search query "Wenig, de"
| accept-language |
| en,de |
Then results contain
| osm | display_name |
- | N1 | Wenig, Lilly |
+ | N10 | Wenig, Lilly |
@fail-legacy
Scenario: When a localised name is deleted, the standard name takes over
Given the places
- | osm | class | type | admin | name+name:de | country | geometry |
- | R1 | boundary | administrative | 2 | Loudou | de | (9 52, 9 53, 10 52, 9 52) |
+ | osm | class | type | admin | name+name:de | country | geometry |
+ | R1 | boundary | administrative | 2 | Loudou | de | (1,2,3,4,1) |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | town | Wenig | country:de |
+ | osm | class | type | name |
+ | N10 | place | town | Wenig |
When importing
When sending search query "Wenig, Loudou"
| accept-language |
| de,en |
Then results contain
| osm | display_name |
- | N1 | Wenig, Loudou |
+ | N10 | Wenig, Loudou |
When updating places
- | osm | class | type | admin | name+name:en | country | geometry |
- | R1 | boundary | administrative | 2 | Germany | de | (9 52, 9 53, 10 52, 9 52) |
+ | osm | class | type | admin | name+name:en | country | geometry |
+ | R1 | boundary | administrative | 2 | Germany | de | (1,2,3,4,1) |
When sending search query "Wenig, Loudou"
Then exactly 0 results are returned
When sending search query "Wenig"
| de,en |
Then results contain
| osm | display_name |
- | N1 | Wenig, Deutschland |
+ | N10 | Wenig, Deutschland |
Test the interpolated address are updated correctly
Scenario: new interpolation added to existing street
- Given the scene parallel-road
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | 99 | 2 | |
+ | | | | | |
+ | 20 | | | | 21 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Sun Way | :w-north |
- | W3 | highway | unclassified | Cloud Street | :w-south |
+ | W2 | highway | unclassified | Sun Way | 10,11 |
+ | W3 | highway | unclassified | Cloud Street | 20,21 |
And the ways
| id | nodes |
- | 10 | 1,100,101,102,2 |
+ | 10 | 1,2 |
When importing
Then W10 expands to no interpolation
When updating places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-middle-w |
- | N2 | place | house | 6 | :n-middle-e |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And updating places
| osm | class | type | addr+interpolation | geometry |
- | W10 | place | houses | even | :w-middle |
+ | W10 | place | houses | even | 1,2 |
Then placex contains
| object | parent_place_id |
| N1 | W2 |
| N2 | W2 |
And W10 expands to interpolation
- | parent_place_id | start | end |
- | W2 | 4 | 4 |
+ | parent_place_id | start | end | geometry |
+ | W2 | 4 | 4 | 99 |
Scenario: addr:street added to interpolation
- Given the scene parallel-road
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | | 2 | |
+ | | | | | |
+ | 20 | | | | 21 |
And the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-middle-w |
- | N2 | place | house | 6 | :n-middle-e |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W10 | place | houses | even | :w-middle |
+ | W10 | place | houses | even | 1,2 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Sun Way | :w-north |
- | W3 | highway | unclassified | Cloud Street | :w-south |
+ | W2 | highway | unclassified | Sun Way | 10,11 |
+ | W3 | highway | unclassified | Cloud Street | 20,21 |
And the ways
| id | nodes |
- | 10 | 1,100,101,102,2 |
+ | 10 | 1,2 |
When importing
Then placex contains
| object | parent_place_id |
| W2 | 4 | 4 |
When updating places
| osm | class | type | addr+interpolation | street | geometry |
- | W10 | place | houses | even | Cloud Street | :w-middle |
+ | W10 | place | houses | even | Cloud Street | 1,2 |
Then placex contains
| object | parent_place_id |
| N1 | W3 |
| W3 | 4 | 4 |
Scenario: addr:street added to housenumbers
- Given the scene parallel-road
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | | 2 | |
+ | | | | | |
+ | 20 | | | | 21 |
And the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-middle-w |
- | N2 | place | house | 6 | :n-middle-e |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W10 | place | houses | even | :w-middle |
+ | W10 | place | houses | even | 1,2 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Sun Way | :w-north |
- | W3 | highway | unclassified | Cloud Street | :w-south |
+ | W2 | highway | unclassified | Sun Way | 10,11 |
+ | W3 | highway | unclassified | Cloud Street | 20,21 |
And the ways
| id | nodes |
- | 10 | 1,100,101,102,2 |
+ | 10 | 1,2 |
When importing
Then placex contains
| object | parent_place_id |
| parent_place_id | start | end |
| W2 | 4 | 4 |
When updating places
- | osm | class | type | street | housenr | geometry |
- | N1 | place | house | Cloud Street| 2 | :n-middle-w |
- | N2 | place | house | Cloud Street| 6 | :n-middle-e |
+ | osm | class | type | street | housenr |
+ | N1 | place | house | Cloud Street| 2 |
+ | N2 | place | house | Cloud Street| 6 |
Then placex contains
| object | parent_place_id |
| N1 | W3 |
| W3 | 4 | 4 |
Scenario: interpolation tag removed
- Given the scene parallel-road
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | | 2 | |
+ | | | | | |
+ | 20 | | | | 21 |
And the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-middle-w |
- | N2 | place | house | 6 | :n-middle-e |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W10 | place | houses | even | :w-middle |
+ | W10 | place | houses | even | 1,2 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Sun Way | :w-north |
- | W3 | highway | unclassified | Cloud Street | :w-south |
+ | W2 | highway | unclassified | Sun Way | 10,11 |
+ | W3 | highway | unclassified | Cloud Street | 20,21 |
And the ways
| id | nodes |
- | 10 | 1,100,101,102,2 |
+ | 10 | 1,2 |
When importing
Then placex contains
| object | parent_place_id |
| N2 | W2 |
Scenario: referenced road added
- Given the scene parallel-road
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | | 2 | |
+ | | | | | |
+ | 20 | | | | 21 |
And the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-middle-w |
- | N2 | place | house | 6 | :n-middle-e |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And the places
| osm | class | type | addr+interpolation | street | geometry |
- | W10 | place | houses | even | Cloud Street| :w-middle |
+ | W10 | place | houses | even | Cloud Street| 1,2 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Sun Way | :w-north |
+ | W2 | highway | unclassified | Sun Way | 10,11 |
And the ways
| id | nodes |
- | 10 | 1,100,101,102,2 |
+ | 10 | 1,2 |
When importing
Then placex contains
| object | parent_place_id |
| W2 | 4 | 4 |
When updating places
| osm | class | type | name | geometry |
- | W3 | highway | unclassified | Cloud Street | :w-south |
+ | W3 | highway | unclassified | Cloud Street | 20,21 |
Then placex contains
| object | parent_place_id |
| N1 | W3 |
| W3 | 4 | 4 |
Scenario: referenced road deleted
- Given the scene parallel-road
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | | 2 | |
+ | | | | | |
+ | 20 | | | | 21 |
And the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-middle-w |
- | N2 | place | house | 6 | :n-middle-e |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And the places
| osm | class | type | addr+interpolation | street | geometry |
- | W10 | place | houses | even | Cloud Street| :w-middle |
+ | W10 | place | houses | even | Cloud Street| 1,2 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Sun Way | :w-north |
- | W3 | highway | unclassified | Cloud Street | :w-south |
+ | W2 | highway | unclassified | Sun Way | 10,11 |
+ | W3 | highway | unclassified | Cloud Street | 20,21 |
And the ways
| id | nodes |
- | 10 | 1,100,101,102,2 |
+ | 10 | 1,2 |
When importing
Then placex contains
| object | parent_place_id |
| W2 | 4 | 4 |
Scenario: building becomes interpolation
- Given the scene building-with-parallel-streets
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | | 2 | |
+ | | 4 | | 3 | |
And the places
- | osm | class | type | housenr | geometry |
- | W1 | place | house | 3 | :w-building |
+ | osm | class | type | housenr | geometry |
+ | W1 | place | house | 3 | (1,2,3,4,1) |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Cloud Street | :w-south |
+ | W2 | highway | unclassified | Cloud Street | 10,11 |
When importing
Then placex contains
| object | parent_place_id |
| W1 | W2 |
Given the ways
| id | nodes |
- | 1 | 1,100,101,102,2 |
+ | 1 | 1,2 |
When updating places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-north-w |
- | N2 | place | house | 6 | :n-north-e |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And updating places
| osm | class | type | addr+interpolation | street | geometry |
- | W1 | place | houses | even | Cloud Street| :w-north |
+ | W1 | place | houses | even | Cloud Street| 1,2 |
Then placex has no entry for W1
And W1 expands to interpolation
| parent_place_id | start | end |
| W2 | 4 | 4 |
Scenario: interpolation becomes building
- Given the scene building-with-parallel-streets
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | | 2 | |
+ | | 4 | | 3 | |
And the places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-north-w |
- | N2 | place | house | 6 | :n-north-e |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Cloud Street | :w-south |
+ | W2 | highway | unclassified | Cloud Street | 10,11 |
And the ways
| id | nodes |
- | 1 | 1,100,101,102,2 |
+ | 1 | 1,2 |
And the places
| osm | class | type | addr+interpolation | street | geometry |
- | W1 | place | houses | even | Cloud Street| :w-north |
+ | W1 | place | houses | even | Cloud Street| 1,2 |
When importing
Then placex has no entry for W1
And W1 expands to interpolation
| parent_place_id | start | end |
| W2 | 4 | 4 |
When updating places
- | osm | class | type | housenr | geometry |
- | W1 | place | house | 3 | :w-building |
+ | osm | class | type | housenr | geometry |
+ | W1 | place | house | 3 | (1,2,3,4,1) |
Then placex contains
| object | parent_place_id |
| W1 | W2 |
+ And W1 expands to no interpolation
Scenario: housenumbers added to interpolation
- Given the scene building-with-parallel-streets
+ Given the grid
+ | 10 | | | | 11 |
+ | | 1 | | 2 | |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | unclassified | Cloud Street | :w-south |
+ | W2 | highway | unclassified | Cloud Street | 10,11 |
And the ways
| id | nodes |
- | 1 | 1,100,101,102,2 |
+ | 1 | 1,2 |
And the places
| osm | class | type | addr+interpolation | geometry |
- | W1 | place | houses | even | :w-north |
+ | W1 | place | houses | even | 1,2 |
When importing
Then W1 expands to no interpolation
When updating places
- | osm | class | type | housenr | geometry |
- | N1 | place | house | 2 | :n-north-w |
- | N2 | place | house | 6 | :n-north-e |
- And updating places
- | osm | class | type | addr+interpolation | street | geometry |
- | W1 | place | houses | even | Cloud Street| :w-north |
+ | osm | class | type | housenr |
+ | N1 | place | house | 2 |
+ | N2 | place | house | 6 |
Then W1 expands to interpolation
| parent_place_id | start | end |
| W2 | 4 | 4 |
Tests that linked places are correctly added and deleted.
Scenario: Linking is kept when boundary is updated
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 1 | |
+ | 13 | | 12 |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | city | foo | 0 0 |
+ | osm | class | type | name |
+ | N1 | place | city | foo |
And the places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foo | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foo | 8 | (10,11,12,13,10) |
When importing
Then placex contains
| object | linked_place_id |
| N1 | R1 |
When updating places
| osm | class | type | name | name+name:de | admin | geometry |
- | R1 | boundary | administrative | foo | Dingens | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foo | Dingens | 8 | (10,11,12,13,10) |
Then placex contains
| object | linked_place_id |
| N1 | R1 |
Scenario: Add linked place when linking relation is renamed
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 1 | |
+ | 13 | | 12 |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | city | foo | 0 0 |
+ | osm | class | type | name |
+ | N1 | place | city | foo |
And the places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foo | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foo | 8 | (10,11,12,13,10) |
When importing
- And sending search query "foo"
+ Then placex contains
+ | object | linked_place_id |
+ | N1 | R1 |
+ When sending search query "foo"
| dups |
| 1 |
Then results contain
| R |
When updating places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foobar | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foobar | 8 | (10,11,12,13,10) |
Then placex contains
| object | linked_place_id |
| N1 | - |
| N |
Scenario: Add linked place when linking relation is removed
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 1 | |
+ | 13 | | 12 |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | city | foo | 0 0 |
+ | osm | class | type | name |
+ | N1 | place | city | foo |
And the places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foo | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foo | 8 | (10,11,12,13,10) |
When importing
And sending search query "foo"
| dups |
| N |
Scenario: Remove linked place when linking relation is added
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 1 | |
+ | 13 | | 12 |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | city | foo | 0 0 |
+ | osm | class | type | name |
+ | N1 | place | city | foo |
When importing
And sending search query "foo"
| dups |
| N |
When updating places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foo | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foo | 8 | (10,11,12,13,10) |
Then placex contains
| object | linked_place_id |
| N1 | R1 |
| R |
Scenario: Remove linked place when linking relation is renamed
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 1 | |
+ | 13 | | 12 |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | city | foo | 0 0 |
+ | osm | class | type | name |
+ | N1 | place | city | foo |
And the places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foobar | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foobar | 8 | (10,11,12,13,10) |
When importing
And sending search query "foo"
| dups |
| N |
When updating places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foo | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foo | 8 | (10,11,12,13,10) |
Then placex contains
| object | linked_place_id |
| N1 | R1 |
| R |
Scenario: Update linking relation when linkee name is updated
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 3 | |
+ | 13 | | 12 |
Given the places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | rel | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | rel | 8 | (10,11,12,13,10) |
And the places
- | osm | class | type | name+name:de | admin | geometry |
- | N3 | place | city | pnt | 30 | 0.00001 0 |
+ | osm | class | type | name+name:de |
+ | N3 | place | city | pnt |
And the relations
| id | members |
| 1 | N3:label |
| object | linked_place_id | name+name:de |
| N3 | R1 | pnt |
When updating places
- | osm | class | type | name+name:de | admin | geometry |
- | N3 | place | city | newname | 30 | 0.00001 0 |
+ | osm | class | type | name+name:de |
+ | N3 | place | city | newname |
Then placex contains
| object | linked_place_id | name+name:de |
| N3 | R1 | newname |
| R1 | - | newname |
Scenario: Update linking relation when linkee name is deleted
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 3 | |
+ | 13 | | 12 |
Given the places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | rel | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | rel | 8 | (10,11,12,13,10) |
And the places
- | osm | class | type | name | admin | geometry |
- | N3 | place | city | pnt | 30 | 0.00001 0 |
+ | osm | class | type | name |
+ | N3 | place | city | pnt |
And the relations
| id | members |
| 1 | N3:label |
| osm |
| R1 |
When updating places
- | osm | class | type | name+name:de | admin | geometry |
- | N3 | place | city | depnt | 30 | 0.00001 0 |
+ | osm | class | type | name+name:de |
+ | N3 | place | city | depnt |
Then placex contains
| object | linked_place_id | name+name:de |
| N3 | R1 | depnt |
Then exactly 0 results are returned
Scenario: Updating linkee extratags keeps linker's extratags
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 3 | |
+ | 13 | | 12 |
Given the named places
| osm | class | type | extra+wikidata | admin | geometry |
- | R1 | boundary | administrative | 34 | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | 34 | 8 | (10,11,12,13,10) |
And the named places
- | osm | class | type | geometry |
- | N3 | place | city | 0.00001 0 |
+ | osm | class | type |
+ | N3 | place | city |
And the relations
| id | members |
| 1 | N3:label |
| object | extratags |
| R1 | 'wikidata' : '34', 'linked_place' : 'city' |
When updating places
- | osm | class | type | name | extra+oneway | admin | geometry |
- | N3 | place | city | newname | yes | 30 | 0.00001 0 |
+ | osm | class | type | name | extra+oneway |
+ | N3 | place | city | newname | yes |
Then placex contains
| object | extratags |
| R1 | 'wikidata' : '34', 'oneway' : 'yes', 'linked_place' : 'city' |
Scenario: Remove linked_place info when linkee is removed
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 1 | |
+ | 13 | | 12 |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | city | foo | 0 0 |
+ | osm | class | type | name |
+ | N1 | place | city | foo |
And the places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foo | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foo | 8 | (10,11,12,13,10) |
When importing
Then placex contains
| object | extratags |
| R1 | |
Scenario: Update linked_place info when linkee type changes
+ Given the 0.1 grid
+ | 10 | | 11 |
+ | | 1 | |
+ | 13 | | 12 |
Given the places
- | osm | class | type | name | geometry |
- | N1 | place | city | foo | 0 0 |
+ | osm | class | type | name |
+ | N1 | place | city | foo |
And the places
| osm | class | type | name | admin | geometry |
- | R1 | boundary | administrative | foo | 8 | poly-area:0.1 |
+ | R1 | boundary | administrative | foo | 8 | (10,11,12,13,10) |
When importing
Then placex contains
| object | extratags |
| R1 | 'linked_place' : 'city' |
When updating places
- | osm | class | type | name | geometry |
- | N1 | place | town | foo | 0 0 |
+ | osm | class | type | name |
+ | N1 | place | town | foo |
Then placex contains
| object | extratags |
| R1 | 'linked_place' : 'town' |
Test all naming related issues in updates
Scenario: Delete postcode from postcode boundaries without ref
+ Given the grid with origin DE
+ | 1 | 2 |
+ | 4 | 3 |
Given the places
| osm | class | type | postcode | geometry |
- | R1 | boundary | postal_code | 12345 | poly-area:0.5 |
+ | R1 | boundary | postal_code | 12345 | (1,2,3,4,1) |
When importing
And sending search query "12345"
Then results contain
| 0 | R1 |
When updating places
| osm | class | type | geometry |
- | R1 | boundary | postal_code | poly-area:0.5 |
+ | R1 | boundary | postal_code | (1,2,3,4,1) |
Then placex has no entry for R1
Feature: Update parenting of objects
Scenario: POI inside building inherits addr:street change
- Given the scene building-on-street-corner
+ Given the grid
+ | 10 | | | | | | | 11 |
+ | | | 5 | | | 6 | | |
+ | | | | | | | | |
+ | | | | | 1 | | | |
+ | 12 | | 8 | | | 7 | | |
And the named places
- | osm | class | type | geometry |
- | N1 | amenity | bank | :n-inner |
- | N2 | shop | bakery | :n-edge-NS |
- | N3 | shop | supermarket| :n-edge-WE |
+ | osm | class | type |
+ | N1 | amenity | bank |
And the places
| osm | class | type | street | housenr | geometry |
- | W1 | building | yes | nowhere | 3 | :w-building |
+ | W1 | building | yes | nowhere | 3 | (5,6,7,8,5) |
And the places
| osm | class | type | name | geometry |
- | W2 | highway | primary | bar | :w-WE |
- | W3 | highway | residential | foo | :w-NS |
+ | W2 | highway | primary | bar | 10,11 |
+ | W3 | highway | residential | foo | 10,12 |
When importing
Then placex contains
| object | parent_place_id | housenumber |
| W1 | W2 | 3 |
- | N1 | W3 | 3 |
- | N2 | W3 | 3 |
- | N3 | W2 | 3 |
+ | N1 | W2 | 3 |
When updating places
| osm | class | type | street | addr_place | housenr | geometry |
- | W1 | building | yes | foo | nowhere | 3 | :w-building |
+ | W1 | building | yes | foo | nowhere | 3 | (5,6,7,8,5) |
And updating places
- | osm | class | type | name | geometry |
- | N3 | shop | supermarket| well | :n-edge-WE |
+ | osm | class | type | name |
+ | N1 | amenity | bank | well |
Then placex contains
| object | parent_place_id | housenumber |
| W1 | W3 | 3 |
| N1 | W3 | 3 |
- | N2 | W3 | 3 |
- | N3 | W3 | 3 |
Scenario: Housenumber is reparented when street gets name matching addr:street
Given the places
| osm | class | type | addr+postcode | addr+housenumber | geometry |
| N34 | place | house | 01982 | 111 |country:de |
- | N35 | place | house | 01982 | 5 |country:ch |
+ | N35 | place | house | 01982 | 5 |country:fr |
When importing
And marking for delete N34
And updating postcodes
Then location_postcode contains exactly
| country | postcode | geometry |
- | ch | 01982 | country:ch |
+ | fr | 01982 | country:fr |
And there are word tokens for postcodes 01982
Scenario: Updating a postcode is reflected in postcode table
Testing simple updating functionality
Scenario: Do delete small boundary features
+ Given the 1.0 grid
+ | 1 | 2 |
+ | 4 | 3 |
Given the places
| osm | class | type | admin | geometry |
- | R1 | boundary | administrative | 3 | poly-area:1.0 |
+ | R1 | boundary | administrative | 3 | (1,2,3,4,1) |
When importing
Then placex contains
| object | rank_search |
Then placex has no entry for R1
Scenario: Do not delete large boundary features
+ Given the 2.0 grid
+ | 1 | 2 |
+ | 4 | 3 |
Given the places
| osm | class | type | admin | geometry |
- | R1 | boundary | administrative | 3 | poly-area:5.0 |
+ | R1 | boundary | administrative | 3 | (1,2,3,4,1) |
When importing
Then placex contains
| object | rank_search |
| R1 | 6 |
When marking for delete R1
- Then placex contains
+ Then placex contains
| object | rank_search |
| R1 | 6 |
Scenario: Do delete large features of low rank
+ Given the 2.0 grid
+ | 1 | 2 |
+ | 4 | 3 |
Given the named places
| osm | class | type | geometry |
- | W1 | place | house | poly-area:5.0 |
- | R1 | natural | wood | poly-area:5.0 |
- | R2 | highway | residential | poly-area:5.0 |
+ | W1 | place | house | (1,2,3,4,1) |
+ | R1 | natural | wood | (1,2,3,4,1) |
+ | R2 | highway | residential | (1,2,3,4,1) |
When importing
Then placex contains
| object | rank_address |
Scenario: remove postcode place when house number is added
Given the places
| osm | class | type | postcode | geometry |
- | N3 | place | postcode | 12345 | 1 -1 |
+ | N3 | place | postcode | 12345 | country:de |
When importing
Then placex has no entry for N3
When updating places
| osm | class | type | postcode | housenr | geometry |
- | N3 | place | house | 12345 | 13 | 1 -1 |
+ | N3 | place | house | 12345 | 13 | country:de |
Then placex contains
| object | class | type |
| N3 | place | house |
context.nominatim.setup_api_db()
elif 'UNKNOWNDB' in context.tags:
context.nominatim.setup_unknown_db()
- context.scene = None
def after_scenario(context, scenario):
if 'DB' in context.tags:
--- /dev/null
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2022 by the Nominatim developer community.
+# For a full list of authors see the git log.
+"""
+Collection of aliases for various world coordinates.
+"""
+
+ALIASES = {
+# Country aliases
+'AD': (1.58972, 42.54241),
+'AE': (54.61589, 24.82431),
+'AF': (65.90264, 34.84708),
+'AG': (-61.72430, 17.069),
+'AI': (-63.10571, 18.25461),
+'AL': (19.84941, 40.21232),
+'AM': (44.64229, 40.37821),
+'AO': (16.21924, -12.77014),
+'AQ': (44.99999, -75.65695),
+'AR': (-61.10759, -34.37615),
+'AS': (-170.68470, -14.29307),
+'AT': (14.25747, 47.36542),
+'AU': (138.23155, -23.72068),
+'AW': (-69.98255, 12.555),
+'AX': (19.91839, 59.81682),
+'AZ': (48.38555, 40.61639),
+'BA': (17.18514, 44.25582),
+'BB': (-59.53342, 13.19),
+'BD': (89.75989, 24.34205),
+'BE': (4.90078, 50.34682),
+'BF': (-0.56743, 11.90471),
+'BG': (24.80616, 43.09859),
+'BH': (50.52032, 25.94685),
+'BI': (29.54561, -2.99057),
+'BJ': (2.70062, 10.02792),
+'BL': (-62.79349, 17.907),
+'BM': (-64.77406, 32.30199),
+'BN': (114.52196, 4.28638),
+'BO': (-62.02473, -17.77723),
+'BQ': (-63.14322, 17.566),
+'BR': (-45.77065, -9.58685),
+'BS': (-77.60916, 23.8745),
+'BT': (90.01350, 27.28137),
+'BV': (3.35744, -54.4215),
+'BW': (23.51505, -23.48391),
+'BY': (26.77259, 53.15885),
+'BZ': (-88.63489, 16.33951),
+'CA': (-107.74817, 67.12612),
+'CC': (96.84420, -12.01734),
+'CD': (24.09544, -1.67713),
+'CF': (22.58701, 5.98438),
+'CG': (15.78875, 0.40388),
+'CH': (7.65705, 46.57446),
+'CI': (-6.31190, 6.62783),
+'CK': (-159.77835, -21.23349),
+'CL': (-70.41790, -53.77189),
+'CM': (13.26022, 5.94519),
+'CN': (96.44285, 38.04260),
+'CO': (-72.52951, 2.45174),
+'CR': (-83.83314, 9.93514),
+'CU': (-80.81673, 21.88852),
+'CV': (-24.50810, 14.929),
+'CW': (-68.96409, 12.1845),
+'CX': (105.62411, -10.48417),
+'CY': (32.95922, 35.37010),
+'CZ': (16.32098, 49.50692),
+'DE': (9.30716, 50.21289),
+'DJ': (42.96904, 11.41542),
+'DK': (9.18490, 55.98916),
+'DM': (-61.00358, 15.65470),
+'DO': (-69.62855, 18.58841),
+'DZ': (4.24749, 25.79721),
+'EC': (-77.45831, -0.98284),
+'EE': (23.94288, 58.43952),
+'EG': (28.95293, 28.17718),
+'EH': (-13.69031, 25.01241),
+'ER': (39.01223, 14.96033),
+'ES': (-2.59110, 38.79354),
+'ET': (38.61697, 7.71399),
+'FI': (26.89798, 63.56194),
+'FJ': (177.91853, -17.74237),
+'FK': (-58.99044, -51.34509),
+'FM': (151.95358, 8.5045),
+'FO': (-6.60483, 62.10000),
+'FR': (0.28410, 47.51045),
+'GA': (10.81070, -0.07429),
+'GB': (-0.92823, 52.01618),
+'GD': (-61.64524, 12.191),
+'GE': (44.16664, 42.00385),
+'GF': (-53.46524, 3.56188),
+'GG': (-2.50580, 49.58543),
+'GH': (-0.46348, 7.16051),
+'GI': (-5.32053, 36.11066),
+'GL': (-33.85511, 74.66355),
+'GM': (-16.40960, 13.25),
+'GN': (-13.83940, 10.96291),
+'GP': (-61.68712, 16.23049),
+'GQ': (10.23973, 1.43119),
+'GR': (23.17850, 39.06206),
+'GS': (-36.49430, -54.43067),
+'GT': (-90.74368, 15.20428),
+'GU': (144.73362, 13.44413),
+'GW': (-14.83525, 11.92486),
+'GY': (-58.45167, 5.73698),
+'HK': (114.18577, 22.34923),
+'HM': (73.68230, -53.22105),
+'HN': (-86.95414, 15.23820),
+'HR': (17.49966, 45.52689),
+'HT': (-73.51925, 18.32492),
+'HU': (20.35362, 47.51721),
+'ID': (123.34505, -0.83791),
+'IE': (-9.00520, 52.87725),
+'IL': (35.46314, 32.86165),
+'IM': (-4.86740, 54.023),
+'IN': (88.67620, 27.86155),
+'IO': (71.42743, -6.14349),
+'IQ': (42.58109, 34.26103),
+'IR': (56.09355, 30.46751),
+'IS': (-17.51785, 64.71687),
+'IT': (10.42639, 44.87904),
+'JE': (-2.19261, 49.12458),
+'JM': (-76.84020, 18.3935),
+'JO': (36.55552, 30.75741),
+'JP': (138.72531, 35.92099),
+'KE': (36.90602, 1.08512),
+'KG': (76.15571, 41.66497),
+'KH': (104.31901, 12.95555),
+'KI': (173.63353, 0.139),
+'KM': (44.31474, -12.241),
+'KN': (-62.69379, 17.2555),
+'KP': (126.65575, 39.64575),
+'KR': (127.27740, 36.41388),
+'KW': (47.30684, 29.69180),
+'KY': (-81.07455, 19.29949),
+'KZ': (72.00811, 49.88855),
+'LA': (102.44391, 19.81609),
+'LB': (35.48464, 33.41766),
+'LC': (-60.97894, 13.891),
+'LI': (9.54693, 47.15934),
+'LK': (80.38520, 8.41649),
+'LR': (-11.16960, 4.04122),
+'LS': (28.66984, -29.94538),
+'LT': (24.51735, 55.49293),
+'LU': (6.08649, 49.81533),
+'LV': (23.51033, 56.67144),
+'LY': (15.36841, 28.12177),
+'MA': (-4.03061, 33.21696),
+'MC': (7.47743, 43.62917),
+'MD': (29.61725, 46.66517),
+'ME': (19.72291, 43.02441),
+'MF': (-63.06666, 18.08102),
+'MG': (45.86378, -20.50245),
+'MH': (171.94982, 5.983),
+'MK': (21.42108, 41.08980),
+'ML': (-1.93310, 16.46993),
+'MM': (95.54624, 21.09620),
+'MN': (99.81138, 48.18615),
+'MO': (113.56441, 22.16209),
+'MP': (145.21345, 14.14902),
+'MQ': (-60.81128, 14.43706),
+'MR': (-9.42324, 22.59251),
+'MS': (-62.19455, 16.745),
+'MT': (14.38363, 35.94467),
+'MU': (57.55121, -20.41),
+'MV': (73.39292, 4.19375),
+'MW': (33.95722, -12.28218),
+'MX': (-105.89221, 25.86826),
+'MY': (112.71154, 2.10098),
+'MZ': (37.58689, -13.72682),
+'NA': (16.68569, -21.46572),
+'NC': (164.95322, -20.38889),
+'NE': (10.06041, 19.08273),
+'NF': (167.95718, -29.0645),
+'NG': (10.17781, 10.17804),
+'NI': (-85.87974, 13.21715),
+'NL': (-68.57062, 12.041),
+'NO': (23.11556, 70.09934),
+'NP': (83.36259, 28.13107),
+'NR': (166.93479, -0.5275),
+'NU': (-169.84873, -19.05305),
+'NZ': (167.97209, -45.13056),
+'OM': (56.86055, 20.47413),
+'PA': (-79.40160, 8.80656),
+'PE': (-78.66540, -7.54711),
+'PF': (-145.05719, -16.70862),
+'PG': (146.64600, -7.37427),
+'PH': (121.48359, 15.09965),
+'PK': (72.11347, 31.14629),
+'PL': (17.88136, 52.77182),
+'PM': (-56.19515, 46.78324),
+'PN': (-130.10642, -25.06955),
+'PR': (-65.88755, 18.37169),
+'PS': (35.39801, 32.24773),
+'PT': (-8.45743, 40.11154),
+'PW': (134.49645, 7.3245),
+'PY': (-59.51787, -22.41281),
+'QA': (51.49903, 24.99816),
+'RE': (55.77345, -21.36388),
+'RO': (26.37632, 45.36120),
+'RS': (20.40371, 44.56413),
+'RU': (116.44060, 59.06780),
+'RW': (29.57882, -1.62404),
+'SA': (47.73169, 22.43790),
+'SB': (164.63894, -10.23606),
+'SC': (46.36566, -9.454),
+'SD': (28.14720, 14.56423),
+'SE': (15.68667, 60.35568),
+'SG': (103.84187, 1.304),
+'SH': (-12.28155, -37.11546),
+'SI': (14.04738, 46.39085),
+'SJ': (15.27552, 79.23365),
+'SK': (20.41603, 48.86970),
+'SL': (-11.47773, 8.78156),
+'SM': (12.46062, 43.94279),
+'SN': (-15.37111, 14.99477),
+'SO': (46.93383, 9.34094),
+'SR': (-55.42864, 4.56985),
+'SS': (28.13573, 8.50933),
+'ST': (6.61025, 0.2215),
+'SV': (-89.36665, 13.43072),
+'SX': (-63.15393, 17.9345),
+'SY': (38.15513, 35.34221),
+'SZ': (31.78263, -26.14244),
+'TC': (-71.32554, 21.35),
+'TD': (17.42092, 13.46223),
+'TF': (137.5, -67.5),
+'TG': (1.06983, 7.87677),
+'TH': (102.00877, 16.42310),
+'TJ': (71.91349, 39.01527),
+'TK': (-171.82603, -9.20990),
+'TL': (126.22520, -8.72636),
+'TM': (57.71603, 39.92534),
+'TN': (9.04958, 34.84199),
+'TO': (-176.99320, -23.11104),
+'TR': (32.82002, 39.86350),
+'TT': (-60.70793, 11.1385),
+'TV': (178.77499, -9.41685),
+'TW': (120.30074, 23.17002),
+'TZ': (33.53892, -5.01840),
+'UA': (33.44335, 49.30619),
+'UG': (32.96523, 2.08584),
+'UM': (-169.50993, 16.74605),
+'US': (-116.39535, 40.71379),
+'UY': (-56.46505, -33.62658),
+'UZ': (61.35529, 42.96107),
+'VA': (12.33197, 42.04931),
+'VC': (-61.09905, 13.316),
+'VE': (-64.88323, 7.69849),
+'VG': (-64.62479, 18.419),
+'VI': (-64.88950, 18.32263),
+'VN': (104.20179, 10.27644),
+'VU': (167.31919, -15.88687),
+'WF': (-176.20781, -13.28535),
+'WS': (-172.10966, -13.85093),
+'YE': (45.94562, 16.16338),
+'YT': (44.93774, -12.60882),
+'ZA': (23.19488, -30.43276),
+'ZM': (26.38618, -14.39966),
+'ZW': (30.12419, -19.86907)
+}
from pathlib import Path
import os
+from steps.geometry_alias import ALIASES
+
class GeometryFactory:
- """ Provides functions to create geometries from scenes and data grids.
+ """ Provides functions to create geometries from coordinates and data grids.
"""
def __init__(self):
- defpath = Path(__file__) / '..' / '..' / '..' / 'scenes' / 'data'
- self.scene_path = os.environ.get('SCENE_PATH', defpath.resolve())
- self.scene_cache = {}
self.grid = {}
- def parse_geometry(self, geom, scene):
+ def parse_geometry(self, geom):
""" Create a WKT SQL term for the given geometry.
The function understands the following formats:
- [<scene>]:<name>
- Geometry from a scene. If the scene is omitted, use the
- default scene.
+ country:<country code>
+ Point geoemtry guaranteed to be in the given country
<P>
Point geometry
<P>,...,<P>
number. In the latter case it must refer to a point in
a previously defined grid.
"""
- if geom.find(':') >= 0:
- return "ST_SetSRID({}, 4326)".format(self.get_scene_geometry(scene, geom))
+ if geom.startswith('country:'):
+ ccode = geom[8:].upper()
+ assert ccode in ALIASES, "Geometry error: unknown country " + ccode
+ return "ST_SetSRID('POINT({} {})'::geometry, 4326)".format(*ALIASES[ccode])
if geom.find(',') < 0:
out = "POINT({})".format(self.mk_wkt_point(geom))
return "ST_SetSRID('{}'::geometry, 4326)".format(out)
+
def mk_wkt_point(self, point):
""" Parse a point description.
The point may either consist of 'x y' cooordinates or a number
assert pt is not None, "Scenario error: Point '{}' not found in grid".format(geom)
return "{} {}".format(*pt)
+
def mk_wkt_points(self, geom):
""" Parse a list of points.
The list must be a comma-separated list of points. Points
"""
return ','.join([self.mk_wkt_point(x) for x in geom.split(',')])
- def get_scene_geometry(self, default_scene, name):
- """ Load the geometry from a scene.
- """
- geoms = []
- for obj in name.split('+'):
- oname = obj.strip()
- if oname.startswith(':'):
- assert default_scene is not None, "Scenario error: You need to set a scene"
- defscene = self.load_scene(default_scene)
- wkt = defscene[oname[1:]]
- else:
- scene, obj = oname.split(':', 2)
- scene_geoms = self.load_scene(scene)
- wkt = scene_geoms[obj]
-
- geoms.append("'{}'::geometry".format(wkt))
-
- if len(geoms) == 1:
- return geoms[0]
-
- return 'ST_LineMerge(ST_Collect(ARRAY[{}]))'.format(','.join(geoms))
-
- def load_scene(self, name):
- """ Load a scene from a file.
- """
- if name in self.scene_cache:
- return self.scene_cache[name]
-
- scene = {}
- with open(Path(self.scene_path) / "{}.wkt".format(name), 'r') as fd:
- for line in fd:
- if line.strip():
- obj, wkt = line.split('|', 2)
- scene[obj.strip()] = wkt.strip()
- self.scene_cache[name] = scene
- return scene
-
- def set_grid(self, lines, grid_step):
+ def set_grid(self, lines, grid_step, origin=(0.0, 0.0)):
""" Replace the grid with one from the given lines.
"""
self.grid = {}
- y = 0
+ y = origin[1]
for line in lines:
- x = 0
+ x = origin[0]
for pt_id in line:
if pt_id.isdigit():
self.grid[int(pt_id)] = (x, y)
x += grid_step
y += grid_step
+
def grid_node(self, nodeid):
""" Get the coordinates for the given grid node.
"""
self._add_hstore('address', 'country', value)
def _set_key_geometry(self, value):
- self.geometry = self.context.osm.parse_geometry(value, self.context.scene)
+ self.geometry = self.context.osm.parse_geometry(value)
assert self.geometry is not None, "Bad geometry: {}".format(value)
def _add_hstore(self, column, key, value):
check_database_integrity(context)
+ # Remove the output of the input, when all was right. Otherwise it will be
+ # output when there are errors that had nothing to do with the import
+ # itself.
+ context.log_capture.buffer.clear()
+
@when("updating places")
def update_place_table(context):
""" Update the place table with the given data. Also runs all triggers
context.nominatim.reindex_placex(context.db)
check_database_integrity(context)
+ # Remove the output of the input, when all was right. Otherwise it will be
+ # output when there are errors that had nothing to do with the import
+ # itself.
+ context.log_capture.buffer.clear()
+
+
@when("updating postcodes")
def update_postcodes(context):
""" Rerun the calculation of postcodes.
context.nominatim.reindex_placex(context.db)
+ # Remove the output of the input, when all was right. Otherwise it will be
+ # output when there are errors that had nothing to do with the import
+ # itself.
+ context.log_capture.buffer.clear()
+
################################ THEN ##################################
@then("(?P<table>placex|place) contains(?P<exact> exactly)?")
from nominatim.tools.exec_utils import run_osm2pgsql
+from geometry_alias import ALIASES
+
def get_osm2pgsql_options(nominatim_env, fname, append):
return dict(import_file=fname,
osm2pgsql=str(nominatim_env.build_dir / 'osm2pgsql' / 'osm2pgsql'),
return fd.name
-@given(u'the scene (?P<scene>.+)')
-def set_default_scene(context, scene):
- context.scene = scene
-
-@given(u'the ([0-9.]+ )?grid')
-def define_node_grid(context, grid_step):
+@given(u'the ([0-9.]+ )?grid(?: with origin (?P<origin>.*))?')
+def define_node_grid(context, grid_step, origin):
"""
Define a grid of node positions.
Use a table to define the grid. The nodes must be integer ids. Optionally
else:
grid_step = 0.00001
+ if origin:
+ if ',' in origin:
+ # TODO coordinate
+ coords = origin.split(',')
+ if len(coords) != 2:
+ raise RuntimeError('Grid origin expects orgin with x,y coordinates.')
+ origin = (float(coords[0]), float(coords[1]))
+ elif origin in ALIASES:
+ origin = ALIASES[origin]
+ else:
+ raise RuntimeError('Grid origin must be either coordinate or alias.')
+ else:
+ origin = (0.0, 0.0)
+
context.osm.set_grid([context.table.headings] + [list(h) for h in context.table],
- grid_step)
+ grid_step, origin)
@when(u'loading osm data')
ST_SetSRID('{geomtxt}'::geometry, 4326))""".format(**self.db_row))
return cur.fetchone()[0]
- x, y = expected.split(' ')
+ if ' ' in expected:
+ x, y = expected.split(' ')
+ else:
+ x, y = self.context.osm.grid_node(int(expected))
+
return Almost(float(x)) == self.db_row['cx'] and Almost(float(y)) == self.db_row['cy']
def _has_geometry(self, expected):
- geom = self.context.osm.parse_geometry(expected, self.context.scene)
+ geom = self.context.osm.parse_geometry(expected)
with self.context.db.cursor() as cur:
cur.execute("""SELECT ST_Equals(ST_SnapToGrid({}, 0.00001, 0.00001),
ST_SnapToGrid(ST_SetSRID('{}'::geometry, 4326), 0.00001, 0.00001))""".format(
+++ /dev/null
-CXXFLAGS += -O3
-#CXXFLAGS += -g
-CXXFLAGS += -std=c++11 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-CXXFLAGS += -I../../../../libosmium/include
-
-OS:=$(shell uname -s)
-ifeq ($(OS),Darwin)
-CXXFLAGS += -stdlib=libc++
-LDFLAGS += -stdlib=libc++
-endif
-
-CXXFLAGS_WARNINGS := -Wall -Wextra -pedantic -Wredundant-decls -Wdisabled-optimization -Wctor-dtor-privacy -Wnon-virtual-dtor -Woverloaded-virtual -Wsign-promo -Wold-style-cast
-
-LIB_EXPAT := -lexpat
-LIB_PBF := -pthread -lz -lprotobuf-lite -losmpbf
-LIB_GZIP := -lz
-LIB_BZIP2 := -lbz2
-
-LIB_IO := $(LIB_EXPAT) $(LIB_PBF) $(LIB_GZIP) $(LIB_BZIP2)
-
-all:
-
-osm2wkt: osm2wkt.cc
- $(CXX) $(CXXFLAGS) $(CXXFLAGS_WARNINGS) -o $@ $< $(LDFLAGS) $(LIB_IO)
-
-scenarios: osm2wkt
- ./make_scenes.sh
+++ /dev/null
-#!/bin/bash -e
-#
-# Regenerates wkts for scenarios.
-#
-
-datadir="$( cd "$( dirname "$0" )" && cd ../data && pwd )"
-
-if [ ! -d "$datadir" ]; then
- echo "Cannot find data dir.";
- exit -1;
-fi
-
-echo "Using datadir $datadir"
-cd $datadir
-
-# remove old wkts
-rm -f $datadir/*.wkt
-
-# create wkts from SQL scripts
-for fl in *.sql; do
- echo "Processing $fl.."
- cat $fl | psql -d nominatim -t -o ${fl/.sql/.wkt}
-done
-
-# create wkts from .osm files
-for fl in *.osm; do
- echo "Processing $fl.."
- ../bin/osm2wkt $fl
-done
+++ /dev/null
-
-// The code in this file is released into the Public Domain.
-
-#include <iostream>
-#include <fstream>
-#include <string>
-#include <unordered_map>
-
-#include <osmium/area/assembler.hpp>
-#include <osmium/area/multipolygon_manager.hpp>
-
-#include <osmium/geom/wkt.hpp>
-#include <osmium/handler.hpp>
-#include <osmium/handler/node_locations_for_ways.hpp>
-#include <osmium/io/any_input.hpp>
-#include <osmium/visitor.hpp>
-#include <osmium/object_pointer_collection.hpp>
-#include <osmium/index/map/sparse_mem_array.hpp>
-#include <osmium/osm/object_comparisons.hpp>
-
-typedef osmium::index::map::SparseMemArray<osmium::unsigned_object_id_type, osmium::Location> index_type;
-
-typedef osmium::handler::NodeLocationsForWays<index_type, index_type> location_handler_type;
-
-struct AbsoluteIdHandler : public osmium::handler::Handler {
-
- enum { BASE = 100000000 };
-
- void node(osmium::Node& o) {
- if (o.id() < 0)
- o.set_id(BASE-o.id());
- }
-
- void way(osmium::Way& o) {
- if (o.id() < 0)
- o.set_id(BASE-o.id());
-
- for (osmium::NodeRef &n: o.nodes())
- if (n.ref() < 0)
- n.set_ref(BASE-n.ref());
- }
-
- void relation(osmium::Relation& o) {
- if (o.id() < 0)
- o.set_id(BASE-o.id());
-
- for (auto &m : o.members())
- if (m.ref() < 0)
- m.set_ref(BASE-m.ref());
- }
-};
-
-
-class ExportToWKTHandler : public osmium::handler::Handler {
-
- osmium::geom::WKTFactory<> m_factory;
- std::unordered_map<std::string, std::ofstream> m_files;
-
-public:
-
- void node(const osmium::Node& node) {
- print_geometry(node.tags(), m_factory.create_point(node));
- }
-
- void way(const osmium::Way& way) {
- if (!way.nodes().empty()
- && (!way.is_closed() || !way.tags().get_value_by_key("area")))
- print_geometry(way.tags(), m_factory.create_linestring(way));
- }
-
- void area(const osmium::Area& area) {
- if (!area.from_way() || area.tags().get_value_by_key("area"))
- print_geometry(area.tags(), m_factory.create_multipolygon(area));
- }
-
- void close() {
- for (auto& fd : m_files)
- fd.second.close();
- }
-
-private:
- void print_geometry(const osmium::TagList& tags, const std::string& wkt) {
- const char* scenario = tags.get_value_by_key("test:section");
- const char* id = tags.get_value_by_key("test:id");
- if (scenario && id) {
- auto& fd = m_files[std::string(scenario)];
- if (!fd.is_open())
- fd.open(std::string(scenario) + ".wkt");
- fd << id << " | " << wkt << "\n";
- }
- }
-
-}; // class ExportToWKTHandler
-
-int main(int argc, char* argv[]) {
- if (argc != 2) {
- std::cerr << "Usage: " << argv[0] << " OSMFILE\n";
- exit(1);
- }
-
- osmium::io::File input_file{argv[1]};
-
- // need to sort the data first and make ids absolute
- std::cerr << "Read file...\n";
- osmium::io::Reader reader{input_file};
- std::vector<osmium::memory::Buffer> changes;
- osmium::ObjectPointerCollection objects;
- AbsoluteIdHandler abshandler;
- while (osmium::memory::Buffer buffer = reader.read()) {
- osmium::apply(buffer, abshandler, objects);
- changes.push_back(std::move(buffer));
- }
- reader.close();
-
- std::cerr << "Sort file...\n";
- objects.sort(osmium::object_order_type_id_version());
-
- osmium::area::Assembler::config_type assembler_config;
- osmium::area::MultipolygonManager<osmium::area::Assembler> mp_manager{assembler_config};
-
- std::cerr << "Pass 1...\n";
- index_type index_pos;
- index_type index_neg;
- location_handler_type location_handler(index_pos, index_neg);
- ExportToWKTHandler export_handler;
- osmium::apply(objects.begin(), objects.end(), location_handler,
- export_handler, mp_manager);
- mp_manager.prepare_for_lookup();
- std::cerr << "Pass 1 done\n";
-
-
- std::cerr << "Pass 2...\n";
- osmium::apply(objects.cbegin(), objects.cend(), mp_manager.handler([&export_handler](osmium::memory::Buffer&& buffer) {
- osmium::apply(buffer, export_handler);
- }));
-
- export_handler.close();
- std::cerr << "Pass 2 done\n";
-}
-
-
+++ /dev/null
-c1:N | POINT(73.8419358 60.0763887)
-c1:E | POINT(73.8393798 60.0488584)
-c0 | POINT(73.8679209 60.0588527)
-c2:N | POINT(73.896249 60.0631047)
-c2:S | POINT(73.8932671 60.0434346)
-c2:E | POINT(73.9162704 60.0471569)
-c1:W | POINT(73.8990179 60.055876)
-c2:W | POINT(73.8568453 60.0597032)
-w2N | LINESTRING(73.8836825 60.0612977,73.8880489 60.0598094,73.8953972 60.0601283,73.9033844 60.058959)
-w1W:2W | LINESTRING(73.8523722 60.0497092,73.85791 60.0520485,73.8617439 60.0573645,73.8706896 60.0554508)
-building:w2N | LINESTRING(73.8963618 60.0604955,73.8961463 60.0602249,73.8967091 60.0601132,73.8969246 60.0603838,73.8963618 60.0604955)
-b0 | MULTIPOLYGON(((73.8012539 60.0573645,73.8225532 60.0371591,73.8493903 60.035457,73.8843212 60.0356698,73.9049815 60.0358825,73.9192521 60.0356698,73.9260679 60.0514105,73.9216633 60.0591056,73.9141402 60.0722448,73.8804873 60.070332,73.8719676 60.0917916,73.8255351 60.0875433,73.8084956 60.0758576,73.8012539 60.0573645)))
-b1:N | MULTIPOLYGON(((73.8012539 60.0573645,73.8447045 60.0611915,73.8692843 60.0674706,73.8804873 60.070332,73.8719676 60.0917916,73.8255351 60.0875433,73.8084956 60.0758576,73.8012539 60.0573645)))
-b2:S | MULTIPOLYGON(((73.8694117 60.0507725,73.8843212 60.0356698,73.9049815 60.0358825,73.9075368 60.0523758,73.8830432 60.0517295,73.8694117 60.0507725)))
-b1:W | MULTIPOLYGON(((73.8012539 60.0573645,73.8225532 60.0371591,73.8493903 60.035457,73.8843212 60.0356698,73.8694117 60.0507725,73.8447045 60.0611915,73.8012539 60.0573645)))
-b1:E | MULTIPOLYGON(((73.8447045 60.0611915,73.8694117 60.0507725,73.8843212 60.0356698,73.9049815 60.0358825,73.9192521 60.0356698,73.9260679 60.0514105,73.9216633 60.0591056,73.9141402 60.0722448,73.8804873 60.070332,73.8692843 60.0674706,73.8447045 60.0611915)))
-b2:E | MULTIPOLYGON(((73.9049815 60.0358825,73.9192521 60.0356698,73.9260679 60.0514105,73.9216633 60.0591056,73.9075368 60.0523758,73.9049815 60.0358825)))
-b2:N | MULTIPOLYGON(((73.8692843 60.0674706,73.8830432 60.0517295,73.9075368 60.0523758,73.9216633 60.0591056,73.9141402 60.0722448,73.8804873 60.070332,73.8692843 60.0674706)))
-b2:W | MULTIPOLYGON(((73.8447045 60.0611915,73.8694117 60.0507725,73.8830432 60.0517295,73.8692843 60.0674706,73.8447045 60.0611915)))
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>
-<osm version='0.6' upload='false' generator='JOSM'>
- <node id='-30473' action='modify' lat='60.07585759191' lon='73.80849562007' />
- <node id='-30475' action='modify' lat='60.05736451143' lon='73.80125385169' />
- <node id='-30477' action='modify' lat='60.0371590755' lon='73.82255317047' />
- <node id='-30479' action='modify' lat='60.03545700058' lon='73.84939031213' />
- <node id='-30481' action='modify' lat='60.03566976474' lon='73.88432119493' />
- <node id='-30483' action='modify' lat='60.03566976474' lon='73.91925207773' />
- <node id='-30485' action='modify' lat='60.05141051018' lon='73.92606785974' />
- <node id='-30487' action='modify' lat='60.07224481634' lon='73.91414024122' />
- <node id='-30489' action='modify' lat='60.07033201023' lon='73.88048731755' />
- <node id='-30491' action='modify' lat='60.09179158393' lon='73.87196759004' />
- <node id='-30493' action='modify' lat='60.08754327238' lon='73.8255350751' />
- <node id='-30495' action='modify' lat='60.06119151655' lon='73.844704462' />
- <node id='-30497' action='modify' lat='60.05077251777' lon='73.86941167178' />
- <node id='-30499' action='modify' lat='60.05172950176' lon='73.8830432358' />
- <node id='-30501' action='modify' lat='60.06747055357' lon='73.86928433032' />
- <node id='-30503' action='modify' lat='60.05910557298' lon='73.92166332136' />
- <node id='-30505' action='modify' lat='60.05237575233' lon='73.90753676249' />
- <node id='-30507' action='modify' lat='60.03588252753' lon='73.90498153415' />
- <node id='-30509' action='modify' lat='60.07638874281' lon='73.84193576355'>
- <tag k='test:id' v='c1:N' />
- <tag k='test:section' v='admin-areas' />
- </node>
- <node id='-30511' action='modify' lat='60.04885836023' lon='73.8393798453'>
- <tag k='test:id' v='c1:E' />
- <tag k='test:section' v='admin-areas' />
- </node>
- <node id='-30513' action='modify' lat='60.05885273763' lon='73.86792093246'>
- <tag k='test:id' v='c0' />
- <tag k='test:section' v='admin-areas' />
- </node>
- <node id='-30515' action='modify' lat='60.06310474639' lon='73.89624902644'>
- <tag k='test:id' v='c2:N' />
- <tag k='test:section' v='admin-areas' />
- </node>
- <node id='-30517' action='modify' lat='60.04343461246' lon='73.89326712181'>
- <tag k='test:id' v='c2:S' />
- <tag k='test:section' v='admin-areas' />
- </node>
- <node id='-30519' action='modify' lat='60.04715688821' lon='73.91627038609'>
- <tag k='test:id' v='c2:E' />
- <tag k='test:section' v='admin-areas' />
- </node>
- <node id='-30521' action='modify' lat='60.05587600549' lon='73.89901793788'>
- <tag k='test:id' v='c1:W' />
- <tag k='test:section' v='admin-areas' />
- </node>
- <node id='-30523' action='modify' lat='60.05970318321' lon='73.8568452867'>
- <tag k='test:id' v='c2:W' />
- <tag k='test:section' v='admin-areas' />
- </node>
- <node id='-30525' action='modify' lat='60.06129765646' lon='73.88368253486' />
- <node id='-30527' action='modify' lat='60.05980943422' lon='73.88804889521' />
- <node id='-30529' action='modify' lat='60.06012834464' lon='73.89539716019' />
- <node id='-30531' action='modify' lat='60.05895899137' lon='73.90338440473' />
- <node id='-30533' action='modify' lat='60.04970916969' lon='73.85237221676' />
- <node id='-30535' action='modify' lat='60.05204849025' lon='73.85791003964' />
- <node id='-30537' action='modify' lat='60.05736451143' lon='73.86174391702' />
- <node id='-30539' action='modify' lat='60.05545084244' lon='73.87068963091' />
- <node id='-30541' action='modify' lat='60.06049547301' lon='73.89636177639' />
- <node id='-30543' action='modify' lat='60.06022493568' lon='73.89614625694' />
- <node id='-30545' action='modify' lat='60.06011324975' lon='73.89670909505' />
- <node id='-30547' action='modify' lat='60.060383788' lon='73.89692461449' />
- <node id='100000' action='delete' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' version='1' changeset='1' lat='3.0' lon='2.0' />
- <node id='100001' action='delete' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' version='1' changeset='1' lat='3.5' lon='2.0' />
- <node id='100002' action='delete' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' version='1' changeset='1' lat='3.5' lon='2.5' />
- <node id='100003' action='delete' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' version='1' changeset='1' lat='3.0' lon='2.5' />
- <way id='-30553' action='modify'>
- <nd ref='-30489' />
- <nd ref='-30491' />
- <nd ref='-30493' />
- <nd ref='-30473' />
- <nd ref='-30475' />
- </way>
- <way id='-30555' action='modify'>
- <nd ref='-30495' />
- <nd ref='-30501' />
- </way>
- <way id='-30557' action='modify'>
- <nd ref='-30495' />
- <nd ref='-30497' />
- </way>
- <way id='-30559' action='modify'>
- <nd ref='-30497' />
- <nd ref='-30499' />
- </way>
- <way id='-30561' action='modify'>
- <nd ref='-30499' />
- <nd ref='-30505' />
- </way>
- <way id='-30563' action='modify'>
- <nd ref='-30505' />
- <nd ref='-30507' />
- </way>
- <way id='-30565' action='modify'>
- <nd ref='-30503' />
- <nd ref='-30487' />
- <nd ref='-30489' />
- </way>
- <way id='-30567' action='modify'>
- <nd ref='-30507' />
- <nd ref='-30483' />
- <nd ref='-30485' />
- <nd ref='-30503' />
- </way>
- <way id='-30569' action='modify'>
- <nd ref='-30481' />
- <nd ref='-30507' />
- </way>
- <way id='-30571' action='modify'>
- <nd ref='-30475' />
- <nd ref='-30477' />
- <nd ref='-30479' />
- <nd ref='-30481' />
- </way>
- <way id='-30573' action='modify'>
- <nd ref='-30475' />
- <nd ref='-30495' />
- </way>
- <way id='-30575' action='modify'>
- <nd ref='-30501' />
- <nd ref='-30489' />
- </way>
- <way id='-30577' action='modify'>
- <nd ref='-30497' />
- <nd ref='-30481' />
- </way>
- <way id='-30579' action='modify'>
- <nd ref='-30505' />
- <nd ref='-30503' />
- </way>
- <way id='-30581' action='modify'>
- <nd ref='-30499' />
- <nd ref='-30501' />
- </way>
- <way id='-30583' action='modify'>
- <nd ref='-30525' />
- <nd ref='-30527' />
- <nd ref='-30529' />
- <nd ref='-30531' />
- <tag k='test:id' v='w2N' />
- <tag k='test:section' v='admin-areas' />
- </way>
- <way id='-30585' action='modify'>
- <nd ref='-30533' />
- <nd ref='-30535' />
- <nd ref='-30537' />
- <nd ref='-30539' />
- <tag k='test:id' v='w1W:2W' />
- <tag k='test:section' v='admin-areas' />
- </way>
- <way id='-30587' action='modify'>
- <nd ref='-30541' />
- <nd ref='-30543' />
- <nd ref='-30545' />
- <nd ref='-30547' />
- <nd ref='-30541' />
- <tag k='test:id' v='building:w2N' />
- <tag k='test:section' v='admin-areas' />
- </way>
- <way id='100000' action='delete' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' version='1' changeset='1'>
- <tag k='note' v='test area, do not leave' />
- </way>
- <relation id='-30590' action='modify'>
- <member type='way' ref='-30553' role='' />
- <member type='way' ref='-30571' role='' />
- <member type='way' ref='-30569' role='' />
- <member type='way' ref='-30567' role='' />
- <member type='way' ref='-30565' role='' />
- <tag k='boundary' v='administrative' />
- <tag k='test:id' v='b0' />
- <tag k='test:section' v='admin-areas' />
- <tag k='type' v='multipolygon' />
- </relation>
- <relation id='-30592' action='modify'>
- <member type='way' ref='-30553' role='' />
- <member type='way' ref='-30573' role='' />
- <member type='way' ref='-30555' role='' />
- <member type='way' ref='-30575' role='' />
- <tag k='boundary' v='administrative' />
- <tag k='test:id' v='b1:N' />
- <tag k='test:section' v='admin-areas' />
- <tag k='type' v='multipolygon' />
- </relation>
- <relation id='-30594' action='modify'>
- <member type='way' ref='-30571' role='' />
- <member type='way' ref='-30573' role='' />
- <member type='way' ref='-30557' role='' />
- <member type='way' ref='-30577' role='' />
- <tag k='boundary' v='administrative' />
- <tag k='test:id' v='b1:W' />
- <tag k='test:section' v='admin-areas' />
- <tag k='type' v='multipolygon' />
- </relation>
- <relation id='-30596' action='modify'>
- <member type='way' ref='-30565' role='' />
- <member type='way' ref='-30567' role='' />
- <member type='way' ref='-30569' role='' />
- <member type='way' ref='-30577' role='' />
- <member type='way' ref='-30557' role='' />
- <member type='way' ref='-30555' role='' />
- <member type='way' ref='-30575' role='' />
- <tag k='boundary' v='administrative' />
- <tag k='test:id' v='b1:E' />
- <tag k='test:section' v='admin-areas' />
- <tag k='type' v='multipolygon' />
- </relation>
- <relation id='-30598' action='modify'>
- <member type='way' ref='-30565' role='' />
- <member type='way' ref='-30579' role='' />
- <member type='way' ref='-30561' role='' />
- <member type='way' ref='-30581' role='' />
- <member type='way' ref='-30575' role='' />
- <tag k='boundary' v='administrative' />
- <tag k='test:id' v='b2:N' />
- <tag k='test:section' v='admin-areas' />
- <tag k='type' v='multipolygon' />
- </relation>
- <relation id='-30600' action='modify'>
- <member type='way' ref='-30555' role='' />
- <member type='way' ref='-30557' role='' />
- <member type='way' ref='-30559' role='' />
- <member type='way' ref='-30581' role='' />
- <tag k='boundary' v='administrative' />
- <tag k='test:id' v='b2:W' />
- <tag k='test:section' v='admin-areas' />
- <tag k='type' v='multipolygon' />
- </relation>
- <relation id='-30602' action='modify'>
- <member type='way' ref='-30577' role='' />
- <member type='way' ref='-30559' role='' />
- <member type='way' ref='-30561' role='' />
- <member type='way' ref='-30563' role='' />
- <member type='way' ref='-30569' role='' />
- <tag k='boundary' v='administrative' />
- <tag k='test:id' v='b2:S' />
- <tag k='test:section' v='admin-areas' />
- <tag k='type' v='multipolygon' />
- </relation>
- <relation id='-30604' action='modify'>
- <member type='way' ref='-30579' role='' />
- <member type='way' ref='-30567' role='' />
- <member type='way' ref='-30563' role='' />
- <tag k='boundary' v='administrative' />
- <tag k='test:id' v='b2:E' />
- <tag k='test:section' v='admin-areas' />
- <tag k='type' v='multipolygon' />
- </relation>
-</osm>
+++ /dev/null
-n-edge-NS | POINT(1.0040019 2.000324)
-n-inner | POINT(1.0039385 2.0003548)
-n-outer | POINT(1.0039478 2.0004676)
-n-edge-WE | POINT(1.0039599 2.0002345)
-w-WE | LINESTRING(1.0031759 2.0002316,1.0040361 2.0002211,1.0042735 2.0002264)
-w-NS | LINESTRING(1.0040414 2.0001051,1.0040361 2.0002211,1.0040364 2.0006377)
-w-building | MULTIPOLYGON(((1.0039037 2.0002347,1.0039599 2.0002345,1.0040016 2.0002344,1.0040019 2.000324,1.0040023 2.0004386,1.0039043 2.0004389,1.0039037 2.0002347)))
+++ /dev/null
-n-south-w | POINT(1.0031633 2.001023)
-n-south-e | POINT(1.0043359 2.0010068)
-n-north-w | POINT(1.0031511 2.0012655)
-n-north-e | POINT(1.0043238 2.0012493)
-w-south | LINESTRING(1.0031633 2.001023,1.0036943 2.0010149,1.0040717 2.0010203,1.0043359 2.0010068)
-w-north | LINESTRING(1.0031511 2.0012655,1.0036822 2.0012574,1.0040596 2.0012628,1.0043238 2.0012493)
-w-building | LINESTRING(1.0036157 2.0011891,1.0036166 2.0010787,1.0038457 2.0010805,1.0038448 2.001191,1.0036157 2.0011891)
+++ /dev/null
-select country_code, st_astext(st_pointonsurface(st_collect(geometry))) from country_osm_grid group by country_code order by country_code
+++ /dev/null
- ad | POINT(1.58972361752509 42.54241545)
- ae | POINT(54.6158905029297 24.8243131637573)
- af | POINT(65.9026412963867 34.8470859527588)
- ag | POINT(-61.7243069800293 17.069)
- ai | POINT(-63.1057155298182 18.2546197)
- al | POINT(19.8494176864624 40.2123275624912)
- am | POINT(44.6422958374023 40.3782157897949)
- ao | POINT(16.2192406654358 -12.7701482772827)
- aq | POINT(44.999999975 -75.6569557189941)
- ar | POINT(-61.1075973510742 -34.3761558532715)
- as | POINT(-170.684700024275 -14.2930755)
- at | POINT(14.2574706077576 47.3654232025146)
- au | POINT(138.231559753418 -23.7206888198853)
- aw | POINT(-69.98255055 12.555)
- ax | POINT(19.9183956313477 59.81682435)
- az | POINT(48.385555267334 40.6163997650146)
- ba | POINT(17.1851491928101 44.2558269500732)
- bb | POINT(-59.53342165 13.19)
- bd | POINT(89.759895324707 24.3420524597168)
- be | POINT(4.90078139305115 50.3468225048828)
- bf | POINT(-0.567435041069984 11.9047117233276)
- bg | POINT(24.8061628341675 43.0985908508301)
- bh | POINT(50.5203291219829 25.94685735)
- bi | POINT(29.5456137866089 -2.99057915)
- bj | POINT(2.70062518119812 10.0279288291931)
- bl | POINT(-62.7934947763772 17.907)
- bm | POINT(-64.7740692745195 32.30199165)
- bn | POINT(114.521968608887 4.2863885)
- bo | POINT(-62.0247344970703 -17.7772369384766)
- bq | POINT(-63.1432235610045 17.566)
- br | POINT(-45.7706508636475 -9.5868501663208)
- bs | POINT(-77.6091675884277 23.8745)
- bt | POINT(90.0135078430176 27.281379699707)
- bv | POINT(3.35744155625 -54.4215)
- bw | POINT(23.5150556564331 -23.4839134216309)
- by | POINT(26.7725925445557 53.1588516235352)
- bz | POINT(-88.6348991394043 16.3395160487277)
- ca | POINT(-107.74817276001 67.1261215209961)
- cc | POINT(96.8442066294247 -12.0173443)
- cd | POINT(24.0954418182373 -1.67713665962219)
- cf | POINT(22.5870132446289 5.98438787460327)
- cg | POINT(15.7887516021729 0.403886616230011)
- ch | POINT(7.65705513954163 46.5744686126709)
- ci | POINT(-6.31190967559814 6.6278383731842)
- ck | POINT(-159.778351359569 -21.23349585)
- cl | POINT(-70.4179039001465 -53.7718944549561)
- cm | POINT(13.260226726532 5.94519567489624)
- cn | POINT(96.4428558349609 38.0426063537598)
- co | POINT(-72.5295104980469 2.45174860954285)
- cr | POINT(-83.8331413269043 9.935142993927)
- cu | POINT(-80.8167381286621 21.8885278701782)
- cv | POINT(-24.508106575 14.929)
- cw | POINT(-68.9640918594077 12.1845)
- cx | POINT(105.624119513558 -10.48417)
- cy | POINT(32.959223486499 35.37010195)
- cz | POINT(16.3209805488586 49.5069274902344)
- de | POINT(9.30716800689697 50.2128944396973)
- dj | POINT(42.969040422876 11.41542855)
- dk | POINT(9.18490123748779 55.9891662597656)
- dm | POINT(-61.0035801928854 15.6547055)
- do | POINT(-69.6285591125488 18.5884169089722)
- dz | POINT(4.24749487638474 25.797215461731)
- ec | POINT(-77.4583168029785 -0.982844322919846)
- ee | POINT(23.9428863525391 58.439525604248)
- eg | POINT(28.952935218811 28.1771860122681)
- eh | POINT(-13.6903142929077 25.0124177932739)
- er | POINT(39.0122375488281 14.960337638855)
- es | POINT(-2.59110307693481 38.7935485839844)
- et | POINT(38.6169757843018 7.71399855613708)
- fi | POINT(26.8979873657227 63.5619449615479)
- fj | POINT(177.918533325195 -17.7423753738403)
- fk | POINT(-58.9904479980469 -51.3450936007813)
- fm | POINT(151.9535889125 8.5045)
- fo | POINT(-6.60483694084778 62.10000995)
- fr | POINT(0.284105718135834 47.5104522705078)
- ga | POINT(10.8107047080994 -0.0742915570735931)
- gb | POINT(-0.928231082856655 52.0161876678467)
- gd | POINT(-61.6452430375 12.191)
- ge | POINT(44.1666488647461 42.0038585662842)
- gf | POINT(-53.4652481079102 3.56188893318176)
- gg | POINT(-2.50580395030125 49.5854381)
- gh | POINT(-0.463488027453423 7.16051578521729)
- gi | POINT(-5.32053155848457 36.1106663)
- gl | POINT(-33.8551120758057 74.6635551452637)
- gm | POINT(-16.4096023535368 13.25)
- gn | POINT(-13.839409828186 10.9629158973694)
- gp | POINT(-61.6871265247053 16.23049055)
- gq | POINT(10.2397356033325 1.43119311332703)
- gr | POINT(23.1785039901733 39.0620670318604)
- gs | POINT(-36.4943086948773 -54.4306784)
- gt | POINT(-90.7436828613281 15.2042865753174)
- gu | POINT(144.733626445767 13.444138)
- gw | POINT(-14.8352527618408 11.9248690605164)
- gy | POINT(-58.4516773223877 5.73698806762695)
- hk | POINT(114.18577775 22.3492361)
- hm | POINT(73.6823082266602 -53.22105985)
- hn | POINT(-86.9541435241699 15.2382001876831)
- hr | POINT(17.499662399292 45.5268955230713)
- ht | POINT(-73.5192565917969 18.3249206691162)
- hu | POINT(20.3536291122437 47.5172100067139)
- id | POINT(123.345050811768 -0.837919592857361)
- ie | POINT(-9.00520038604736 52.8772506713867)
- il | POINT(35.4631499949707 32.86165655)
- im | POINT(-4.86740773691101 54.023)
- in | POINT(88.6762087020508 27.86155515)
- io | POINT(71.4274391359073 -6.14349685)
- iq | POINT(42.5810985565186 34.2610359191895)
- ir | POINT(56.0935573577881 30.4675178527832)
- is | POINT(-17.5178508758545 64.7168769836426)
- it | POINT(10.4263944625854 44.8790493011475)
- je | POINT(-2.19261599848299 49.1245833)
- jm | POINT(-76.8402003547852 18.3935)
- jo | POINT(36.5555210113525 30.7574186325073)
- jp | POINT(138.725311279297 35.9209995269775)
- ke | POINT(36.9060287475586 1.08512867614627)
- kg | POINT(76.1557197570801 41.6649742126465)
- kh | POINT(104.319019317627 12.9555516242981)
- ki | POINT(173.633537933333 0.139)
- km | POINT(44.3147485207764 -12.241)
- kn | POINT(-62.6937987175 17.2555)
- kp | POINT(126.655757904053 39.6457576751709)
- kr | POINT(127.277404785156 36.4138870239258)
- kw | POINT(47.3068407840576 29.6918055)
- ky | POINT(-81.0745526670982 19.2994923579778)
- kz | POINT(72.008113861084 49.8885555267334)
- la | POINT(102.443916320801 19.8160953521729)
- lb | POINT(35.4846443715483 33.4176673878926)
- lc | POINT(-60.978944125 13.891)
- li | POINT(9.54693948514429 47.15934115)
- lk | POINT(80.3852043151855 8.41649961471558)
- lr | POINT(-11.169605255127 4.04122126102448)
- ls | POINT(28.6698419546997 -29.9453849)
- lt | POINT(24.5173501968384 55.4929389953613)
- lu | POINT(6.08649672997471 49.81533445)
- lv | POINT(23.5103368759155 56.6714401245117)
- ly | POINT(15.3684158325195 28.1217727661133)
- ma | POINT(-4.0306156873703 33.2169628143311)
- mc | POINT(7.47743150426578 43.62917385)
- md | POINT(29.6172503477783 46.6651745)
- me | POINT(19.7229134314941 43.02441345)
- mf | POINT(-63.0666651534257 18.0810209)
- mg | POINT(45.8637886047363 -20.5024528503418)
- mh | POINT(171.949820566667 5.983)
- mk | POINT(21.421085357666 41.0898007597656)
- ml | POINT(-1.93310506641865 16.4699301719666)
- mm | POINT(95.5462455749512 21.0962018966675)
- mn | POINT(99.8113822937012 48.1861572265625)
- mo | POINT(113.564416766761 22.16209625)
- mp | POINT(145.213452483189 14.1490205)
- mq | POINT(-60.8112834227783 14.43706925)
- mr | POINT(-9.42324566841125 22.5925149917603)
- ms | POINT(-62.1945521583333 16.745)
- mt | POINT(14.3836306158583 35.9446731)
- mu | POINT(57.551211475 -20.41)
- mv | POINT(73.3929214477539 4.19375014305115)
- mw | POINT(33.9572296142578 -12.2821822166443)
- mx | POINT(-105.892219543457 25.8682699203491)
- my | POINT(112.711540222168 2.10098683834076)
- mz | POINT(37.5868968963623 -13.7268223762512)
- na | POINT(16.6856970787048 -21.4657220840454)
- nc | POINT(164.953224182129 -20.3888988494873)
- ne | POINT(10.060417175293 19.0827360153198)
- nf | POINT(167.95718166875 -29.0645)
- ng | POINT(10.1778125762939 10.1780409812927)
- ni | POINT(-85.8797492980957 13.2171587944031)
- nl | POINT(-68.5706209441406 12.041)
- no | POINT(23.1155624389648 70.0993499755859)
- np | POINT(83.3625984191895 28.1310758590698)
- nr | POINT(166.934792270833 -0.5275)
- nu | POINT(-169.848737911905 -19.05305275)
- nz | POINT(167.972099304199 -45.1305675506592)
- om | POINT(56.8605518341064 20.4741315841675)
- pa | POINT(-79.4016036987305 8.80656003952026)
- pe | POINT(-78.6654052734375 -7.54711985588074)
- pf | POINT(-145.057191213086 -16.7086236)
- pg | POINT(146.646003723145 -7.37427568435669)
- ph | POINT(121.483592987061 15.0996527671814)
- pk | POINT(72.1134796142578 31.1462965011597)
- pl | POINT(17.8813629150391 52.771821975708)
- pm | POINT(-56.1951589074841 46.7832469)
- pn | POINT(-130.106425528029 -25.0695595)
- pr | POINT(-65.8875553967285 18.3716905)
- ps | POINT(35.3980153741943 32.24773475)
- pt | POINT(-8.45743942260742 40.1115436553955)
- pw | POINT(134.496454875 7.3245)
- py | POINT(-59.5178718566895 -22.4128150939941)
- qa | POINT(51.4990362304443 24.9981677)
- re | POINT(55.7734550547607 -21.3638828)
- ro | POINT(26.3763284683228 45.3612003326416)
- rs | POINT(20.4037199020386 44.5641384124756)
- ru | POINT(116.440608978271 59.0678024291992)
- rw | POINT(29.5788261333252 -1.6240443)
- sa | POINT(47.7316932678223 22.4379062652588)
- sb | POINT(164.638946533203 -10.2360653877258)
- sc | POINT(46.3656697 -9.454)
- sd | POINT(28.1472072601318 14.5642309188843)
- se | POINT(15.6866798400879 60.3556804656982)
- sg | POINT(103.84187219299 1.304)
- sh | POINT(-12.2815573611979 -37.11546755)
- si | POINT(14.0473856628607 46.390855)
- sj | POINT(15.2755260467529 79.2336540222168)
- sk | POINT(20.416033744812 48.869701385498)
- sl | POINT(-11.4777312278748 8.78156280517578)
- sm | POINT(12.4606268797657 43.9427969)
- sn | POINT(-15.3711128234863 14.9947791099548)
- so | POINT(46.9338359832764 9.34094429016113)
- sr | POINT(-55.4286479949951 4.5698549747467)
- ss | POINT(28.1357345581055 8.50933408737183)
- st | POINT(6.61025854583333 0.2215)
- sv | POINT(-89.3666543301004 13.4307287)
- sx | POINT(-63.1539330807882 17.9345)
- sy | POINT(38.1551322937012 35.3422107696533)
- sz | POINT(31.782634398523 -26.14244365)
- tc | POINT(-71.325541342334 21.35)
- td | POINT(17.4209251403809 13.4622311592102)
- tf | POINT(137.5 -67.5)
- tg | POINT(1.0698350071907 7.87677597999573)
- th | POINT(102.008777618408 16.4231028556824)
- tj | POINT(71.9134941101074 39.0152739312988)
- tk | POINT(-171.826039878679 -9.209903)
- tl | POINT(126.225208282471 -8.72636747360229)
- tm | POINT(57.7160358428955 39.9253444671631)
- tn | POINT(9.04958724975586 34.8419933319092)
- to | POINT(-176.993202209473 -23.1110429763794)
- tr | POINT(32.8200283050537 39.8635063171387)
- tt | POINT(-60.70793924375 11.1385)
- tv | POINT(178.774993896484 -9.41685771942139)
- tw | POINT(120.300746917725 23.1700229644775)
- tz | POINT(33.5389289855957 -5.01840615272522)
- ua | POINT(33.4433536529541 49.3061904907227)
- ug | POINT(32.9652328491211 2.08584922552109)
- um | POINT(-169.509930872296 16.74605815)
- us | POINT(-116.395355224609 40.7137908935547)
- uy | POINT(-56.4650554656982 -33.6265888214111)
- uz | POINT(61.3552989959717 42.9610729217529)
- va | POINT(12.3319785703086 42.0493197)
- vc | POINT(-61.0990541737305 13.316)
- ve | POINT(-64.8832321166992 7.69849991798401)
- vg | POINT(-64.6247911940199 18.419)
- vi | POINT(-64.8895090795187 18.3226325)
- vn | POINT(104.201791331787 10.27644235)
- vu | POINT(167.319198608398 -15.8868751525879)
- wf | POINT(-176.207816222208 -13.28535775)
- ws | POINT(-172.109667323427 -13.850938)
- ye | POINT(45.945629119873 16.1633830070496)
- yt | POINT(44.9377459760742 -12.6088246)
- za | POINT(23.1948881149292 -30.4327602386475)
- zm | POINT(26.3861808776855 -14.3996663093567)
- zw | POINT(30.1241998672485 -19.8690795898438)
-
+++ /dev/null
-n-middle-w | POINT(1.0065316 2.0003381)
-n-middle-e | POINT(1.007236 2.0003408)
-w-south | LINESTRING(1.0065324 2.0001892,1.006676 2.0002786,1.0068195 2.0002786,1.0069171 2.0002515,1.0070417 2.0001892,1.0072422 2.000173)
-w-middle | LINESTRING(1.0065316 2.0003381,1.006686 2.0004248,1.0069 2.0004167,1.007236 2.0003408)
-w-north | LINESTRING(1.0065397 2.000418,1.0066833 2.0005074,1.0068269 2.0005074,1.0069244 2.0004803,1.007049 2.000418,1.0072495 2.0004018)
+++ /dev/null
-n-N-unglued | POINT(1.004922 2.0005155)
-n-S-unglued | POINT(1.0046259 2.0002949)
-n-NE | POINT(1.0050661 2.0006118)
-n-SE | POINT(1.0051339 2.0003349)
-n-NW | POINT(1.0047583 2.0004087)
-n-SW | POINT(1.0047275 2.0003564)
-w-north | LINESTRING(1.0044996 2.0004302,1.0046259 2.0003841,1.0047583 2.0004087,1.004922 2.0005155,1.0050661 2.0006118,1.0053155 2.0006241)
-w-south | LINESTRING(1.0045243 2.0002241,1.0046259 2.0002949,1.0047275 2.0003564,1.004826 2.0002918,1.0049368 2.0002641,1.0051339 2.0003349,1.0053278 2.0003687)
+++ /dev/null
-0.0001 | MULTIPOLYGON(((0 0,0.001 0,0.001 0.1,0 0.1,0 0)))
-0.0005 | MULTIPOLYGON(((0 0,0.005 0,0.005 0.1,0 0.1,0 0)))
-0.001 | MULTIPOLYGON(((0 0,0.01 0,0.01 0.1,0 0.1,0 0)))
-0.005 | MULTIPOLYGON(((0 0,0.05 0,0.05 0.1,0 0.1,0 0)))
-0.01 | MULTIPOLYGON(((0 0,0.1 0,0.1 0.1,0 0.1,0 0)))
-0.05 | MULTIPOLYGON(((0 0,0.5 0,0.5 0.1,0 0.1,0 0)))
-0.1 | MULTIPOLYGON(((0 0,0.1 0,0.1 1,0 1,0 0)))
-0.5 | MULTIPOLYGON(((0 0,0.5 0,0.5 1,0 1,0 0)))
-1.0 | MULTIPOLYGON(((0 0,1 0,1 1,0 1,0 0)))
-2.0 | MULTIPOLYGON(((0 0,2 0,2 1,0 1,0 0)))
-5.0 | MULTIPOLYGON(((0 0,5 0,5 1,0 1,0 0)))
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>
-<osm version='0.6' upload='true' generator='JOSM'>
- <node id='-238' action='modify' visible='true' lat='-0.00661880152' lon='0.00356249245'>
- <tag k='test:id' v='inner-C' />
- <tag k='test:section' v='way-area-with-center' />
- </node>
- <node id='-231' action='modify' visible='true' lat='-0.00600066098' lon='0.0041244384'>
- <tag k='test:id' v='outer-C' />
- <tag k='test:section' v='way-area-with-center' />
- </node>
- <node id='-225' action='modify' visible='true' lat='-0.00236518426' lon='0.00188464186'>
- <tag k='test:id' v='inner-N' />
- <tag k='test:section' v='way-area-with-center' />
- </node>
- <node id='-166' action='modify' visible='true' lat='-0.00951758843' lon='0.00485156509'>
- <tag k='test:id' v='inner-S' />
- <tag k='test:section' v='way-area-with-center' />
- </node>
- <node id='-137' action='modify' visible='true' lat='-0.00215326117' lon='0.00501050741' />
- <node id='-135' action='modify' visible='true' lat='-0.00257710735' lon='0.00644098825' />
- <node id='-133' action='modify' visible='true' lat='-0.00400758819' lon='0.00750060369' />
- <node id='-131' action='modify' visible='true' lat='-0.00591489597' lon='0.00336810348' />
- <node id='-129' action='modify' visible='true' lat='-0.00766326144' lon='0.00516944972' />
- <node id='-127' action='modify' visible='true' lat='-0.00649768446' lon='0.00612310362' />
- <node id='-125' action='modify' visible='true' lat='-0.00496124208' lon='0.00686483443' />
- <node id='-123' action='modify' visible='true' lat='-0.00665662678' lon='0.00771252678' />
- <node id='-121' action='modify' visible='true' lat='-0.0099414346' lon='0.0065469498' />
- <node id='-119' action='modify' visible='true' lat='-0.01094806925' lon='0.0038979112' />
- <node id='-117' action='modify' visible='true' lat='-0.01057720386' lon='0.00267935344' />
- <node id='-115' action='modify' visible='true' lat='-0.00999441537' lon='0.00220252649' />
- <node id='-113' action='modify' visible='true' lat='-0.00919970381' lon='0.00262637267' />
- <node id='-111' action='modify' visible='true' lat='-0.00803412684' lon='0.00262637267' />
- <node id='-109' action='modify' visible='true' lat='-0.00655066523' lon='0.00193762263' />
- <node id='-107' action='modify' visible='true' lat='-0.00729239604' lon='0.00103694951' />
- <node id='-105' action='modify' visible='true' lat='-0.00607383829' lon='0.00050714179' />
- <node id='-103' action='modify' visible='true' lat='-0.00564999211' lon='0.00177868032' />
- <node id='-101' action='modify' visible='true' lat='-0.00421951128' lon='0.00050714179' />
- <node id='-99' action='modify' visible='true' lat='-0.00257710735' lon='0.00056012256' />
- <node id='-98' action='modify' visible='true' lat='-0.00151749191' lon='0.00130185337' />
- <node id='100' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='101' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.0' />
- <node id='102' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.001' />
- <node id='103' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.001' />
- <node id='200' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='201' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.0' />
- <node id='202' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.005' />
- <node id='203' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.005' />
- <node id='300' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='301' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.0' />
- <node id='302' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.01' />
- <node id='303' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.01' />
- <node id='400' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='401' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.0' />
- <node id='402' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.05' />
- <node id='403' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.05' />
- <node id='500' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='501' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.0' />
- <node id='502' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.1' />
- <node id='503' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.1' />
- <node id='600' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='601' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.0' />
- <node id='602' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.1' lon='0.5' />
- <node id='603' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.5' />
- <node id='700' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='701' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='0.0' />
- <node id='702' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='0.1' />
- <node id='703' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.1' />
- <node id='800' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='801' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='0.0' />
- <node id='802' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='0.5' />
- <node id='803' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.5' />
- <node id='900' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='901' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='0.0' />
- <node id='902' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='1.0' />
- <node id='903' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='1.0' />
- <node id='1000' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='1001' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='0.0' />
- <node id='1002' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='2.0' />
- <node id='1003' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='2.0' />
- <node id='1100' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='0.0' />
- <node id='1101' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='0.0' />
- <node id='1102' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='1.0' lon='5.0' />
- <node id='1103' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='0.0' lon='5.0' />
- <way id='-100' action='modify' visible='true'>
- <nd ref='-98' />
- <nd ref='-99' />
- <nd ref='-101' />
- <nd ref='-103' />
- <nd ref='-105' />
- <nd ref='-107' />
- <nd ref='-109' />
- <nd ref='-111' />
- <nd ref='-113' />
- <nd ref='-115' />
- <nd ref='-117' />
- <nd ref='-119' />
- <nd ref='-121' />
- <nd ref='-123' />
- <nd ref='-125' />
- <nd ref='-127' />
- <nd ref='-129' />
- <nd ref='-131' />
- <nd ref='-133' />
- <nd ref='-135' />
- <nd ref='-137' />
- <nd ref='-98' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='area' />
- <tag k='test:section' v='way-area-with-center' />
- </way>
- <way id='100' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='100' />
- <nd ref='101' />
- <nd ref='102' />
- <nd ref='103' />
- <nd ref='100' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='0.0001' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='200' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='200' />
- <nd ref='201' />
- <nd ref='202' />
- <nd ref='203' />
- <nd ref='200' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='0.0005' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='300' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='300' />
- <nd ref='301' />
- <nd ref='302' />
- <nd ref='303' />
- <nd ref='300' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='0.001' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='400' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='400' />
- <nd ref='401' />
- <nd ref='402' />
- <nd ref='403' />
- <nd ref='400' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='0.005' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='500' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='500' />
- <nd ref='501' />
- <nd ref='502' />
- <nd ref='503' />
- <nd ref='500' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='0.01' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='600' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='600' />
- <nd ref='601' />
- <nd ref='602' />
- <nd ref='603' />
- <nd ref='600' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='0.05' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='700' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='700' />
- <nd ref='701' />
- <nd ref='702' />
- <nd ref='703' />
- <nd ref='700' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='0.1' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='800' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='800' />
- <nd ref='801' />
- <nd ref='802' />
- <nd ref='803' />
- <nd ref='800' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='0.5' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='900' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='900' />
- <nd ref='901' />
- <nd ref='902' />
- <nd ref='903' />
- <nd ref='900' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='1.0' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='1000' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='1000' />
- <nd ref='1001' />
- <nd ref='1002' />
- <nd ref='1003' />
- <nd ref='1000' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='2.0' />
- <tag k='test:section' v='poly-area' />
- </way>
- <way id='1100' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='1100' />
- <nd ref='1101' />
- <nd ref='1102' />
- <nd ref='1103' />
- <nd ref='1100' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='5.0' />
- <tag k='test:section' v='poly-area' />
- </way>
-</osm>
+++ /dev/null
-n-main-east | POINT(1.0024481 2.0003542)
-n-main-west | POINT(1.001552 2.0002662)
-n-alley | POINT(1.0019235 2.0005463)
-n-corner | POINT(1.0019235 2.0003542)
-w-alley | LINESTRING(1.0019594 2.0003086,1.0019594 2.0005756)
-w-main | LINESTRING(1.0013435 2.0003118,1.0016759 2.0003053,1.0019594 2.0003086,1.0021255 2.0003151,1.0023699 2.0003118,1.0026078 2.0002988)
+++ /dev/null
-p-N2 | POINT(1.0003904 2.0003399)
-p-S1 | POINT(1.0008104 2.0002927)
-p-N1 | POINT(1.0005321 2.0005288)
-p-S2 | POINT(1.0006398 2.0001064)
-w-north | LINESTRING(1.0001174 2.0004055,1.0004298 2.0003976,1.0006608 2.0004579,1.0010624 2.0005419)
-w-south | LINESTRING(1.0001384 2.0001903,1.0007212 2.0001982,1.0010677 2.0002192)
+++ /dev/null
-<?xml version='1.0' encoding='UTF-8'?>
-<osm version='0.6' upload='false' generator='JOSM'>
- <node id='-11' action='modify' visible='true' lat='2.0006515863' lon='1.0057464449'>
- <tag k='name' v='split-road' />
- </node>
- <node id='-13' action='modify' visible='true' lat='2.00053508276' lon='1.00574909433' />
- <node id='-15' action='modify' visible='true' lat='2.00054302619' lon='1.00589746199' />
- <node id='-17' action='modify' visible='true' lat='2.00054302619' lon='1.0060511285' />
- <node id='-19' action='modify' visible='true' lat='2.00053243496' lon='1.00613061118' />
- <node id='-21' action='modify' visible='true' lat='2.00052449153' lon='1.00551064629' />
- <node id='-23' action='modify' visible='true' lat='2.00056685646' lon='1.00560867493' />
- <node id='-25' action='modify' visible='true' lat='2.00056156084' lon='1.00568550818' />
- <node id='-27' action='modify' visible='true' lat='2.00050066126' lon='1.00573584721' />
- <node id='-29' action='modify' visible='true' lat='2.00050595688' lon='1.0059107091' />
- <node id='-31' action='modify' visible='true' lat='2.00051125249' lon='1.00605377792' />
- <node id='-33' action='modify' visible='true' lat='2.00049536565' lon='1.00613591002' />
- <node id='-35' action='modify' visible='true' lat='2.0005139003' lon='1.00628427769' />
- <node id='-37' action='modify' visible='true' lat='2.00047153538' lon='1.00637170863' />
- <node id='-39' action='modify' visible='true' lat='2.00029678005' lon='1.00635846152' />
- <node id='-41' action='modify' visible='true' lat='2.00026235854' lon='1.00628162826' />
- <node id='-43' action='modify' visible='true' lat='2.00033914498' lon='1.00619949616' />
- <node id='-45' action='modify' visible='true' lat='2.00035767963' lon='1.00610411695' />
- <node id='-47' action='modify' visible='true' lat='2.00034973621' lon='1.00600343889' />
- <node id='-49' action='modify' visible='true' lat='2.00032590594' lon='1.0058868643' />
- <node id='-51' action='modify' visible='true' lat='2.0002808932' lon='1.00579413451' />
- <node id='-53' action='modify' visible='true' lat='2.00027824539' lon='1.00563516915' />
- <node id='-55' action='modify' visible='true' lat='2.00036032744' lon='1.00547090495' />
- <node id='-57' action='modify' visible='true' lat='2.00072654218' lon='1.00470543134'>
- <tag k='name' v='points-on-road' />
- </node>
- <node id='-59' action='modify' visible='true' lat='2.00051552538' lon='1.00492201384' />
- <node id='-61' action='modify' visible='true' lat='2.00051552538' lon='1.00492201384'>
- <tag k='test:id' v='n-N-unglued' />
- <tag k='test:section' v='points-on-roads' />
- </node>
- <node id='-63' action='modify' visible='true' lat='2.00029485534' lon='1.00462587591'>
- <tag k='test:id' v='n-S-unglued' />
- <tag k='test:section' v='points-on-roads' />
- </node>
- <node id='-65' action='modify' visible='true' lat='2.00029485534' lon='1.00462587591' />
- <node id='-67' action='modify' visible='true' lat='2.00061177404' lon='1.00506613814'>
- <tag k='test:id' v='n-NE' />
- <tag k='test:section' v='points-on-roads' />
- </node>
- <node id='-69' action='modify' visible='true' lat='2.00033485479' lon='1.00513387079'>
- <tag k='test:id' v='n-SE' />
- <tag k='test:section' v='points-on-roads' />
- </node>
- <node id='-71' action='modify' visible='true' lat='2.00062408156' lon='1.00531551745' />
- <node id='-73' action='modify' visible='true' lat='2.00040869993' lon='1.00475826245'>
- <tag k='test:id' v='n-NW' />
- <tag k='test:section' v='points-on-roads' />
- </node>
- <node id='-75' action='modify' visible='true' lat='2.00038408489' lon='1.00462587591' />
- <node id='-77' action='modify' visible='true' lat='2.00043023809' lon='1.00449964688' />
- <node id='-79' action='modify' visible='true' lat='2.00036870048' lon='1.00532783248' />
- <node id='-81' action='modify' visible='true' lat='2.00026408654' lon='1.00493683035' />
- <node id='-83' action='modify' visible='true' lat='2.00029177846' lon='1.00482599511' />
- <node id='-85' action='modify' visible='true' lat='2.00035639296' lon='1.00472747489'>
- <tag k='test:id' v='n-SW' />
- <tag k='test:section' v='points-on-roads' />
- </node>
- <node id='-87' action='modify' visible='true' lat='2.00022408708' lon='1.00452427693' />
- <node id='-89' action='modify' visible='true' lat='2.00071561841' lon='1.00183227343'>
- <tag k='name' v='road-with-alley' />
- </node>
- <node id='-91' action='modify' visible='true' lat='2.00072864414' lon='1.00046699629'>
- <tag k='name' v='roads-with-pois' />
- </node>
- <node id='-93' action='modify' visible='true' lat='2.00035415446' lon='1.00244811443'>
- <tag k='test:id' v='n-main-east' />
- <tag k='test:section' v='road-with-alley' />
- </node>
- <node id='-95' action='modify' visible='true' lat='2.00026623078' lon='1.00155204948'>
- <tag k='test:id' v='n-main-west' />
- <tag k='test:section' v='road-with-alley' />
- </node>
- <node id='-97' action='modify' visible='true' lat='2.00054628396' lon='1.00192350914'>
- <tag k='test:id' v='n-alley' />
- <tag k='test:section' v='road-with-alley' />
- </node>
- <node id='-99' action='modify' visible='true' lat='2.00035415446' lon='1.00192350914'>
- <tag k='test:id' v='n-corner' />
- <tag k='test:section' v='road-with-alley' />
- </node>
- <node id='-101' action='modify' visible='true' lat='2.00057559185' lon='1.00195935173' />
- <node id='-103' action='modify' visible='true' lat='2.00029879511' lon='1.00260777692' />
- <node id='-105' action='modify' visible='true' lat='2.00031182084' lon='1.0023699124' />
- <node id='-107' action='modify' visible='true' lat='2.00031507727' lon='1.00212553105' />
- <node id='-109' action='modify' visible='true' lat='2.00030856441' lon='1.00195935173' />
- <node id='-111' action='modify' visible='true' lat='2.00030530797' lon='1.00167586937' />
- <node id='-113' action='modify' visible='true' lat='2.00031182084' lon='1.00134351073' />
- <node id='-115' action='modify' visible='true' lat='2.00040546963' lon='1.00011736285'>
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-117' action='modify' visible='true' lat='2.00039759893' lon='1.00042975784'>
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-119' action='modify' visible='true' lat='2.000457941' lon='1.00066077263'>
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-121' action='modify' visible='true' lat='2.00054189517' lon='1.00106242333'>
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-123' action='modify' visible='true' lat='2.00019033703' lon='1.00013836419'>
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-125' action='modify' visible='true' lat='2.00019820773' lon='1.00072115149'>
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-127' action='modify' visible='true' lat='2.00021919628' lon='1.00106767367'>
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-129' action='modify' visible='true' lat='2.00033988043' lon='1.00039038032'>
- <tag k='test:id' v='p-N2' />
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-131' action='modify' visible='true' lat='2.0002926562' lon='1.0008104072'>
- <tag k='test:id' v='p-S1' />
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-133' action='modify' visible='true' lat='2.00052877733' lon='1.0005321394'>
- <tag k='test:id' v='p-N1' />
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-135' action='modify' visible='true' lat='2.00010638283' lon='1.00063977128'>
- <tag k='test:id' v='p-S2' />
- <tag k='test:section' v='roads-with-pois' />
- </node>
- <node id='-137' action='modify' visible='true' lat='2.00072116924' lon='1.00358286582'>
- <tag k='name' v='building-on-street-corner' />
- </node>
- <node id='-139' action='modify' visible='true' lat='2.00023163534' lon='1.00317592051' />
- <node id='-141' action='modify' visible='true' lat='2.00022108767' lon='1.00403607904' />
- <node id='-143' action='modify' visible='true' lat='2.0002263615' lon='1.00427354612' />
- <node id='-145' action='modify' visible='true' lat='2.00010506339' lon='1.00404135609' />
- <node id='-147' action='modify' visible='true' lat='2.00063772026' lon='1.00403639915' />
- <node id='-149' action='modify' visible='true' lat='2.00043885695' lon='1.0039042871' />
- <node id='-151' action='modify' visible='true' lat='2.00043855477' lon='1.00400225362' />
- <node id='-153' action='modify' visible='true' lat='2.0002343878' lon='1.00400162309' />
- <node id='-155' action='modify' visible='true' lat='2.00023468998' lon='1.00390365657' />
- <node id='-157' action='modify' visible='true' lat='2.00032403886' lon='1.00400189996'>
- <tag k='test:id' v='n-edge-NS' />
- <tag k='test:section' v='building-on-street-corner' />
- </node>
- <node id='-159' action='modify' visible='true' lat='2.00035479802' lon='1.00393848586'>
- <tag k='test:id' v='n-inner' />
- <tag k='test:section' v='building-on-street-corner' />
- </node>
- <node id='-161' action='modify' visible='true' lat='2.00046760515' lon='1.00394781445'>
- <tag k='test:id' v='n-outer' />
- <tag k='test:section' v='building-on-street-corner' />
- </node>
- <node id='-163' action='modify' visible='true' lat='2.00023451637' lon='1.00395994156'>
- <tag k='test:id' v='n-edge-WE' />
- <tag k='test:section' v='building-on-street-corner' />
- </node>
- <node id='-165' action='modify' visible='true' lat='2.0001892102' lon='1.00653236169' />
- <node id='-167' action='modify' visible='true' lat='2.00027856164' lon='1.00667595302' />
- <node id='-169' action='modify' visible='true' lat='2.00027856164' lon='1.00681954435' />
- <node id='-171' action='modify' visible='true' lat='2.00025148545' lon='1.00691707809' />
- <node id='-173' action='modify' visible='true' lat='2.0001892102' lon='1.00704170453' />
- <node id='-175' action='modify' visible='true' lat='2.00017296448' lon='1.00724219054' />
- <node id='-177' action='modify' visible='true' lat='2.00062243814' lon='1.00685396461'>
- <tag k='name' v='parallel-road' />
- </node>
- <node id='-179' action='modify' visible='true' lat='2.00033813812' lon='1.00653156143'>
- <tag k='test:id' v='n-middle-w' />
- <tag k='test:section' v='parallel-road' />
- </node>
- <node id='-181' action='modify' visible='true' lat='2.00042478194' lon='1.00668598984' />
- <node id='-183' action='modify' visible='true' lat='2.00041665908' lon='1.00690002221' />
- <node id='-185' action='modify' visible='true' lat='2.00034084574' lon='1.00723597174'>
- <tag k='test:id' v='n-middle-e' />
- <tag k='test:section' v='parallel-road' />
- </node>
- <node id='-187' action='modify' visible='true' lat='2.00041801289' lon='1.00653968924' />
- <node id='-189' action='modify' visible='true' lat='2.00050736432' lon='1.00668328057' />
- <node id='-191' action='modify' visible='true' lat='2.00050736432' lon='1.00682687191' />
- <node id='-193' action='modify' visible='true' lat='2.00048028813' lon='1.00692440564' />
- <node id='-195' action='modify' visible='true' lat='2.00041801289' lon='1.00704903208' />
- <node id='-197' action='modify' visible='true' lat='2.00040176717' lon='1.00724951809' />
- <node id='-199' action='modify' visible='true' lat='2.00102300625' lon='1.00316327416'>
- <tag k='test:id' v='n-south-w' />
- <tag k='test:section' v='building-with-parallel-streets' />
- </node>
- <node id='-201' action='modify' visible='true' lat='2.00101492424' lon='1.00369431688' />
- <node id='-203' action='modify' visible='true' lat='2.00102031225' lon='1.00407170765' />
- <node id='-205' action='modify' visible='true' lat='2.00100684223' lon='1.00433588118'>
- <tag k='test:id' v='n-south-e' />
- <tag k='test:section' v='building-with-parallel-streets' />
- </node>
- <node id='-207' action='modify' visible='true' lat='2.00148637497' lon='1.00362153438'>
- <tag k='name' v='building-with-parallel-streets' />
- </node>
- <node id='-209' action='modify' visible='true' lat='2.00126546664' lon='1.00315114374'>
- <tag k='test:id' v='n-north-w' />
- <tag k='test:section' v='building-with-parallel-streets' />
- </node>
- <node id='-211' action='modify' visible='true' lat='2.00125738463' lon='1.00368218646' />
- <node id='-213' action='modify' visible='true' lat='2.00126277264' lon='1.00405957723' />
- <node id='-215' action='modify' visible='true' lat='2.00124930262' lon='1.00432375077'>
- <tag k='test:id' v='n-north-e' />
- <tag k='test:section' v='building-with-parallel-streets' />
- </node>
- <node id='-217' action='modify' visible='true' lat='2.00118914388' lon='1.00361572227' />
- <node id='-219' action='modify' visible='true' lat='2.0010786539' lon='1.00361659971' />
- <node id='-221' action='modify' visible='true' lat='2.001080471' lon='1.003845694' />
- <node id='-223' action='modify' visible='true' lat='2.00119096098' lon='1.00384481656' />
- <node id='100000' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='2.0' lon='1.0' />
- <node id='100001' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='3.0' lon='1.0' />
- <node id='100002' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='3.0' lon='2.0' />
- <node id='100003' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1' lat='2.0' lon='2.0' />
- <way id='-229' action='modify' visible='true'>
- <nd ref='-25' />
- <nd ref='-23' />
- <nd ref='-21' />
- <tag k='test:id' v='w-5' />
- <tag k='test:section' v='split-road' />
- </way>
- <way id='-231' action='modify' visible='true'>
- <nd ref='-35' />
- <nd ref='-33' />
- <nd ref='-31' />
- <nd ref='-29' />
- <nd ref='-27' />
- <nd ref='-25' />
- <tag k='test:id' v='w-4a' />
- <tag k='test:section' v='split-road' />
- </way>
- <way id='-233' action='modify' visible='true'>
- <nd ref='-43' />
- <nd ref='-41' />
- <nd ref='-39' />
- <nd ref='-37' />
- <nd ref='-35' />
- <tag k='test:id' v='w-3' />
- <tag k='test:section' v='split-road' />
- </way>
- <way id='-235' action='modify' visible='true'>
- <nd ref='-51' />
- <nd ref='-49' />
- <nd ref='-47' />
- <nd ref='-45' />
- <nd ref='-43' />
- <tag k='test:id' v='w-2' />
- <tag k='test:section' v='split-road' />
- </way>
- <way id='-237' action='modify' visible='true'>
- <nd ref='-35' />
- <nd ref='-19' />
- <nd ref='-17' />
- <nd ref='-15' />
- <nd ref='-13' />
- <nd ref='-25' />
- <tag k='test:id' v='w-4b' />
- <tag k='test:section' v='split-road' />
- </way>
- <way id='-239' action='modify' visible='true'>
- <nd ref='-55' />
- <nd ref='-53' />
- <nd ref='-51' />
- <tag k='test:id' v='w-1' />
- <tag k='test:section' v='split-road' />
- </way>
- <way id='-241' action='modify' visible='true'>
- <nd ref='-77' />
- <nd ref='-75' />
- <nd ref='-73' />
- <nd ref='-59' />
- <nd ref='-67' />
- <nd ref='-71' />
- <tag k='test:id' v='w-north' />
- <tag k='test:section' v='points-on-roads' />
- </way>
- <way id='-243' action='modify' visible='true'>
- <nd ref='-87' />
- <nd ref='-65' />
- <nd ref='-85' />
- <nd ref='-83' />
- <nd ref='-81' />
- <nd ref='-69' />
- <nd ref='-79' />
- <tag k='test:id' v='w-south' />
- <tag k='test:section' v='points-on-roads' />
- </way>
- <way id='-245' action='modify' visible='true'>
- <nd ref='-109' />
- <nd ref='-101' />
- <tag k='test:id' v='w-alley' />
- <tag k='test:section' v='road-with-alley' />
- </way>
- <way id='-247' action='modify' visible='true'>
- <nd ref='-113' />
- <nd ref='-111' />
- <nd ref='-109' />
- <nd ref='-107' />
- <nd ref='-105' />
- <nd ref='-103' />
- <tag k='test:id' v='w-main' />
- <tag k='test:section' v='road-with-alley' />
- </way>
- <way id='-249' action='modify' visible='true'>
- <nd ref='-115' />
- <nd ref='-117' />
- <nd ref='-119' />
- <nd ref='-121' />
- <tag k='test:id' v='w-north' />
- <tag k='test:section' v='roads-with-pois' />
- </way>
- <way id='-251' action='modify' visible='true'>
- <nd ref='-123' />
- <nd ref='-125' />
- <nd ref='-127' />
- <tag k='test:id' v='w-south' />
- <tag k='test:section' v='roads-with-pois' />
- </way>
- <way id='-253' action='modify' visible='true'>
- <nd ref='-139' />
- <nd ref='-141' />
- <nd ref='-143' />
- <tag k='test:id' v='w-WE' />
- <tag k='test:section' v='building-on-street-corner' />
- </way>
- <way id='-255' action='modify' visible='true'>
- <nd ref='-145' />
- <nd ref='-141' />
- <nd ref='-147' />
- <tag k='test:id' v='w-NS' />
- <tag k='test:section' v='building-on-street-corner' />
- </way>
- <way id='-257' action='modify' visible='true'>
- <nd ref='-149' />
- <nd ref='-151' />
- <nd ref='-157' />
- <nd ref='-153' />
- <nd ref='-163' />
- <nd ref='-155' />
- <nd ref='-149' />
- <tag k='area' v='yes' />
- <tag k='test:id' v='w-building' />
- <tag k='test:section' v='building-on-street-corner' />
- </way>
- <way id='-259' action='modify' visible='true'>
- <nd ref='-165' />
- <nd ref='-167' />
- <nd ref='-169' />
- <nd ref='-171' />
- <nd ref='-173' />
- <nd ref='-175' />
- <tag k='test:id' v='w-south' />
- <tag k='test:section' v='parallel-road' />
- </way>
- <way id='-261' action='modify' visible='true'>
- <nd ref='-179' />
- <nd ref='-181' />
- <nd ref='-183' />
- <nd ref='-185' />
- <tag k='test:id' v='w-middle' />
- <tag k='test:section' v='parallel-road' />
- </way>
- <way id='-263' action='modify' visible='true'>
- <nd ref='-187' />
- <nd ref='-189' />
- <nd ref='-191' />
- <nd ref='-193' />
- <nd ref='-195' />
- <nd ref='-197' />
- <tag k='test:id' v='w-north' />
- <tag k='test:section' v='parallel-road' />
- </way>
- <way id='-265' action='modify' visible='true'>
- <nd ref='-199' />
- <nd ref='-201' />
- <nd ref='-203' />
- <nd ref='-205' />
- <tag k='test:id' v='w-south' />
- <tag k='test:section' v='building-with-parallel-streets' />
- </way>
- <way id='-267' action='modify' visible='true'>
- <nd ref='-209' />
- <nd ref='-211' />
- <nd ref='-213' />
- <nd ref='-215' />
- <tag k='test:id' v='w-north' />
- <tag k='test:section' v='building-with-parallel-streets' />
- </way>
- <way id='-269' action='modify' visible='true'>
- <nd ref='-217' />
- <nd ref='-219' />
- <nd ref='-221' />
- <nd ref='-223' />
- <nd ref='-217' />
- <tag k='test:id' v='w-building' />
- <tag k='test:section' v='building-with-parallel-streets' />
- </way>
- <way id='100000' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' visible='true' version='1' changeset='1'>
- <nd ref='100000' />
- <nd ref='100001' />
- <nd ref='100002' />
- <nd ref='100003' />
- <nd ref='100000' />
- <tag k='note' v='test area, do not leave' />
- </way>
-</osm>
+++ /dev/null
-w-5 | LINESTRING(1.0056855 2.0005616,1.0056087 2.0005669,1.0055106 2.0005245)
-w-4a | LINESTRING(1.0062843 2.0005139,1.0061359 2.0004954,1.0060538 2.0005113,1.0059107 2.000506,1.0057358 2.0005007,1.0056855 2.0005616)
-w-3 | LINESTRING(1.0061995 2.0003391,1.0062816 2.0002624,1.0063585 2.0002968,1.0063717 2.0004715,1.0062843 2.0005139)
-w-2 | LINESTRING(1.0057941 2.0002809,1.0058869 2.0003259,1.0060034 2.0003497,1.0061041 2.0003577,1.0061995 2.0003391)
-w-4b | LINESTRING(1.0062843 2.0005139,1.0061306 2.0005324,1.0060511 2.000543,1.0058975 2.000543,1.0057491 2.0005351,1.0056855 2.0005616)
-w-1 | LINESTRING(1.0054709 2.0003603,1.0056352 2.0002782,1.0057941 2.0002809)
+++ /dev/null
-inner-S | POINT(0.0048516 -0.0095176)
-inner-N | POINT(0.0018846 -0.0023652)
-outer-C | POINT(0.0041244 -0.0060007)
-inner-C | POINT(0.0035625 -0.0066188)
-area | MULTIPOLYGON(((0.0005071 -0.0060738,0.0010369 -0.0072924,0.0019376 -0.0065507,0.0026264 -0.0080341,0.0026264 -0.0091997,0.0022025 -0.0099944,0.0026794 -0.0105772,0.0038979 -0.0109481,0.0065469 -0.0099414,0.0077125 -0.0066566,0.0068648 -0.0049612,0.0061231 -0.0064977,0.0051694 -0.0076633,0.0033681 -0.0059149,0.0075006 -0.0040076,0.006441 -0.0025771,0.0050105 -0.0021533,0.0013019 -0.0015175,0.0005601 -0.0025771,0.0005071 -0.0042195,0.0017787 -0.00565,0.0005071 -0.0060738)))