If you don't use any topology at all (you don't have data wich should share bondaries), you can just use st_makevalid something like update my_table set (geom) = (ST_makeValid(geom)) ; for all your table
If your data is topological, you are in trouble :-/ You could try to use Postgis Topology and pray for no error, or use GRASS. Cheers, Rémi-C 2014-12-02 15:45 GMT+01:00 Luís Miguel Royo Pérez < [email protected]>: > Thank you Rémi, > > I think I have mixed up some issues. I thought the error was produced by > the problematic layer, but is mapa_ruido_dia the problem, it's a completly > mess :( > > I have tried to clean the layer, but I don't know how exactly should I > proceed. > > Can anyone lead me in this task with some links or tips? > > Thank you!! > > > > > On 12/02/2014 11:49 AM, Rémi Cura wrote: > > Hey, > some common answer about precision issue : > > > 1. : offset your coordinate to gain in precision : > 723120.23091093975 4379700.195452339 -> 120.23091093975XXX , > 700.195452339XXXX > 2. snap to grid you input data > > 3. check that your input geoms are valid : st_isvalid : st_makevalid() > > Cheers, > Rémi-C > > 2014-12-02 11:45 GMT+01:00 Luís Miguel Royo Pérez < > [email protected]>: > >> Hi everyone, >> >> I'm trying to perform a quite simple analysis in Postgis, but I'm facing >> a TopologyException where there's no features. >> >> You can find the data I'm using in this link >> <https://mega.co.nz/#%21pFgnCBoA%21zx-Tb78nPGzL7Fcbw7dMheSbIrMfRJjJ9yV1Qv7Wx6o> >> . >> >> What I try to do is the next: >> >> - First I want to create a buffer for emt_paradas, and the layer >> valenbisi, and then intersect them, the result I will call "intersect_1". >> >> select st_intersection(buf_emt.st_union,buf_valenbisi.st_union) >> from >> (SELECT ST_union(st_buffer(emt_paradas.geom, 200)) FROM emt_paradas )as >> buf_emt, >> (SELECT ST_union(st_buffer(valenbisi.geom, 200)) FROM valenbisi )as >> buf_valenbisi >> >> >> - Second, I want to create a buffer for carril_bici, and intersect >> with "intersect_1". The result I will call "intersect_2". >> >> select >> st_intersection(buf_carril_bici.st_union,inter_emt_valenbisi.st_intersection) >> from >> (select st_intersection(buf_emt.st_union,buf_valenbisi.st_union) >> from >> (SELECT ST_union(st_buffer(emt_paradas.geom, 200)) FROM emt_paradas )as >> buf_emt, >> (SELECT ST_union(st_buffer(valenbisi.geom, 200)) FROM valenbisi )as >> buf_valenbisi) as intersect_1 >> >> >> - Third, I want to create a buffer for layer ocio and make a >> difference with "intersect_2". The result I will call: "diff_1". >> >> select st_difference(intersec_2.st_intersection, buf_ocio.st_union) >> from >> (select >> st_intersection(buf_carril_bici.st_union,inter_emt_valenbisi.st_intersection) >> from >> (select st_intersection(buf_emt.st_union,buf_valenbisi.st_union) >> from >> (SELECT ST_union(st_buffer(emt_paradas.geom, 200)) FROM emt_paradas )as >> buf_emt, >> (SELECT ST_union(st_buffer(valenbisi.geom, 200)) FROM valenbisi )as >> buf_valenbisi) as inter_emt_valenbisi, >> (SELECT ST_union(st_buffer(carril_bici.geom, 200)) FROM carril_bici )as >> buf_carril_bici) as intersectionEMT_valenbisi_carrilBici, >> (SELECT ST_union(st_buffer(ocio.geom, 250)) FROM ocio )as buf_ocio >> >> >> - Finnaly I want to intersect "diff_1" with layer mapa_ruido_dia, >> ideally where the field gridcode equals one or two. >> >> select 1 as id, st_intersection(diff_1.st_difference, >> mapa_ruido_dia.geom) >> from >> (select >> st_difference(intersectionEMT_valenbisi_carrilBici.st_intersection, >> buf_ocio.st_union) >> from >> (select >> st_intersection(buf_carril_bici.st_union,inter_emt_valenbisi.st_intersection) >> from >> (select st_intersection(buf_emt.st_union,buf_valenbisi.st_union) >> from >> (SELECT ST_union(st_buffer(emt_paradas.geom, 200)) FROM emt_paradas )as >> buf_emt, >> (SELECT ST_union(st_buffer(valenbisi.geom, 200)) FROM valenbisi )as >> buf_valenbisi) as inter_emt_valenbisi, >> (SELECT ST_union(st_buffer(carril_bici.geom, 200)) FROM carril_bici )as >> buf_carril_bici) as intersectionEMT_valenbisi_carrilBici, >> (SELECT ST_union(st_buffer(ocio.geom, 250)) FROM ocio )as buf_ocio)as >> diff_1, mapa_ruido_dia >> where mapa_ruido_dia.gridcode='1' or mapa_ruido_dia.gridcode='2' >> >> >> Is in this last one query when Postgis show me the TopologyException >> >> > Error performing intersection: TopologyException: Input geom 1 is >> > invalid: Self-intersection at or near point 723120.23091093975 >> > 4379700.195452339 at 723120.23091093975 4379700.195452339 >> >> Any ideas? Thank you very much! >> >> >> _______________________________________________ >> postgis-users mailing list >> [email protected] >> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users >> > > > > _______________________________________________ > postgis-users mailing > [email protected]http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users > > > > _______________________________________________ > postgis-users mailing list > [email protected] > http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users >
_______________________________________________ postgis-users mailing list [email protected] http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
