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

Checking whole bounding box for non-Buildings

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