[geos-commits] r2353 - trunk/tests/xmltester
svn_geos at osgeo.org
svn_geos at osgeo.org
Tue Apr 14 06:27:41 EDT 2009
Author: strk
Date: 2009-04-14 06:27:41 -0400 (Tue, 14 Apr 2009)
New Revision: 2353
Modified:
trunk/tests/xmltester/XMLTester.cpp
Log:
Add support for bufferMitredJoin tests
Modified: trunk/tests/xmltester/XMLTester.cpp
===================================================================
--- trunk/tests/xmltester/XMLTester.cpp 2009-04-14 09:53:59 UTC (rev 2352)
+++ trunk/tests/xmltester/XMLTester.cpp 2009-04-14 10:27:41 UTC (rev 2353)
@@ -30,6 +30,8 @@
#include <geos/geom/PrecisionModel.h>
#include <geos/geom/BinaryOp.h>
#include <geos/operation/overlay/OverlayOp.h>
+#include <geos/operation/buffer/BufferParameters.h>
+#include <geos/operation/buffer/BufferOp.h>
#include <geos/util.h>
//#include <geos/geomgraph.h>
#include <geos/io/WKBReader.h>
@@ -694,6 +696,8 @@
else if (opName=="buffer")
{
+ using namespace operation::buffer;
+
geom::Geometry *gT=gA;
if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB;
@@ -705,11 +709,14 @@
GeomAutoPtr gRealRes;
double dist = std::atof(opArg2.c_str());
+ BufferParameters params;
if ( opArg3 != "" ) {
- gRealRes.reset(gT->buffer(dist, std::atoi(opArg3.c_str())));
- } else {
- gRealRes.reset(gT->buffer(dist));
+ params.setQuadrantSegments(std::atoi(opArg3.c_str()));
}
+
+ BufferOp op(gT, params);
+ gRealRes.reset(op.getResultGeometry(dist));
+
profile.stop();
gRealRes->normalize();
@@ -783,6 +790,104 @@
expected_result=printGeom(gRes.get());
}
+ else if (opName=="buffermitredjoin")
+ {
+ using namespace operation::buffer;
+
+ geom::Geometry *gT=gA;
+ if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB;
+
+ GeomAutoPtr gRes(parseGeometry(opRes, "expected"));
+ gRes->normalize();
+
+ profile.start();
+
+ GeomAutoPtr gRealRes;
+ double dist = std::atof(opArg2.c_str());
+
+ BufferParameters params;
+ params.setJoinStyle(BufferParameters::JOIN_MITRE);
+
+ if ( opArg3 != "" ) {
+ params.setQuadrantSegments(std::atoi(opArg3.c_str()));
+ }
+
+ BufferOp op(gT, params);
+ gRealRes.reset(op.getResultGeometry(dist));
+
+ profile.stop();
+ gRealRes->normalize();
+
+ // Assume a success and check for obvious failures
+ success=1;
+ do
+ {
+ // TODO: Is a buffer always an area ?
+ // we might check geometry type..
+
+ if ( gRes->getGeometryTypeId() != gRealRes->getGeometryTypeId() )
+ {
+ std::cerr << "Expected result is of type "
+ << gRes->getGeometryType()
+ << "; obtained result is of type "
+ << gRealRes->getGeometryType()
+ << std::endl;
+ success=0;
+ break;
+ }
+
+ if ( gRes->isEmpty() && gRealRes->isEmpty() )
+ {
+ // Success !
+ break;
+ }
+
+ if ( gRes->getDimension() != 2 )
+ {
+ std::cerr << "Don't know how to validate "
+ << "result of buffer operation "
+ << "when expected result is not an "
+ << "areal type."
+ << std::endl;
+ }
+
+ double expectedArea = gRes->getArea();
+
+ /// Allow area difference being at most
+ /// 1/1000 of the area of the expected result.
+ double areatol = expectedArea / 1e3;
+
+ GeomAutoPtr gDiff = BinaryOp(gRes.get(), gRealRes.get(),
+ overlayOp(OverlayOp::opDIFFERENCE));
+
+ double areaDiff = gDiff->getArea();
+ if ( areaDiff > areatol )
+ {
+ std::cerr << "Area of difference between "
+ << "obtained and expected: "
+ << areaDiff << " - Tolerated diff: "
+ << areatol << std::endl;
+ success=0;
+ break;
+ }
+ else
+ {
+ std::cerr << "Area of difference between "
+ << "obtained and expected: "
+ << areaDiff << " - Tolerated diff: "
+ << areatol << " (SUCCESS!)"
+ << std::endl;
+ }
+
+ }
+ while (0);
+
+ if ( testValidOutput ) testValid(gRes.get(), "result");
+
+ actual_result=printGeom(gRealRes.get());
+ expected_result=printGeom(gRes.get());
+ }
+
else if (opName=="getinteriorpoint")
{
geom::Geometry *gT=gA;
More information about the geos-commits
mailing list