[geos-devel] Difference operation not always working as expected
Kevin Weller
kweller at asapwebsoft.com
Fri Nov 30 13:02:13 EST 2007
That's what I thought you'd say...just wanted to make sure before I
blew my changes away. Probably better not to clutter up the API with
unnecessary and confusing functionality, but I figured you'd be a
better judge of that than I. Thanks again for putting up with my
relative newbieness.
- Kevin
On Nov 30, 2007, at 10:25 AM, Martin Davis wrote:
> The only downside to having the snap operations exposed is that
> clearly they don't work in the way that some would expect them too.
> If this is going to lead to a lot of questions then perhaps it's
> better not to expose them....
>
>
> Kevin Weller wrote:
>> To follow up, I can confirm that if I adjust the outer (Northern in
>> this case) edge of the negating polygon so that it is outside the
>> primary polygon, I do indeed get a notch instead of a hole. Thanks
>> for the help!
>>
>> Please let me know if you could imagine a use for the exposure of
>> the snapTo operation via the C API (and SWIG bindings). If not,
>> I'll just revert my local source copies to what's in trunk.
>>
>> I do suspect that my original snap operation might be working as
>> best it can but for the limitations of floating point precision.
>> Oh, and changing the tolerance value in any direction seems to have
>> little effect with my given inputs, which would make perfect sense
>> to me if the edges overlap about as much as their floating point
>> representations allow.
>>
>> - Kevin
>>
>> On Nov 29, 2007, at 10:10 AM, Martin Davis wrote:
>>
>>> Leaving aside the snapping, I'm not too surprised that you're
>>> getting this result. The top edge of the primary is angled
>>> slightly. This makes it pretty much impossible for the top edge
>>> of the negating to lie *exactly* coincident with the primary edge
>>> (due to the finite precision of floating point). So it's going to
>>> either fall short or fall outside - in this particular case, the
>>> negating edge is inside the primary polygon, and hence you get a
>>> hole when you subtract it.
>>>
>>> The only way to ensure that you get a notch is to adjust the
>>> negating so that the top edge is definitely outside the primary.
>>> Since you seem to have some degree of control over the
>>> construction, is this possible?
>>>
>>> Snapping probably wouldn't be invoked automatically in this case,
>>> since it doesn't trigger a robustness failure.
>>>
>>> I'm not sure why manually snapping them doesn't work - AFAIK it
>>> should in this case. Perhaps you need to change the tolerance
>>> value, or it's possible you're calling it incorrectly, or it's
>>> possible it has a bug. It wasn't really designed to be called
>>> outside of the GEOS overlay ops, so it wouldn't surprise me if
>>> there's a problem. If I have some time I'll experiment with this
>>> in and see if there's an obvious problem.
>>>
>>> Kevin Weller wrote:
>>>> All,
>>>>
>>>> Hopefully it's not merely due to my own idiocy, but I'm
>>>> experiencing some weird results from difference and snap
>>>> operations that may or may not imply GEOS3 bugs. I'm using the
>>>> latest and greatest from trunk. Here's what I'm trying to do:
>>>>
>>>> I've got a smaller polygon (which I call the negating polygon)
>>>> which partially covers a larger polygon (which I call the primary
>>>> polygon). The negating polygon is always flush with one side or
>>>> corner of the primary polygon. The goal is to subtract the
>>>> negating polygon from the primary polygon such that there is a
>>>> resulting "notch" in the primary. You can see an example of this
>>>> actually working by looking at http://www.asapwebsoft.com/files/working_primary_and_negating_plot.png
>>>> and http://www.asapwebsoft.com/files/working_result_plot.png
>>>>
>>>> Sometimes, with only slightly different input (in this case, I
>>>> move the negating polygon to the East), it doesn't work. See http://www.asapwebsoft.com/files/broken_primary_and_negating_plot.png
>>>> and http://www.asapwebsoft.com/files/broken_result_plot.png
>>>> (interior ring not shown on the plot, but I've checked, and it's
>>>> there)
>>>>
>>>> In the latter case, instead of a notch in the resulting polygon,
>>>> I get an interior ring (hole), even though the negating polygon
>>>> is as close to overlapping as I can get it. I've even tried
>>>> using the GeometrySnapper to snap the negating polygon to the
>>>> primary polygon, in case they weren't quite lined up, but no
>>>> luck. In fact, snapTo seems to have no effect for any of the
>>>> inputs I provide, so the function must consider the polygon edges
>>>> in question to be flush already. But I still get holes instead
>>>> of notches.
>>>>
>>>> I'm scripting this in Ruby, and an excerpt from my Ruby driver
>>>> code is at http://www.asapwebsoft.com/files/geos_client_code_excerpt.rb
>>>>
>>>> Also, the current output from geos_tests.rb (showing a handful of
>>>> failures, probably not related, but I don't know that for sure)
>>>> is at http://www.asapwebsoft.com/files/test_output.txt
>>>>
>>>> I'm not exactly sure what to try next, but I'm hoping that
>>>> someone out there has some ideas.
>>>>
>>>> Oh, in the process of working on this, I've added the snapping
>>>> features to the C API and the SWIG bindings...hopefully
>>>> correctly. I'll be happy to share those changes if the community
>>>> wants them. Since I'm not a committer, what would I do? Send
>>>> patches to the list?
>>>>
>>>> - Kevin
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> geos-devel mailing list
>>>> geos-devel at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>>>
>>> --
>>> Martin Davis
>>> Senior Technical Architect
>>> Refractions Research, Inc.
>>> (250) 383-3022
>>>
>>> _______________________________________________
>>> geos-devel mailing list
>>> geos-devel at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> geos-devel mailing list
>> geos-devel at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/geos-devel
>
> --
> Martin Davis
> Senior Technical Architect
> Refractions Research, Inc.
> (250) 383-3022
>
> _______________________________________________
> geos-devel mailing list
> geos-devel at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/geos-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3818 bytes
Desc: not available
Url : http://lists.osgeo.org/pipermail/geos-devel/attachments/20071130/20cf70dd/smime-0001.bin
More information about the geos-devel
mailing list