Commit 1da24add authored by Matthias Betz's avatar Matthias Betz
Browse files

Merge branch 'CheckEngineRework' into 'master'

Check engine rework

See merge request betzms/citydoctor2!4
parents 09470a4d cd494d75
Pipeline #2115 passed with stage
in 2 minutes and 53 seconds
/*-
* Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package de.hft.stuttgart.citydoctor2.checks.geometry;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
import de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.GeometryType;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType;
import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.quality.model.jaxb.RequirementId;
public class DegeneratedPolygonCheckTest {
@Test
public void testDegeneratedPolygon() {
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, Lod.LOD1);
ConcretePolygon polygon = new ConcretePolygon();
geom.getPolygons().add(polygon);
polygon.setParent(geom);
LinearRing lr = new LinearRing(LinearRingType.EXTERIOR);
polygon.setExteriorRing(lr);
Vertex v1 = new Vertex(427583.301, 6003502.571, 9.711);
lr.getVertices().add(v1);
Vertex v2 = new Vertex(427583.304, 6003502.574, 9.713);
lr.getVertices().add(v2);
Vertex v3 = new Vertex(427583.304, 6003502.574, 4.097);
lr.getVertices().add(v3);
Vertex v4 = new Vertex(427583.301, 6003502.571, 4.097);
lr.getVertices().add(v4);
lr.getVertices().add(v1);
geom.updateEdgesAndVertices();
Building b = new Building();
b.addGeometry(geom);
ParserConfiguration config = new ParserConfiguration(8, false);
CityDoctorModel model = new CityDoctorModel(config, new File(""));
model.addBuilding(b);
ValidationConfiguration valConfig = ValidationConfiguration.loadStandardValidationConfig();
valConfig.setMinVertexDistanceInGlobalParameters(0.004);
Map<String, String> parameters = new HashMap<>();
parameters.put("degeneratedPolygonTolerance", "0.004");
valConfig.getRequirements().get(RequirementId.R_GE_P_NON_PLANAR.toString()).getParameters().putAll(parameters);
Checker c = new Checker(valConfig, model);
c.runChecks();
List<CheckError> errors = new ArrayList<>();
b.collectContainedErrors(errors);
assertTrue(errors.isEmpty());
}
}
...@@ -107,7 +107,7 @@ public class FaceOutCheckTest { ...@@ -107,7 +107,7 @@ public class FaceOutCheckTest {
public void testGoodGeometry() { public void testGoodGeometry() {
Geometry geom = createGoodGeometry(); Geometry geom = createGoodGeometry();
FaceOutCheck foc = new FaceOutCheck(); AllPolygonsWrongOrientationCheck foc = new AllPolygonsWrongOrientationCheck();
foc.check(geom); foc.check(geom);
Assert.assertEquals(ResultStatus.OK, geom.getCheckResult(foc).getResultStatus()); Assert.assertEquals(ResultStatus.OK, geom.getCheckResult(foc).getResultStatus());
...@@ -117,7 +117,7 @@ public class FaceOutCheckTest { ...@@ -117,7 +117,7 @@ public class FaceOutCheckTest {
public void testBadGeometry() { public void testBadGeometry() {
Geometry geom = createBadGeometry(); Geometry geom = createBadGeometry();
FaceOutCheck foc = new FaceOutCheck(); AllPolygonsWrongOrientationCheck foc = new AllPolygonsWrongOrientationCheck();
foc.check(geom); foc.check(geom);
Assert.assertEquals(ResultStatus.ERROR, geom.getCheckResult(foc).getResultStatus()); Assert.assertEquals(ResultStatus.ERROR, geom.getCheckResult(foc).getResultStatus());
......
...@@ -53,7 +53,7 @@ public class NumPointsCheckTest { ...@@ -53,7 +53,7 @@ public class NumPointsCheckTest {
lr.addVertex(v2); lr.addVertex(v2);
lr.addVertex(v0); lr.addVertex(v0);
NumPointsCheck check = new NumPointsCheck(); TooFewPointsCheck check = new TooFewPointsCheck();
ParserConfiguration config = new ParserConfiguration(8, false); ParserConfiguration config = new ParserConfiguration(8, false);
check.init(Collections.emptyMap(), config); check.init(Collections.emptyMap(), config);
check.check(lr); check.check(lr);
...@@ -79,7 +79,7 @@ public class NumPointsCheckTest { ...@@ -79,7 +79,7 @@ public class NumPointsCheckTest {
lr.addVertex(v3); lr.addVertex(v3);
lr.addVertex(v0); lr.addVertex(v0);
NumPointsCheck check = new NumPointsCheck(); TooFewPointsCheck check = new TooFewPointsCheck();
ParserConfiguration config = new ParserConfiguration(8, false); ParserConfiguration config = new ParserConfiguration(8, false);
check.init(Collections.emptyMap(), config); check.init(Collections.emptyMap(), config);
check.check(lr); check.check(lr);
......
...@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel; ...@@ -34,6 +34,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry; import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException; import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException; import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
import de.hft.stuttgart.quality.model.jaxb.RequirementId;
/** /**
* *
...@@ -52,10 +53,10 @@ public class NonManifoldEdgeSystemTest { ...@@ -52,10 +53,10 @@ public class NonManifoldEdgeSystemTest {
@Test @Test
public void testNonManifoldEdge2() throws CityGmlParseException, IOException, InvalidGmlFileException { public void testNonManifoldEdge2() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new HashMap<>(); Map<String, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>(); Map<String, String> parameter = new HashMap<>();
parameter.put("distanceTolerance", "0.1"); parameter.put("distanceTolerance", "0.1");
paramMap.put(CheckId.C_GE_P_NON_PLANAR, parameter); paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter);
CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-SO-0004-T0001.gml", CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-SO-0004-T0001.gml",
paramMap); paramMap);
Geometry g = c.getBuildings().get(0).getGeometries().get(0); Geometry g = c.getBuildings().get(0).getGeometries().get(0);
......
...@@ -37,6 +37,7 @@ import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException; ...@@ -37,6 +37,7 @@ import de.hft.stuttgart.citydoctor2.parser.CityGmlParseException;
import de.hft.stuttgart.citydoctor2.parser.CityGmlParser; import de.hft.stuttgart.citydoctor2.parser.CityGmlParser;
import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException; import de.hft.stuttgart.citydoctor2.parser.InvalidGmlFileException;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.quality.model.jaxb.RequirementId;
/** /**
* *
...@@ -113,10 +114,10 @@ public class PlanarTest { ...@@ -113,10 +114,10 @@ public class PlanarTest {
@Test @Test
public void testPlanarPolygon4() throws CityGmlParseException, IOException, InvalidGmlFileException { public void testPlanarPolygon4() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new HashMap<>(); Map<String, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>(); Map<String, String> parameter = new HashMap<>();
parameter.put("distanceTolerance", "0.01"); parameter.put("distanceTolerance", "0.01");
paramMap.put(CheckId.C_GE_P_NON_PLANAR, parameter); paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter);
CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml", paramMap); CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml", paramMap);
Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.2", c); Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.2", c);
CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR); CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR);
...@@ -126,11 +127,11 @@ public class PlanarTest { ...@@ -126,11 +127,11 @@ public class PlanarTest {
@Test @Test
public void testPlanarPolygon5() throws CityGmlParseException, IOException, InvalidGmlFileException { public void testPlanarPolygon5() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new HashMap<>(); Map<String, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>(); Map<String, String> parameter = new HashMap<>();
parameter.put("type", "distance"); parameter.put("type", "distance");
parameter.put("distanceTolerance", "0.5"); parameter.put("distanceTolerance", "0.5");
paramMap.put(CheckId.C_GE_P_NON_PLANAR, parameter); paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter);
CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml", paramMap); CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0001.gml", paramMap);
Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.2", c); Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.2", c);
CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR); CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR);
...@@ -139,10 +140,10 @@ public class PlanarTest { ...@@ -139,10 +140,10 @@ public class PlanarTest {
@Test @Test
public void testPlanarPolygon6() throws CityGmlParseException, IOException, InvalidGmlFileException { public void testPlanarPolygon6() throws CityGmlParseException, IOException, InvalidGmlFileException {
Map<CheckId, Map<String, String>> paramMap = new HashMap<>(); Map<String, Map<String, String>> paramMap = new HashMap<>();
Map<String, String> parameter = new HashMap<>(); Map<String, String> parameter = new HashMap<>();
parameter.put("type", "both"); parameter.put("type", "both");
paramMap.put(CheckId.C_GE_P_NON_PLANAR, parameter); paramMap.put(RequirementId.R_GE_P_NON_PLANAR.toString(), parameter);
CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0002.gml", paramMap); CityDoctorModel c = TestUtil.loadAndCheckCityModel("src/test/resources/SimpleSolid_SrefBS-GE-gml-PO-0002-T0002.gml", paramMap);
Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.1", c); Polygon p = TestUtil.getPolygonById("_Simple_BD.1_PG.1", c);
CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR); CheckResult cr = p.getCheckResult(CheckId.C_GE_P_NON_PLANAR);
......
...@@ -23,7 +23,6 @@ import java.util.List; ...@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.Checker; import de.hft.stuttgart.citydoctor2.check.Checker;
import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration; import de.hft.stuttgart.citydoctor2.check.ValidationConfiguration;
import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel; import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
...@@ -52,7 +51,7 @@ public class TestUtil { ...@@ -52,7 +51,7 @@ public class TestUtil {
public static CityDoctorModel loadAndCheckCityModel(String path, int numberOfRoundingPlaces) public static CityDoctorModel loadAndCheckCityModel(String path, int numberOfRoundingPlaces)
throws CityGmlParseException, IOException, InvalidGmlFileException { throws CityGmlParseException, IOException, InvalidGmlFileException {
ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig(); ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig();
config.setNumberOfRoundingPlaces(numberOfRoundingPlaces); config.setNumberOfRoundingPlacesInGlobalParameters(numberOfRoundingPlaces);
CityDoctorModel m = CityGmlParser.parseCityGmlFile(path, config.getParserConfiguration()); CityDoctorModel m = CityGmlParser.parseCityGmlFile(path, config.getParserConfiguration());
Checker c = new Checker(config, m); Checker c = new Checker(config, m);
c.runChecks(); c.runChecks();
...@@ -63,8 +62,8 @@ public class TestUtil { ...@@ -63,8 +62,8 @@ public class TestUtil {
public static CityDoctorModel loadAndCheckCityModel(String path, int numberOfRoundingPlaces, double minVertexDistance) public static CityDoctorModel loadAndCheckCityModel(String path, int numberOfRoundingPlaces, double minVertexDistance)
throws CityGmlParseException, IOException, InvalidGmlFileException { throws CityGmlParseException, IOException, InvalidGmlFileException {
ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig(); ValidationConfiguration config = ValidationConfiguration.loadStandardValidationConfig();
config.setNumberOfRoundingPlaces(numberOfRoundingPlaces); config.setNumberOfRoundingPlacesInGlobalParameters(numberOfRoundingPlaces);
config.setMinVertexDistance(minVertexDistance); config.setMinVertexDistanceInGlobalParameters(minVertexDistance);
CityDoctorModel m = CityGmlParser.parseCityGmlFile(path, config.getParserConfiguration()); CityDoctorModel m = CityGmlParser.parseCityGmlFile(path, config.getParserConfiguration());
Checker c = new Checker(config, m); Checker c = new Checker(config, m);
c.runChecks(); c.runChecks();
...@@ -72,11 +71,11 @@ public class TestUtil { ...@@ -72,11 +71,11 @@ public class TestUtil {
} }
public static CityDoctorModel loadAndCheckCityModel(String path, Map<CheckId, Map<String, String>> paramMap) public static CityDoctorModel loadAndCheckCityModel(String path, Map<String, Map<String, String>> paramMap)
throws CityGmlParseException, IOException, InvalidGmlFileException { throws CityGmlParseException, IOException, InvalidGmlFileException {
ValidationConfiguration valConfig = ValidationConfiguration.loadStandardValidationConfig(); ValidationConfiguration valConfig = ValidationConfiguration.loadStandardValidationConfig();
for (Entry<CheckId, Map<String, String>> e : paramMap.entrySet()) { for (Entry<String, Map<String, String>> e : paramMap.entrySet()) {
valConfig.getChecks().get(e.getKey()).setParameters(e.getValue()); valConfig.getRequirements().get(e.getKey()).getParameters().putAll(e.getValue());
} }
CityDoctorModel m = CityGmlParser.parseCityGmlFile(path, valConfig.getParserConfiguration()); CityDoctorModel m = CityGmlParser.parseCityGmlFile(path, valConfig.getParserConfiguration());
Checker c = new Checker(valConfig, m); Checker c = new Checker(valConfig, m);
......
numberOfRoundingPlaces: 8 globalParameters:
numberOfRoundingPlaces: 8
# in m
minVertexDistance: 0.0001
schematronFilePath: ''
useStreaming: false useStreaming: false
xmlValidation: false xmlValidation: false
checks: requirements:
C_GE_R_TOO_FEW_POINTS: R_GE_R_TOO_FEW_POINTS:
enabled: true enabled: true
C_GE_R_NOT_CLOSED: R_GE_R_NOT_CLOSED:
enabled: true enabled: true
C_GE_R_DUPLICATE_POINT: R_GE_R_CONSECUTIVE_POINTS_SAME:
enabled: true enabled: true
C_GE_R_SELF_INTERSECTION: R_GE_R_SELF_INTERSECTION:
enabled: true enabled: true
C_GE_S_MULTIPLE_CONNECTED_COMPONENTS: R_GE_S_MULTIPLE_CONNECTED_COMPONENTS:
enabled: true enabled: true
C_GE_P_INTERIOR_DISCONNECTED: R_GE_P_INTERIOR_DISCONNECTED:
enabled: true enabled: true
C_GE_P_INTERSECTING_RINGS: R_GE_P_INTERSECTING_RINGS:
enabled: true enabled: true
C_GE_P_NON_PLANAR: R_GE_P_NON_PLANAR:
enabled: false enabled: false
parameters: parameters:
# one of ("distance", "angle", "both") # one of ("distance", "angle", "both")
type: distance type: distance
# in m
distanceTolerance: 0.01 distanceTolerance: 0.01
angleTolerance: 0.1 # in degree
C_GE_P_HOLE_OUTSIDE: angleTolerance: 1
# in m
degeneratedPolygonTolerance: 0
R_GE_P_HOLE_OUTSIDE:
enabled: true enabled: true
C_GE_P_ORIENTATION_RINGS_SAME: R_GE_P_ORIENTATION_RINGS_SAME:
enabled: true enabled: true
C_GE_P_INNER_RINGS_NESTED: R_GE_P_INNER_RINGS_NESTED:
enabled: true enabled: true
C_GE_S_TOO_FEW_POLYGONS: R_GE_S_TOO_FEW_POLYGONS:
enabled: true enabled: true
C_GE_S_NOT_CLOSED: R_GE_S_NOT_CLOSED:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_EDGE: R_GE_S_NON_MANIFOLD_EDGE:
enabled: true enabled: true
C_GE_S_POLYGON_WRONG_ORIENTATION: R_GE_S_POLYGON_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION: R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_VERTEX: R_GE_S_NON_MANIFOLD_VERTEX:
enabled: true enabled: true
C_GE_S_SELF_INTERSECTION: R_GE_S_SELF_INTERSECTION:
enabled: true enabled: true
\ No newline at end of file
numberOfRoundingPlaces: 8 globalParameters:
numberOfRoundingPlaces: 8
minVertexDistance: 0.0001
filter: filter:
exclude: exclude:
# available types: BUILDING, VEGETATION, TRANSPORTATION, BRIDGE, LAND, WATER # available types: BUILDING, VEGETATION, TRANSPORTATION, BRIDGE, LAND, WATER
...@@ -6,45 +8,47 @@ filter: ...@@ -6,45 +8,47 @@ filter:
- BUILDING - BUILDING
# exlude matching ids (Regex) # exlude matching ids (Regex)
ids: ids:
checks: requirements:
C_GE_R_TOO_FEW_POINTS: R_GE_R_TOO_FEW_POINTS:
enabled: true enabled: true
C_GE_R_NOT_CLOSED: R_GE_R_NOT_CLOSED:
enabled: true enabled: true
C_GE_R_DUPLICATE_POINT: R_GE_R_CONSECUTIVE_POINTS_SAME:
enabled: true enabled: true
C_GE_R_SELF_INTERSECTION: R_GE_R_SELF_INTERSECTION:
enabled: true enabled: true
C_GE_S_MULTIPLE_CONNECTED_COMPONENTS: R_GE_S_MULTIPLE_CONNECTED_COMPONENTS:
enabled: true enabled: true
C_GE_P_INTERIOR_DISCONNECTED: R_GE_P_INTERIOR_DISCONNECTED:
enabled: true enabled: true
C_GE_P_INTERSECTING_RINGS: R_GE_P_INTERSECTING_RINGS:
enabled: true enabled: true
C_GE_P_NON_PLANAR: R_GE_P_NON_PLANAR:
enabled: false enabled: false
parameters: parameters:
# one of ("distance", "angle", "both") # one of ("distance", "angle", "both")
type: distance type: distance
# in m
distanceTolerance: 0.01 distanceTolerance: 0.01
angleTolerance: 0.1 # in degree
C_GE_P_HOLE_OUTSIDE: angleTolerance: 1
R_GE_P_HOLE_OUTSIDE:
enabled: true enabled: true
C_GE_P_ORIENTATION_RINGS_SAME: R_GE_P_ORIENTATION_RINGS_SAME:
enabled: true enabled: true
C_GE_P_INNER_RINGS_NESTED: R_GE_P_INNER_RINGS_NESTED:
enabled: true enabled: true
C_GE_S_TOO_FEW_POLYGONS: R_GE_S_TOO_FEW_POLYGONS:
enabled: true enabled: true
C_GE_S_NOT_CLOSED: R_GE_S_NOT_CLOSED:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_EDGE: R_GE_S_NON_MANIFOLD_EDGE:
enabled: true enabled: true
C_GE_S_POLYGON_WRONG_ORIENTATION: R_GE_S_POLYGON_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION: R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_VERTEX: R_GE_S_NON_MANIFOLD_VERTEX:
enabled: true enabled: true
C_GE_S_SELF_INTERSECTION: R_GE_S_SELF_INTERSECTION:
enabled: true enabled: true
\ No newline at end of file
numberOfRoundingPlaces: 8 globalParameters:
numberOfRoundingPlaces: 8
# in m
minVertexDistance: 0.0001
filter: filter:
include: include:
# available types: BUILDING, VEGETATION, TRANSPORTATION, BRIDGE, LAND, WATER # available types: BUILDING, VEGETATION, TRANSPORTATION, BRIDGE, LAND, WATER
...@@ -27,45 +30,47 @@ filter: ...@@ -27,45 +30,47 @@ filter:
- UUID-8972-kghf-asgv - UUID-8972-kghf-asgv
- UUID-567-asdf-GEGH - UUID-567-asdf-GEGH
- UUID.* - UUID.*
checks: requirements:
C_GE_R_TOO_FEW_POINTS: R_GE_R_TOO_FEW_POINTS:
enabled: true enabled: true
C_GE_R_NOT_CLOSED: R_GE_R_NOT_CLOSED:
enabled: true enabled: true
C_GE_R_DUPLICATE_POINT: R_GE_R_CONSECUTIVE_POINTS_SAME:
enabled: true enabled: true
C_GE_R_SELF_INTERSECTION: R_GE_R_SELF_INTERSECTION:
enabled: true enabled: true
C_GE_S_MULTIPLE_CONNECTED_COMPONENTS: R_GE_S_MULTIPLE_CONNECTED_COMPONENTS:
enabled: true enabled: true
C_GE_P_INTERIOR_DISCONNECTED: R_GE_P_INTERIOR_DISCONNECTED:
enabled: true enabled: true
C_GE_P_INTERSECTING_RINGS: R_GE_P_INTERSECTING_RINGS:
enabled: true enabled: true
C_GE_P_NON_PLANAR: R_GE_P_NON_PLANAR:
enabled: false enabled: false
parameters: parameters:
# one of ("distance", "angle", "both") # one of ("distance", "angle", "both")
type: distance type: distance
# in m
distanceTolerance: 0.01 distanceTolerance: 0.01
angleTolerance: 0.1 # in degree
C_GE_P_HOLE_OUTSIDE: angleTolerance: 1
R_GE_P_HOLE_OUTSIDE:
enabled: true enabled: true
C_GE_P_ORIENTATION_RINGS_SAME: R_GE_P_ORIENTATION_RINGS_SAME:
enabled: true enabled: true
C_GE_P_INNER_RINGS_NESTED: R_GE_P_INNER_RINGS_NESTED:
enabled: true enabled: true
C_GE_S_TOO_FEW_POLYGONS: R_GE_S_TOO_FEW_POLYGONS:
enabled: true enabled: true
C_GE_S_NOT_CLOSED: R_GE_S_NOT_CLOSED:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_EDGE: R_GE_S_NON_MANIFOLD_EDGE:
enabled: true enabled: true
C_GE_S_POLYGON_WRONG_ORIENTATION: R_GE_S_POLYGON_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION: R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_VERTEX: R_GE_S_NON_MANIFOLD_VERTEX:
enabled: true enabled: true
C_GE_S_SELF_INTERSECTION: R_GE_S_SELF_INTERSECTION:
enabled: true enabled: true
\ No newline at end of file
numberOfRoundingPlaces: 8 globalParameters:
numberOfRoundingPlaces: 8
filter: filter:
include: include:
# available types: BUILDING, VEGETATION, TRANSPORTATION, BRIDGE, LAND, WATER # available types: BUILDING, VEGETATION, TRANSPORTATION, BRIDGE, LAND, WATER
types: types:
- TRANSPORTATION - TRANSPORTATION
checks: requirements:
C_GE_R_TOO_FEW_POINTS: R_GE_R_TOO_FEW_POINTS:
enabled: true enabled: true
C_GE_R_NOT_CLOSED: R_GE_R_NOT_CLOSED:
enabled: true enabled: true
C_GE_R_DUPLICATE_POINT: R_GE_R_CONSECUTIVE_POINTS_SAME:
enabled: true enabled: true
C_GE_R_SELF_INTERSECTION: R_GE_R_SELF_INTERSECTION:
enabled: true enabled: true
C_GE_S_MULTIPLE_CONNECTED_COMPONENTS: R_GE_S_MULTIPLE_CONNECTED_COMPONENTS:
enabled: true enabled: true
C_GE_P_INTERIOR_DISCONNECTED: R_GE_P_INTERIOR_DISCONNECTED:
enabled: true enabled: true
C_GE_P_INTERSECTING_RINGS: R_GE_P_INTERSECTING_RINGS:
enabled: true enabled: true
C_GE_P_NON_PLANAR: R_GE_P_NON_PLANAR:
enabled: false enabled: false
parameters: parameters:
# one of ("distance", "angle", "both") # one of ("distance", "angle", "both")
type: distance type: distance
distanceTolerance: 0.01 distanceTolerance: 0.01
angleTolerance: 0.1 angleTolerance: 0.1
C_GE_P_HOLE_OUTSIDE: R_GE_P_HOLE_OUTSIDE:
enabled: true enabled: true
C_GE_P_ORIENTATION_RINGS_SAME: R_GE_P_ORIENTATION_RINGS_SAME:
enabled: true enabled: true
C_GE_P_INNER_RINGS_NESTED: R_GE_P_INNER_RINGS_NESTED:
enabled: true enabled: true
C_GE_S_TOO_FEW_POLYGONS: R_GE_S_TOO_FEW_POLYGONS:
enabled: true enabled: true
C_GE_S_NOT_CLOSED: R_GE_S_NOT_CLOSED:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_EDGE: R_GE_S_NON_MANIFOLD_EDGE:
enabled: true enabled: true
C_GE_S_POLYGON_WRONG_ORIENTATION: R_GE_S_POLYGON_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION: R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_VERTEX: R_GE_S_NON_MANIFOLD_VERTEX:
enabled: true enabled: true
C_GE_S_SELF_INTERSECTION: R_GE_S_SELF_INTERSECTION:
enabled: true enabled: true
\ No newline at end of file
numberOfRoundingPlaces: 8 globalParameters:
numberOfRoundingPlaces: 8
schematronFilePath: src/test/resources/schematronTest.xml
useStreaming: true useStreaming: true
schematronFilePath: src/test/resources/schematronTest.xml requirements:
checks: R_GE_R_TOO_FEW_POINTS:
C_GE_R_TOO_FEW_POINTS:
enabled: true enabled: true
C_GE_R_NOT_CLOSED: R_GE_R_NOT_CLOSED:
enabled: true enabled: true
C_GE_R_DUPLICATE_POINT: R_GE_R_CONSECUTIVE_POINTS_SAME:
enabled: true enabled: true
C_GE_R_SELF_INTERSECTION: R_GE_R_SELF_INTERSECTION:
enabled: true enabled: true
C_GE_S_MULTIPLE_CONNECTED_COMPONENTS: R_GE_S_MULTIPLE_CONNECTED_COMPONENTS:
enabled: true enabled: true
C_GE_P_INTERIOR_DISCONNECTED: R_GE_P_INTERIOR_DISCONNECTED:
enabled: true enabled: true
C_GE_P_INTERSECTING_RINGS: R_GE_P_INTERSECTING_RINGS:
enabled: true enabled: true
C_GE_P_NON_PLANAR: R_GE_P_NON_PLANAR:
enabled: false enabled: false
parameters: parameters:
# one of ("distance", "angle", "both") # one of ("distance", "angle", "both")
type: distance type: distance
distanceTolerance: 0.01 distanceTolerance: 0.01
angleTolerance: 0.1 angleTolerance: 0.1
C_GE_P_HOLE_OUTSIDE: R_GE_P_HOLE_OUTSIDE:
enabled: true enabled: true
C_GE_P_ORIENTATION_RINGS_SAME: R_GE_P_ORIENTATION_RINGS_SAME:
enabled: true enabled: true
C_GE_P_INNER_RINGS_NESTED: R_GE_P_INNER_RINGS_NESTED:
enabled: true enabled: true
C_GE_S_TOO_FEW_POLYGONS: R_GE_S_TOO_FEW_POLYGONS:
enabled: true enabled: true
C_GE_S_NOT_CLOSED: R_GE_S_NOT_CLOSED:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_EDGE: R_GE_S_NON_MANIFOLD_EDGE:
enabled: true enabled: true
C_GE_S_POLYGON_WRONG_ORIENTATION: R_GE_S_POLYGON_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION: R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION:
enabled: true enabled: true
C_GE_S_NON_MANIFOLD_VERTEX: R_GE_S_NON_MANIFOLD_VERTEX:
enabled: true enabled: true
C_GE_S_SELF_INTERSECTION: R_GE_S_SELF_INTERSECTION:
enabled: true enabled: true
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment