[geos-commits] [SCM] GEOS branch master updated. 1089651b5b7f8278da1c0138b38a42aaff7fd5a2

git at osgeo.org git at osgeo.org
Mon Oct 26 02:57:43 PDT 2020


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GEOS".

The branch, master has been updated
       via  1089651b5b7f8278da1c0138b38a42aaff7fd5a2 (commit)
      from  39cb6517086a74a73e6082c99646d4533910ffef (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 1089651b5b7f8278da1c0138b38a42aaff7fd5a2
Author: Sandro Santilli <strk at kbt.io>
Date:   Mon Oct 26 10:47:29 2020 +0100

    Fix OverlayNGRobust self-snapping to prevent heterogeneous results
    
     * Add explicit check for hetero overlay input
     * Fix to prevent hetero results from self-snapping
     * Include test case
    
    Closes #1062
    This is a port of https://github.com/locationtech/jts/pull/618

diff --git a/include/geos/operation/overlayng/EdgeNodingBuilder.h b/include/geos/operation/overlayng/EdgeNodingBuilder.h
index 725eb29..033ab66 100644
--- a/include/geos/operation/overlayng/EdgeNodingBuilder.h
+++ b/include/geos/operation/overlayng/EdgeNodingBuilder.h
@@ -10,6 +10,10 @@
  * by the Free Software Foundation.
  * See the COPYING file for more information.
  *
+ **********************************************************************
+ *
+ * Last port: operation/overlayng/EdgeNodingBuilder.java 6ef89b096
+ *
  **********************************************************************/
 
 #pragma once
@@ -113,6 +117,7 @@ private:
 
 
     void addCollection(const GeometryCollection* gc, int geomIndex);
+    void addGeometryCollection(const GeometryCollection* gc, int geomIndex, int expectedDim);
     void addPolygon(const Polygon* poly, int geomIndex);
     void addPolygonRing(const LinearRing* ring, bool isHole, int geomIndex);
     void addLine(const LineString* line, int geomIndex);
diff --git a/include/geos/operation/overlayng/OverlayNG.h b/include/geos/operation/overlayng/OverlayNG.h
index 0c40858..559ea7b 100644
--- a/include/geos/operation/overlayng/OverlayNG.h
+++ b/include/geos/operation/overlayng/OverlayNG.h
@@ -53,7 +53,7 @@ namespace overlayng { // geos.operation.overlayng
  * * SYMDIFFERENCE - all points which lie in one geometry but not both
  *
  * Input geometries may have different dimension.
- * Collections must be homogeneous
+ * Input collections must be homogeneous
  * (all elements must have the same dimension).
  *
  * The precision model used for the computation can be supplied
@@ -80,17 +80,29 @@ namespace overlayng { // geos.operation.overlayng
  * TOptionally the overlay computation can process using strict mode
  * (via setStrictMode(boolean). In strict mode result semantics are:
  *
- *  - Result geometries are homogeneous (all components are of same dimension),
- *    except for some cases of symmetricDifference.
- *  - Lines and Points resulting from topology collapses are not included in the result
+ *  - Lines and Points resulting from topology collapses are not included
+ *    in the result
+ *  - Result geometry is homogeneous for the
+ *    {@link INTERSECTION} and {@link DIFFERENCE} operations.
+ *  - Result geometry is homogeneous for the
+ *    {@link UNION} and {@link SYMDIFFERENCE} operations if
+ *    the inputs have the same dimension.
  *
  * Strict mode has the following benefits:
  *
  *  - Results are simpler
- *  - Overlay operations are easily chainable
+ *  - Overlay operations are chainable without needing to remove
+ *    lower-dimension elements
  *
  * The original JTS overlay semantics correspond to non-strict mode.
  *
+ *
+ * If a robustness error occurs, a {@link TopologyException} is thrown.
+ * These are usually caused by numerical rounding causing the noding
+ * output to not be fully noded.
+ * For robust computation with full-precision {@link OverlayNGRobust}
+ * can be used.
+ *
  * @author mdavis
  * @see OverlayNGRobust
  *
@@ -232,6 +244,14 @@ public:
         isOutputNodedEdges = p_isOutputNodedEdges;
     }
 
+    /**
+     * Gets the result of the overlay operation.
+     *
+     * @return the result of the overlay operation.
+     *
+     * @throws IllegalArgumentException if the input is not supported (e.g. a mixed-dimension geometry)
+     * @throws TopologyException if a robustness error occurs
+     */
     std::unique_ptr<Geometry> getResult();
 
     /**
diff --git a/include/geos/operation/overlayng/OverlayNGRobust.h b/include/geos/operation/overlayng/OverlayNGRobust.h
index bc4570b..0f1829e 100644
--- a/include/geos/operation/overlayng/OverlayNGRobust.h
+++ b/include/geos/operation/overlayng/OverlayNGRobust.h
@@ -10,6 +10,10 @@
  * by the Free Software Foundation.
  * See the COPYING file for more information.
  *
+ **********************************************************************
+ *
+ * Last port: operation/overlayng/OverlayNGRobust.java 6ef89b09
+ *
  **********************************************************************/
 
 #pragma once
@@ -100,6 +104,19 @@ private:
     static std::unique_ptr<Geometry>
     overlaySR(const Geometry* geom0, const Geometry* geom1, int opCode);
 
+	/**
+   	 * Self-snaps a geometry by running a union operation with it as the only input.
+   	 * This helps to remove narrow spike/gore artifacts to simplify the geometry,
+   	 * which improves robustness.
+   	 * Collapsed artifacts are removed from the result to allow using
+   	 * it in further overlay operations.
+   	 *
+   	 * @param geom geometry to self-snap
+   	 * @param snapTol snap tolerance
+   	 * @return the snapped geometry (homogeneous)
+   	 */
+	static std::unique_ptr<Geometry>
+	snapSelf(const Geometry* geom, double snapTol);
 
 
 public:
diff --git a/src/operation/overlayng/EdgeNodingBuilder.cpp b/src/operation/overlayng/EdgeNodingBuilder.cpp
index 725cc32..adf1a75 100644
--- a/src/operation/overlayng/EdgeNodingBuilder.cpp
+++ b/src/operation/overlayng/EdgeNodingBuilder.cpp
@@ -10,6 +10,10 @@
  * by the Free Software Foundation.
  * See the COPYING file for more information.
  *
+ **********************************************************************
+ *
+ * Last port: operation/overlayng/EdgeNodingBuilder.java 6ef89b096
+ *
  **********************************************************************/
 
 #include <geos/operation/overlayng/EdgeNodingBuilder.h>
@@ -160,8 +164,9 @@ EdgeNodingBuilder::add(const Geometry* g, int geomIndex)
             return addLine(static_cast<const LineString*>(g), geomIndex);
         case GEOS_MULTILINESTRING:
         case GEOS_MULTIPOLYGON:
-        case GEOS_GEOMETRYCOLLECTION:
             return addCollection(static_cast<const GeometryCollection*>(g), geomIndex);
+        case GEOS_GEOMETRYCOLLECTION:
+            return addGeometryCollection(static_cast<const GeometryCollection*>(g), geomIndex, g->getDimension());
         case GEOS_POINT:
         case GEOS_MULTIPOINT:
             return; // do nothing
@@ -182,6 +187,19 @@ EdgeNodingBuilder::addCollection(const GeometryCollection* gc, int geomIndex)
 
 /*private*/
 void
+EdgeNodingBuilder::addGeometryCollection(const GeometryCollection* gc, int geomIndex, int expectedDim)
+{
+    for (std::size_t i = 0; i < gc->getNumGeometries(); i++) {
+        const Geometry* g = gc->getGeometryN(i);
+        if (g->getDimension() != expectedDim) {
+            throw geos::util::IllegalArgumentException("Overlay input is mixed-dimension");
+        }
+        add(g, geomIndex);
+    }
+}
+
+/*private*/
+void
 EdgeNodingBuilder::addPolygon(const Polygon* poly, int geomIndex)
 {
     const LinearRing* shell = poly->getExteriorRing();
diff --git a/src/operation/overlayng/OverlayNGRobust.cpp b/src/operation/overlayng/OverlayNGRobust.cpp
index 93812c7..b8ee6bf 100644
--- a/src/operation/overlayng/OverlayNGRobust.cpp
+++ b/src/operation/overlayng/OverlayNGRobust.cpp
@@ -10,6 +10,10 @@
  * by the Free Software Foundation.
  * See the COPYING file for more information.
  *
+ **********************************************************************
+ *
+ * Last port: operation/overlayng/OverlayNGRobust.java 6ef89b09
+ *
  **********************************************************************/
 
 #include <geos/operation/overlayng/OverlayNGRobust.h>
@@ -199,8 +203,8 @@ std::unique_ptr<Geometry>
 OverlayNGRobust::overlaySnapBoth(const Geometry* geom0, const Geometry* geom1, int opCode, double snapTol)
 {
     try {
-        std::unique_ptr<Geometry> snap0 = overlaySnapTol(geom0, nullptr, OverlayNG::UNION, snapTol);
-        std::unique_ptr<Geometry> snap1 = overlaySnapTol(geom1, nullptr, OverlayNG::UNION, snapTol);
+        std::unique_ptr<Geometry> snap0 = snapSelf(geom0, snapTol);
+        std::unique_ptr<Geometry> snap1 = snapSelf(geom1, snapTol);
         return overlaySnapTol(snap0.get(), snap1.get(), opCode, snapTol);
     }
     catch (const geos::util::TopologyException& ex)
@@ -216,6 +220,22 @@ OverlayNGRobust::overlaySnapBoth(const Geometry* geom0, const Geometry* geom1, i
 
 /*private static*/
 std::unique_ptr<Geometry>
+OverlayNGRobust::snapSelf(const Geometry* geom, double snapTol)
+{
+	OverlayNG ov(geom, nullptr);
+	noding::snap::SnappingNoder snapNoder(snapTol);
+	ov.setNoder(&snapNoder);
+	/**
+	 * Ensure the result is not mixed-dimension,
+	 * since it will be used in further overlay computation.
+	 * It may however be lower dimension, if it collapses completely due to snapping.
+	 */
+	ov.setStrictMode(true);
+	return ov.getResult();
+}
+
+/*private static*/
+std::unique_ptr<Geometry>
 OverlayNGRobust::overlaySnapTol(const Geometry* geom0, const Geometry* geom1, int opCode, double snapTol)
 {
     noding::snap::SnappingNoder snapNoder(snapTol);
diff --git a/tests/xmltester/Makefile.am b/tests/xmltester/Makefile.am
index 793d0a4..d0ec2df 100644
--- a/tests/xmltester/Makefile.am
+++ b/tests/xmltester/Makefile.am
@@ -135,6 +135,7 @@ SAFE_XMLTESTS= \
 	$(srcdir)/tests/robust/overlay/TestOverlay-qgis-29400.xml \
 	$(srcdir)/tests/robust/overlay/TestOverlay-qgis-31552.xml \
 	$(srcdir)/tests/robust/overlay/TestOverlay-qgis-37032.xml \
+	$(srcdir)/tests/robust/overlay/TestOverlay-rsf-794.xml \
 	$(srcdir)/tests/robust/overlay/TestOverlay-shapely-829.xml \
 	$(srcdir)/tests/robust/overlay/TestOverlay-stmlf.xml \
 	$(srcdir)/tests/issue/issue-geos-176.xml \
diff --git a/tests/xmltester/tests/robust/overlay/TestOverlay-rsf-794.xml b/tests/xmltester/tests/robust/overlay/TestOverlay-rsf-794.xml
new file mode 100644
index 0000000..3cbfc9d
--- /dev/null
+++ b/tests/xmltester/tests/robust/overlay/TestOverlay-rsf-794.xml
@@ -0,0 +1,20 @@
+<run>
+<precisionModel type="FLOATING" />
+<tolerance>.01</tolerance>
+
+<case>
+<desc>
+Failed in OverlayNGRobust due to Self-snapping Mixed-dimension result.
+Test extracted from R-sf n-ary intersection process.
+https://github.com/r-spatial/sf/issues/794
+</desc>
+<a>
+POLYGON ((39.58506999999997 3.4819800000000214, 39.58951000000002 3.4859900000000152, 39.61214000000001 3.5064499999999725, 39.61971999999997 3.5163200000000074, 39.61992848394774 3.5165334478512795, 39.619932000000006 3.5165380000000255, 39.65879771026121 3.556443380555404, 39.708230000000015 3.6071999999999775, 39.71647999999999 3.615659999999991, 39.71649000000002 3.6156799999999976, 39.72417285071445 3.6235650309963834, 39.76284499999997 3.6632639999999697, 39.7781185487038 3.696391365802514, 39.76283999999998 3.6632599999999798, 39.78296 3.706889999999987, 39.83488999999997 3.819470000000024, 39.836329999999975 3.821419999999989, 39.85753 3.8500399999999786, 39.86507999999998 3.8679199999999696, 39.86957000000001 3.8747299999999996, 39.925850000000025 3.903189999999995, 40 3.9406700000000114, 40.03841 3.9600899999999797, 40.10611 3.9943000000000097, 40.12223 4.0001700000000255, 40.12959000000001 4.006250000000023, 40.150710000000004 4.016770000000008, 40.17223999999999 4.027480
 0000000255, 40.190530000000024 4.042719999999974, 40.191709108532955 4.043703945741277, 40.19198058345965 4.043929987880649, 40.19878955523256 4.04378855523254, 40.212197 4.043505999999979, 40.23405100000002 4.050077999999985, 40.272850737563104 4.065018262436912, 40.32418000000001 4.084780000000023, 40.32702049086561 4.085968509102104, 40.33037200000001 4.087366999999972, 40.375789999999995 4.106326000000024, 40.38777099999999 4.1048490000000015, 40.393451 4.110392679999965, 40.393520000000024 4.110459999999989, 40.40301999999997 4.119730000000004, 40.415364666666655 4.12625202866896, 40.41766799999999 4.127468000000022, 40.42426234096692 4.130210636132334, 40.442589999999996 4.137830000000008, 40.51317999999998 4.1671799999999735, 40.513182460649126 4.167182460649126, 40.513202999999976 4.1671910000000025, 40.559055 4.1862540000000195, 40.65215599999999 4.2249459999999885, 40.673591999999985 4.233179000000007, 40.675932999999986 4.233425000000011, 40.690327000000025 4.234929000000
 022, 40.69032831125232 4.234929824088802, 40.69033000000002 4.23493000000002, 40.69412985846674 4.237319000000022, 40.709213999999974 4.24679900000001, 40.71264500000001 4.247337000000016, 40.72429599999998 4.249158000000023, 40.72429946916032 4.249159917070561, 40.72429999999997 4.249160000000018, 40.72465792307687 4.249358000000001, 40.72805999999997 4.251238000000001, 40.737892400135856 4.256675200407579, 40.74009000000001 4.257889999999975, 40.74711000000002 4.261770000000013, 40.74734935991566 4.261943430503433, 40.775104 4.281868999999972, 40.77838700000001 4.280996000000016, 40.7840403736852 4.2737765622808634, 40.784640000000024 4.273009999999999, 40.78464124911354 4.273009235906666, 40.78464300000002 4.273007000000007, 40.78980578076557 4.2698500480860595, 40.801379999999995 4.262769999999989, 40.81383999999997 4.255150000000015, 40.82825436363733 4.249401363582017, 40.830692 4.248428999999987, 40.84409699999998 4.246258000000012, 40.849469 4.237258999999995, 40.85576800000
 001 4.226705999999979, 40.86478600003295 4.223699999989027, 40.86865 4.222410000000025, 40.87322 4.220889999999997, 40.88055953205502 4.214439865388316, 40.882380408022115 4.21283852060694, 40.88238415674897 4.212824928597307, 40.883894 4.206572999999992, 40.88366180751159 4.205850694835194, 40.88353000000001 4.205449999999985, 40.881399999999985 4.198860000000025, 40.882041674184244 4.196662000031867, 40.88320699999997 4.192656999999997, 40.89355790840825 4.1778151814756805, 40.89558999999997 4.17489999999998, 40.89848999999998 4.170740000000023, 40.90291000000002 4.158180000000016, 40.90415999999999 4.154620000000023, 40.90416476271502 4.154615674040522, 40.90416499999998 4.154614999999978, 40.90644900000001 4.152535999999998, 40.90769399999999 4.152296999999976, 40.91378099999997 4.151126999999974, 40.929805999999985 4.144165999999984, 40.947910999999976 4.140875999999992, 40.95747299999999 4.135967999999991, 40.96507600000001 4.132069000000001, 40.972155999999984 4.1253689999999
 78, 40.977168000000006 4.1163760000000025, 40.982192999999995 4.110605000000021, 40.993416000000025 4.107800999999995, 41.00142009670338 4.102709846695355, 41.00936624291501 4.090112757085003, 41.00985800000001 4.0893330000000105, 41.009858272454004 4.0893327386926055, 41.00986 4.089330000000018, 41.01167028597364 4.087594857972452, 41.023105999999984 4.076626999999974, 41.026066000000014 4.070863999999972, 41.02606783832608 4.070864213803544, 41.026070000000004 4.070859999999982, 41.031799999999976 4.071529999999996, 41.032863230599624 4.071170423470682, 41.035233000000005 4.070365999999979, 41.03575884895419 4.069834395675993, 41.04070999999999 4.064819999999997, 41.04435999999998 4.05883, 41.046627342494695 4.0568994143763275, 41.05418900000001 4.050458999999989, 41.056165666666665 4.048774509374996, 41.05739 4.047730000000001, 41.05860850954199 4.046003471374043, 41.0607 4.043039000000022, 41.065368999999976 4.036428000000001, 41.07265000000001 4.022595000000024, 41.091870923977
 4 4.013317484728118, 41.09852999999998 3.9951899999999796, 41.100364481300055 3.9931884439002707, 41.10402155233937 3.9891955805848154, 41.10417632933017 3.98875493996816, 41.10509999999999 3.9861099999999965, 41.105108612028154 3.986099679919586, 41.10521 3.985810000000015, 41.10539 3.985279999999989, 41.10568999999998 3.9853899999999953, 41.10569831215443 3.985393022601613, 41.10570000000001 3.985390999999993, 41.11181499999998 3.98756800000001, 41.11402151304608 3.987399008695463, 41.117999999999995 3.9870900000000233, 41.12257999999997 3.9824800000000096, 41.12336544524003 3.979627593601933, 41.12485600000002 3.974195000000009, 41.13333899999998 3.974177999999995, 41.134409442455244 3.972880721227607, 41.13562000000002 3.9714099999999917, 41.132630000000006 3.9665899999999965, 41.13263433125908 3.966587534514066, 41.132633999999996 3.966587000000004, 41.13305609116021 3.9663474558011096, 41.135879999999986 3.964740000000006, 41.148889999999994 3.9573500000000195, 41.148890987624
 12 3.957349575420548, 41.14889199999999 3.957349000000022, 41.16286500000001 3.9513370000000236, 41.166278413800505 3.9466651182287094, 41.16687999999999 3.9458399999999756, 41.16738537014314 3.9451506666666583, 41.16926599999999 3.9425790000000234, 41.18157100000002 3.939518000000021, 41.18404627192984 3.940608407894752, 41.18587000000002 3.941410000000019, 41.19499336774398 3.9394174709758434, 41.20098300000001 3.9381060000000048, 41.202520888283395 3.9388111907356933, 41.20276000000001 3.938919999999996, 41.20303259503887 3.9444186313557443, 41.20311600000002 3.9460770000000025, 41.20321000000001 3.9479460000000017, 41.21454899999998 3.9535060000000044, 41.226699419057944 3.94999995235515, 41.22708 3.949889999999982, 41.230110000000025 3.9560299999999984, 41.235299999999995 3.958880000000022, 41.252189999999985 3.9547000000000025, 41.27087999999998 3.9577600000000075, 41.27577705537251 3.9554114122192776, 41.27806800000002 3.949793999999997, 41.278068429636654 3.9497938539048403,
  41.278070000000014 3.9497900000000072, 41.28174000000001 3.94853999999998, 41.28654999999998 3.9484299999999735, 41.28708307916612 3.9484171767897926, 41.30982599999999 3.947866999999974, 41.31406399999997 3.9448869999999943, 41.31493499999999 3.944276000000002, 41.32013138873777 3.943838219990903, 41.32180999998985 3.9416866666796864, 41.322648000000015 3.94061099999999, 41.32266790217393 3.9406009510869433, 41.32630999999998 3.938760000000002, 41.32974999999999 3.9392100000000028, 41.33893999999998 3.946550000000002, 41.34834999999998 3.95089999999999, 41.35052000000002 3.954180000000008, 41.35419999999999 3.959760000000017, 41.35438345549175 3.9600376623658993, 41.3593804765297 3.9609955162886497, 41.3596 3.9589300000000094, 41.35960268182998 3.9589279951368206, 41.35960299999999 3.958925000000022, 41.36339498273348 3.9560929740730297, 41.36577999999997 3.954310000000021, 41.3657844469914 3.954308413012066, 41.36578500000002 3.954307999999969, 41.37357400000002 3.951527999999996
 , 41.37861700000002 3.9517450000000167, 41.3866780668076 3.958768933192381, 41.39125634578519 3.962756817017016, 41.39469700000001 3.9622889999999984, 41.405448999999976 3.953286999999989, 41.40855899999998 3.9516295113636217, 41.411609999999996 3.9499999999999886, 41.41241122222221 3.949576276709387, 41.41368899999998 3.948894999999993, 41.41717027369826 3.9483051895861228, 41.419190000000015 3.9479600000000232, 41.41996787286065 3.9483859779951276, 41.421715000000006 3.9493360000000166, 41.42181940487704 3.949254690244706, 41.42674999999997 3.945409999999981, 41.43018999999998 3.944939999999974, 41.43547000000001 3.947459999999978, 41.43593947579344 3.9495996463152094, 41.43660399999999 3.9526089999999954, 41.43709200000001 3.954817999999989, 41.44534199999998 3.9536469999999895, 41.45214999999999 3.9549949999999967, 41.45895999999999 3.9563400000000115, 41.46025657899923 3.9565993157998247, 41.46827000000002 3.953126999999995, 41.47286300000002 3.9551849999999718, 41.476245000000
 006 3.952680999999984, 41.47625131629782 3.9526800873239236, 41.476290000000006 3.9526500000000055, 41.47940378305135 3.9522245703389154, 41.47973300000001 3.952177000000006, 41.48162000000002 3.9565059999999903, 41.481774649006624 3.9568598013244687, 41.482039999999984 3.957459999999969, 41.48207995173575 3.9574800630987177, 41.48445399999997 3.9585890000000177, 41.4845101632572 3.9585811738788603, 41.484579999999994 3.958570000000009, 41.48937999999998 3.957899999999995, 41.495665290214816 3.9613864194512196, 41.49970999999999 3.963626999999974, 41.504923615660324 3.9646184875329267, 41.50567000000001 3.9647600000000125, 41.50680999999997 3.961999999999989, 41.505619415613445 3.956759958841996, 41.505187999999976 3.9548689999999738, 41.50977399999999 3.954628000000014, 41.51826999999997 3.9596670000000245, 41.52121780681816 3.9655416477272607, 41.52319 3.969470000000001, 41.52343185714283 3.969953714285682, 41.524033375131495 3.971151755451765, 41.54516000000001 3.9821400000000153
 , 41.55065999999999 3.9816599999999767, 41.554449999999974 3.9782500000000027, 41.55477370775705 3.9779596514392757, 41.55706500000002 3.9758959999999774, 41.558445000000006 3.9737030000000004, 41.56026200000002 3.970825999999988, 41.56689899999998 3.9666669999999726, 41.57218529068946 3.968978453212946, 41.57630999999998 3.9707799999999907, 41.577894664254686 3.9709044500723496, 41.582043 3.971225000000004, 41.58799799999997 3.9693699999999694, 41.58799941787794 3.969370181668943, 41.58800000000002 3.9693699999999694, 41.588283189196844 3.9694065405414976, 41.59327400000001 3.970046000000025, 41.60050688262912 3.973926901408453, 41.60223000000002 3.9748500000000035, 41.60462129197081 3.974106489051105, 41.60818499999999 3.972995000000026, 41.617818 3.973887999999988, 41.61796099380164 3.9740240082644385, 41.62770999999998 3.983290000000011, 41.63159999999999 3.9823599999999715, 41.64865303498496 3.9701616898665106, 41.655167000000006 3.9655010000000175, 41.655168551259216 3.9655010
 36307599, 41.65517 3.96550000000002, 41.656688065769806 3.9655366008968778, 41.663883 3.965705000000014, 41.66761592252036 3.9636557747965084, 41.67441000000002 3.959920000000011, 41.67853714502166 3.9661704350649285, 41.68063000000001 3.969338999999991, 41.68407297739042 3.970709195065964, 41.687509999999975 3.9697800000000143, 41.68751028456421 3.969780464170876, 41.68751199999997 3.9697800000000143, 41.6922009557919 3.977431716843949, 41.692578189629764 3.9780470469897313, 41.71368799999999 3.9832779999999843, 41.713689390466456 3.983279848988119, 41.713689999999986 3.9832799999999793, 41.71466889719625 3.984582358878481, 41.72059128096779 3.992457714097913, 41.72207499998595 3.9898100000251113, 41.72355699999997 3.987160000000017, 41.73020700000001 3.9866799999999785, 41.730207166062904 3.9866802045548364, 41.73021 3.9866799999999785, 41.73412000000002 3.9914999999999736, 41.73570999999998 3.9868900000000167, 41.73918953548386 3.985295212903227, 41.74074999999999 3.9845779999999
 99, 41.74419 3.9859500000000025, 41.74693000000002 3.983409999999992, 41.74693202232768 3.9834109053181623, 41.74693300000001 3.983409999999992, 41.751491999999985 3.9854500000000144, 41.75467082816294 3.9848967383044513, 41.755419819424965 3.984760032958422, 41.75501600000001 3.983654999999999, 41.75357500000001 3.9797100000000114, 41.75376899999998 3.9784010000000194, 41.75402500000001 3.9767180000000053, 41.769183002481384 3.973101250620339, 41.772580000000005 3.9722899999999868, 41.77258135317764 3.9722903929372317, 41.772583 3.9722899999999868, 41.778088000000025 3.973885999999993, 41.779023815390595 3.9751289688228706, 41.782159999999976 3.979289999999992, 41.78219827217914 3.979337840223942, 41.784290999999996 3.977316999999971, 41.78726999999998 3.9770770000000084, 41.790980042553166 3.9786820638297664, 41.792550000000006 3.9793599999999856, 41.79413999999997 3.9754500000000235, 41.793424103792404 3.9714755417441263, 41.79297700000001 3.9690089999999714, 41.79396700000001 3.
 9642359999999712, 41.79478899999998 3.960262, 41.79478974258739 3.9602612493928224, 41.79478999999998 3.960260000000005, 41.795271735180464 3.959774051392285, 41.79821499999997 3.9567989999999895, 41.80210899999997 3.955407999999977, 41.80578200000002 3.9574680000000058, 41.80990600000001 3.9560749999999985, 41.81713100000002 3.955898999999988, 41.8182658033241 3.9558712049861353, 41.82067999999998 3.9558099999999854, 41.82188000000002 3.9544500000000085, 41.821941729106655 3.9543804322766545, 41.82250848897457 3.9537367161966355, 41.820922500000016 3.9502899999999883, 41.81997000000001 3.9482229999999845, 41.81997057599624 3.9482212517713196, 41.81997000000001 3.948219999999992, 41.82065 3.9461499999999887, 41.821529715270934 3.945761678817723, 41.82431500000001 3.944527999999991, 41.8243197075217 3.944530129104849, 41.82432 3.944529999999986, 41.82936999999998 3.946809999999971, 41.83348999999998 3.9458799999999883, 41.83433970588234 3.9463520588235173, 41.835555 3.947024999999996
 5, 41.83555645542168 3.9470280307898147, 41.83555999999999 3.947029999999984, 41.83594984098939 3.947847222222227, 41.83691399999998 3.9498550000000137, 41.83773042403725 3.9515550909860466, 41.83812 3.9523599999999988, 41.840558560705276 3.955018430932809, 41.84265424168085 3.9528914966965214, 41.84544999999997 3.950049999999976, 41.84619549999926 3.950066410377317, 41.84863300000001 3.9501169999999775, 41.852074000000016 3.9501869999999712, 41.855624999999975 3.953448999999978, 41.85668199999998 3.954421000000025, 41.86045899999999 3.961215999999979, 41.863864999999976 3.963754999999992, 41.878152 3.967767999999978, 41.88538591773479 3.974230857090358, 41.89009805377673 3.9784382622424492, 41.89383177808946 3.9787588950687045, 41.894583896289234 3.9782915176023024, 41.89907099999999 3.975498000000016, 41.899071307165144 3.9754980984403283, 41.89808082617185 3.9740123749999725, 41.8924232338112 3.965614640656319, 41.87288000000001 3.9366099999999733, 41.87135999999998 3.93374000000
 00002, 41.86018999999999 3.9126600000000167, 41.83537999999999 3.8792199999999752, 41.82974999999999 3.873800000000017, 41.828802248123175 3.8724842973945326, 41.82805061328122 3.8714427949218475, 41.82465365812802 3.8667346267358598, 41.823800000000006 3.865550999999982, 41.820345994999414 3.860761302239723, 41.82034599496808 3.8607613021962672, 41.7905788417969 3.8194789882812756, 41.775857925781224 3.796812056640647, 41.77299770769298 3.79240734075199, 41.76862080227858 3.785666372030967, 41.764549999999986 3.7794000000000096, 41.758579999999995 3.772040000000004, 41.755420000000015 3.7681499999999915, 41.749000000000024 3.7602299999999786, 41.68094000000002 3.6661399999999844, 41.663897109089795 3.6425737655192143, 41.66145133984372 3.639192582031228, 41.6106472011719 3.5641384121094006, 41.610400853529434 3.563807804705901, 41.60917999999998 3.562180000000012, 41.59263137410677 3.5399958960998497, 41.5925312050781 3.5398616796874762, 41.592530566911094 3.5398607599672656, 41.59
 253000000001 3.539859999999976, 41.5904859763054 3.5369141154768107, 41.53639030468747 3.458951949218772, 41.498787064702746 3.4047446290723746, 41.496283504058084 3.4011353720304345, 41.46438999999998 3.355160000000012, 41.392409999999984 3.251359999999977, 41.34108312724763 3.1773161152718465, 41.328130722656226 3.158632279296853, 41.3236598964844 3.1540622714843494, 41.321362704917135 3.151713676370416, 41.31871699999999 3.1490079999999807, 41.30695366688958 3.1369765739769613, 41.28568000000001 3.115220000000022, 41.28397566344093 3.1136903461353724, 41.28396382520851 3.1136797372956857, 41.28206825195315 3.1119785312499744, 41.2601299277344 3.0923328398437206, 41.22793769921873 3.0614185332030956, 41.1369380957031 2.9740085605468494, 41.136406379167084 2.97349835178965, 41.13353999999998 2.9707500000000095, 41.08870999999999 2.9245199999999727, 41.08383911875953 2.9194928337999486, 41.081232070312524 2.9168033593750238, 41.070674016601764 2.9064703073086786, 41.04811000000001 2
 .8843899999999962, 40.992110000000025 2.8295699999999897, 40.992110000000025 2.7904697752688157, 40.9921092988281 2.7816638945312206, 40.99210704209844 2.7442573345931938, 40.99209999999999 2.655210000000011, 40.99209000000002 2.528759999999977, 40.99207999999999 2.4023199999999747, 40.99207999999999 2.3680400000000077, 40.99207999999999 2.3333299999999895, 40.990909999999985 2.3196399999999926, 40.99093234269909 2.3120434823153757, 40.99093818749998 2.3094387050781506, 40.99097696403657 2.2939613096901934, 40.99101999999999 2.2759399999999914, 40.991219780605526 2.197014174523503, 40.991338730468726 2.1495189667968475, 40.99143791210935 2.1093273164062225, 40.99032314988336 2.095899161417678, 40.99027000000001 2.095259999999996, 40.99164999999999 2.0231699999999933, 40.99176 2.0175100000000157, 40.99031000000002 1.9419899999999757, 40.99070999999998 1.8967799999999784, 40.99116420084227 1.8457920399296106, 40.991289138671846 1.8316707617187262, 40.99382963956081 1.823885231466147, 
 40.991480000000024 1.7927999999999997, 40.991150000000005 1.770879999999977, 40.99095 1.7576399999999808, 40.99148352712286 1.6714067733128468, 40.9916477207031 1.644502640624978, 40.99170316733052 1.6355324435849834, 40.99180000000001 1.619199999999978, 40.991510000000005 1.518129999999985, 40.991150000000005 1.3917700000000082, 40.99092999999999 1.3140300000000025, 40.99086229069553 1.2905203622137496, 40.990789414062476 1.2654170996093512, 40.9904270175781 1.1390819550780975, 40.99032704877596 1.104160816645765, 40.990099999999984 1.027150000000006, 40.990369999999984 1.0127600000000143, 40.99111548105521 0.9724878169080781, 40.991289138671846 0.9630603789062206, 40.99109587677684 0.9267921002592653, 40.990880000000004 0.8864599999999996, 40.990200000000016 0.7601700000000164, 40.990069046580714 0.7341033772782363, 40.990007400390596 0.7223491660156469, 40.991094961753596 0.6657023253756724, 40.99137999999999 0.6508200000000102, 40.991240000000005 0.6339100000000144, 40.990487463
 58357 0.5379350020818205, 40.99024772656247 0.5076503750000256, 40.989731648919616 0.4422133596140218, 40.98924999999997 0.3814100000000167, 40.98906999999997 0.3582299999999918, 40.98954857527574 0.2835069967197366, 40.98954857527631 0.2835069966307305, 40.98972892773435 0.2551822656250238, 40.98979144344426 0.245285898712502, 40.99009000000001 0.1972099999999841, 40.98937000000001 0.1289800000000128, 40.989357654737915 0.1277862131562512, 40.98926734960935 0.1193141933594006, 40.98975927966687 0.1156418500712479, 40.99095999999997 0.1066399999999703, 40.989428422044824 0.0941553190927544, 40.9893093105469 0.0931873320312206, 40.98921451654904 0.0820717946380041, 40.98863 0.0140099999999848, 41.00051000000002 0, 41.00048868909863 -0.0622633501464197, 41.00047874414065 -0.0876541132812463, 41.00014752511312 -0.0933535832704122, 40.999059999999986 -0.1120099999999979, 41.00031999999999 -0.1280699999999797, 40.999480000000005 -0.1377200000000016, 41.000850000000014 -0.2133299999999849
 , 41.001377882832905 -0.2418545259339681, 41.001409531249976 -0.2435855859375238, 41.00115460028239 -0.2557284062837806, 40.999379999999974 -0.3400700000000256, 41.000009999999975 -0.3940499999999929, 40.997799999999984 -0.4037099999999896, 40.999990000000025 -0.4220700000000193, 40.99824000000001 -0.4321899999999914, 40.99824002914697 -0.4321907990121363, 40.9982395175781 -0.4321937558593731, 40.999444960937524 -0.465362548828125, 41.00081825195315 -0.5029315957031031, 41.00009616138168 -0.5170738066018506, 40.99882000000002 -0.5420100000000048, 40.999959848263344 -0.5718660255646748, 40.99986710961163 -0.5727676510426798, 40.99889000000002 -0.582209999999975, 40.998879999999986 -0.5915400000000091, 40.998789999999985 -0.6614799999999832, 40.99950999999999 -0.7178900000000112, 41.0009594140633 -0.8316494172925255, 41.00098991406247 -0.8340492246093731, 41.00098999138679 -0.8340493239791331, 41.00099 -0.8340499999999906, 41.00317989494919 -0.8368635770307074, 41.00723838867185 -0.84
 20791621093713, 41.01266943334065 -0.8490582046742746, 41.025890000000004 -0.8660500000000297, 41.03347000000002 -0.8731099999999969, 41.08244000000002 -0.9430100000000152, 41.08634000000001 -0.9485799999999927, 41.159069999999986 -1.0431199999999876, 41.16845000000001 -1.05531000000002, 41.190618052853125 -1.0871965665901222, 41.1954784394531 -1.0941886894531194, 41.20345904695357 -1.1046031219775763, 41.23403000000002 -1.1444999999999936, 41.27184999999997 -1.1938499999999976, 41.29149000000001 -1.222440000000006, 41.29318999999998 -1.2247199999999907, 41.30282089662207 -1.237646640713292, 41.30896949804685 -1.2459030156250037, 41.332956816437026 -1.2781159930038901, 41.33295681646438 -1.2781159930406296, 41.35176000000001 -1.3033700000000294, 41.38558999999998 -1.3460600000000227, 41.38959999999997 -1.351130000000012, 41.391557323059196 -1.3558443306367352, 41.392168044921846 -1.3573188789062556, 41.3983860019531 -1.3634777070312794, 41.42655416607092 -1.4027228210162264, 41.4459
 8000000002 -1.4297900000000254, 41.459630000000004 -1.447810000000004, 41.45967000000002 -1.4478599999999915, 41.46397489888458 -1.4535351906422012, 41.46676826562498 -1.4572219843749963, 41.4761369469963 -1.4679729715002585, 41.481299999999976 -1.4739000000000146, 41.48162000382251 -1.474530286009967, 41.485246658203096 -1.4816837304687738, 41.491246855689596 -1.489263467733027, 41.49194 -1.4901399999999967, 41.491941425624056 -1.4901408817892625, 41.4919414511719 -1.490140914062522, 41.49195532661093 -1.4901494799473571, 41.49561 -1.4924100000000067, 41.50074000000001 -1.500819999999976, 41.493780000000015 -1.5120299999999816, 41.44144 -1.4426900000000273, 41.387879999999996 -1.5137700000000223, 41.32416999999998 -1.5950500000000147, 41.301199999999994 -1.6127900000000182, 41.27361000000002 -1.6378799999999956, 41.23230000000001 -1.6517800000000307, 41.15890000000002 -1.6577100000000087, 41.101560000000006 -1.662869999999998, 41.041920000000005 -1.672900000000027, 40.9822500000000
 2 -1.6900499999999852, 40.92257000000001 -1.7143199999999865, 40.88121000000001 -1.7424599999999941, 40.85129999999998 -1.7819299999999885, 40.80061999999998 -1.811179999999979, 40.76997 -1.8530000000000086, 40.74950000000001 -1.8942099999999868, 40.756039999999985 -1.9370400000000245, 40.736159999999984 -1.9585400000000277, 40.694709999999986 -2.0175800000000095, 40.616600000000005 -2.066500000000019, 40.52944000000002 -2.0802400000000034, 40.50495000000001 -2.0885900000000106, 40.453070000000025 -2.085399999999993, 40.220939999999985 -2.0681200000000217, 40.21751999999998 -2.0389599999999746, 40.20794000000001 -2.0262500000000045, 40.17860000000002 -1.9332699999999932, 40.18117999999998 -1.8502900000000295, 40.15841999999998 -1.8087600000000066, 40.142510000000016 -1.7763699999999858, 40.15643 -1.7259900000000243, 40.154499999999985 -1.624270000000024, 40.125009999999975 -1.5427999999999997, 40.07076999999998 -1.4600700000000302, 40.04090000000002 -1.1627000000000294, 40.014119999
 99999 -1.1316899999999919, 39.98608999999999 -1.076880000000017, 39.930079999999975 -0.9673399999999788, 39.92345 -0.9061100000000124, 39.884979999999985 -0.7706200000000081, 39.85113999999999 -0.6278100000000109, 39.810249999999996 -0.5303400000000238, 39.764580000000024 -0.4970000000000141, 39.71886999999998 -0.4707799999999907, 39.64339000000001 -0.44598000000002, 39.64071000000001 -0.3953099999999949, 39.62999000000002 -0.3499800000000164, 39.47998000000001 -0.1799800000000005, 39.41998000000001 -0.1499800000000278, 39.36998 -0.1399900000000116, 39.309979999999996 -0.1099800000000073, 39.22998000000001 -0.0899800000000255, 39.15998000000002 -0.0699799999999868, 39.109969999999976 -0.0399800000000141, 39.06851 -0.0319400000000201, 39.032939999999996 -0.0441599999999767, 38.991089999999986 -0.0477799999999888, 38.96361000000002 -0.0616600000000176, 38.96451999999999 -0.0386500000000183, 38.98777000000001 -0.0272199999999998, 39.04111 -0.0183299999999917, 39.05604999999997 -0.00247
 00000000166, 39.07072999999997 0.0214199999999778, 39.075049999999976 0.042759999999987, 39.07418000000001 0.1135899999999879, 39.075049999999976 0.1315200000000232, 39.08801 0.1492200000000139, 39.09471000000002 0.1572100000000205, 39.075829999999996 0.171100000000024, 39.02053999999998 0.1947099999999864, 39.00887999999998 0.2047200000000089, 38.97886999999997 0.2505499999999756, 38.96888000000001 0.2555600000000027, 38.87358999999998 0.2641699999999787, 38.73665999999997 0.3088900000000194, 38.72496000000001 0.3148499999999785, 38.68997999999999 0.4499799999999823, 38.686770000000024 0.4891499999999951, 38.77998000000002 0.5199799999999755, 38.809979999999996 0.5799799999999777, 39.01763 0.6551000000000045, 39.15998999999999 0.7299800000000118, 39.21998000000002 0.8199900000000184, 39.27998000000002 0.8699799999999982, 39.309979999999996 0.9299800000000005, 39.44997999999998 0.9799800000000118, 39.45997999999997 1.529989999999998, 39.17998 1.7399899999999775, 39.16998000000001 1.
 799980000000005, 39.115880000000004 1.8714899999999943, 39.06876 1.9315799999999967, 39.06443999999999 2.0335099999999784, 39.18641000000002 2.217620000000011, 39.56025999999997 3.406659999999988, 39.549030000000016 3.4065800000000195, 39.55702000000002 3.411479999999983, 39.55761000000001 3.4118500000000154, 39.56207999999998 3.41631000000001, 39.567319999999995 3.428580000000011, 39.567920000000015 3.4299800000000005, 39.572378882465934 3.444894303770105, 39.58181400000001 3.476434999999981, 39.584835474836524 3.481580224798322, 39.58506999999997 3.4819800000000214))
+</a>
+<b>
+MULTIPOLYGON (((41.823800000000006 3.865550999999982, 41.820345994999414 3.860761302239723, 41.82034599496808 3.8607613021962672, 41.8238010410156 3.8655529023437225, 41.82465365812802 3.8667346267358598, 41.823800000000006 3.865550999999982)), ((41.77299770769298 3.79240734075199, 41.76862080227858 3.785666372030967, 41.76774805113227 3.7843229062964685, 41.77299770769298 3.79240734075199)), ((41.496283504058084 3.4011353720304345, 41.49628350403736 3.4011353720005517, 41.48927593188359 3.3910337620861157, 41.498787064702746 3.4047446290723746, 41.496283504058084 3.4011353720304345)), ((41.28397566344093 3.1136903461353724, 41.28396382520851 3.1136797372956857, 41.284325811019194 3.1140046060117075, 41.28397566344093 3.1136903461353724)), ((41.30695366688958 3.1369765739769613, 41.28568000000001 3.115220000000022, 41.28567743555821 3.1152176983957487, 41.31871604882815 3.1490077968750256, 41.321362704917135 3.151713676370416, 41.31871699999999 3.1490079999999807, 41.30695366688958 
 3.1369765739769613)))
+</b>
+<test><op name="overlayAreaTest" arg1="A" arg2="B"> true </op></test>
+</case>
+
+</run>

-----------------------------------------------------------------------

Summary of changes:
 .../geos/operation/overlayng/EdgeNodingBuilder.h   |  5 ++++
 include/geos/operation/overlayng/OverlayNG.h       | 30 ++++++++++++++++++----
 include/geos/operation/overlayng/OverlayNGRobust.h | 17 ++++++++++++
 src/operation/overlayng/EdgeNodingBuilder.cpp      | 20 ++++++++++++++-
 src/operation/overlayng/OverlayNGRobust.cpp        | 24 +++++++++++++++--
 tests/xmltester/Makefile.am                        |  1 +
 .../tests/robust/overlay/TestOverlay-rsf-794.xml   | 20 +++++++++++++++
 7 files changed, 109 insertions(+), 8 deletions(-)
 create mode 100644 tests/xmltester/tests/robust/overlay/TestOverlay-rsf-794.xml


hooks/post-receive
-- 
GEOS


More information about the geos-commits mailing list