Ticket #234 (closed defect: fixed)

Opened 3 years ago

Last modified 3 years ago

Intersection Crashes On Multipolygons With Empty Holes

Reported by: slambright Owned by: strk
Priority: minor Milestone: 3.1.1
Component: Core Version: 3.0.3
Severity: Annoyance Keywords: empty,geometry
Cc:

Description

When doing operations to complicated multipolygons, I ran across this. When I had a multipolygon of the form: MULTIPOLYGON (((1.0000000000000000 1.0000000000000000, 1.0000000000000000 5.0000000000000000, 5.0000000000000000 5.0000000000000000, 5.0000000000000000 1.0000000000000000, 1.0000000000000000 1.0000000000000000), EMPTY)) (empty, but existing, holes polygon)

and I tried to intersect it with another polygon, say MULTIPOLYGON (((3.0000000000000000 3.0000000000000000, 3.0000000000000000 4.0000000000000000, 4.0000000000000000 4.0000000000000000, 4.0000000000000000 3.0000000000000000, 3.0000000000000000 3.0000000000000000)))

I get the error: CoordinateArraySequence?.cpp:105: virtual const geos::geom::Coordinate& geos::geom::CoordinateArraySequence::getAt(size_t) const: Assertion `pos<vect->size()' failed. Abort

However, if there isn't an empty hole polygon it works fine.

This happens in both geos3.0.0 and geos3.1.0rc2. I'm running SUSE LINUX 10.1 (X86-64).

Attachments

simppoly.cpp Download (1.5 KB) - added by slambright 3 years ago.

Change History

Changed 3 years ago by slambright

Changed 3 years ago by mloskot

  • keywords empty,geometry added
  • priority changed from major to minor
  • component changed from Default to Core
  • severity changed from Unassigned to Annoyance
  • milestone 3.1.0 deleted

I've taken the liberty to paste Martin's  comment posted on the list:

This is an error in JTS as well. EMPTY components are generally not handled. The whole idea of having empty components seems pretty pointless to me anyway. I suppose the best thing to do is to simply strip them out in geometry operations.

I believe we can leave the ticket open to not to forget in future, but with clear statement that users are advised to strip EMPTY components out from their geometries.

Changed 3 years ago by pramsey

  • milestone set to 3.1.1

Changed 3 years ago by strk

  • owner changed from geos-devel@… to strk
  • status changed from new to assigned

An abort can't be considered an 'annoyance' to me.. It'd crash the database backend, differently from an exception thrown.

Changed 3 years ago by strk

  • status changed from assigned to closed
  • resolution set to fixed

no need to throw exceptions. crash is fixed. Here are the results:

Mpoly1: MULTIPOLYGON (((1 1, 1 5, 5 5, 5 1, 1 1), EMPTY)) Mpoly2: MULTIPOLYGON (((3 3, 3 4, 4 4, 4 3, 3 3)))

Intersection: POLYGON ((3 3, 3 4, 4 4, 4 3, 3 3))

Note: See TracTickets for help on using tickets.