Commit ddeb7a48 authored by Matthias Betz's avatar Matthias Betz
Browse files

add TIN support, modeled with MultiSurface requirements

parent 525b3630
Pipeline #6631 passed with stage
in 1 minute and 49 seconds
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.10.4</version> <version>3.11.0</version>
</parent> </parent>
<artifactId>CityDoctorCheckResult</artifactId> <artifactId>CityDoctorCheckResult</artifactId>
......
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.10.4</version> <version>3.11.0</version>
</parent> </parent>
<artifactId>CityDoctorEdge</artifactId> <artifactId>CityDoctorEdge</artifactId>
......
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.10.4</version> <version>3.11.0</version>
</parent> </parent>
<properties> <properties>
......
...@@ -38,6 +38,8 @@ import de.hft.stuttgart.citydoctor2.datastructure.LandObject; ...@@ -38,6 +38,8 @@ import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Opening; import de.hft.stuttgart.citydoctor2.datastructure.Opening;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.ReliefObject;
import de.hft.stuttgart.citydoctor2.datastructure.TinObject;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject; import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation; import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
import de.hft.stuttgart.citydoctor2.datastructure.WaterObject; import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
...@@ -301,6 +303,14 @@ public abstract class Check { ...@@ -301,6 +303,14 @@ public abstract class Check {
*/ */
public void check(LinearRing ring) { public void check(LinearRing ring) {
}
public void check(TinObject tin) {
}
public void check(ReliefObject relief) {
} }
/** /**
......
...@@ -77,7 +77,7 @@ public class CityDoctorModel { ...@@ -77,7 +77,7 @@ public class CityDoctorModel {
private List<Building> buildings; private List<Building> buildings;
private List<Vegetation> vegetation; private List<Vegetation> vegetation;
private List<BridgeObject> bridges; private List<BridgeObject> bridges;
private List<LandObject> land; private List<CityObject> land;
private List<TransportationObject> roads; private List<TransportationObject> roads;
private List<WaterObject> water; private List<WaterObject> water;
private CityModel cModel; private CityModel cModel;
...@@ -374,7 +374,7 @@ public class CityDoctorModel { ...@@ -374,7 +374,7 @@ public class CityDoctorModel {
return water; return water;
} }
public List<LandObject> getLand() { public List<CityObject> getLand() {
return land; return land;
} }
...@@ -480,9 +480,21 @@ public class CityDoctorModel { ...@@ -480,9 +480,21 @@ public class CityDoctorModel {
} else if (co instanceof Vegetation) { } else if (co instanceof Vegetation) {
vegetation.add((Vegetation) co); vegetation.add((Vegetation) co);
} else if (co instanceof LandObject) { } else if (co instanceof LandObject) {
land.add((LandObject) co); land.add(co);
} else if (co instanceof WaterObject) { } else if (co instanceof WaterObject) {
water.add((WaterObject) co); water.add((WaterObject) co);
} else if (co instanceof ReliefObject) {
land.add(co);
} else if (co instanceof TinObject) {
land.add(co);
} }
} }
public void addRelief(ReliefObject relief) {
addCityObject(relief);
}
public void addTin(TinObject tin) {
addCityObject(tin);
}
} }
/*-
* Copyright 2022 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.datastructure;
import java.util.ArrayList;
import java.util.List;
import org.citygml4j.factory.GMLGeometryFactory;
import org.citygml4j.model.citygml.core.AbstractCityObject;
import org.citygml4j.model.citygml.relief.ReliefFeature;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.check.CheckError;
import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CopyHandler;
import de.hft.stuttgart.citydoctor2.utils.Copyable;
public class ReliefObject extends CityObject {
private static final long serialVersionUID = -9162169874426519903L;
private ReliefFeature feature;
private List<TinObject> components = new ArrayList<>();
public ReliefObject(ReliefFeature feature) {
this.feature = feature;
}
@Override
public void accept(Check c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
}
for (TinObject tin : components) {
tin.accept(c);
}
}
@Override
public void collectInstances(CopyHandler handler) {
handler.addInstance(components);
}
@Override
public void fillValues(Copyable original, CopyHandler handler) {
super.fillValues(original, handler);
ReliefObject originalRelief = (ReliefObject) original;
for (TinObject tin : originalRelief.components) {
components.add(handler.getCopyInstance(tin));
}
}
@Override
public Copyable createCopyInstance() {
return new ReliefObject(feature);
}
@Override
public void prepareForChecking() {
for (TinObject component : components) {
component.prepareForChecking();
}
}
@Override
public void clearMetaInformation() {
for (TinObject component : components) {
component.clearMetaInformation();
}
}
@Override
public void clearAllContainedCheckResults() {
for (TinObject component : components) {
component.clearAllContainedCheckResults();
}
}
@Override
public void collectContainedErrors(List<CheckError> errors) {
super.collectContainedErrors(errors);
for (TinObject tin : components) {
tin.collectContainedErrors(errors);
}
}
@Override
public boolean containsAnyError() {
boolean containsError = super.containsAnyError();
if (containsError) {
return true;
}
for (TinObject tin : components) {
if (tin.containsAnyError()) {
return true;
}
}
return false;
}
@Override
public boolean containsError(CheckId checkIdentifier) {
boolean hasError = super.containsError(checkIdentifier);
if (hasError) {
return true;
}
for (TinObject tin : components) {
if (tin.containsError(checkIdentifier)) {
return true;
}
}
return false;
}
@Override
public void reCreateGeometries(GMLGeometryFactory factory, ParserConfiguration config) {
// no geometries
}
@Override
public AbstractCityObject getGmlObject() {
return feature;
}
@Override
public void unsetGmlGeometries() {
// no geometries
}
@Override
public FeatureType getFeatureType() {
return FeatureType.LAND;
}
public List<TinObject> getComponents() {
return components;
}
}
/*-
* Copyright 2022 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.datastructure;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.citygml4j.factory.DimensionMismatchException;
import org.citygml4j.factory.GMLGeometryFactory;
import org.citygml4j.model.citygml.core.AbstractCityObject;
import org.citygml4j.model.citygml.relief.TINRelief;
import org.citygml4j.model.gml.geometry.primitives.Exterior;
import org.citygml4j.model.gml.geometry.primitives.Triangle;
import org.citygml4j.model.gml.geometry.primitives.TrianglePatchArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.TriangulatedSurface;
import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
public class TinObject extends CityObject {
private static final Logger logger = LogManager.getLogger(TinObject.class);
private static final long serialVersionUID = 1910744427384724422L;
private TINRelief gmlRelief;
public TinObject(TINRelief gmlRelief) {
this.gmlRelief = gmlRelief;
}
@Override
public void accept(Check c) {
super.accept(c);
if (c.canExecute(this)) {
c.check(this);
}
}
@Override
public TinObject createCopyInstance() {
return new TinObject(gmlRelief);
}
@Override
public void reCreateGeometries(GMLGeometryFactory factory, ParserConfiguration config) {
if (getGeometries().isEmpty()) {
return;
}
if (getGeometries().size() > 1) {
logger.warn("A TINRelief can only have one geometry but found {}. Using the first geometry found",
getGeometries().size());
}
Geometry geom = getGeometries().get(0);
List<Triangle> triangles = new ArrayList<>();
TriangulatedSurface surface = new TriangulatedSurface();
surface.setTrianglePatches(new TrianglePatchArrayProperty(triangles));
try {
for (Polygon poly : geom.getPolygons()) {
LinearRing ring = poly.getExteriorRing();
Triangle t = new Triangle();
t.setExterior(new Exterior(CityGmlUtils.createGmlRing(factory, config, ring)));
triangles.add(t);
}
} catch (DimensionMismatchException e) {
logger.fatal(e);
}
}
@Override
public AbstractCityObject getGmlObject() {
return gmlRelief;
}
@Override
public void unsetGmlGeometries() {
gmlRelief.setTin(null);
}
@Override
public FeatureType getFeatureType() {
return FeatureType.LAND;
}
}
...@@ -34,6 +34,11 @@ import org.citygml4j.model.citygml.building.BuildingPartProperty; ...@@ -34,6 +34,11 @@ import org.citygml4j.model.citygml.building.BuildingPartProperty;
import org.citygml4j.model.citygml.building.OpeningProperty; import org.citygml4j.model.citygml.building.OpeningProperty;
import org.citygml4j.model.citygml.core.CityModel; import org.citygml4j.model.citygml.core.CityModel;
import org.citygml4j.model.citygml.landuse.LandUse; import org.citygml4j.model.citygml.landuse.LandUse;
import org.citygml4j.model.citygml.relief.AbstractReliefComponent;
import org.citygml4j.model.citygml.relief.ReliefComponentProperty;
import org.citygml4j.model.citygml.relief.ReliefFeature;
import org.citygml4j.model.citygml.relief.TINRelief;
import org.citygml4j.model.citygml.relief.TinProperty;
import org.citygml4j.model.citygml.transportation.AuxiliaryTrafficArea; import org.citygml4j.model.citygml.transportation.AuxiliaryTrafficArea;
import org.citygml4j.model.citygml.transportation.AuxiliaryTrafficAreaProperty; import org.citygml4j.model.citygml.transportation.AuxiliaryTrafficAreaProperty;
import org.citygml4j.model.citygml.transportation.Railway; import org.citygml4j.model.citygml.transportation.Railway;
...@@ -50,6 +55,7 @@ import org.citygml4j.model.gml.geometry.AbstractGeometry; ...@@ -50,6 +55,7 @@ import org.citygml4j.model.gml.geometry.AbstractGeometry;
import org.citygml4j.model.gml.geometry.GeometryProperty; import org.citygml4j.model.gml.geometry.GeometryProperty;
import org.citygml4j.model.gml.geometry.complexes.CompositeSurface; import org.citygml4j.model.gml.geometry.complexes.CompositeSurface;
import org.citygml4j.model.gml.geometry.primitives.AbstractSolid; import org.citygml4j.model.gml.geometry.primitives.AbstractSolid;
import org.citygml4j.model.gml.geometry.primitives.TriangulatedSurface;
import org.citygml4j.util.walker.FeatureWalker; import org.citygml4j.util.walker.FeatureWalker;
import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding; import de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding;
...@@ -73,7 +79,9 @@ import de.hft.stuttgart.citydoctor2.datastructure.Lod; ...@@ -73,7 +79,9 @@ import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import de.hft.stuttgart.citydoctor2.datastructure.Opening; import de.hft.stuttgart.citydoctor2.datastructure.Opening;
import de.hft.stuttgart.citydoctor2.datastructure.OpeningType; import de.hft.stuttgart.citydoctor2.datastructure.OpeningType;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.ReliefObject;
import de.hft.stuttgart.citydoctor2.datastructure.SurfaceFeatureType; import de.hft.stuttgart.citydoctor2.datastructure.SurfaceFeatureType;
import de.hft.stuttgart.citydoctor2.datastructure.TinObject;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject; import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType; import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation; import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
...@@ -877,7 +885,68 @@ public class FeatureMapper extends FeatureWalker { ...@@ -877,7 +885,68 @@ public class FeatureMapper extends FeatureWalker {
return BoundarySurfaceType.UNDEFINED; return BoundarySurfaceType.UNDEFINED;
} }
} }
@Override
public void visit(TINRelief relief) {
model.addTin(mapTinRelief(relief));
}
private TinObject mapTinRelief(TINRelief relief) {
TinObject tin = new TinObject(relief);
if (relief.isSetId()) {
tin.setGmlId(new GmlId(relief.getId()));
}
TinProperty tinProp = relief.getTin();
if (tinProp == null) {
return tin;
}
TriangulatedSurface triangSurface = tinProp.getObject();
Lod lod = Lod.LOD1;
switch (relief.getLod()) {
case 0:
lod = Lod.LOD0;
break;
case 1:
break;
case 2:
lod = Lod.LOD2;
break;
case 3:
lod = Lod.LOD3;
break;
case 4:
lod = Lod.LOD4;
break;
default:
logger.warn("Lod for relief {} was not specified, assuming lod 1", relief.getId());
}
Geometry geom = new Geometry(GeometryType.MULTI_SURFACE, lod);
GeometryMapper.mapTriangulatedSurface(geom, triangSurface, config, new HashMap<>(), new ArrayList<>(), new HashMap<>());
tin.addGeometry(geom);
return tin;
}
@Override
public void visit(ReliefFeature reliefFeature) {
ReliefObject relief = new ReliefObject(reliefFeature);
model.addRelief(relief);
if (reliefFeature.isSetId()) {
relief.setGmlId(new GmlId(reliefFeature.getId()));
}
List<ReliefComponentProperty> reliefprops = reliefFeature.getReliefComponent();
for (ReliefComponentProperty prop : reliefprops) {
AbstractReliefComponent object = prop.getObject();
if (object == null) {
continue;
}
if (object instanceof TINRelief) {
TINRelief tinRelief = (TINRelief) object;
TinObject tinObject = mapTinRelief(tinRelief);
relief.getComponents().add(tinObject);
}
}
}
public CityDoctorModel getModel() { public CityDoctorModel getModel() {
return model; return model;
} }
...@@ -885,5 +954,5 @@ public class FeatureMapper extends FeatureWalker { ...@@ -885,5 +954,5 @@ public class FeatureMapper extends FeatureWalker {
public void setCityModel(CityModel cModel) { public void setCityModel(CityModel cModel) {
model.setCityModel(cModel); model.setCityModel(cModel);
} }
} }
...@@ -38,6 +38,9 @@ import org.citygml4j.model.gml.geometry.primitives.DirectPositionList; ...@@ -38,6 +38,9 @@ import org.citygml4j.model.gml.geometry.primitives.DirectPositionList;
import org.citygml4j.model.gml.geometry.primitives.PosOrPointPropertyOrPointRep; import org.citygml4j.model.gml.geometry.primitives.PosOrPointPropertyOrPointRep;
import org.citygml4j.model.gml.geometry.primitives.SolidProperty; import org.citygml4j.model.gml.geometry.primitives.SolidProperty;
import org.citygml4j.model.gml.geometry.primitives.SurfaceProperty; import org.citygml4j.model.gml.geometry.primitives.SurfaceProperty;
import org.citygml4j.model.gml.geometry.primitives.Triangle;
import org.citygml4j.model.gml.geometry.primitives.TrianglePatchArrayProperty;
import org.citygml4j.model.gml.geometry.primitives.TriangulatedSurface;
import org.citygml4j.util.walker.GeometryWalker; import org.citygml4j.util.walker.GeometryWalker;
import org.locationtech.proj4j.BasicCoordinateTransform; import org.locationtech.proj4j.BasicCoordinateTransform;
import org.locationtech.proj4j.ProjCoordinate; import org.locationtech.proj4j.ProjCoordinate;
...@@ -97,7 +100,7 @@ public class GeometryMapper extends GeometryWalker { ...@@ -97,7 +100,7 @@ public class GeometryMapper extends GeometryWalker {
public void setBuildingInstallation(BuildingInstallation bi) { public void setBuildingInstallation(BuildingInstallation bi) {
this.bi = bi; this.bi = bi;
} }
@Override @Override
public void visit(MultiSurface multiSurface) { public void visit(MultiSurface multiSurface) {
super.visit(multiSurface); super.visit(multiSurface);
...@@ -111,7 +114,7 @@ public class GeometryMapper extends GeometryWalker { ...@@ -111,7 +114,7 @@ public class GeometryMapper extends GeometryWalker {
} }
} }
} }
@Override @Override
public void visit(CompositeSurface compositeSurface) { public void visit(CompositeSurface compositeSurface) {
super.visit(compositeSurface); super.visit(compositeSurface);
...@@ -334,6 +337,30 @@ public class GeometryMapper extends GeometryWalker { ...@@ -334,6 +337,30 @@ public class GeometryMapper extends GeometryWalker {
geometry.accept(geomMapper); geometry.accept(geomMapper);
} }
public static void mapTriangulatedSurface(Geometry geom, TriangulatedSurface surface, ParserConfiguration config,
Map<String, ConcretePolygon> polygons, List<Pair<String, Geometry>> linkedPolygons,
Map<Vertex, Vertex> vertexMap) {
if (surface == null) {
return;
}
TrianglePatchArrayProperty trianglePatches = surface.getTrianglePatches();
if (trianglePatches == null) {
return;
}
GeometryMapper mapper = new GeometryMapper(geom, config, polygons, linkedPolygons, vertexMap);
List<Triangle> triangles = trianglePatches.getTriangle();
for (Triangle t : triangles) {
if (t == null) {
continue;
}
ConcretePolygon poly = new ConcretePolygon();
LinearRing ext = new LinearRing(LinearRingType.EXTERIOR);
poly.setExteriorRing(ext);
mapper.mapRing(t.getExterior(), ext);
geom.addPolygon(poly);
}
}
public static void mapLod0MultiSurface(MultiSurfaceProperty lod0ms, CityObject co, ParserConfiguration config, public static void mapLod0MultiSurface(MultiSurfaceProperty lod0ms, CityObject co, ParserConfiguration config,
Map<String, ConcretePolygon> polygons, List<Pair<String, Geometry>> linkedPolygons, Map<String, ConcretePolygon> polygons, List<Pair<String, Geometry>> linkedPolygons,
Map<Vertex, Vertex> vertexMap) { Map<Vertex, Vertex> vertexMap) {
......
...@@ -271,7 +271,7 @@ public class CityGmlParser { ...@@ -271,7 +271,7 @@ public class CityGmlParser {
new QName("CeilingSurface"), new QName("ClosureSurface"), new QName("FloorSurface"), new QName("CeilingSurface"), new QName("ClosureSurface"), new QName("FloorSurface"),
new QName("InteriorWallSurface"), new QName("OuterCeilingSurface"), new QName("InteriorWallSurface"), new QName("OuterCeilingSurface"),
new QName("OuterFloorSurface"), new QName("BuildingInstallation"), new QName("BuildingPart"), new QName("OuterFloorSurface"), new QName("BuildingInstallation"), new QName("BuildingPart"),
new QName("Door"), new QName("Window"), new QName("Address") }); new QName("Door"), new QName("Window"), new QName("Address"), new QName("TINRelief") });
return inputFactory; return inputFactory;
} }
......
...@@ -77,7 +77,7 @@ public final class CityGmlUtils { ...@@ -77,7 +77,7 @@ public final class CityGmlUtils {
} }
} }
private static org.citygml4j.model.gml.geometry.primitives.LinearRing createGmlRing(GMLGeometryFactory factory, public static org.citygml4j.model.gml.geometry.primitives.LinearRing createGmlRing(GMLGeometryFactory factory,
ParserConfiguration config, LinearRing lr) throws DimensionMismatchException { ParserConfiguration config, LinearRing lr) throws DimensionMismatchException {
ProjCoordinate p1 = new ProjCoordinate(); ProjCoordinate p1 = new ProjCoordinate();
ProjCoordinate p2 = new ProjCoordinate(); ProjCoordinate p2 = new ProjCoordinate();
......
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.10.4</version> <version>3.11.0</version>
</parent> </parent>
<artifactId>CityDoctorValidation</artifactId> <artifactId>CityDoctorValidation</artifactId>
<name>CityDoctorValidation</name> <name>CityDoctorValidation</name>
......
...@@ -80,6 +80,7 @@ import de.hft.stuttgart.quality.model.jaxb.Requirement; ...@@ -80,6 +80,7 @@ import de.hft.stuttgart.quality.model.jaxb.Requirement;
import de.hft.stuttgart.quality.model.jaxb.RequirementId; import de.hft.stuttgart.quality.model.jaxb.RequirementId;
import de.hft.stuttgart.quality.model.jaxb.TopLevelFeatureType; import de.hft.stuttgart.quality.model.jaxb.TopLevelFeatureType;
import de.hft.stuttgart.quality.model.jaxb.ValidationPlan; import de.hft.stuttgart.quality.model.jaxb.ValidationPlan;
import net.sf.saxon.lib.ResourceResolverWrappingURIResolver;
import net.sf.saxon.s9api.DOMDestination; import net.sf.saxon.s9api.DOMDestination;
import net.sf.saxon.s9api.Destination; import net.sf.saxon.s9api.Destination;
import net.sf.saxon.s9api.Processor; import net.sf.saxon.s9api.Processor;
...@@ -420,14 +421,14 @@ public class Checker { ...@@ -420,14 +421,14 @@ public class Checker {
} }
Processor processor = new Processor(false); Processor processor = new Processor(false);
XsltCompiler xsltCompiler = processor.newXsltCompiler(); XsltCompiler xsltCompiler = processor.newXsltCompiler();
xsltCompiler.setURIResolver(new URIResolver() { xsltCompiler.setResourceResolver(new ResourceResolverWrappingURIResolver(new URIResolver() {
@Override @Override
public Source resolve(String href, String base) throws TransformerException { public Source resolve(String href, String base) throws TransformerException {
return new StreamSource(Checker.class.getResourceAsStream(href)); return new StreamSource(Checker.class.getResourceAsStream(href));
} }
}); }));
try { try {
XsltExecutable includeExecutable = xsltCompiler XsltExecutable includeExecutable = xsltCompiler
.compile(new StreamSource(Checker.class.getResourceAsStream("iso_dsdl_include.xsl"))); .compile(new StreamSource(Checker.class.getResourceAsStream("iso_dsdl_include.xsl")));
......
...@@ -27,7 +27,7 @@ import de.hft.stuttgart.citydoctor2.checks.Checks; ...@@ -27,7 +27,7 @@ import de.hft.stuttgart.citydoctor2.checks.Checks;
import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject; import de.hft.stuttgart.citydoctor2.datastructure.BridgeObject;
import de.hft.stuttgart.citydoctor2.datastructure.Building; import de.hft.stuttgart.citydoctor2.datastructure.Building;
import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel; import de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel;
import de.hft.stuttgart.citydoctor2.datastructure.LandObject; import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject; import de.hft.stuttgart.citydoctor2.datastructure.TransportationObject;
import de.hft.stuttgart.citydoctor2.datastructure.Vegetation; import de.hft.stuttgart.citydoctor2.datastructure.Vegetation;
import de.hft.stuttgart.citydoctor2.datastructure.WaterObject; import de.hft.stuttgart.citydoctor2.datastructure.WaterObject;
...@@ -51,7 +51,7 @@ public class XmlValidationReporter implements Reporter { ...@@ -51,7 +51,7 @@ public class XmlValidationReporter implements Reporter {
for (TransportationObject to : model.getTransportation()) { for (TransportationObject to : model.getTransportation()) {
streamReporter.report(to); streamReporter.report(to);
} }
for (LandObject lo : model.getLand()) { for (CityObject lo : model.getLand()) {
streamReporter.report(lo); streamReporter.report(lo);
} }
for (Vegetation v : model.getVegetation()) { for (Vegetation v : model.getVegetation()) {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>de.hft.stuttgart</groupId> <groupId>de.hft.stuttgart</groupId>
<artifactId>CityDoctorParent</artifactId> <artifactId>CityDoctorParent</artifactId>
<version>3.10.4</version> <version>3.11.0</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>CityDoctorParent</name> <name>CityDoctorParent</name>
......
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