[geos-commits] r2469 - trunk/tests/xmltester
svn_geos at osgeo.org
svn_geos at osgeo.org
Tue May 5 06:30:39 EDT 2009
Author: strk
Date: 2009-05-05 06:30:39 -0400 (Tue, 05 May 2009)
New Revision: 2469
Modified:
trunk/tests/xmltester/XMLTester.cpp
Log:
Add compile-time support to skip use of BinaryOp thus engaging SnapIfNeededOverlayOp used by Geometry methods. Shows that BinaryOp (GEOS-specific original work) gives better numerical stability.
Modified: trunk/tests/xmltester/XMLTester.cpp
===================================================================
--- trunk/tests/xmltester/XMLTester.cpp 2009-05-05 10:14:39 UTC (rev 2468)
+++ trunk/tests/xmltester/XMLTester.cpp 2009-05-05 10:30:39 UTC (rev 2469)
@@ -66,6 +66,12 @@
#include "Stackwalker.h"
#endif
+// Undefine this to use Geometry methods for overlay operations
+//
+// Using BinaryOp gives more successes though...
+//
+#define USE_BINARYOP 1
+
using namespace geos;
using namespace geos::operation::polygonize;
using namespace geos::operation::linemerge;
@@ -544,8 +550,12 @@
GeomAutoPtr gRes(parseGeometry(opRes, "expected"));
gRes->normalize();
- //GeomAutoPtr gRealRes(gA->intersection(gB));
+#ifndef USE_BINARYOP
+ GeomAutoPtr gRealRes(gA->intersection(gB));
+#else
GeomAutoPtr gRealRes = BinaryOp(gA, gB, overlayOp(OverlayOp::opINTERSECTION));
+#endif
+
gRealRes->normalize();
if (gRes->compareTo(gRealRes.get())==0) success=1;
@@ -562,8 +572,12 @@
GeomAutoPtr gRes(parseGeometry(opRes, "expected"));
gRes->normalize();
- //GeomAutoPtr gRealRes(gA->Union(gB));
+#ifndef USE_BINARYOP
+ GeomAutoPtr gRealRes(gA->Union(gB));
+#else
GeomAutoPtr gRealRes = BinaryOp(gA, gB, overlayOp(OverlayOp::opUNION));
+#endif
+
gRealRes->normalize();
if (gRes->compareTo(gRealRes.get())==0) success=1;
@@ -580,8 +594,11 @@
GeomAutoPtr gRes(parseGeometry(opRes, "expected"));
gRes->normalize();
- //GeomAutoPtr gRealRes(gA->difference(gB));
+#ifndef USE_BINARYOP
+ GeomAutoPtr gRealRes(gA->difference(gB));
+#else
GeomAutoPtr gRealRes = BinaryOp(gA, gB, overlayOp(OverlayOp::opDIFFERENCE));
+#endif
gRealRes->normalize();
@@ -599,8 +616,12 @@
GeomAutoPtr gRes(parseGeometry(opRes, "expected"));
gRes->normalize();
- //GeomAutoPtr gRealRes(gA->symDifference(gB));
+#ifndef USE_BINARYOP
+ GeomAutoPtr gRealRes(gA->symDifference(gB));
+#else
GeomAutoPtr gRealRes = BinaryOp(gA, gB, overlayOp(OverlayOp::opSYMDIFFERENCE));
+#endif
+
gRealRes->normalize();
if (gRes->compareTo(gRealRes.get())==0) success=1;
@@ -991,8 +1012,12 @@
{
std::cerr << "Running intersection for areatest" << std::endl;
}
+#ifndef USE_BINARYOP
+ GeomAutoPtr gI(gA->intersection(gB));
+#else
GeomAutoPtr gI = BinaryOp(gA, gB,
overlayOp(OverlayOp::opINTERSECTION));
+#endif
if ( testValidOutput )
{
@@ -1003,15 +1028,25 @@
{
std::cerr << "Running difference(A,B) for areatest" << std::endl;
}
+
+#ifndef USE_BINARYOP
+ GeomAutoPtr gDab(gA->difference(gB));
+#else
GeomAutoPtr gDab = BinaryOp(gA, gB,
overlayOp(OverlayOp::opDIFFERENCE));
+#endif
if ( verbose > 1 )
{
std::cerr << "Running difference(B,A) for areatest" << std::endl;
}
+
+#ifndef USE_BINARYOP
+ GeomAutoPtr gDba(gB->difference(gA));
+#else
GeomAutoPtr gDba = BinaryOp(gB, gA,
overlayOp(OverlayOp::opDIFFERENCE));
+#endif
if ( testValidOutput )
{
@@ -1022,15 +1057,25 @@
{
std::cerr << "Running symdifference for areatest" << std::endl;
}
+
+#ifndef USE_BINARYOP
+ GeomAutoPtr gSD(gA->symDifference(gB));
+#else
GeomAutoPtr gSD = BinaryOp(gA, gB,
overlayOp(OverlayOp::opSYMDIFFERENCE));
+#endif
if ( verbose > 1 )
{
std::cerr << "Running union for areatest" << std::endl;
}
+
+#ifndef USE_BINARYOP
+ GeomAutoPtr gU(gA->Union(gB));
+#else
GeomAutoPtr gU = BinaryOp(gA, gB,
overlayOp(OverlayOp::opUNION));
+#endif
double areaA = gA->getArea();
double areaB = gB->getArea();
More information about the geos-commits
mailing list