diff --git a/planar/makevalid/_images/expected.qml b/planar/makevalid/_images/expected.qml new file mode 100644 index 00000000..3d1733a1 --- /dev/null +++ b/planar/makevalid/_images/expected.qml @@ -0,0 +1,316 @@ + + + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + generatedlayout + + + + + + + + + + + + + + + + + + + + id + + 2 + diff --git a/planar/makevalid/_images/feature.qml b/planar/makevalid/_images/feature.qml new file mode 100644 index 00000000..7d3a7d86 --- /dev/null +++ b/planar/makevalid/_images/feature.qml @@ -0,0 +1,267 @@ + + + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + generatedlayout + + + + + + + + + + + + + + + + + + + + id + + 2 + diff --git a/planar/makevalid/_images/irregular_polygon_detail1.png b/planar/makevalid/_images/irregular_polygon_detail1.png new file mode 100644 index 00000000..95a2fe8d Binary files /dev/null and b/planar/makevalid/_images/irregular_polygon_detail1.png differ diff --git a/planar/makevalid/_images/observed.qml b/planar/makevalid/_images/observed.qml new file mode 100644 index 00000000..347b60b4 --- /dev/null +++ b/planar/makevalid/_images/observed.qml @@ -0,0 +1,315 @@ + + + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + generatedlayout + + + + + + + + + + + + + + + + + + + + id + + 2 + diff --git a/planar/makevalid/cases_test.go b/planar/makevalid/cases_test.go index be32a483..6a4496dd 100644 --- a/planar/makevalid/cases_test.go +++ b/planar/makevalid/cases_test.go @@ -347,4 +347,69 @@ var makevalidTestCases = [...]makevalidCase{ }, }, }, + { // (8) irregular detail 1 middle + Description: "irregular polygon detail 1 middle", + MultiPolygon: &geom.MultiPolygon{ + { // Polygon + { // Ring + {1285733.82161285122856498, 6138599.27377647440880537}, + {1286000.50211894721724093, 6138741.57482850179076195}, + {1286141.80611756001599133, 6138795.4894480612128973}, + {1286188.3289475291967392, 6138833.67217746842652559}, + {1286338.14253718149848282, 6138994.84492336492985487}, + {1286355.31101033766753972, 6139005.97246335539966822}, + {1286378.02191449701786041, 6139012.45303734578192234}, + {1286407.85213660122826695, 6139015.33640445396304131}, + {1286447.46092385076917708, 6139014.0906777661293745}, + {1286475.49032241315580904, 6139010.32550495583564043}, + {1286502.81991908047348261, 6139098.50656714290380478}, + {1286576.41108634602278471, 6139195.95469637773931026}, + {1286588.79291453957557678, 6139188.004275968298316}, + {1286609.48838924197480083, 6139174.42699059750884771}, + {1286659.51022868789732456, 6139245.65898859594017267}, + {1286840.97352537396363914, 6139262.73571997787803411}, + {1287383.30133250961080194, 6139312.66435879096388817}, + {1287393.22918872558511794, 6139313.91012894175946712}, + {1287415.46422759653069079, 6139056.13755289185792208}, + {1287421.97705056634731591, 6138965.68943751137703657}, + {1287442.80315495887771249, 6138703.88238476030528545}, + {1287409.34329369082115591, 6138702.07684669084846973}, + {1287413.98064757976680994, 6138643.04016063269227743}, + {1287088.60075854370370507, 6138637.45563034061342478}, + {1287009.04727913532406092, 6138643.29209441691637039}, + {1286958.56823578476905823, 6138655.16098329238593578}, + {1286890.50083814444951713, 6138655.13299060706049204}, + {1286770.43349436926655471, 6138667.09987043403089046}, + {1286233.20024502673186362, 6138660.12968576420098543}, + {1286139.74403464025817811, 6138613.11607844196259975}, + {1285975.57051010569557548, 6138567.18043652083724737}, + {1285753.22012137877754867, 6138551.35075232852250338}, + {1285733.82161285122856498, 6138599.27377647440880537}, + }, + }, + }, + ClipBox: geom.NewExtent( + [2]float64{1.2862775344896251e+06,6.138805837470278e+06}, + [2]float64{1.2865928372312575e+06,6.139121140211911e+06}, + ), + ExpectedMultiPolygon: &geom.MultiPolygon{ + { // Polygon + { // Ring + {1286277.53448962513357401, 6138929.6414563711732626}, + {1286338.14253718149848282, 6138994.84492336492985487}, + {1286355.31101033766753972, 6139005.97246335539966822}, + {1286378.02191449701786041, 6139012.45303734578192234}, + {1286407.85213660122826695, 6139015.33640445396304131}, + {1286447.46092385076917708, 6139014.0906777661293745}, + {1286475.49032241315580904, 6139010.32550495583564043}, + {1286502.81991908047348261, 6139098.50656714290380478}, + {1286519.91246206755749881, 6139121.14021191094070673}, + {1286592.8372312574647367, 6139121.14021191094070673}, + {1286592.8372312574647367, 6138805.83747027814388275}, + {1286277.53448962513357401, 6138805.83747027814388275}, + {1286277.53448962513357401, 6138929.6414563711732626}, + }, + }, + }, + }, } diff --git a/planar/makevalid/development.md b/planar/makevalid/development.md index 32704242..ff2fd236 100644 --- a/planar/makevalid/development.md +++ b/planar/makevalid/development.md @@ -235,3 +235,20 @@ This output should help identifiy where the code is failing. In our example abov the destructured line segments or the labeling. Taking the WKT output and putting it into qGIS can help visualize where the issues may lie. +## running tests in docker-environment + +In case you don't have go installed, you can also run these tests inside a docker-container. + +grab some go-image: `docker pull golang:1.11.0-alpine3.8` +cd into your `geom` folder and startup a container: `docker run --rm -ti -v $(pwd):/go/src/geom/vendor/github.com/go-spatial/geom golang:1.11.0-alpine3.8` + +``` +apk add git build-base +apk add --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing libspatialite-dev +cd /go/src/geom/vendor/github.com +git clone --branch master --depth 1 https://github.com/mattn/go-sqlite3.git mattn/go-sqlite3 +git clone --branch master --depth 1 https://github.com/pborman/uuid.git pborman/uuid +git clone --branch master --depth 1 https://github.com/google/uuid.git google/uuid +cd /go/src/geom/vendor/github.com/go-spatial/geom/planar/makevalid +go test -v -run "TestMakeValid" +``` \ No newline at end of file diff --git a/planar/makevalid/testcases.md b/planar/makevalid/testcases.md index 91333402..7757d455 100644 --- a/planar/makevalid/testcases.md +++ b/planar/makevalid/testcases.md @@ -14,4 +14,5 @@ MakeValid tests: 6 | circle one right | `PASS` | ![6](_images/circle_one_right.png) 7 | irregular polygon middle | `FAIL:imgage good/Triangulation bad` | ![7](_images/irregular_polygon_middle.png) ![7](_images/irregular_polygon_middle_bad_triangulation.png) 8 | irregular polygon right | `PASS` | ![8](_images/irregular_polygon_right.png) +9 | irregular polygon detail 1 middle| `FAIL: vertex missing` | ![9](_images/irregular_polygon_detail1.png)