[geos-commits] r3728 - in trunk: src/operation/buffer tests/xmltester tests/xmltester/tests/ticket

svn_geos at osgeo.org svn_geos at osgeo.org
Tue Dec 4 13:22:35 PST 2012


Author: strk
Date: 2012-12-04 13:22:35 -0800 (Tue, 04 Dec 2012)
New Revision: 3728

Added:
   trunk/tests/xmltester/tests/ticket/bug605.xml
Modified:
   trunk/src/operation/buffer/BufferOp.cpp
   trunk/tests/xmltester/Makefile.am
Log:
Reduce coordinates precision on robustness issues in BufferOp

Fixes #605, adds test for it

Modified: trunk/src/operation/buffer/BufferOp.cpp
===================================================================
--- trunk/src/operation/buffer/BufferOp.cpp	2012-12-04 19:26:48 UTC (rev 3727)
+++ trunk/src/operation/buffer/BufferOp.cpp	2012-12-04 21:22:35 UTC (rev 3728)
@@ -22,6 +22,7 @@
 #include <cmath>
 
 #include <geos/profiler.h>
+#include <geos/precision/GeometryPrecisionReducer.h>
 #include <geos/operation/buffer/BufferOp.h>
 #include <geos/operation/buffer/BufferBuilder.h>
 #include <geos/geom/Geometry.h>
@@ -235,8 +236,22 @@
 
 	bufBuilder.setNoder(&noder);
 
+	// Reduce precision of the input geometry
+	// TODO: perhaps this should be done within BufferBuilder,
+	//       after (or as part of) input simplification ?
+	// NOTE: this reduction is not in JTS (yet)
+	const Geometry *workGeom = argGeom;
+	const PrecisionModel& argPM = *(argGeom->getFactory()->getPrecisionModel());
+	std::auto_ptr<Geometry> fixedGeom;
+	if ( argPM.getType() != PrecisionModel::FIXED || argPM.getScale() != fixedPM.getScale() )
+	{
+		using precision::GeometryPrecisionReducer;
+		fixedGeom = GeometryPrecisionReducer::reduce(*argGeom, fixedPM);
+		workGeom = fixedGeom.get();
+	}
+
 	// this may throw an exception, if robustness errors are encountered
-	resultGeometry=bufBuilder.buffer(argGeom, distance);
+	resultGeometry = bufBuilder.buffer(workGeom, distance);
 }
 
 } // namespace geos.operation.buffer

Modified: trunk/tests/xmltester/Makefile.am
===================================================================
--- trunk/tests/xmltester/Makefile.am	2012-12-04 19:26:48 UTC (rev 3727)
+++ trunk/tests/xmltester/Makefile.am	2012-12-04 21:22:35 UTC (rev 3728)
@@ -36,6 +36,7 @@
 	$(srcdir)/tests/ticket/bug527.xml \
 	$(srcdir)/tests/ticket/bug586.xml \
 	$(srcdir)/tests/ticket/bug599.xml \
+	$(srcdir)/tests/ticket/bug605.xml \
 	$(srcdir)/tests/general/TestBoundary.xml \
 	$(srcdir)/tests/general/TestBuffer.xml \
 	$(srcdir)/tests/general/TestBufferMitredJoin.xml \

Added: trunk/tests/xmltester/tests/ticket/bug605.xml
===================================================================
--- trunk/tests/xmltester/tests/ticket/bug605.xml	                        (rev 0)
+++ trunk/tests/xmltester/tests/ticket/bug605.xml	2012-12-04 21:22:35 UTC (rev 3728)
@@ -0,0 +1,109 @@
+<run>
+  <desc>
+    http://trac.osgeo.org/geos/ticket/605
+  </desc>
+  <precisionModel type="FLOATING" />
+  <resultMatcher>com.vividsolutions.jtstest.testrunner.BufferResultMatcher</resultMatcher>
+
+<case>
+  <desc>
+    http://trac.osgeo.org/geos/ticket/605
+  </desc>
+  <a>
+LINESTRING(365851.11860 6133776.04159, 366074.92430 6134077.56523,
+375141.31010 6138794.83236, 373718.87248 6137668.49630, 373346.64754
+6137433.71166638, 366752.52700 6134568.10150, 360775.41757 6127074.35479,
+360762.97098 6127054.06482, 365851.11862 6133776.04159, 366074.92434
+6134077.56523, 366360.99154 6134339.22803, 366752.52702 6134568.10150,
+373346.64754 6137433.71166638, 373718.87248 6137668.49630, 375295.49858
+6138886.92620, 373718.87248 6137668.49630, 373346.64754 6137433.71166,
+366826.15047 6134600.68215, 366384.17707 6134356.53424, 365851.11862
+6133776.04159, 364105.70077 6130589.54564, 360283.95054 6126559.51325,
+356917.60143 6124368.97007, 360279.79015 6126555.44586, 364105.70077
+6130589.54564, 365851.11862 6133776.04159, 364105.70077 6130589.54564,
+360283.95054 6126559.51325)
+  </a>
+
+<test>
+  <op name='buffer' arg1='A' arg2='1000'>
+POLYGON ((355917.6765000000013970 6124381.2275999998673797,
+355939.2774000000208616 6124576.0504000000655651,
+355998.4679999999934807 6124762.9166000001132488,
+356092.9739999999874271 6124934.6463999999687076,
+356219.1641999999992549 6125084.6414999999105930,
+356372.1902000000118278 6125207.1387000000104308,
+359638.8080733100068755 6127332.7850270699709654,
+360038.8583028200082481 6127754.6042146598920226,
+360042.8382790799951181 6127759.5940738096833229,
+365050.9408594800042920 6134375.8229583799839020,
+365271.9468999999808148 6134673.5746999997645617,
+365399.9925999999977648 6134815.4453999996185303,
+365686.0597999999881722 6135077.1081999996677041,
+365731.3817567800288089 6135110.4964476702734828,
+365766.0731999999843538 6135142.6305999998003244,
+365855.4125532599864528 6135201.8687370792031288,
+365856.3346000000019558 6135202.5480000004172325,
+365857.1991783700068481 6135203.0533924298360944,
+365900.6434000000008382 6135231.8598999995738268,
+366006.7428950199973769 6135290.4697156799957156,
+366247.8701000000000931 6135431.4215000001713634,
+366353.9645000000018626 6135485.2427000002935529,
+366417.4646187499747612 6135512.8379774494096637,
+366427.6574000000255182 6135517.8535000002011657,
+367936.5907135099987499 6136173.4557738900184631,
+374679.7457999999751337 6139681.9391999999061227,
+374708.2528112199506722 6139693.3706018300727010,
+374850.1265000000130385 6139782.2717000003904104,
+375033.3573999999789521 6139851.9556999998167157,
+375226.6623000000254251 6139884.5542000001296401,
+375422.6124999999883585 6139878.8142999997362494,
+375613.6778000000049360 6139834.9567999998107553,
+375792.5156999999890104 6139754.6668999996036291,
+375952.2534999999916181 6139641.0302999997511506,
+376086.7525000000023283 6139498.4139000000432134,
+376190.8440999999875203 6139332.2982999999076128,
+376260.5280999999959022 6139149.0674000000581145,
+376293.1266000000177883 6138955.7625000001862645,
+376287.3866999999736436 6138759.8123000003397465,
+376243.5291999999899417 6138568.7470000004395843,
+376163.2393000000156462 6138389.9090999998152256,
+376049.6026999999885447 6138230.1712999995797873,
+375906.9862999999895692 6138095.6722999997437000,
+374330.3601999999955297 6136877.2423999998718500,
+374252.3702000000048429 6136822.6947999997064471,
+373880.1452000000281259 6136587.9101999998092651,
+373745.2100000000209548 6136516.5705000003799796,
+368792.5121412900043651 6134364.2741611804813147,
+367214.0061748400330544 6133542.9728815201669931,
+366095.5620286299963482 6132140.7336761802434921,
+364982.7469999999739230 6130109.1394999995827675,
+364831.3095999999786727 6129901.4380999999120831,
+361566.4569188400055282 6126458.6538448799401522,
+361560.3061999999918044 6126450.5280999997630715,
+361431.7930000000051223 6126310.6421999996528029,
+361412.6469055399647914 6126296.4613223504275084,
+361009.5593000000226311 6125871.4057999998331070,
+361007.8637289800099097 6125869.9373341500759125,
+361005.3717000000178814 6125867.3097000000998378,
+360991.3914410999859683 6125855.6713483100757003,
+360861.3738000000012107 6125743.0683000003919005,
+360844.7993283700197935 6125733.6356567097827792,
+360824.9630999999935739 6125717.1222999999299645,
+357462.7742999999900348 6123530.6464999997988343,
+357288.7666999999783002 6123440.4033000003546476,
+357100.4979000000166707 6123385.8378999996930361,
+356905.2017999999807216 6123369.0470000002533197,
+356710.3820999999879859 6123390.6755999997258186,
+356523.5242999999900348 6123449.8926999997347593,
+356351.8079000000143424 6123544.4231000002473593,
+356201.8306999999913387 6123670.6347000002861023,
+356079.3552999999956228 6123823.6780000003054738,
+355989.0873000000137836 6123997.6728999996557832,
+355934.4952000000048429 6124185.9338999995961785, 355917.6765000000013970
+6124381.2275999998673797))
+  </op>
+</test>
+
+</case>
+
+</run>



More information about the geos-commits mailing list