Opened 6 years ago

Closed 3 years ago

Last modified 3 years ago

#910 closed defect (invalid)

Difference operation resulted with a wrong geometry as a result of a precision limitation

Reported by: yanivnavon Owned by: geos-devel@…
Priority: major Milestone: 3.10.0
Component: Default Version: 3.6.2
Severity: Significant Keywords: polygon, geometry, geometries, difference, union, multipolygon
Cc: eylon@…, ynavon@…

Description

Difference between two geometries results with a wrong geometry as sometimes systems can hold up to 6 digits after the decimal point, hence cannot hold the full number. In such cases, GEOS calculator might take two points as "does not match" each other. Originally, these points are matching each other.

Screenshot: http://dev.skylinesoft.com/Up/Navon/General/screenshot.png

With reference to bug #704:

1) Geometry A: POLYGON ((580 337, 580 342.1, 581.3 338.8, 581.3666666666667 338.8833333333333, 581.4166666666666 339, 581.45 339.1166666666667, 581.5166666666667 339.26666666666665, 582.4 341.9, 583.5 337.1, 580 337)) 2) Geometry B: POLYGON ((578.3 340.9, 578.4166666666666 340.9166666666667, 578.55 340.9166666666667, 585.1 341, 585 340.4, 578.9 340.4, 578.3 340.9))

3) Union A -> B = C (Multipolygon) 4) Difference C -> B

Change History (4)

comment:1 by yanivnavon, 6 years ago

Summary: Difference operation resulted with a wrong geometry as a result of a precision incorrectionsDifference operation resulted with a wrong geometry as a result of a precision limitation

comment:2 by pramsey, 3 years ago

Milestone: 3.10.0

comment:3 by pramsey, 3 years ago

Resolution: invalid
Status: newclosed

As of 3.9 you might find the snap-rounded operations (difference with a tolerance) provide more predictability in terms of holding to a particularly domain grid, assuming you can stand the initial round-off stop.

comment:4 by mdavis, 3 years ago

The snapping noding works well for this, and doesn't require rounding all the output coordinates. Perhaps we should expose that capability as well as snap-rounding.

Note: See TracTickets for help on using tickets.