Skip to content

Commit 13c8f1d

Browse files
authored
Add voronoi diagram method to Geometry (#68)
1 parent 7f8532c commit 13c8f1d

4 files changed

Lines changed: 34 additions & 0 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var geom = require('geoscript/geom');
2+
var viewer = require('geoscript/viewer');
3+
4+
var polygon = geom.Point([1,1]).buffer(50);
5+
var points = polygon.randomPoints(100);
6+
var triangles = points.createDelaunayTriangles(true);
7+
viewer.draw(triangles);

examples/geometry/voronoiDigram.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var geom = require('geoscript/geom');
2+
var viewer = require('geoscript/viewer');
3+
4+
var polygon = geom.Point([1,1]).buffer(50);
5+
var points = polygon.randomPoints(20);
6+
var diagram = points.createVoronoiDiagram();
7+
viewer.draw(diagram);

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.locationtech.jts.geom.GeometryFactory;
3636
import org.locationtech.jts.operation.buffer.BufferOp;
3737
import org.locationtech.jts.operation.buffer.BufferParameters;
38+
import org.locationtech.jts.triangulate.VoronoiDiagramBuilder;
3839
import org.locationtech.jts.simplify.DouglasPeuckerSimplifier;
3940

4041
public class Geometry extends GeoObject implements Wrapper {
@@ -303,6 +304,15 @@ public ScriptableObject densify(double tolerance) {
303304
return densified;
304305
}
305306

307+
@JSFunction
308+
public ScriptableObject createVoronoiDiagram() {
309+
VoronoiDiagramBuilder builder = new VoronoiDiagramBuilder();
310+
builder.setSites(geometry);
311+
ScriptableObject voronoiDiagram = GeometryWrapper.wrap(getParentScope(), builder.getDiagram(Geometry.factory));
312+
((Geometry) voronoiDiagram).projection = projection;
313+
return voronoiDiagram;
314+
}
315+
306316
@JSFunction
307317
public ScriptableObject randomPoints(int number) {
308318
org.locationtech.jts.shape.random.RandomPointsBuilder builder = new org.locationtech.jts.shape.random.RandomPointsBuilder(factory);

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,16 @@ exports["test: create(bounds)"] = function() {
157157

158158
};
159159

160+
exports["test: create voronoi diagram"] = function() {
161+
162+
var geom = GEOM.Point([1,1]).buffer(50)
163+
var points = geom.randomPoints(20)
164+
var diagram = points.createVoronoiDiagram()
165+
ASSERT.ok(diagram instanceof GEOM.GeometryCollection)
166+
ASSERT.ok(diagram.components.length > 0, "there should be more than 0 polygons");
167+
168+
}
169+
160170
exports["test: create random points"] = function() {
161171

162172
var geom = GEOM.Point([1,1]).buffer(10)

0 commit comments

Comments
 (0)