Skip to content

Commit 7f8532c

Browse files
authored
Add delaunay triangle generation to Geometry (#67)
1 parent 741fdfe commit 7f8532c

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/main/java/org/geoscript/js/geom/Geometry.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import org.geotools.geometry.jts.GeometryCoordinateSequenceTransformer;
1212
import org.geotools.geometry.jts.ReferencedEnvelope;
1313
import org.geotools.referencing.CRS;
14+
import org.locationtech.jts.triangulate.ConformingDelaunayTriangulationBuilder;
15+
import org.locationtech.jts.triangulate.DelaunayTriangulationBuilder;
1416
import org.mozilla.javascript.Context;
1517
import org.mozilla.javascript.FunctionObject;
1618
import org.mozilla.javascript.NativeArray;
@@ -312,6 +314,24 @@ public ScriptableObject randomPoints(int number) {
312314
return points;
313315
}
314316

317+
@JSFunction
318+
public ScriptableObject createDelaunayTriangles(boolean isConforming) {
319+
org.locationtech.jts.geom.Geometry geom;
320+
if (isConforming) {
321+
ConformingDelaunayTriangulationBuilder builder = new ConformingDelaunayTriangulationBuilder();
322+
builder.setSites(geometry);
323+
geom = builder.getTriangles(factory);
324+
}
325+
else {
326+
DelaunayTriangulationBuilder builder = new DelaunayTriangulationBuilder();
327+
builder.setSites(geometry);
328+
geom = builder.getTriangles(factory);
329+
}
330+
ScriptableObject triangles = GeometryWrapper.wrap(getParentScope(), geom);
331+
((Geometry) triangles).projection = projection;
332+
return triangles;
333+
}
334+
315335
@JSFunction
316336
public String getGeometryType() {
317337
return geometry.getGeometryType();

src/test/resources/org/geoscript/js/tests/geoscript/test_geom.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,27 @@ exports["test: create random points"] = function() {
163163
var points = geom.randomPoints(10)
164164
ASSERT.ok(points instanceof GEOM.MultiPoint)
165165
ASSERT.strictEqual(points.components.length, 10, "geometry has 10 components");
166+
167+
}
168+
169+
exports["test: create conforming delaunay triangles"] = function() {
170+
171+
var geom = GEOM.Point([1,1]).buffer(50)
172+
var points = geom.randomPoints(20)
173+
var triangles = points.createDelaunayTriangles(true)
174+
ASSERT.ok(triangles instanceof GEOM.GeometryCollection)
175+
ASSERT.ok(triangles.components.length > 0, "there should be more than 0 triangles");
176+
177+
}
178+
179+
exports["test: create non-conforming delaunay triangles"] = function() {
180+
181+
var geom = GEOM.Point([1,1]).buffer(50)
182+
var points = geom.randomPoints(20)
183+
var triangles = points.createDelaunayTriangles(false)
184+
ASSERT.ok(triangles instanceof GEOM.GeometryCollection)
185+
ASSERT.ok(triangles.components.length > 0, "there should be more than 0 triangles");
186+
166187
}
167188

168189

0 commit comments

Comments
 (0)