[postgis-users] Intersection TopologyException

Rémi Cura remi.cura at gmail.com
Tue Dec 2 08:18:06 PST 2014


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 <
luis.miguel.royo at gmail.com>:

>  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 <
> luis.miguel.royo at gmail.com>:
>
>>  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
>> postgis-users at lists.osgeo.org
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>
>
>
>
> _______________________________________________
> postgis-users mailing listpostgis-users at lists.osgeo.orghttp://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20141202/123af93f/attachment.html>


More information about the postgis-users mailing list