[PostGIS] #6096: false positive values from topology.findvertexsegmentpairsbelowdistance
PostGIS
trac at osgeo.org
Sat Jul 11 02:38:25 PDT 2026
#6096: false positive values from topology.findvertexsegmentpairsbelowdistance
-------------------------------+---------------------------
Reporter: Lars Aksel Opsahl | Owner: strk
Type: defect | Status: new
Priority: medium | Milestone: PostGIS 3.6.5
Component: topology | Version: 3.6.x
Keywords: |
-------------------------------+---------------------------
Here i as very simple testcase involving only 3 edges and 4 nodes (See
attached image) where I do not understand why
findvertexsegmentpairsbelowdistance return any rows after added last edge.
This is tested on (this source seems to be equals to master now)
{{{
POSTGIS="3.7.0dev 3.6.0rc2-473-g260127869" [EXTENSION] PGSQL="160"
GEOS="3.14.1-CAPI-1.20.5" PROJ="9.8.1 NETWORK_ENABLED=OFF
URL_ENDPOINT=https://cdn.proj.org
USER_WRITABLE_DIRECTORY=/Users/lop/Library/Application Support/proj
DATABASE_PATH=/opt/homebrew/Cellar/proj/9.8.1/share/proj/proj.db"
(compiled against PROJ 9.8.1) LIBXML="2.9.13" LIBJSON="0.18"
LIBPROTOBUF="1.5.2" WAGYU="0.5.0 (Internal)" TOPOLOGY
}}}
First we create topology and add 2 edges and run
FindVertexSegmentPairsBelowDistance and we find no rows
{{{
SELECT topology.CreateTopology('test_topo', 4258);
-- length degrees/meter 0.00012703297390676815, 7.493098741177089
SELECT topology.TopoGeo_AddLineString(
'test_topo',
'0102000020A210000002000000140ABB6EA5D71640BE3992239B764D40B0F58F6FC6D7164070DDBCB19B764D40',
-1
);
-- length degrees/meter 0.003258284155984599, 219.199284164798
SELECT topology.TopoGeo_AddLineString(
'test_topo',
'0102000020A210000043000000B0F58F6FC6D7164070DDBCB19B764D4015A3C3FEC3D71640053545C59C764D40C441CFAEC1D716403B4111D59D764D40F6773F07BFD71640992AF7FB9E764D4002C3C8D6BBD71640381A8D3DA0764D40F0138846B9D71640AB2C8464A1764D404C63BE22B7D71640E6007977A2764D400AA7863AB6D71640B4B2053DA3764D402167506CB5D716408371B33CA4764D4020EF5FAFB6D71640523997A1A5764D40E38AC2A6B7D716409C22B3FEA6764D4050102D65B9D716400377F7D0A7764D40E60D3260BAD71640CBA19F15A8764D4021CCAB5ABBD71640D1B8045BA8764D40B38AB91CBED716400553AEDCA8764D40C47D5489C1D716404ED51555A9764D400A86CD9EC7D71640A1D545E6A9764D40737BCFF4CFD71640A79FFD9EAA764D4045076813DBD7164050651F75AB764D406370ECE1E2D716406A2A3809AC764D40D870ED1FECD7164037605CB4AC764D4067929793F5D71640DA50B437AD764D401164A220FAD71640BB2EF676AD764D406F9986BD08D81640232E3624AE764D400FCA4A1D14D8164033AE9AA4AE764D40FDFC606D1FD81640E00123EDAE764D40E7FF74442AD816407FE0553BAF764D401B99230D38D816407CA5B28FAF764D407C2AAC3646D8164067C6FFCFAF764D402D2052F856D81640B882BE20B0764D400632A66763D816406826A65FB0764D40F16AEE2872D81640F9B397BEB0764D40195FBF2D7CD816403E8BC9FDB0764D40873577EE9CD81640D3DB09E7B1764D40F902DA829ED816405ED18DF3B1764D4055F67C41B2D816400F2CF38FB2764D40FE839CB5CAD81640EC61942EB3764D40CE5FA9CBD9D816403F4B4589B3764D4092BAD187ECD81640EE7D3FF2B3764D400E0637AEFBD81640AA0CF846B4764D407FCFF1420AD91640E258AD93B4764D40683A085A20D916401FFA6302B5764D403206B4E931D916405B415158B5764D4072222D0643D91640A00E5CACB5764D40166AA6EA58D91640FF603120B6764D406AA71D6366D916403542E153B6764D40E200F78D77D91640C4671D95B6764D409D69335384D91640ED7A2CBFB6764D4041AF95AA91D91640F6CD7BF0B6764D400848C2BA9BD9164025DA8D11B7764D40A36E527CA4D91640E678CC2DB7764D40B709B628B5D916406D324B5DB7764D4010A24944C6D91640BF73EF93B7764D406FA30E3AD7D9164024CC38CEB7764D40455A71A2EAD916406E52C30CB8764D408A52BAF7FDD91640C5E90955B8764D40FB0D411411DA16401004A29BB8764D40E3A3E4581DDA16403DB60AC6B8764D408235534B25DA1640652A9BDEB8764D4014D1610B34DA164039610E11B9764D40280C59AC43DA1640C452CA4EB9764D40AA5C015E4ADA164068B18D5FB9764D407D27C9EE54DA16400C1B4780B9764D40E54246D561DA16407860B2ACB9764D40A0A4E5E671DA1640170B3BE0B9764D402E7F73F781DA1640995C5524BA764D40BD0BDE2293DA1640E4CBD061BA764D40',
-1
);
SELECT * FROM topology.FindVertexSegmentPairsBelowDistance(
'test_topo',
1e-7
);
}}}
Then we add the last line that connects to the common node for the two
first edges.
{{{
-- length degrees/meter 0.0011735358268378264, 128.4983388560817
SELECT topology.TopoGeo_AddLineString(
'test_topo',
'0102000020A210000027000000B0F58F6FC6D7164070DDBCB19B764D40CF154E71C6D716400EE6FCB09B764D40528C13F2C6D71640C0472D789B764D4052A9A2F4C8D7164096B1DB349A764D40C4D12755CAD716402AA77E7999764D4044CDE1A6CAD71640F912CE9398764D40BBA76ED9CAD71640B326A5C797764D4007B85C5ACBD71640D31470C296764D40B36EA1BCCBD716407BD6F19895764D40C4D2FD4FCCD71640482FBF8A94764D4065823702CDD71640023DDC4493764D4080D44CB1CDD71640D841A44F92764D40C59BB2DDCDD71640DBDED39A91764D403031991ECED71640AA77E08D90764D40A2F8D900CED71640489CF9638F764D40BE86A089CDD7164028A35A168E764D4039810998CCD716405A3FC74A8D764D4025FFFB8BCCD7164078068D658C764D407D923A66CCD716404A9326A28B764D4046EF061DCAD71640DFECD9EC8A764D40E146A265C7D7164015B5D14D8A764D4062ED7FC4C3D71640D002A3BE89764D407DF8A028BFD71640AFEEE29D88764D401CF1F007BCD7164086F147D187764D40C7F09DAEB9D71640FAF3F52187764D401CE0232CB9D71640D1FC7DE786764D4035481D9EB8D7164048A8FEAC86764D4068AECCB1B8D71640C607861886764D4038C9A78FB9D71640B782828E85764D40774ABFA4BCD7164082D70AE783764D40904279A9BFD716400D1B8BA182764D40669F4FE9C2D71640EA228D3C81764D40A572AC5FC3D716408406BFCA7F764D40A851BC6DC3D716404D5FC81A7E764D40996647BCC7D71640408EF21F7A764D40C8B53DFCC7D716402808A56079764D4074900168C8D716401E83457778764D40D08B1742C9D71640E2EB9F7777764D40A9439B1ECAD7164043C6A22576764D40',
-1
);
SELECT * FROM topology.FindVertexSegmentPairsBelowDistance(
'test_topo',
1e-7
);
}}}
and we return this 4 rows
{{{
seg_edge | segno | vert_edge | vertno | vert_geom
----------+-------+-----------+--------+----------------------------------------------------
1 | 1 | 3 | 2 |
0101000020A2100000CF154E71C6D716400EE6FCB09B764D40
3 | 2 | 1 | 2 |
0101000020A2100000B0F58F6FC6D7164070DDBCB19B764D40
3 | 2 | 2 | 1 |
0101000020A2100000B0F58F6FC6D7164070DDBCB19B764D40
2 | 1 | 3 | 2 |
0101000020A2100000CF154E71C6D716400EE6FCB09B764D40
(4 rows)
}}}
I do understand why rows are returned.
--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/6096>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.
More information about the postgis-tickets
mailing list