diff --git a/klab.engine/pom.xml b/klab.engine/pom.xml
index a5b6fbf53..275bd8293 100644
--- a/klab.engine/pom.xml
+++ b/klab.engine/pom.xml
@@ -329,9 +329,19 @@
org.mongodb
mongo-java-driver
+
+ org.locationtech.jts
+ jts-core
+
+
+ org.locationtech.jts
+ jts-core
+ ${jts.version}
+
+
xml-apis
@@ -642,6 +652,12 @@
org.orbisgis
h2gis
2.1.0
+
+
+ org.locationtech.jts
+ jts-core
+
+
@@ -718,11 +734,23 @@
org.geotools
gt-process
${geotools.version}
+
+
+ org.locationtech.jts
+ jts-core
+
+
org.geotools
gt-process-raster
${geotools.version}
+
+
+ org.locationtech.jts
+ jts-core
+
+
org.geotools
diff --git a/klab.engine/src/main/java/org/integratedmodelling/klab/components/geospace/processing/Rasterizer.java b/klab.engine/src/main/java/org/integratedmodelling/klab/components/geospace/processing/Rasterizer.java
index 6b09195a5..8f294978e 100644
--- a/klab.engine/src/main/java/org/integratedmodelling/klab/components/geospace/processing/Rasterizer.java
+++ b/klab.engine/src/main/java/org/integratedmodelling/klab/components/geospace/processing/Rasterizer.java
@@ -29,6 +29,7 @@
import org.locationtech.jts.geom.MultiPolygon;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.triangulate.polygon.PolygonTriangulator;
/**
* Simple, flexible rasterizer using an AWT image as a backend and closures to determine (a) the
@@ -131,9 +132,8 @@ public Collection getCoordinates(IShape shape) {
Geometry geometry = ((Shape) shape).getJTSGeometry();
Color valueColor = new Color(255, 255, 255);
- Color holeColor = new Color(0, 0, 0);
- draw(geometry, valueColor, holeColor);
+ draw(geometry, valueColor);
int[] xy = new int[2];
for (int x = 0; x < this.raster.getWidth(); x++) {
@@ -165,14 +165,12 @@ public void add(IShape shape, Function encoder) {
Geometry geometry = ((Shape) shape).getJTSGeometry();
int rgbVal = floatBitsToInt(encodeToFloat(value));
- int holeVal = floatBitsToInt(Float.NaN);
Color valueColor = new Color(rgbVal, true);
- Color holeColor = new Color(holeVal, true);
- draw(geometry, valueColor, holeColor);
+ draw(geometry, valueColor);
}
- private void draw(Geometry geometry, Color valueColor, Color holeColor) {
+ private void draw(Geometry geometry, Color valueColor) {
Geometries geomType = Geometries.get(geometry);
if (geomType == Geometries.MULTIPOLYGON || geomType == Geometries.MULTILINESTRING
@@ -180,7 +178,7 @@ private void draw(Geometry geometry, Color valueColor, Color holeColor) {
final int numGeom = geometry.getNumGeometries();
for (int i = 0; i < numGeom; i++) {
Geometry geomN = geometry.getGeometryN(i);
- draw(geomN, valueColor, holeColor);
+ draw(geomN, valueColor);
}
} else /* if (geometry.intersects(((Grid) extent).getShape().getJTSGeometry())) */ {
@@ -188,13 +186,12 @@ private void draw(Geometry geometry, Color valueColor, Color holeColor) {
for (int i = 0; i < geometry.getNumGeometries(); i++) {
Polygon poly = (Polygon) geometry.getGeometryN(i);
- LinearRing lr = geoFactory.createLinearRing(poly.getExteriorRing().getCoordinates());
- Polygon part = geoFactory.createPolygon(lr, null);
- drawGeometry(part, valueColor);
- for (int j = 0; j < poly.getNumInteriorRing(); j++) {
- lr = geoFactory.createLinearRing(poly.getInteriorRingN(j).getCoordinates());
- part = geoFactory.createPolygon(lr, null);
- drawGeometry(part, holeColor);
+ boolean hasHoles = poly.getNumInteriorRing() > 0;
+ if (hasHoles) {
+ Geometry triangles = PolygonTriangulator.triangulate(poly);
+ draw(triangles, valueColor);
+ } else {
+ drawGeometry(poly, valueColor);
}
}
} else {
diff --git a/pom.xml b/pom.xml
index a1c1b0706..b91616930 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,7 +100,7 @@
should be the same one that geotools and HM needs. -->
28.0
0.10.9-SNAPSHOT
- 1.18.1
+ 1.20.0
1.5.0
11
11