From: Regina Obe Date: Sat, 8 Apr 2017 12:25:39 +0000 (+0000) Subject: Get rid of knn tests where multiple records have the same distances X-Git-Tag: 2.4.0alpha~137 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f1f5e01289168d9b851ea7783a59a16c1ebb3bfc;p=postgis Get rid of knn tests where multiple records have the same distances closes #3649 for 2.4 git-svn-id: http://svn.osgeo.org/postgis/trunk@15349 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/regress/knn_recheck.sql b/regress/knn_recheck.sql index c216eadc1..6d9e0e2aa 100644 --- a/regress/knn_recheck.sql +++ b/regress/knn_recheck.sql @@ -14,7 +14,7 @@ FROM generate_series(0,3) i; INSERT INTO knn_recheck_geom(gid,geom) -SELECT 600000 + ROW_NUMBER() OVER(ORDER BY gid) AS gid, ST_Translate(ST_Buffer(geom,8,15),100,300) As geom +SELECT 600000 + ROW_NUMBER() OVER(ORDER BY gid) AS gid, ST_Translate(ST_Buffer(geom,8,15 ),100,300) As geom FROM knn_recheck_geom WHERE gid IN(1000, 10000, 2000,3000); @@ -37,8 +37,8 @@ FROM knn_recheck_geom As a LEFT JOIN LATERAL ( SELECT gid, geom, a.geom <-> g.geom As knn_dist FROM knn_recheck_geom As g WHERE a.gid <> g.gid ORDER BY a.geom <-> g.geom LIMIT 5) As b ON true - WHERE a.gid IN(1,500101,500003) -ORDER BY a.gid, true_rn; + WHERE a.gid IN(1,500101) +ORDER BY a.gid, true_rn, b.gid; -- create index and repeat CREATE INDEX idx_knn_recheck_geom_gist ON knn_recheck_geom USING gist(geom); @@ -60,8 +60,8 @@ FROM knn_recheck_geom As a LEFT JOIN LATERAL ( SELECT gid, geom, a.geom <-> g.geom As knn_dist FROM knn_recheck_geom As g WHERE a.gid <> g.gid ORDER BY a.geom <-> g.geom LIMIT 5) As b ON true - WHERE a.gid IN(1,500101,500003) -ORDER BY a.gid, true_rn; + WHERE a.gid IN(1,500101) +ORDER BY a.gid, true_rn, b.gid; DROP TABLE knn_recheck_geom; @@ -102,7 +102,7 @@ SELECT '#3g' As t, a.gid, ARRAY(SELECT gid FROM knn_recheck_geog As g WHERE a.gid <> g.gid ORDER BY ST_Distance(a.geog, g.geog, false) LIMIT 5) = ARRAY(SELECT gid FROM knn_recheck_geog As g WHERE a.gid <> g.gid ORDER BY a.geog <-> g.geog LIMIT 5) As dist_order_agree FROM knn_recheck_geog As a - WHERE a.gid IN(500000,500010,1000,2614) + WHERE a.gid IN(500000,500010,1000) ORDER BY a.gid; @@ -121,11 +121,11 @@ SELECT '#2g' As t, gid, ST_Distance( 'LINESTRING(75 10, 75 12, 80 20)'::geograph FROM knn_recheck_geog ORDER BY 'LINESTRING(75 10, 75 12, 80 20)'::geography <-> geog LIMIT 5; -SELECT '#3g' As t, a.gid, ARRAY(SELECT gid +SELECT '#3g' As t, a.gid, ARRAY(SELECT g.gid FROM knn_recheck_geog As g WHERE a.gid <> g.gid ORDER BY ST_Distance(a.geog, g.geog, false) LIMIT 5) = ARRAY(SELECT gid FROM knn_recheck_geog As g WHERE a.gid <> g.gid ORDER BY a.geog <-> g.geog LIMIT 5) As dist_order_agree FROM knn_recheck_geog As a - WHERE a.gid IN(500000,500010,1000,2614) + WHERE a.gid IN(500000,500010,1000) ORDER BY a.gid; DROP TABLE knn_recheck_geog; @@ -189,8 +189,8 @@ FROM knn_recheck_geom_nd As a LEFT JOIN LATERAL ( SELECT gid, geom, a.geom <<->> g.geom As knn_dist FROM knn_recheck_geom_nd As g WHERE a.gid <> g.gid ORDER BY a.geom <<->> g.geom LIMIT 5) As b ON true - WHERE a.gid IN(1,500003,600001) -ORDER BY a.gid, true_rn; + WHERE a.gid IN(1,600001) +ORDER BY a.gid, true_rn, b.gid; -- create index and repeat CREATE INDEX idx_knn_recheck_geom_nd_gist ON knn_recheck_geom_nd USING gist(geom gist_geometry_ops_nd); @@ -214,8 +214,8 @@ FROM knn_recheck_geom_nd As a LEFT JOIN LATERAL ( SELECT gid, geom, a.geom <<->> g.geom As knn_dist FROM knn_recheck_geom_nd As g WHERE a.gid <> g.gid ORDER BY a.geom <<->> g.geom LIMIT 5) As b ON true - WHERE a.gid IN(1,500003,600001) -ORDER BY a.gid, true_rn; + WHERE a.gid IN(1,600001) +ORDER BY a.gid, true_rn, b.gid; DROP TABLE knn_recheck_geom_nd; diff --git a/regress/knn_recheck_expected b/regress/knn_recheck_expected index 9c37f2373..c280daaaa 100644 --- a/regress/knn_recheck_expected +++ b/regress/knn_recheck_expected @@ -13,11 +13,6 @@ #3|1|147|9.6598|9.6598 #3|1|291|10.8780|10.8780 #3|1|292|13.4929|13.4929 -#3|500003|500004|1447.7424|1447.7424 -#3|500003|500002|1447.7424|1447.7424 -#3|500003|500001|3423.4486|3423.4486 -#3|500003|500005|3423.4486|3423.4486 -#3|500003|22837|5123.7770|5123.7770 #3|500101|500000|0.0000|0.0000 #3|500101|600004|971.4947|971.4947 #3|500101|600001|1106.0791|1106.0791 @@ -38,11 +33,6 @@ #3|1|147|9.6598|9.6598 #3|1|291|10.8780|10.8780 #3|1|292|13.4929|13.4929 -#3|500003|500004|1447.7424|1447.7424 -#3|500003|500002|1447.7424|1447.7424 -#3|500003|500001|3423.4486|3423.4486 -#3|500003|500005|3423.4486|3423.4486 -#3|500003|22837|5123.7770|5123.7770 #3|500101|500000|0.0000|0.0000 #3|500101|600004|971.4947|971.4947 #3|500101|600001|1106.0791|1106.0791 @@ -59,7 +49,6 @@ #2g|30695|21264.3654|21264.3654 #2g|30512|25313.2118|25313.2118 #3g|1000|t -#3g|2614|t #3g|500000|t #1g|500000|0.0000|0.0000 #1g|600003|69974.6935|69974.6935 @@ -72,7 +61,6 @@ #2g|30695|21264.3654|21264.3654 #2g|30512|25313.2118|25313.2118 #3g|1000|t -#3g|2614|t #3g|500000|t #1nd-3|290|260.6797|260.6797 #1nd-3|287|264.3000|264.3000 @@ -89,11 +77,6 @@ #3nd-3|1|294|9.6598|9.6598 #3nd-3|1|582|10.8780|10.8780 #3nd-3|1|583|13.4929|13.4929 -#3nd-3|500003|500004|1448.3262|1448.3262 -#3nd-3|500003|500002|1448.3262|1448.3262 -#3nd-3|500003|500001|3424.9088|3424.9088 -#3nd-3|500003|500005|3424.9088|3424.9088 -#3nd-3|500003|45674|5153.7747|5153.7747 #3nd-3|600001|600002|0.0000|0.0000 #3nd-3|600001|9752|54.2730|54.2730 #3nd-3|600001|9461|54.3900|54.3900 @@ -114,11 +97,6 @@ #3nd-3|1|294|9.6598|9.6598 #3nd-3|1|582|10.8780|10.8780 #3nd-3|1|583|13.4929|13.4929 -#3nd-3|500003|500004|1448.3262|1448.3262 -#3nd-3|500003|500002|1448.3262|1448.3262 -#3nd-3|500003|500001|3424.9088|3424.9088 -#3nd-3|500003|500005|3424.9088|3424.9088 -#3nd-3|500003|45674|5153.7747|5153.7747 #3nd-3|600001|600002|0.0000|0.0000 #3nd-3|600001|9752|54.2730|54.2730 #3nd-3|600001|9461|54.3900|54.3900