]> git.openstreetmap.org Git - nominatim.git/commitdiff
add more tests for interpolations (mostly updating)
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 24 Feb 2015 21:10:31 +0000 (22:10 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 5 Mar 2015 21:00:27 +0000 (22:00 +0100)
tests/features/db/import/interpolation.feature
tests/features/db/update/interpolation.feature [new file with mode: 0644]
tests/scenes/data/parallel-road.wkt [new file with mode: 0644]
tests/scenes/data/roads.osm
tests/steps/db_results.py
tests/steps/db_setup.py
tests/steps/terrain.py

index ad4bdf851875c4b25b7d73d1d4c42502cbde8c41..d70bf18adc55715c2166d5b8512c74a74824daf6 100644 (file)
@@ -14,13 +14,9 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 2           | 1,1
           | 4           | 1,1.0005
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 6           | 1,1.001
 
     Scenario: Simple even two point interpolation with zero beginning
         Given the place nodes
@@ -34,15 +30,11 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 0           | 1,1
           | 2           | 1,1.00025
           | 4           | 1,1.0005
           | 6           | 1,1.00075
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 8           | 1,1.001
 
     Scenario: Backwards even two point interpolation
         Given the place nodes
@@ -56,13 +48,9 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 2,1
         When importing
-        Then node 1 expands to housenumbers
-          | housenumber | centroid
-          | 2           | 1,1
-        And node 2 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
           | 4           | 1,1.0005
-          | 6           | 1,1.001
 
     Scenario: Even two point interpolation with odd beginning
         Given the place nodes
@@ -76,14 +64,10 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 11          | 1,1
           | 12          | 1,1.0002
           | 14          | 1,1.0006
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 16          | 1,1.001
 
     Scenario: Even two point interpolation with odd end
         Given the place nodes
@@ -97,14 +81,10 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 10          | 1,1
           | 12          | 1,1.0004
           | 14          | 1,1.0008
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 15          | 1,1.001
 
     Scenario: Reverse even two point interpolation with odd beginning
         Given the place nodes
@@ -118,14 +98,10 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 2,1
         When importing
-        Then node 1 expands to housenumbers
-          | housenumber | centroid
-          | 11          | 1,1
-        And node 2 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
           | 12          | 1,1.0002
           | 14          | 1,1.0006
-          | 16          | 1,1.001
 
     Scenario: Reverse even two point interpolation with odd end
         Given the place nodes
@@ -139,14 +115,10 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 2,1
         When importing
-        Then node 1 expands to housenumbers
-          | housenumber | centroid
-          | 10          | 1,1
-        And node 2 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
           | 12          | 1,1.0004
           | 14          | 1,1.0008
-          | 15          | 1,1.001
 
       Scenario: Simple odd two point interpolation
         Given the place nodes
@@ -160,16 +132,12 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 1           | 1,1
           | 3           | 1,1.0002
           | 5           | 1,1.0004
           | 7           | 1,1.0006
           | 9           | 1,1.0008
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 11           | 1,1.001
 
       Scenario: Odd two point interpolation with even beginning
         Given the place nodes
@@ -183,14 +151,10 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 2           | 1,1
           | 3           | 1,1.0002
           | 5           | 1,1.0006
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 7           | 1,1.001
 
      Scenario: Simple all two point interpolation
         Given the place nodes
@@ -204,13 +168,9 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 1           | 1,1
           | 2           | 1,1.0005
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 3           | 1,1.001
 
     Scenario: Simple numbered two point interpolation
         Given the place nodes
@@ -224,13 +184,9 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 3           | 1,1
           | 6           | 1,1.0005
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 9           | 1,1.001
 
     Scenario: Even two point interpolation with intermediate empty node
         Given the place nodes
@@ -244,15 +200,11 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,3,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 2           | 1,1
           | 4           | 1,1.0005
           | 6           | 1,1.001
           | 8           | 1.0005,1.001
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 10          | 1.001,1.001
 
 
     Scenario: Even two point interpolation with intermediate duplicated empty node
@@ -267,15 +219,11 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,3,3,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 2           | 1,1
           | 4           | 1,1.0005
           | 6           | 1,1.001
           | 8           | 1.0005,1.001
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 10          | 1.001,1.001
 
     Scenario: Simple even three point interpolation
         Given the place nodes
@@ -290,16 +238,9 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,3,2
         When importing
-        Then node 1 expands to housenumbers
-          | housenumber | centroid
-          | 2           | 1,1
-        Then node 3 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 4           | 1,1.001
           | 6           | 1.0005,1.001
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 8           | 1.001,1.001
 
     Scenario: Even three point interpolation with odd center point
         Given the place nodes
@@ -314,17 +255,10 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,3,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 2           | 1,1
           | 4           | 1,1.0004
           | 6           | 1,1.0008
-        Then node 3 expands to housenumbers
-          | housenumber | centroid
-          | 7           | 1,1.001
-        And node 2 expands to housenumbers
-          | housenumber | centroid
-          | 8           | 1.001,1.001
 
     Scenario: Interpolation on self-intersecting way
         Given the place nodes
@@ -339,17 +273,9 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2,3,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 2           | 0,0
           | 4           | 0,0.0005
-        Then node 2 expands to housenumbers
-          | housenumber | centroid
-          | 6           | 0,0.001
-          | 8           | 0,0.0015
-        Then node 3 expands to housenumbers
-          | housenumber | centroid
-          | 10          | 0,0.002
           | 8           | 0,0.0015
 
     Scenario: Interpolation on self-intersecting way II
@@ -364,12 +290,73 @@ Feature: Import of address interpolations
           | id | nodes
           | 1  | 1,2,3,2
         When importing
-        Then node 1 expands to housenumbers
+        Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 2           | 0,0
           | 4           | 0,0.0005
-        Then node 2 expands to housenumbers
-          | housenumber | centroid
-          | 6           | 0,0.001
+
+
+     Scenario: addr:street on interpolation way
+       Given the scene parallel-road
+       And the place nodes
+          | osm_id | class | type  | housenumber | geometry
+          | 1      | place | house | 2           | :n-middle-w
+          | 2      | place | house | 6           | :n-middle-e
+          | 3      | place | house | 12          | :n-middle-w
+          | 4      | place | house | 16          | :n-middle-e
+       And the place ways
+          | osm_id | class   | type    | housenumber | street       | geometry
+          | 10     | place   | houses  | even        |              | :w-middle
+          | 11     | place   | houses  | even        | Cloud Street | :w-middle
+       And the place ways
+          | osm_id | class   | type     | name                    | geometry
+          | 2      | highway | tertiary | 'name' : 'Sun Way'      | :w-north
+          | 3      | highway | tertiary | 'name' : 'Cloud Street' | :w-south
+        And the ways
+          | id | nodes
+          | 10  | 1,100,101,102,2
+          | 11  | 3,200,201,202,4
+       When importing
+       Then table placex contains
+          | object | parent_place_id
+          | N1     | W2
+          | N2     | W2
+          | N3     | W3
+          | N4     | W3
+          | W10    | W2
+          | W11    | W3
+       And way 10 expands exactly to housenumbers 4
+       And way 11 expands exactly to housenumbers 14
+
+     Scenario: addr:street on housenumber way
+       Given the scene parallel-road
+       And the place nodes
+          | osm_id | class | type  | housenumber | street       | geometry
+          | 1      | place | house | 2           |              | :n-middle-w
+          | 2      | place | house | 6           |              | :n-middle-e
+          | 3      | place | house | 12          | Cloud Street | :n-middle-w
+          | 4      | place | house | 16          | Cloud Street | :n-middle-e
+       And the place ways
+          | osm_id | class   | type    | housenumber | geometry
+          | 10     | place   | houses  | even        | :w-middle
+          | 11     | place   | houses  | even        | :w-middle
+       And the place ways
+          | osm_id | class   | type     | name                    | geometry
+          | 2      | highway | tertiary | 'name' : 'Sun Way'      | :w-north
+          | 3      | highway | tertiary | 'name' : 'Cloud Street' | :w-south
+        And the ways
+          | id | nodes
+          | 10  | 1,100,101,102,2
+          | 11  | 3,200,201,202,4
+       When importing
+       Then table placex contains
+          | object | parent_place_id
+          | N1     | W2
+          | N2     | W2
+          | N3     | W3
+          | N4     | W3
+          | W10    | W2
+          | W11    | W3
+       And way 10 expands exactly to housenumbers 4
+       And way 11 expands exactly to housenumbers 14
 
 
diff --git a/tests/features/db/update/interpolation.feature b/tests/features/db/update/interpolation.feature
new file mode 100644 (file)
index 0000000..bfc93b1
--- /dev/null
@@ -0,0 +1,167 @@
+@DB
+Feature: Update of address interpolations
+    Test the interpolated address are updated correctly
+
+    Scenario: addr:street added to interpolation
+      Given the scene parallel-road
+      And the place nodes
+          | osm_id | class | type  | housenumber | geometry
+          | 1      | place | house | 2           | :n-middle-w
+          | 2      | place | house | 6           | :n-middle-e
+      And the place ways
+          | osm_id | class   | type    | housenumber | geometry
+          | 10     | place   | houses  | even        | :w-middle
+      And the place ways
+          | osm_id | class   | type         | name                    | geometry
+          | 2      | highway | unclassified | 'name' : 'Sun Way'      | :w-north
+          | 3      | highway | unclassified | 'name' : 'Cloud Street' | :w-south
+      And the ways
+          | id  | nodes
+          | 10  | 1,100,101,102,2
+      When importing
+      Then table placex contains
+          | object | parent_place_id
+          | N1     | W2
+          | N2     | W2
+          | W10    | W2
+      And way 10 expands exactly to housenumbers 4
+      When updating place ways
+          | osm_id | class   | type    | housenumber | street       | geometry
+          | 10     | place   | houses  | even        | Cloud Street | :w-middle
+      Then way 10 expands exactly to housenumbers 4
+      And table placex contains
+          | object | parent_place_id
+          | N1     | W3
+          | N2     | W3
+          | W10    | W3
+
+    @Fail
+    Scenario: addr:street added to housenumbers
+      Given the scene parallel-road
+      And the place nodes
+          | osm_id | class | type  | housenumber | geometry
+          | 1      | place | house | 2           | :n-middle-w
+          | 2      | place | house | 6           | :n-middle-e
+      And the place ways
+          | osm_id | class   | type    | housenumber | geometry
+          | 10     | place   | houses  | even        | :w-middle
+      And the place ways
+          | osm_id | class   | type         | name                    | geometry
+          | 2      | highway | unclassified | 'name' : 'Sun Way'      | :w-north
+          | 3      | highway | unclassified | 'name' : 'Cloud Street' | :w-south
+      And the ways
+          | id  | nodes
+          | 10  | 1,100,101,102,2
+      When importing
+      Then table placex contains
+          | object | parent_place_id
+          | N1     | W2
+          | N2     | W2
+          | W10    | W2
+      And way 10 expands exactly to housenumbers 4
+      When updating place nodes
+          | osm_id | class | type  | street      | housenumber | geometry
+          | 1      | place | house | Cloud Street| 2           | :n-middle-w
+          | 2      | place | house | Cloud Street| 6           | :n-middle-e
+      Then way 10 expands exactly to housenumbers 4
+      And table placex contains
+          | object | parent_place_id
+          | N1     | W3
+          | N2     | W3
+          | W10    | W3
+
+
+    Scenario: interpolation tag removed
+      Given the scene parallel-road
+      And the place nodes
+          | osm_id | class | type  | housenumber | geometry
+          | 1      | place | house | 2           | :n-middle-w
+          | 2      | place | house | 6           | :n-middle-e
+      And the place ways
+          | osm_id | class   | type    | housenumber | geometry
+          | 10     | place   | houses  | even        | :w-middle
+      And the place ways
+          | osm_id | class   | type         | name                    | geometry
+          | 2      | highway | unclassified | 'name' : 'Sun Way'      | :w-north
+          | 3      | highway | unclassified | 'name' : 'Cloud Street' | :w-south
+      And the ways
+          | id  | nodes
+          | 10  | 1,100,101,102,2
+      When importing
+      Then table placex contains
+          | object | parent_place_id
+          | N1     | W2
+          | N2     | W2
+          | W10    | W2
+      And way 10 expands exactly to housenumbers 4
+      When marking for delete W10
+      Then way 10 expands to no housenumbers
+      And table placex contains
+          | object | parent_place_id
+          | N1     | W2
+          | N2     | W2
+
+
+    Scenario: referenced road added
+      Given the scene parallel-road
+      And the place nodes
+          | osm_id | class | type  | housenumber | geometry
+          | 1      | place | house | 2           | :n-middle-w
+          | 2      | place | house | 6           | :n-middle-e
+      And the place ways
+          | osm_id | class   | type    | housenumber | street      | geometry
+          | 10     | place   | houses  | even        | Cloud Street| :w-middle
+      And the place ways
+          | osm_id | class   | type         | name                    | geometry
+          | 2      | highway | unclassified | 'name' : 'Sun Way'      | :w-north
+      And the ways
+          | id  | nodes
+          | 10  | 1,100,101,102,2
+      When importing
+      Then table placex contains
+          | object | parent_place_id
+          | N1     | W2
+          | N2     | W2
+          | W10    | W2
+      And way 10 expands exactly to housenumbers 4
+      When updating place ways
+          | osm_id | class   | type         | name                    | geometry
+          | 3      | highway | unclassified | 'name' : 'Cloud Street' | :w-south
+      Then way 10 expands exactly to housenumbers 4
+      And table placex contains
+          | object | parent_place_id
+          | N1     | W3
+          | N2     | W3
+          | W10    | W3
+
+
+    Scenario: referenced road deleted
+      Given the scene parallel-road
+      And the place nodes
+          | osm_id | class | type  | housenumber | geometry
+          | 1      | place | house | 2           | :n-middle-w
+          | 2      | place | house | 6           | :n-middle-e
+      And the place ways
+          | osm_id | class   | type    | housenumber | street      | geometry
+          | 10     | place   | houses  | even        | Cloud Street| :w-middle
+      And the place ways
+          | osm_id | class   | type         | name                    | geometry
+          | 2      | highway | unclassified | 'name' : 'Sun Way'      | :w-north
+          | 3      | highway | unclassified | 'name' : 'Cloud Street' | :w-south
+      And the ways
+          | id  | nodes
+          | 10  | 1,100,101,102,2
+      When importing
+      Then table placex contains
+          | object | parent_place_id
+          | N1     | W3
+          | N2     | W3
+          | W10    | W3
+      And way 10 expands exactly to housenumbers 4
+      When marking for delete W3
+      Then way 10 expands exactly to housenumbers 4
+      And table placex contains
+          | object | parent_place_id
+          | N1     | W2
+          | N2     | W2
+          | W10    | W2
diff --git a/tests/scenes/data/parallel-road.wkt b/tests/scenes/data/parallel-road.wkt
new file mode 100644 (file)
index 0000000..355af30
--- /dev/null
@@ -0,0 +1,5 @@
+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)
index b642fa626a9a42e77ec73e60db722d933d14d954..ed7cd62a683880ec3e03b7bbd2b05366cb5faa6c 100644 (file)
 <?xml version='1.0' encoding='UTF-8'?>
 <osm version='0.6' upload='false' generator='JOSM'>
-  <node id='-204' action='modify' visible='true' lat='2.000651586300547' lon='1.005746444902722'>
+  <node id='-197' action='modify' visible='true' lat='2.0006515863' lon='1.0057464449'>
     <tag k='name' v='split-road' />
   </node>
-  <node id='-189' action='modify' visible='true' lat='2.0005350827634585' lon='1.0057490943252971' />
-  <node id='-187' action='modify' visible='true' lat='2.0005430261867043' lon='1.0058974619895207' />
-  <node id='-185' action='modify' visible='true' lat='2.0005430261867043' lon='1.0060511284988949' />
-  <node id='-183' action='modify' visible='true' lat='2.0005324349557014' lon='1.0061306111761574' />
-  <node id='-174' action='modify' visible='true' lat='2.0005244915324045' lon='1.00551064629351' />
-  <node id='-172' action='modify' visible='true' lat='2.0005668564562127' lon='1.0056086749288005' />
-  <node id='-170' action='modify' visible='true' lat='2.000561560840796' lon='1.0056855081834875' />
-  <node id='-168' action='modify' visible='true' lat='2.0005006612622807' lon='1.0057358472124205' />
-  <node id='-166' action='modify' visible='true' lat='2.000505956877894' lon='1.0059107091023978' />
-  <node id='-164' action='modify' visible='true' lat='2.0005112524934896' lon='1.0060537779214704' />
-  <node id='-162' action='modify' visible='true' lat='2.0004953656466506' lon='1.006135910021308' />
-  <node id='-160' action='modify' visible='true' lat='2.000513900301281' lon='1.0062842776855314' />
-  <node id='-158' action='modify' visible='true' lat='2.000471535376104' lon='1.0063717086305204' />
-  <node id='-156' action='modify' visible='true' lat='2.000296780048186' lon='1.0063584615176433' />
-  <node id='-154' action='modify' visible='true' lat='2.000262358542008' lon='1.006281628262956' />
-  <node id='-152' action='modify' visible='true' lat='2.000339144977876' lon='1.0061994961631182' />
-  <node id='-150' action='modify' visible='true' lat='2.0003576796342712' lon='1.0061041169504032' />
-  <node id='-148' action='modify' visible='true' lat='2.0003497362101275' lon='1.0060034388925374' />
-  <node id='-146' action='modify' visible='true' lat='2.000325905937466' lon='1.0058868642992191' />
-  <node id='-144' action='modify' visible='true' lat='2.000280893199271' lon='1.0057941345090795' />
-  <node id='-142' action='modify' visible='true' lat='2.0002782453911037' lon='1.0056351691545544' />
-  <node id='-141' action='modify' visible='true' lat='2.0003603274423103' lon='1.005470904954879' />
-  <node id='-139' action='modify' visible='true' lat='2.0007265421773432' lon='1.0047054313390744'>
+  <node id='-195' action='modify' visible='true' lat='2.00053508276' lon='1.00574909433' />
+  <node id='-193' action='modify' visible='true' lat='2.00054302619' lon='1.00589746199' />
+  <node id='-191' action='modify' visible='true' lat='2.00054302619' lon='1.0060511285' />
+  <node id='-189' action='modify' visible='true' lat='2.00053243496' lon='1.00613061118' />
+  <node id='-187' action='modify' visible='true' lat='2.00052449153' lon='1.00551064629' />
+  <node id='-185' action='modify' visible='true' lat='2.00056685646' lon='1.00560867493' />
+  <node id='-183' action='modify' visible='true' lat='2.00056156084' lon='1.00568550818' />
+  <node id='-181' action='modify' visible='true' lat='2.00050066126' lon='1.00573584721' />
+  <node id='-179' action='modify' visible='true' lat='2.00050595688' lon='1.0059107091' />
+  <node id='-177' action='modify' visible='true' lat='2.00051125249' lon='1.00605377792' />
+  <node id='-175' action='modify' visible='true' lat='2.00049536565' lon='1.00613591002' />
+  <node id='-173' action='modify' visible='true' lat='2.0005139003' lon='1.00628427769' />
+  <node id='-171' action='modify' visible='true' lat='2.00047153538' lon='1.00637170863' />
+  <node id='-169' action='modify' visible='true' lat='2.00029678005' lon='1.00635846152' />
+  <node id='-167' action='modify' visible='true' lat='2.00026235854' lon='1.00628162826' />
+  <node id='-165' action='modify' visible='true' lat='2.00033914498' lon='1.00619949616' />
+  <node id='-163' action='modify' visible='true' lat='2.00035767963' lon='1.00610411695' />
+  <node id='-161' action='modify' visible='true' lat='2.00034973621' lon='1.00600343889' />
+  <node id='-159' action='modify' visible='true' lat='2.00032590594' lon='1.0058868643' />
+  <node id='-157' action='modify' visible='true' lat='2.0002808932' lon='1.00579413451' />
+  <node id='-155' action='modify' visible='true' lat='2.00027824539' lon='1.00563516915' />
+  <node id='-153' action='modify' visible='true' lat='2.00036032744' lon='1.00547090495' />
+  <node id='-151' action='modify' visible='true' lat='2.00072654218' lon='1.00470543134'>
     <tag k='name' v='points-on-road' />
   </node>
-  <node id='-112' action='modify' visible='true' lat='2.0005155253763816' lon='1.0049220138358423' />
-  <node id='-110' action='modify' visible='true' lat='2.0005155253763816' lon='1.0049220138358423'>
+  <node id='-149' action='modify' visible='true' lat='2.00051552538' lon='1.00492201384' />
+  <node id='-147' 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='-108' action='modify' visible='true' lat='2.0002948553437463' lon='1.0046258759080025'>
+  <node id='-145' 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='-106' action='modify' visible='true' lat='2.0002948553437463' lon='1.0046258759080025' />
-  <node id='-104' action='modify' visible='true' lat='2.0006117740392657' lon='1.0050661381425037'>
+  <node id='-143' action='modify' visible='true' lat='2.00029485534' lon='1.00462587591' />
+  <node id='-141' 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='-102' action='modify' visible='true' lat='2.000334854794143' lon='1.0051338707939657'>
+  <node id='-139' 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='-100' action='modify' visible='true' lat='2.0006240815601832' lon='1.0053155174501582' />
-  <node id='-98' action='modify' visible='true' lat='2.0004086999307416' lon='1.0047582624540412'>
+  <node id='-137' action='modify' visible='true' lat='2.00062408156' lon='1.00531551745' />
+  <node id='-135' 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='-96' action='modify' visible='true' lat='2.0003840848855767' lon='1.0046258759080025' />
-  <node id='-94' action='modify' visible='true' lat='2.0004302380949586' lon='1.004499646875733' />
-  <node id='-92' action='modify' visible='true' lat='2.0003687004821606' lon='1.0053278324776966' />
-  <node id='-90' action='modify' visible='true' lat='2.0002640865351053' lon='1.0049368303533495' />
-  <node id='-88' action='modify' visible='true' lat='2.000291778462916' lon='1.004825995105503' />
-  <node id='-86' action='modify' visible='true' lat='2.0003563929593238' lon='1.004727474885195'>
+  <node id='-133' action='modify' visible='true' lat='2.00038408489' lon='1.00462587591' />
+  <node id='-131' action='modify' visible='true' lat='2.00043023809' lon='1.00449964688' />
+  <node id='-129' action='modify' visible='true' lat='2.00036870048' lon='1.00532783248' />
+  <node id='-127' action='modify' visible='true' lat='2.00026408654' lon='1.00493683035' />
+  <node id='-125' action='modify' visible='true' lat='2.00029177846' lon='1.00482599511' />
+  <node id='-123' 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='-84' action='modify' visible='true' lat='2.0002240870829975' lon='1.00452427693081' />
-  <node id='-82' action='modify' visible='true' lat='2.000715618411992' lon='1.0018322734314236'>
+  <node id='-121' action='modify' visible='true' lat='2.00022408708' lon='1.00452427693' />
+  <node id='-119' action='modify' visible='true' lat='2.00071561841' lon='1.00183227343'>
     <tag k='name' v='road-with-alley' />
   </node>
-  <node id='-80' action='modify' visible='true' lat='2.0007286441385155' lon='1.0004669962874884'>
+  <node id='-117' action='modify' visible='true' lat='2.00072864414' lon='1.00046699629'>
     <tag k='name' v='roads-with-pois' />
   </node>
-  <node id='-78' action='modify' visible='true' lat='2.000354154459697' lon='1.002448114434296'>
+  <node id='-115' 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='-76' action='modify' visible='true' lat='2.000266230783582' lon='1.0015520494830263'>
+  <node id='-113' 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='-74' action='modify' visible='true' lat='2.000546283957771' lon='1.0019235091355527'>
+  <node id='-111' 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='-72' action='modify' visible='true' lat='2.000354154459697' lon='1.0019235091355527'>
+  <node id='-109' 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='-70' action='modify' visible='true' lat='2.0005755918453296' lon='1.0019593517336036' />
-  <node id='-68' action='modify' visible='true' lat='2.000298795108618' lon='1.0026077769165225' />
-  <node id='-66' action='modify' visible='true' lat='2.000311820838452' lon='1.0023699124021854' />
-  <node id='-64' action='modify' visible='true' lat='2.0003150772708946' lon='1.0021255310518389' />
-  <node id='-62' action='modify' visible='true' lat='2.0003085644060037' lon='1.0019593517336036' />
-  <node id='-60' action='modify' visible='true' lat='2.000305307973548' lon='1.0016758693672019' />
-  <node id='-58' action='modify' visible='true' lat='2.000311820838452' lon='1.0013435107307307' />
-  <node id='-56' action='modify' visible='true' lat='2.0004054696330322' lon='1.0001173628501097'>
+  <node id='-107' action='modify' visible='true' lat='2.00057559185' lon='1.00195935173' />
+  <node id='-105' action='modify' visible='true' lat='2.00029879511' lon='1.00260777692' />
+  <node id='-103' action='modify' visible='true' lat='2.00031182084' lon='1.0023699124' />
+  <node id='-101' action='modify' visible='true' lat='2.00031507727' lon='1.00212553105' />
+  <node id='-99' action='modify' visible='true' lat='2.00030856441' lon='1.00195935173' />
+  <node id='-97' action='modify' visible='true' lat='2.00030530797' lon='1.00167586937' />
+  <node id='-95' action='modify' visible='true' lat='2.00031182084' lon='1.00134351073' />
+  <node id='-93' action='modify' visible='true' lat='2.00040546963' lon='1.00011736285'>
     <tag k='test:section' v='roads-with-pois' />
   </node>
-  <node id='-54' action='modify' visible='true' lat='2.000397598928471' lon='1.0004297578433892'>
+  <node id='-91' action='modify' visible='true' lat='2.00039759893' lon='1.00042975784'>
     <tag k='test:section' v='roads-with-pois' />
   </node>
-  <node id='-52' action='modify' visible='true' lat='2.0004579409958114' lon='1.0006607726283354'>
+  <node id='-89' action='modify' visible='true' lat='2.000457941' lon='1.00066077263'>
     <tag k='test:section' v='roads-with-pois' />
   </node>
-  <node id='-50' action='modify' visible='true' lat='2.0005418951727663' lon='1.0010624233339804'>
+  <node id='-87' action='modify' visible='true' lat='2.00054189517' lon='1.00106242333'>
     <tag k='test:section' v='roads-with-pois' />
   </node>
-  <node id='-48' action='modify' visible='true' lat='2.000190337028091' lon='1.0001383641941959'>
+  <node id='-85' action='modify' visible='true' lat='2.00019033703' lon='1.00013836419'>
     <tag k='test:section' v='roads-with-pois' />
   </node>
-  <node id='-46' action='modify' visible='true' lat='2.000198207733647' lon='1.000721151492583'>
+  <node id='-83' action='modify' visible='true' lat='2.00019820773' lon='1.00072115149'>
     <tag k='test:section' v='roads-with-pois' />
   </node>
-  <node id='-44' action='modify' visible='true' lat='2.000219196281612' lon='1.0010676736700022'>
+  <node id='-81' action='modify' visible='true' lat='2.00021919628' lon='1.00106767367'>
     <tag k='test:section' v='roads-with-pois' />
   </node>
-  <node id='-42' action='modify' visible='true' lat='2.000339880427198' lon='1.000390380323228'>
+  <node id='-79' 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='-40' action='modify' visible='true' lat='2.000292656197374' lon='1.0008104072049482'>
+  <node id='-77' 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='-38' action='modify' visible='true' lat='2.0005287773329004' lon='1.0005321393958087'>
+  <node id='-75' 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='-36' action='modify' visible='true' lat='2.000106382833144' lon='1.0006397712842492'>
+  <node id='-73' 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='-34' action='modify' visible='true' lat='2.0007211692424525' lon='1.0035828658185688'>
+  <node id='-71' action='modify' visible='true' lat='2.00072116924' lon='1.00358286582'>
     <tag k='name' v='building-on-street-corner' />
   </node>
-  <node id='-32' action='modify' visible='true' lat='2.000231635335803' lon='1.0031759205058477' />
-  <node id='-30' action='modify' visible='true' lat='2.000221087674047' lon='1.0040360790429201' />
-  <node id='-28' action='modify' visible='true' lat='2.0002263615049336' lon='1.0042735461237067' />
-  <node id='-26' action='modify' visible='true' lat='2.000105063390253' lon='1.0040413560891597' />
-  <node id='-24' action='modify' visible='true' lat='2.0006377202618473' lon='1.0040363991494512' />
-  <node id='-22' action='modify' visible='true' lat='2.0004388569487612' lon='1.0039042871025967' />
-  <node id='-20' action='modify' visible='true' lat='2.0004385547672516' lon='1.0040022536164286' />
-  <node id='-18' action='modify' visible='true' lat='2.0002343878022306' lon='1.0040016230872442' />
-  <node id='-16' action='modify' visible='true' lat='2.000234689983778' lon='1.0039036565734125' />
-  <node id='-14' action='modify' visible='true' lat='2.0003240388594246' lon='1.0040018999567464'>
+  <node id='-69' action='modify' visible='true' lat='2.00023163534' lon='1.00317592051' />
+  <node id='-67' action='modify' visible='true' lat='2.00022108767' lon='1.00403607904' />
+  <node id='-65' action='modify' visible='true' lat='2.0002263615' lon='1.00427354612' />
+  <node id='-63' action='modify' visible='true' lat='2.00010506339' lon='1.00404135609' />
+  <node id='-61' action='modify' visible='true' lat='2.00063772026' lon='1.00403639915' />
+  <node id='-59' action='modify' visible='true' lat='2.00043885695' lon='1.0039042871' />
+  <node id='-57' action='modify' visible='true' lat='2.00043855477' lon='1.00400225362' />
+  <node id='-55' action='modify' visible='true' lat='2.0002343878' lon='1.00400162309' />
+  <node id='-53' action='modify' visible='true' lat='2.00023468998' lon='1.00390365657' />
+  <node id='-51' 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='-12' action='modify' visible='true' lat='2.000354798021768' lon='1.0039384858598128'>
+  <node id='-49' 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='-10' action='modify' visible='true' lat='2.0004676051467527' lon='1.0039478144477645'>
+  <node id='-47' 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='-8' action='modify' visible='true' lat='2.000234516370527' lon='1.0039599415620857'>
+  <node id='-45' 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='-43' action='modify' visible='true' lat='2.0001892102' lon='1.00653236169' />
+  <node id='-41' action='modify' visible='true' lat='2.00027856164' lon='1.00667595302' />
+  <node id='-39' action='modify' visible='true' lat='2.00027856164' lon='1.00681954435' />
+  <node id='-37' action='modify' visible='true' lat='2.00025148545' lon='1.00691707809' />
+  <node id='-35' action='modify' visible='true' lat='2.0001892102' lon='1.00704170453' />
+  <node id='-33' action='modify' visible='true' lat='2.00017296448' lon='1.00724219054' />
+  <node id='-31' action='modify' visible='true' lat='2.00062243814' lon='1.00685396461'>
+    <tag k='name' v='parallel-road' />
+  </node>
+  <node id='-29' 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='-27' action='modify' visible='true' lat='2.00042478194' lon='1.00668598984' />
+  <node id='-25' action='modify' visible='true' lat='2.00041665908' lon='1.00690002221' />
+  <node id='-23' 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='-21' action='modify' visible='true' lat='2.00041801289' lon='1.00653968924' />
+  <node id='-19' action='modify' visible='true' lat='2.00050736432' lon='1.00668328057' />
+  <node id='-17' action='modify' visible='true' lat='2.00050736432' lon='1.00682687191' />
+  <node id='-15' action='modify' visible='true' lat='2.00048028813' lon='1.00692440564' />
+  <node id='-13' action='modify' visible='true' lat='2.00041801289' lon='1.00704903208' />
+  <node id='-11' action='modify' visible='true' lat='2.00040176717' lon='1.00724951809' />
   <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='-195' action='modify' visible='true'>
-    <nd ref='-170' />
-    <nd ref='-172' />
-    <nd ref='-174' />
+  <way id='-237' action='modify' visible='true'>
+    <nd ref='-183' />
+    <nd ref='-185' />
+    <nd ref='-187' />
     <tag k='test:id' v='w-5' />
     <tag k='test:section' v='split-road' />
   </way>
-  <way id='-194' action='modify' visible='true'>
-    <nd ref='-160' />
-    <nd ref='-162' />
-    <nd ref='-164' />
-    <nd ref='-166' />
-    <nd ref='-168' />
-    <nd ref='-170' />
+  <way id='-235' action='modify' visible='true'>
+    <nd ref='-173' />
+    <nd ref='-175' />
+    <nd ref='-177' />
+    <nd ref='-179' />
+    <nd ref='-181' />
+    <nd ref='-183' />
     <tag k='test:id' v='w-4a' />
     <tag k='test:section' v='split-road' />
   </way>
-  <way id='-193' action='modify' visible='true'>
-    <nd ref='-152' />
-    <nd ref='-154' />
-    <nd ref='-156' />
-    <nd ref='-158' />
-    <nd ref='-160' />
+  <way id='-233' action='modify' visible='true'>
+    <nd ref='-165' />
+    <nd ref='-167' />
+    <nd ref='-169' />
+    <nd ref='-171' />
+    <nd ref='-173' />
     <tag k='test:id' v='w-3' />
     <tag k='test:section' v='split-road' />
   </way>
-  <way id='-192' action='modify' visible='true'>
-    <nd ref='-144' />
-    <nd ref='-146' />
-    <nd ref='-148' />
-    <nd ref='-150' />
-    <nd ref='-152' />
+  <way id='-231' action='modify' visible='true'>
+    <nd ref='-157' />
+    <nd ref='-159' />
+    <nd ref='-161' />
+    <nd ref='-163' />
+    <nd ref='-165' />
     <tag k='test:id' v='w-2' />
     <tag k='test:section' v='split-road' />
   </way>
-  <way id='-184' action='modify' visible='true'>
-    <nd ref='-160' />
-    <nd ref='-183' />
-    <nd ref='-185' />
-    <nd ref='-187' />
+  <way id='-229' action='modify' visible='true'>
+    <nd ref='-173' />
     <nd ref='-189' />
-    <nd ref='-170' />
+    <nd ref='-191' />
+    <nd ref='-193' />
+    <nd ref='-195' />
+    <nd ref='-183' />
     <tag k='test:id' v='w-4b' />
     <tag k='test:section' v='split-road' />
   </way>
-  <way id='-143' action='modify' visible='true'>
-    <nd ref='-141' />
-    <nd ref='-142' />
-    <nd ref='-144' />
+  <way id='-227' action='modify' visible='true'>
+    <nd ref='-153' />
+    <nd ref='-155' />
+    <nd ref='-157' />
     <tag k='test:id' v='w-1' />
     <tag k='test:section' v='split-road' />
   </way>
-  <way id='-134' action='modify' visible='true'>
-    <nd ref='-94' />
-    <nd ref='-96' />
-    <nd ref='-98' />
-    <nd ref='-112' />
-    <nd ref='-104' />
-    <nd ref='-100' />
+  <way id='-225' action='modify' visible='true'>
+    <nd ref='-131' />
+    <nd ref='-133' />
+    <nd ref='-135' />
+    <nd ref='-149' />
+    <nd ref='-141' />
+    <nd ref='-137' />
     <tag k='test:id' v='w-north' />
     <tag k='test:section' v='points-on-roads' />
   </way>
-  <way id='-132' action='modify' visible='true'>
-    <nd ref='-84' />
-    <nd ref='-106' />
-    <nd ref='-86' />
-    <nd ref='-88' />
-    <nd ref='-90' />
-    <nd ref='-102' />
-    <nd ref='-92' />
+  <way id='-223' action='modify' visible='true'>
+    <nd ref='-121' />
+    <nd ref='-143' />
+    <nd ref='-123' />
+    <nd ref='-125' />
+    <nd ref='-127' />
+    <nd ref='-139' />
+    <nd ref='-129' />
     <tag k='test:id' v='w-south' />
     <tag k='test:section' v='points-on-roads' />
   </way>
-  <way id='-130' action='modify' visible='true'>
-    <nd ref='-62' />
-    <nd ref='-70' />
+  <way id='-221' action='modify' visible='true'>
+    <nd ref='-99' />
+    <nd ref='-107' />
     <tag k='test:id' v='w-alley' />
     <tag k='test:section' v='road-with-alley' />
   </way>
-  <way id='-128' action='modify' visible='true'>
-    <nd ref='-58' />
-    <nd ref='-60' />
-    <nd ref='-62' />
-    <nd ref='-64' />
-    <nd ref='-66' />
-    <nd ref='-68' />
+  <way id='-219' action='modify' visible='true'>
+    <nd ref='-95' />
+    <nd ref='-97' />
+    <nd ref='-99' />
+    <nd ref='-101' />
+    <nd ref='-103' />
+    <nd ref='-105' />
     <tag k='test:id' v='w-main' />
     <tag k='test:section' v='road-with-alley' />
   </way>
-  <way id='-126' action='modify' visible='true'>
-    <nd ref='-56' />
-    <nd ref='-54' />
-    <nd ref='-52' />
-    <nd ref='-50' />
+  <way id='-217' action='modify' visible='true'>
+    <nd ref='-93' />
+    <nd ref='-91' />
+    <nd ref='-89' />
+    <nd ref='-87' />
     <tag k='test:id' v='w-north' />
     <tag k='test:section' v='roads-with-pois' />
   </way>
-  <way id='-124' action='modify' visible='true'>
-    <nd ref='-48' />
-    <nd ref='-46' />
-    <nd ref='-44' />
+  <way id='-215' action='modify' visible='true'>
+    <nd ref='-85' />
+    <nd ref='-83' />
+    <nd ref='-81' />
     <tag k='test:id' v='w-south' />
     <tag k='test:section' v='roads-with-pois' />
   </way>
-  <way id='-122' action='modify' visible='true'>
-    <nd ref='-32' />
-    <nd ref='-30' />
-    <nd ref='-28' />
+  <way id='-213' action='modify' visible='true'>
+    <nd ref='-69' />
+    <nd ref='-67' />
+    <nd ref='-65' />
     <tag k='test:id' v='w-WE' />
     <tag k='test:section' v='building-on-street-corner' />
   </way>
-  <way id='-120' action='modify' visible='true'>
-    <nd ref='-26' />
-    <nd ref='-30' />
-    <nd ref='-24' />
+  <way id='-211' action='modify' visible='true'>
+    <nd ref='-63' />
+    <nd ref='-67' />
+    <nd ref='-61' />
     <tag k='test:id' v='w-NS' />
     <tag k='test:section' v='building-on-street-corner' />
   </way>
-  <way id='-118' action='modify' visible='true'>
-    <nd ref='-22' />
-    <nd ref='-20' />
-    <nd ref='-14' />
-    <nd ref='-18' />
-    <nd ref='-8' />
-    <nd ref='-16' />
-    <nd ref='-22' />
+  <way id='-209' action='modify' visible='true'>
+    <nd ref='-59' />
+    <nd ref='-57' />
+    <nd ref='-51' />
+    <nd ref='-55' />
+    <nd ref='-45' />
+    <nd ref='-53' />
+    <nd ref='-59' />
     <tag k='area' v='yes' />
     <tag k='test:id' v='w-building' />
     <tag k='test:section' v='building-on-street-corner' />
   </way>
+  <way id='-207' action='modify' visible='true'>
+    <nd ref='-43' />
+    <nd ref='-41' />
+    <nd ref='-39' />
+    <nd ref='-37' />
+    <nd ref='-35' />
+    <nd ref='-33' />
+    <tag k='test:id' v='w-south' />
+    <tag k='test:section' v='parallel-road' />
+  </way>
+  <way id='-205' action='modify' visible='true'>
+    <nd ref='-29' />
+    <nd ref='-27' />
+    <nd ref='-25' />
+    <nd ref='-23' />
+    <tag k='test:id' v='w-middle' />
+    <tag k='test:section' v='parallel-road' />
+  </way>
+  <way id='-203' action='modify' visible='true'>
+    <nd ref='-21' />
+    <nd ref='-19' />
+    <nd ref='-17' />
+    <nd ref='-15' />
+    <nd ref='-13' />
+    <nd ref='-11' />
+    <tag k='test:id' v='w-north' />
+    <tag k='test:section' v='parallel-road' />
+  </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' />
index 2566418e39fdcd0c0fc4b8880dfe5a568bd90855..c3ac9445fe55738c8e87f9f78dc855c91c0c2ba8 100644 (file)
@@ -119,10 +119,10 @@ def check_search_name_content(step):
                 else:
                     raise Exception("Cannot handle field %s in search_name table" % (k, ))
 
-@step(u'node (\d+) expands to housenumbers')
+@step(u'way (\d+) expands to housenumbers')
 def check_interpolated_housenumbers(step, nodeid):
     """Check that the exact set of housenumbers has been entered in
-       placex for the given source node. Expected are tow columns:
+       placex for the given source node. Expected are two columns:
        housenumber and centroid
     """
     numbers = {}
@@ -132,7 +132,8 @@ def check_interpolated_housenumbers(step, nodeid):
     cur = world.conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
     cur.execute("""SELECT DISTINCT housenumber,
                           ST_X(centroid) as clat, ST_Y(centroid) as clon
-                   FROM placex WHERE osm_type = 'N' and osm_id = %s""",
+                   FROM placex WHERE osm_type = 'W' and osm_id = %s
+                                 and class = 'place' and type = 'address'""",
                    (int(nodeid),))
     assert_equals(len(numbers), cur.rowcount)
     for r in cur:
@@ -140,6 +141,32 @@ def check_interpolated_housenumbers(step, nodeid):
         world.match_geometry((r['clat'], r['clon']), numbers[r["housenumber"]])
         del numbers[r["housenumber"]]
 
+@step(u'way (\d+) expands exactly to housenumbers ([0-9,]*)')
+def check_interpolated_housenumber_list(step, nodeid, numberlist):
+    """ Checks that the interpolated house numbers corresponds
+        to the given list.
+    """
+    expected = numberlist.split(',');
+    cur = world.conn.cursor()
+    cur.execute("""SELECT housenumber FROM placex
+                   WHERE osm_type = 'W' and osm_id = %s
+                     and class = 'place' and type = 'address'""", (int(nodeid),))
+    for r in cur:
+        assert_in(r[0], expected, "Unexpected house number %s for node %s." % (r[0], nodeid))
+        expected.remove(r[0])
+    assert_equals(0, len(expected), "Missing house numbers for way %s: %s" % (nodeid, expected))
+
+@step(u'way (\d+) expands to no housenumbers')
+def check_no_interpolated_housenumber_list(step, nodeid):
+    """ Checks that the interpolated house numbers corresponds
+        to the given list.
+    """
+    cur = world.conn.cursor()
+    cur.execute("""SELECT housenumber FROM placex
+                   WHERE osm_type = 'W' and osm_id = %s
+                     and class = 'place' and type = 'address'""", (int(nodeid),))
+    res = [r[0] for r in cur]
+    assert_equals(0, len(res), "Unexpected house numbers for way %s: %s" % (nodeid, res))
 
 @step(u'table search_name has no entry for (.*)')
 def check_placex_missing(step, osmid):
index 7d1ea8d3c11a59341d995ca3dfb1d1556d5377d0..14f17756b2a54d98648995fb3f7875a35ff69a46 100644 (file)
@@ -213,8 +213,8 @@ def import_database(step):
     world.run_nominatim_script('setup', 'create-functions', 'create-partition-functions')
     cur = world.conn.cursor()
     cur.execute("""insert into placex (osm_type, osm_id, class, type, name, admin_level,
-                              housenumber, street, addr_place, isin, postcode, country_code, extratags,
-                              geometry) select * from place""")
+                   housenumber, street, addr_place, isin, postcode, country_code, extratags,
+                   geometry) select * from place""")
     world.conn.commit()
     world.run_nominatim_script('setup', 'index', 'index-noanalyse')
     #world.db_dump_table('placex')
index 746485ac14b4bfb961e2e4d2274cf31cff2d9b04..e9561d1a9fd11b52653f8d383d7f5d9eb8872785 100644 (file)
@@ -94,7 +94,7 @@ def get_placeid(oid):
         q = 'SELECT place_id FROM placex where osm_type = %s and osm_id = %s and class = %s'
         params = (osmtype, osmid, cls)
     cur.execute(q, params)
-    assert_equals (cur.rowcount, 1)
+    assert_equals(cur.rowcount, 1, "%d rows found for place %s" % (cur.rowcount, oid))
     return cur.fetchone()[0]