diff --git a/src/main/java/org/geoscript/js/geom/Geometry.java b/src/main/java/org/geoscript/js/geom/Geometry.java index 826e074..bcebe30 100644 --- a/src/main/java/org/geoscript/js/geom/Geometry.java +++ b/src/main/java/org/geoscript/js/geom/Geometry.java @@ -11,6 +11,8 @@ import org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.referencing.CRS; +import org.locationtech.jts.triangulate.ConformingDelaunayTriangulationBuilder; +import org.locationtech.jts.triangulate.DelaunayTriangulationBuilder; import org.mozilla.javascript.Context; import org.mozilla.javascript.FunctionObject; import org.mozilla.javascript.NativeArray; @@ -312,6 +314,24 @@ public ScriptableObject randomPoints(int number) { return points; } + @JSFunction + public ScriptableObject createDelaunayTriangles(boolean isConforming) { + org.locationtech.jts.geom.Geometry geom; + if (isConforming) { + ConformingDelaunayTriangulationBuilder builder = new ConformingDelaunayTriangulationBuilder(); + builder.setSites(geometry); + geom = builder.getTriangles(factory); + } + else { + DelaunayTriangulationBuilder builder = new DelaunayTriangulationBuilder(); + builder.setSites(geometry); + geom = builder.getTriangles(factory); + } + ScriptableObject triangles = GeometryWrapper.wrap(getParentScope(), geom); + ((Geometry) triangles).projection = projection; + return triangles; + } + @JSFunction public String getGeometryType() { return geometry.getGeometryType(); diff --git a/src/test/resources/org/geoscript/js/tests/geoscript/test_geom.js b/src/test/resources/org/geoscript/js/tests/geoscript/test_geom.js index 2b8be90..7d10bf3 100644 --- a/src/test/resources/org/geoscript/js/tests/geoscript/test_geom.js +++ b/src/test/resources/org/geoscript/js/tests/geoscript/test_geom.js @@ -163,6 +163,27 @@ exports["test: create random points"] = function() { var points = geom.randomPoints(10) ASSERT.ok(points instanceof GEOM.MultiPoint) ASSERT.strictEqual(points.components.length, 10, "geometry has 10 components"); + +} + +exports["test: create conforming delaunay triangles"] = function() { + + var geom = GEOM.Point([1,1]).buffer(50) + var points = geom.randomPoints(20) + var triangles = points.createDelaunayTriangles(true) + ASSERT.ok(triangles instanceof GEOM.GeometryCollection) + ASSERT.ok(triangles.components.length > 0, "there should be more than 0 triangles"); + +} + +exports["test: create non-conforming delaunay triangles"] = function() { + + var geom = GEOM.Point([1,1]).buffer(50) + var points = geom.randomPoints(20) + var triangles = points.createDelaunayTriangles(false) + ASSERT.ok(triangles instanceof GEOM.GeometryCollection) + ASSERT.ok(triangles.components.length > 0, "there should be more than 0 triangles"); + }