I notice you're using NTS (right?)... The behaviour in JTS is slightly
different - it returns a POLYGON EMPTY.
Simplification always returns a geometry of the same type as the input
geometry, and by default it attempts to ensure valid topology (by
applying a buffer(0) - which is a bit of a hack, I admit). This is why
it returns an empty polygon.
You can prevent the validity enforcement by using
DouglasPeuckerSimplifier.setEnsureValid(false)
AFAIK there's no clear standard on how to handle degenerate cases like
this - different use cases might require different kinds of output. You
should check for degenerate input first and convert it according to your
precise need.
Jeff Adams wrote:
It shouldn't have been zero, although I don't actually know what it
was (It was due to a bug in my code, that has since been fixed).
However I just tried to reproduce it with a test case and simplify
seems to return an empty geometrycollection (which seems like
resonable behavior, although better behavior might be to produce a
single point at the center). So perhaps I was mistaken about exactly
what was going on... It makes me wonder if my code that calls
simplify is not correct ;-). I'll let you know if I am able to
reproduce this again.
Here is my simple test case if you want to mess around with it:
[Test]
public void TestSimplifyBadPoly()
{
Polygon p = new Polygon(new LinearRing(new ICoordinate[] {
new Coordinate(1, 1), new Coordinate(1, 1),
new Coordinate(1, 1), new Coordinate(1, 1),
new Coordinate(1, 1)}));
Console.Out.WriteLine("Bad polygon: " + p);
IGeometry simpleP = DouglasPeuckerSimplifier.Simplify(p, 0.1);
Console.Out.WriteLine("Simple bad polygon: " + simpleP);
Assert.AreNotEqual(p, simpleP, "Simplify didn't do
anything to this invalid polygon.");
}
On Tue, Mar 3, 2009 at 11:39 AM, Martin Davis <[email protected]
<mailto:[email protected]>> wrote:
What was your simplification tolerance? If it was 0 as well, then
nothing would be changed.
If not, this might be a bug - although this is a bit outside what
would be considered as reasonable input to a simplification routine.
Jeff Adams wrote:
- Show quoted text -
I have some code that creates "circle" polygons given a
center, radius, and number of points. The circle gets passed
to some other code that happens to simplify the polygon (using
DouglasPeucker).
I accidentally wound up calling this code with a radius of
zero. This produced a 46-point polygon where all the points
were identical. What was surprising to me is that the
simplifier didn't seem to change it at all. I would have
expected it to return a single point, or throw an exception,
or something. Is this (doing nothing) the expected behavior?
Thanks,
Jeff
------------------------------------------------------------------------
_______________________________________________
jts-devel mailing list
[email protected]
<mailto:[email protected]>
http://lists.refractions.net/mailman/listinfo/jts-devel
--
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022
_______________________________________________
jts-devel mailing list
[email protected]
<mailto:[email protected]>
http://lists.refractions.net/mailman/listinfo/jts-devel
------------------------------------------------------------------------
_______________________________________________
jts-devel mailing list
[email protected]
http://lists.refractions.net/mailman/listinfo/jts-devel
--
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022
_______________________________________________
jts-devel mailing list
[email protected]
http://lists.refractions.net/mailman/listinfo/jts-devel