Commit 4a48c138 authored by Luna Riegel's avatar Luna Riegel
Browse files

Refactor: Remove obsolete check

parent 2b7c6936
...@@ -24,7 +24,6 @@ import java.util.List; ...@@ -24,7 +24,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.ServiceLoader; import java.util.ServiceLoader;
import de.hft.stuttgart.citydoctor2.checks.topology.DisconnectedIslandCheck;
import de.hft.stuttgart.citydoctor2.checks.topology.FeatureCollisionCheck; import de.hft.stuttgart.citydoctor2.checks.topology.FeatureCollisionCheck;
import de.hft.stuttgart.citydoctor2.checks.topology.MisalignedUtilityConnectionCheck; import de.hft.stuttgart.citydoctor2.checks.topology.MisalignedUtilityConnectionCheck;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
...@@ -118,7 +117,6 @@ public class Checks { ...@@ -118,7 +117,6 @@ public class Checks {
//topology checks //topology checks
publish(new FeatureCollisionCheck()); publish(new FeatureCollisionCheck());
publish(new DisconnectedIslandCheck());
publish(new MisalignedUtilityConnectionCheck()); publish(new MisalignedUtilityConnectionCheck());
// load checks from service loader // load checks from service loader
ServiceLoader<Check> checkLoader = ServiceLoader.load(Check.class); ServiceLoader<Check> checkLoader = ServiceLoader.load(Check.class);
......
package de.hft.stuttgart.citydoctor2.checks.topology;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.check.GlobalParameters;
import de.hft.stuttgart.citydoctor2.check.Requirement;
import de.hft.stuttgart.citydoctor2.check.RequirementType;
import de.hft.stuttgart.citydoctor2.check.ResultStatus;
import de.hft.stuttgart.citydoctor2.check.error.FloatingUtilityError;
import de.hft.stuttgart.citydoctor2.checks.Checks;
import de.hft.stuttgart.citydoctor2.checks.util.CollectionUtils;
import de.hft.stuttgart.citydoctor2.checks.util.SelfIntersectionUtil;
import de.hft.stuttgart.citydoctor2.database.CityObjectCache;
import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.OtherConstructionObject;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.PolygonIntersection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class DisconnectedIslandCheck extends Check{
private static final List<CheckId> dependencies;
static {
ArrayList<CheckId> deps = new ArrayList<>();
deps.add(CheckId.C_GE_S_ALL_POLYGONS_WRONG_ORIENTATION);
dependencies = Collections.unmodifiableList(deps);
}
private double epsilon = Checks.MIN_VERTEX_DISTANCE_DEFAULT;
private double searchRadius = Checks.MIN_VERTEX_DISTANCE_DEFAULT;
private CityObjectCache cache;
@Override
public Set<Requirement> appliesToRequirements() {
return CollectionUtils.singletonSet(Requirement.R_TO_UTILITY_LINES_DISCONNECTED);
}
@Override
public CheckId getCheckId() {
return CheckId.C_TO_FLOATING_UTILITY;
}
@Override
public RequirementType getType() {
return RequirementType.TOPOLOGY;
}
@Override
public Check createNewInstance() {
return new DisconnectedIslandCheck();
}
@Override
public List<CheckId> getDependencies() {
return dependencies;
}
@Override
public void init(Map<CheckId, Map<String, String>> params, ParserConfiguration config, CityObjectCache cache) {
Map<String, String> localParameters = params.get(getCheckId());
this.cache = cache;
if (localParameters == null) {
// no parameters
return;
}
String epsilonString = localParameters.get(GlobalParameters.MIN_VERTEX_DISTANCE);
if (epsilonString != null) {
epsilon = Double.parseDouble(epsilonString);
}
}
@Override
public void check(Building b) {
checkUtilityLinesConnections(b);
}
@Override
public void check(OtherConstructionObject oco) {
checkUtilityLinesConnections(oco);
}
private void checkUtilityLinesConnections(CityObject subject){
Collection<CityObject> candidates = cache.getCandidates(subject, searchRadius);
if (candidates.isEmpty()) {
FloatingUtilityError err = new FloatingUtilityError(subject, subject.getHighestLodGeometry());
subject.addCheckResult(new CheckResult(this, ResultStatus.ERROR, err));
return;
}
List<Geometry> subjGeoms = new ArrayList<>();
subject.accept(new CheckableUtilsVisitor() {
@Override
public void check(Geometry geom) {
subjGeoms.add(geom);
}
});
boolean floating = true;
for (Geometry sGeo : subjGeoms) {
final boolean[] connected = {false};
for(CityObject candidate : candidates){
if (connected[0]) {
// A connection was found, skip the remaining candidates
break;
}
candidate.accept(new CheckableUtilsVisitor() {
@Override
public void check(Geometry cGeo) {
if(sGeo.getLod() != cGeo.getLod()){
return;
}
List<PolygonIntersection> polygonIntersections =
SelfIntersectionUtil.calculateGeometryIntersections(sGeo, cGeo, epsilon);
if (!polygonIntersections.isEmpty()) {
connected[0] = true;
}
}
});
}
if(connected[0]){
floating = false;
break;
}
}
if(floating){
subject.addCheckResult(new CheckResult(CheckId.C_TO_FLOATING_UTILITY, ResultStatus.ERROR,
new FloatingUtilityError(subject, subject.getHighestLodGeometry())));
} else {
subject.addCheckResult(new CheckResult(CheckId.C_TO_FLOATING_UTILITY, ResultStatus.OK, null));
}
}
}
Supports Markdown
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