[postgis-tickets] [PostGIS] #3718: Invalid edge (no two distinct vertices exist)
PostGIS
trac at osgeo.org
Tue Feb 21 07:06:43 PST 2017
#3718: Invalid edge (no two distinct vertices exist)
-------------------------------------------------+-------------------------
Reporter: Andreas Wicht | Owner: strk
Type: enhancement | Status: new
Priority: high | Milestone: PostGIS
| 2.3.3
Component: topology | Version: 2.3.x
Keywords: topology, tolerance, 0-length, edge |
-------------------------------------------------+-------------------------
Picking up following conversation (10:47:49 - 12:02:32) on #postgis:
http://irclogs.geoapt.com/postgis/%23postgis.2017-02-09.log
I am getting following error message while updating geometries within a
topology.
{{{
SQL Error [XX000]: ERROR: Invalid edge (no two distinct vertices exist)
Where: PL/pgSQL function
topology.totopogeom(geometry,topology.topogeometry,double precision) line
111 at FOR over SELECT rows
}}}
Following subset of the data can be used to reproduce the error:
{{{
#!sql
create table test.mini (
id serial,
src text,
geom geometry(Multipolygon,4326)
);
-- fill the table
insert into test.mini (src, geom)
values
('orig', st_geomfromewkt('SRID=4326;MULTIPOLYGON(((-5.113
50.2643862560647,-5.113006 50.264387,-5.114048 50.264377,-5.114106
50.264376,-5.11425 50.264374,-5.114291 50.264374,-5.114854
50.264367,-5.115803 50.264359,-5.115859 50.264359,-5.11626
50.264356,-5.116537 50.264353,-5.116581 50.264353,-5.118384
50.264338,-5.118422 50.264338,-5.118885 50.264334,-5.119122
50.264332,-5.11915 50.264207,-5.119288 50.2636,-5.119185
50.263454,-5.118613 50.263448,-5.118556 50.263293,-5.118641
50.263161,-5.11872 50.263037,-5.11906 50.263071,-5.119224
50.263074,-5.119273 50.263075,-5.119515 50.26308,-5.119295
50.262249,-5.119283 50.262202,-5.119242 50.262048,-5.119339
50.26202,-5.119398 50.262003,-5.120092 50.261803,-5.120125
50.261794,-5.120956 50.261554,-5.120869 50.261412,-5.120516
50.26083,-5.12029 50.260599,-5.120192 50.260499,-5.12009
50.260394,-5.120005 50.260055,-5.119984 50.259972,-5.119871
50.259712,-5.119971 50.259505,-5.120458 50.259197,-5.120363
50.259127,-5.11921 50.258276,-5.118999 50.257862,-5.118948
50.257652,-5.118934 50.257593,-5.125247 50.256854,-5.125631
50.257041,-5.127288 50.25785,-5.127077 50.258466,-5.126626
50.259523,-5.126434 50.259988,-5.126492 50.260494,-5.126249
50.260532,-5.125334 50.260676,-5.123779 50.259652,-5.122835
50.259806,-5.123177 50.260209,-5.123252 50.260297,-5.123723
50.260438,-5.123965 50.26051,-5.12523 50.260692,-5.125194
50.261171,-5.125172 50.261466,-5.125409 50.262131,-5.12543
50.262461,-5.125433 50.262507,-5.125451 50.262781,-5.125472
50.263103,-5.125343 50.263377,-5.125208 50.263666,-5.125185
50.263703,-5.125167 50.263732,-5.124252 50.265221,-5.125725
50.265752,-5.125814 50.265784,-5.125852 50.265798,-5.126139
50.265901,-5.12669 50.266094,-5.127098 50.266236,-5.129076
50.266928,-5.129183 50.266965,-5.129961 50.267237,-5.13
50.267251,-5.131081 50.26763,-5.132104 50.268,-5.134811 50.268861,-5.1349
50.2688832940013,-5.1349 50.2695,-5.113 50.2695,-5.113
50.2643862560647)))')),
('orig', st_geomfromewkt('SRID=4326;MULTIPOLYGON(((-5.12523
50.260692,-5.125334 50.260676,-5.126249 50.260532,-5.126492
50.260494,-5.126434 50.259988,-5.126626 50.259523,-5.127077
50.258466,-5.127288 50.25785,-5.125631 50.257041,-5.125247
50.256854,-5.125119 50.256791,-5.124987 50.256727,-5.12285
50.25617,-5.122946 50.25607,-5.123096 50.255991,-5.123756
50.255915,-5.123967 50.255802,-5.123937 50.255409,-5.12404
50.255148,-5.123956 50.25483,-5.124106 50.254415,-5.124191
50.254237,-5.124236 50.254143,-5.124531 50.253528,-5.125362
50.25229,-5.125764 50.251672,-5.125907 50.250856,-5.125861
50.250695,-5.125753 50.250318,-5.12555616566265 50.25,-5.1349
50.25,-5.1349 50.2688832940013,-5.134811 50.268861,-5.132104
50.268,-5.131081 50.26763,-5.13 50.267251,-5.129961 50.267237,-5.129183
50.266965,-5.129076 50.266928,-5.127098 50.266236,-5.12669
50.266094,-5.126139 50.265901,-5.125852 50.265798,-5.125814
50.265784,-5.125725 50.265752,-5.124252 50.265221,-5.125167
50.263732,-5.125185 50.263703,-5.125208 50.263666,-5.125343
50.263377,-5.125472 50.263103,-5.125451 50.262781,-5.125433
50.262507,-5.12543 50.262461,-5.125409 50.262131,-5.125172
50.261466,-5.125194 50.261171,-5.12523 50.260692)))')),
('orig',
st_geomfromewkt('SRID=4326;MULTIPOLYGON(((-5.12555616566265
50.25,-5.125753 50.250318,-5.125861 50.250695,-5.125907
50.250856,-5.125764 50.251672,-5.125362 50.25229,-5.124531
50.253528,-5.124236 50.254143,-5.124191 50.254237,-5.124106
50.254415,-5.123956 50.25483,-5.12404 50.255148,-5.123937
50.255409,-5.123967 50.255802,-5.123756 50.255915,-5.123096
50.255991,-5.122946 50.25607,-5.12285 50.25617,-5.124987
50.256727,-5.125119 50.256791,-5.125247 50.256854,-5.118934
50.257593,-5.118948 50.257652,-5.118999 50.257862,-5.11921
50.258276,-5.120363 50.259127,-5.120458 50.259197,-5.119971
50.259505,-5.119871 50.259712,-5.119984 50.259972,-5.120005
50.260055,-5.12009 50.260394,-5.120192 50.260499,-5.12029
50.260599,-5.120516 50.26083,-5.120869 50.261412,-5.120956
50.261554,-5.120125 50.261794,-5.120092 50.261803,-5.119398
50.262003,-5.119339 50.26202,-5.119242 50.262048,-5.119283
50.262202,-5.119295 50.262249,-5.119515 50.26308,-5.119273
50.263075,-5.119224 50.263074,-5.11906 50.263071,-5.11872
50.263037,-5.118641 50.263161,-5.118556 50.263293,-5.118613
50.263448,-5.119185 50.263454,-5.119288 50.2636,-5.11915
50.264207,-5.119122 50.264332,-5.118885 50.264334,-5.118422
50.264338,-5.118384 50.264338,-5.116581 50.264353,-5.116537
50.264353,-5.11626 50.264356,-5.115859 50.264359,-5.115803
50.264359,-5.114854 50.264367,-5.114291 50.264374,-5.11425
50.264374,-5.114106 50.264376,-5.114048 50.264377,-5.113006
50.264387,-5.113 50.2643862560647,-5.113 50.25,-5.12555616566265
50.25)),((-5.125334 50.260676,-5.12523 50.260692,-5.123965
50.26051,-5.123723 50.260438,-5.123252 50.260297,-5.123177
50.260209,-5.122835 50.259806,-5.123779 50.259652,-5.125334
50.260676)))')),
('edited', st_geomfromewkt('SRID=4326;MULTIPOLYGON(((-5.121593
50.260234,-5.124099 50.260207,-5.124068 50.258374,-5.12517
50.258654,-5.126523 50.259773,-5.126434 50.259988,-5.126492
50.260494,-5.126249 50.260532,-5.125334 50.260676,-5.125194
50.261171,-5.125172 50.261466,-5.125409 50.262131,-5.12543
50.262461,-5.125433 50.262507,-5.125451 50.262781,-5.125472
50.263103,-5.125343 50.263377,-5.125208 50.263666,-5.125185
50.263703,-5.125167 50.263732,-5.124252 50.265221,-5.125725
50.265752,-5.125814 50.265784,-5.125852 50.265798,-5.126139
50.265901,-5.12669 50.266094,-5.127098 50.266236,-5.129076
50.266928,-5.129183 50.266965,-5.129961 50.267237,-5.13
50.267251,-5.131081 50.26763,-5.132104 50.268,-5.134811 50.268861,-5.1349
50.2688832940013,-5.1349 50.2695,-5.113 50.2695,-5.113
50.2643862560647,-5.113006 50.264387,-5.114048 50.264377,-5.114106
50.264376,-5.11425 50.264374,-5.114291 50.264374,-5.114854
50.264367,-5.115803 50.264359,-5.115859 50.264359,-5.11626
50.264356,-5.116537 50.264353,-5.116581 50.264353,-5.117946
50.264342,-5.118384 50.264338,-5.118422 50.264338,-5.118885
50.264334,-5.120389 50.264424,-5.120417 50.264299,-5.120555
50.263692,-5.120452 50.263546,-5.118613 50.263448,-5.118556
50.263293,-5.118641 50.263161,-5.11872 50.263037,-5.11906
50.263071,-5.119224 50.263074,-5.119273 50.263075,-5.119515
50.26308,-5.119295 50.262249,-5.119283 50.262202,-5.119242
50.262048,-5.119339 50.26202,-5.119398 50.262003,-5.120092
50.261803,-5.120125 50.261794,-5.120956 50.261554,-5.120869
50.261412,-5.120516 50.26083,-5.120486 50.260799,-5.12029
50.260599,-5.120192 50.260499,-5.12009 50.260394,-5.120005
50.260055,-5.119984 50.259972,-5.119871 50.259712,-5.119971
50.259505,-5.120458 50.259197,-5.120363 50.259127,-5.11921
50.258276,-5.120889 50.257364,-5.122878 50.258209,-5.121593
50.260234)))')),
('edited', st_geomfromewkt('SRID=4326;MULTIPOLYGON(((-5.125194
50.261171,-5.125334 50.260676,-5.126249 50.260532,-5.126492
50.260494,-5.126434 50.259988,-5.126523 50.259773,-5.126626
50.259523,-5.127077 50.258466,-5.127288 50.25785,-5.125631
50.257041,-5.125247 50.256854,-5.125119 50.256791,-5.124987
50.256727,-5.12285 50.25617,-5.122946 50.25607,-5.123096
50.255991,-5.123756 50.255915,-5.123967 50.255802,-5.123937
50.255409,-5.12404 50.255148,-5.123956 50.25483,-5.124106
50.254415,-5.124191 50.254237,-5.124236 50.254143,-5.124531
50.253528,-5.125362 50.25229,-5.125764 50.251672,-5.125907
50.250856,-5.125861 50.250695,-5.125753 50.250318,-5.12555616566265
50.25,-5.1349 50.25,-5.1349 50.2688832940013,-5.134811 50.268861,-5.132104
50.268,-5.131081 50.26763,-5.13 50.267251,-5.129961 50.267237,-5.129183
50.266965,-5.129076 50.266928,-5.127098 50.266236,-5.12669
50.266094,-5.126139 50.265901,-5.125852 50.265798,-5.125814
50.265784,-5.125725 50.265752,-5.124252 50.265221,-5.125167
50.263732,-5.125185 50.263703,-5.125208 50.263666,-5.125343
50.263377,-5.125472 50.263103,-5.125451 50.262781,-5.125433
50.262507,-5.12543 50.262461,-5.125409 50.262131,-5.125172
50.261466,-5.125194 50.261171)))')),
('edited', st_geomfromewkt('SRID=4326;MULTIPOLYGON(((-5.126523
50.259773,-5.125554 50.258972,-5.12517 50.258654,-5.124068
50.258374,-5.124099 50.260207,-5.121593 50.260234,-5.122878
50.258209,-5.120889 50.257364,-5.11921 50.258276,-5.120363
50.259127,-5.120458 50.259197,-5.119971 50.259505,-5.119871
50.259712,-5.119984 50.259972,-5.120005 50.260055,-5.12009
50.260394,-5.120192 50.260499,-5.12029 50.260599,-5.120486
50.260799,-5.120516 50.26083,-5.120869 50.261412,-5.120956
50.261554,-5.120125 50.261794,-5.120092 50.261803,-5.119398
50.262003,-5.119339 50.26202,-5.119242 50.262048,-5.119283
50.262202,-5.119295 50.262249,-5.119515 50.26308,-5.119273
50.263075,-5.119224 50.263074,-5.11906 50.263071,-5.11872
50.263037,-5.118641 50.263161,-5.118556 50.263293,-5.118613
50.263448,-5.120452 50.263546,-5.120555 50.263692,-5.120417
50.264299,-5.120389 50.264424,-5.118885 50.264334,-5.118422
50.264338,-5.118384 50.264338,-5.116581 50.264353,-5.116537
50.264353,-5.11626 50.264356,-5.115859 50.264359,-5.115803
50.264359,-5.114854 50.264367,-5.114291 50.264374,-5.11425
50.264374,-5.114106 50.264376,-5.114048 50.264377,-5.113006
50.264387,-5.113 50.2643862560647,-5.113 50.25,-5.12555616566265
50.25,-5.125753 50.250318,-5.125861 50.250695,-5.125907
50.250856,-5.125764 50.251672,-5.125362 50.25229,-5.124531
50.253528,-5.124236 50.254143,-5.124191 50.254237,-5.124106
50.254415,-5.123956 50.25483,-5.12404 50.255148,-5.123937
50.255409,-5.123967 50.255802,-5.123756 50.255915,-5.123096
50.255991,-5.122946 50.25607,-5.12285 50.25617,-5.124987
50.256727,-5.125119 50.256791,-5.125247 50.256854,-5.125631
50.257041,-5.127288 50.25785,-5.127077 50.258466,-5.126626
50.259523,-5.126523 50.259773)))'))
;
-- select topology.dropTopology('topo_test_mini');
-- create the topology
select topology.CreateTopology('topo_test_mini',
4326);
-- add the topogeom column
select topology.AddTopoGeometryColumn('topo_test_mini',
'test',
'mini',
'topo_geom',
'POLYGON');
-- import the polygons to the topology which represent the status of the
topology before the geometries were edited
update test.mini
set topo_geom = topology.toTopoGeom(geom, 'topo_test_mini', 1, 1e-6)
where src = 'orig';
-- import the polygons to the topology which represent the status of the
topology after the geometries were edited - the error will occur here
update test.mini
set topo_geom = topology.toTopoGeom(geom, 'topo_test_mini', 1, 1e-6)
where src = 'edited';
}}}
PostGIS Version:
`POSTGIS="2.3.2 r15302" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.9.2, 08
September 2015" GDAL="GDAL 1.11.3, released 2015/09/16" LIBXML="2.9.3"
LIBJSON="0.11.99" (core procs from "2.3.1 r15264" need upgrade) TOPOLOGY
(topology procs from "2.3.1 r15264" need upgrade) RASTER (raster procs
from "2.3.1 r15264" need upgrade)`
Would there be implications which speak against allowing line-segments
with a length of 0?
How else **besides** reducing the tolerance (e.g. to 1e-7) could one deal
with such a problem? In my test data set this error occurs more than once.
As this represents a real world example I am worried, that this might
actually be a really common error to happen.
--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/3718>
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