Commit eef39ad1 authored by Eric Duminil's avatar Eric Duminil
Browse files

Checking whole bounding box for non-Buildings

parent 84404739
......@@ -11,6 +11,7 @@
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import com.ximpleware.NavException;
......@@ -54,7 +55,7 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
int cityObjectsCount = 0;
int foundBuildingsCount = 0;
int otherObjectsCount = 0;
Geometry polygon = WKT_READER.read(wktPolygon);
Geometry selectionPolygon = WKT_READER.read(wktPolygon);
CityGmlIterator citygml = null;
for (int i = 0; i < citygmlPaths.length; i++) {
......@@ -64,13 +65,13 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
citygml = new CityGmlIterator(citygmlPath);
for (CityObjectMember cityObjectNode : citygml) {
if (cityObjectsCount == 0) {
sb.append(replaceEnvelopeInHeader(citygml.getHeader(), polygon.getEnvelopeInternal(), srsName));
sb.append(replaceEnvelopeInHeader(citygml.getHeader(), selectionPolygon.getEnvelopeInternal(), srsName));
}
cityObjectsCount += 1;
if (cityObjectNode.hasCoordinates()) {
boolean isBuilding = cityObjectNode.isBuilding();
boolean shouldBeIncluded = isBuilding ? isBuildingCenterInPolygon(cityObjectNode, polygon)
: isBoundingBoxTouching(cityObjectNode, polygon);
boolean shouldBeIncluded = isBuilding ? isBuildingCenterInPolygon(cityObjectNode, selectionPolygon)
: isBoundingBoxTouching(cityObjectNode, selectionPolygon);
if (shouldBeIncluded) {
if (isBuilding) {
foundBuildingsCount++;
......@@ -108,10 +109,15 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
* which might be desirable for roads or landuse.
*/
private static boolean isBoundingBoxTouching(CityObjectMember cityObjectNode, Geometry polygon) {
return point(cityObjectNode.xMax, cityObjectNode.yMax).within(polygon) ||
point(cityObjectNode.xMax, cityObjectNode.yMin).within(polygon) ||
point(cityObjectNode.xMin, cityObjectNode.yMin).within(polygon) ||
point(cityObjectNode.xMin, cityObjectNode.yMax).within(polygon);
Coordinate[] boundingBoxCoordinates = {
new Coordinate(cityObjectNode.xMax, cityObjectNode.yMax),
new Coordinate(cityObjectNode.xMin, cityObjectNode.yMax),
new Coordinate(cityObjectNode.xMin, cityObjectNode.yMin),
new Coordinate(cityObjectNode.xMax, cityObjectNode.yMin),
new Coordinate(cityObjectNode.xMax, cityObjectNode.yMax),
};
Polygon boundingBox = GEOMETRY_FACTORY.createPolygon(boundingBoxCoordinates);
return boundingBox.intersects(polygon);
}
......
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