[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