[postgis-users] st_difference throws an error

Angel Cervera Claudio angelcervera at silyan.com
Mon Nov 12 09:20:20 PST 2012


Hi,
My error.
I supposed geometries was valid because these polygons was returned for st_concavehull function.
So, Is it possible that st_concavehull return invalid polygons?

Thanks Nicolas and Hugues.

Ángel


On 12/11/12 15:04, Nicolas Ribot wrote:
> Hi,
>
> No, it is not a bug:
> Your polygons are invalid. (at least one of them)
> You should always ensure you pass valid objects before calling processing functions:
>
> with pg as (
> select 'POLYGON((-5.66666 43.53301,-5.66704 43.53335,-5.66931 43.53374,-5.66975299919511 43.533380063154,-5.66979 
> 43.53335,-5.66971 43.53478,-5.66969091189271 43.5348058613067,-5.67026768864541 43.5374211525033,-5.67084666354158 
> 43.5376334432986,-5.67111 43.53773,-5.67059550578171 43.53754135212,-5.66854 43.53971,-5.66854 43.53971,-5.66854 43.53971,-5.66758 
> 43.53976,-5.6665 43.5402,-5.6665 43.5402,-5.66609712188377 43.539781395014,-5.66401 43.54013,-5.66401 43.54013,-5.66351576708437 
> 43.5392869195307,-5.66281 43.53909,-5.6626 43.53851,-5.66159162498075 43.5369268527413,-5.66131 43.53695,-5.66196 
> 43.53617,-5.66272791899155 43.5356642562857,-5.66378432333548 43.5344801289574,-5.66384 43.53414,-5.66452 43.53344,-5.6656 
> 43.53337,-5.66611 43.5331,-5.66666 43.53301))'::geometry
> UNION
>     select 'POLYGON((-5.66577 43.53447,-5.66612 43.53455,-5.66675167677363 43.5349178897119,-5.66735 43.53529,-5.66811 
> 43.5355,-5.66786 43.53678,-5.66816 43.53697,-5.66801 43.53717,-5.66729498033211 43.5375449497042,-5.6665 
> 43.53782,-5.66634200990626 43.5386936730934,-5.66634 43.53876,-5.66554366174751 43.5384386684555,-5.66521 43.53856,-5.66457 
> 43.53781,-5.6640744056249 43.5375662650614,-5.66341231504476 43.5372589777288,-5.66324 43.53718,-5.66334987968078 
> 43.536344363177,-5.66304550704754 43.5357063513112,-5.66299 43.53559,-5.66358 43.53544,-5.66413 43.53529,-5.66521 43.535,-5.66577 
> 43.53447,-5.66577 43.53447))'::geometry
> )
> select st_isvalid(geometry), st_isvalidReason(geometry) from pg;
>
> f       "Self-intersection[-5.67084227946059 43.5376318358022]"
> t       "Valid Geometry"
>
> In addition to what Hugues said, if you are on Postgis >= 2, you can use the very handy st_makeValid to correct geoemtries.
>
> Nicolas
>
>
>
> On 12 November 2012 13:57, Angel Cervera Claudio <angelcervera at silyan.com <mailto:angelcervera at silyan.com>> wrote:
>
>     Hi Francois.
>
>     This work!
>
>     Could be a bug in st_difference?
>
>     Thanks, Ángel
>
>
>     On 12/11/12 12:42, Francois Hugues wrote:
>>     You should try the st_buffer tip :
>>     select st_astext(
>>         st_difference(
>>     st_buffer(st_geomfromtext('POLYGON((-5.66666 43.53301,-5.66704 43.53335,-5.66931 43.53374,-5.66975299919511
>>     43.533380063154,-5.66979 43.53335,-5.66971 43.53478,-5.66969091189271 43.5348058613067,-5.67026768864541
>>     43.5374211525033,-5.67084666354158 43.5376334432986,-5.67111 43.53773,-5.67059550578171 43.53754135212,-5.66854
>>     43.53971,-5.66854 43.53971,-5.66854 43.53971,-5.66758 43.53976,-5.6665 43.5402,-5.6665 43.5402,-5.66609712188377
>>     43.539781395014,-5.66401 43.54013,-5.66401 43.54013,-5.66351576708437 43.5392869195307,-5.66281 43.53909,-5.6626
>>     43.53851,-5.66159162498075 43.5369268527413,-5.66131 43.53695,-5.66196 43.53617,-5.66272791899155
>>     43.5356642562857,-5.66378432333548 43.5344801289574,-5.66384 43.53414,-5.66452 43.53344,-5.6656 43.53337,-5.66611
>>     43.5331,-5.66666 43.53301))', 4326),0),
>>            st_buffer(st_geomfromtext('POLYGON((-5.66577 43.53447,-5.66612 43.53455,-5.66675167677363 43.5349178897119,-5.66735
>>     43.53529,-5.66811 43.5355,-5.66786 43.53678,-5.66816 43.53697,-5.66801 43.53717,-5.66729498033211 43.5375449497042,-5.6665
>>     43.53782,-5.66634200990626 43.5386936730934,-5.66634 43.53876,-5.66554366174751 43.5384386684555,-5.66521 43.53856,-5.66457
>>     43.53781,-5.6640744056249 43.5375662650614,-5.66341231504476 43.5372589777288,-5.66324 43.53718,-5.66334987968078
>>     43.536344363177,-5.66304550704754 43.5357063513112,-5.66299 43.53559,-5.66358 43.53544,-5.66413 43.53529,-5.66521
>>     43.535,-5.66577 43.53447,-5.66577 43.53447))', 4326),0)
>>         )
>>     );
>>     Hugues.
>>
>>
>>
>>     ------------------------------------------------------------------------------------------------------------------------------------
>>     *De :* postgis-users-bounces at lists.osgeo.org <mailto:postgis-users-bounces at lists.osgeo.org>
>>     [mailto:postgis-users-bounces at lists.osgeo.org] *De la part de* Angel Cervera Claudio
>>     *Envoyé :* lundi 12 novembre 2012 12:23
>>     *À :* postgis-users at lists.osgeo.org <mailto:postgis-users at lists.osgeo.org>
>>     *Objet :* [postgis-users] st_difference throws an error
>>
>>     Hello.
>>
>>     I post this problem in http://gis.stackexchange.com/questions/40872/st-difference-throws-an-error buy i'm sure in this
>>     mailing list people can help me.
>>
>>     I'm retrieving "|GEOSDifference: TopologyException: found non-noded intersection between|" error when executing st_difference
>>     sql.
>>
>>     Followed an example:
>>
>>     Error:
>>     |ERROR:  GEOSDifference: TopologyException: found non-noded intersection between LINESTRING (-5.67027 43.5374, -5.67085 43.5376) and LINESTRING (-5.67111 43.5377, -5.6706 43.5375) at -5.6708422794605911 43.537631835802237
>>     SQL:
>>     ||select st_astext(
>>          st_difference(
>>              st_geomfromtext('POLYGON((-5.66666 43.53301,-5.66704 43.53335,-5.66931 43.53374,-5.66975299919511 43.533380063154,-5.66979 43.53335,-5.66971 43.53478,-5.66969091189271 43.5348058613067,-5.67026768864541 43.5374211525033,-5.67084666354158 43.5376334432986,-5.67111 43.53773,-5.67059550578171 43.53754135212,-5.66854 43.53971,-5.66854 43.53971,-5.66854 43.53971,-5.66758 43.53976,-5.6665 43.5402,-5.6665 43.5402,-5.66609712188377 43.539781395014,-5.66401 43.54013,-5.66401 43.54013,-5.66351576708437 43.5392869195307,-5.66281 43.53909,-5.6626 43.53851,-5.66159162498075 43.5369268527413,-5.66131 43.53695,-5.66196 43.53617,-5.66272791899155 43.5356642562857,-5.66378432333548 43.5344801289574,-5.66384 43.53414,-5.66452 43.53344,-5.6656 43.53337,-5.66611 43.5331,-5.66666 43.53301))', 4326),
>>              st_geomfromtext('POLYGON((-5.66577 43.53447,-5.66612 43.53455,-5.66675167677363 43.5349178897119,-5.66735 43.53529,-5.66811 43.5355,-5.66786 43.53678,-5.66816 43.53697,-5.66801 43.53717,-5.66729498033211 43.5375449497042,-5.6665 43.53782,-5.66634200990626 43.5386936730934,-5.66634 43.53876,-5.66554366174751 43.5384386684555,-5.66521 43.53856,-5.66457 43.53781,-5.6640744056249 43.5375662650614,-5.66341231504476 43.5372589777288,-5.66324 43.53718,-5.66334987968078 43.536344363177,-5.66304550704754 43.5357063513112,-5.66299 43.53559,-5.66358 43.53544,-5.66413 43.53529,-5.66521 43.535,-5.66577 43.53447,-5.66577 43.53447))', 4326)
>>          )
>>     );|
>>
>>     Ingis.stackexchange.com  <http://gis.stackexchange.com>  i attached images with various shapes with this problem.
>>     All share a common pattern. Some parts of edge are near to be parallel.
>>
>>
>>     How to resolve this problem? Is a bug?
>>
>>     Thanks!
>
>     _______________________________________________
>     postgis-users mailing list
>     postgis-users at lists.osgeo.org <mailto:postgis-users at lists.osgeo.org>
>     http://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/20121112/76809539/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: angelcervera.vcf
Type: text/x-vcard
Size: 293 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20121112/76809539/attachment.vcf>


More information about the postgis-users mailing list