]> git.openstreetmap.org Git - nominatim.git/commitdiff
interpolations: snap lines to points, not vice versa
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 8 Mar 2015 17:25:51 +0000 (18:25 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 8 Mar 2015 17:25:51 +0000 (18:25 +0100)
Avoids the occasional rounding problem which might occur when splitting
a line anywhere but on a support point, see postgis doc for ST_Split.

Fixes #253

sql/postgis_20_aux.sql
tests/features/db/import/interpolation.feature

index dc74e093b021ad929cbc1edc8f204f4a7ab348f0..749e2a43a474e2464be6c335299dc8cb27b97638 100644 (file)
@@ -4,7 +4,7 @@ CREATE OR REPLACE FUNCTION split_line_on_node(line GEOMETRY, point GEOMETRY)
 RETURNS GEOMETRY
   AS $$
 BEGIN
-  RETURN ST_Split(line, ST_ClosestPoint(line, point));
+  RETURN ST_Split(ST_Snap(line, point, 0.0005), point);
 END;
 $$
 LANGUAGE plpgsql;
index d70bf18adc55715c2166d5b8512c74a74824daf6..8fb3e606531d65decaa99e59cabfd8d3d53c0e7b 100644 (file)
@@ -229,8 +229,8 @@ Feature: Import of address interpolations
         Given the place nodes
           | osm_id | class | type  | housenumber | geometry
           | 1      | place | house | 2           | 1 1
-          | 2      | place | house |           | 1.001 1.001
-          | 3      | place | house |           | 1 1.001
+          | 2      | place | house | 14          | 1.001 1.001
+          | 3      | place | house | 10          | 1 1.001
         And the place ways
           | osm_id | class | type   | housenumber | geometry
           | 1      | place | houses | even        | 1 1, 1 1.001, 1.001 1.001
@@ -240,7 +240,52 @@ Feature: Import of address interpolations
         When importing
         Then way 1 expands to housenumbers
           | housenumber | centroid
-          | 6           | 1.0005,1.001
+          | 4           | 1,1.00025
+          | 6           | 1,1.0005
+          | 8           | 1,1.00075
+          | 12          | 1.0005,1.001
+
+     Scenario: Simple even four point interpolation
+        Given the place nodes
+          | osm_id | class | type  | housenumber | geometry
+          | 1      | place | house | 2           | 1 1
+          | 2      | place | house | 14          | 1.001 1.001
+          | 3      | place | house | 10          | 1 1.001
+          | 4      | place | house | 18          | 1.001 1.002
+        And the place ways
+          | osm_id | class | type   | housenumber | geometry
+          | 1      | place | houses | even        | 1 1, 1 1.001, 1.001 1.001, 1.001 1.002
+        And the ways
+          | id | nodes
+          | 1  | 1,3,2,4
+        When importing
+        Then way 1 expands to housenumbers
+          | housenumber | centroid
+          | 4           | 1,1.00025
+          | 6           | 1,1.0005
+          | 8           | 1,1.00075
+          | 12          | 1.0005,1.001
+          | 16          | 1.001,1.0015
+
+    Scenario: Reverse simple even three point interpolation
+        Given the place nodes
+          | osm_id | class | type  | housenumber | geometry
+          | 1      | place | house | 2           | 1 1
+          | 2      | place | house | 14          | 1.001 1.001
+          | 3      | place | house | 10          | 1 1.001
+        And the place ways
+          | osm_id | class | type   | housenumber | geometry
+          | 1      | place | houses | even        | 1.001 1.001, 1 1.001, 1 1
+        And the ways
+          | id | nodes
+          | 1  | 2,3,1
+        When importing
+        Then way 1 expands to housenumbers
+          | housenumber | centroid
+          | 4           | 1,1.00025
+          | 6           | 1,1.0005
+          | 8           | 1,1.00075
+          | 12          | 1.0005,1.001
 
     Scenario: Even three point interpolation with odd center point
         Given the place nodes
@@ -359,4 +404,21 @@ Feature: Import of address interpolations
        And way 10 expands exactly to housenumbers 4
        And way 11 expands exactly to housenumbers 14
 
+    Scenario: Geometry of points and way don't match (github #253)
+        Given the place nodes
+          | osm_id | class | type   | housenumber | geometry
+          | 1      | place | house  | 10          | 144.9632341 -37.76163
+          | 2      | place | house  | 6           | 144.9630541 -37.7628174
+          | 3      | shop  | supermarket | 2      | 144.9629794 -37.7630755
+        And the place ways
+          | osm_id | class | type   | housenumber | geometry
+          | 1      | place | houses | even        | 144.9632341 -37.76163,144.9630541 -37.7628172,144.9629794 -37.7630755
+        And the ways
+          | id | nodes
+          | 1  | 1,2,3
+        When importing
+        Then way 1 expands to housenumbers
+          | housenumber  | centroid
+          | 4            | 144.963016723312,-37.7629464422819+-0.000005
+          | 8            | 144.9631440856,-37.762223694978+-0.000005