diff --git a/examples/sierpinskiCarpet.py b/examples/sierpinskiCarpet.py new file mode 100644 index 0000000..8c026ff --- /dev/null +++ b/examples/sierpinskiCarpet.py @@ -0,0 +1,6 @@ +from geoscript import geom +from geoscript import viewer + +bounds = geom.Bounds(-180,-90,180,90) +sierpinskiCarpet = geom.createSierpinskiCarpet(bounds, 50) +viewer.draw(sierpinskiCarpet) \ No newline at end of file diff --git a/geoscript/geom/__init__.py b/geoscript/geom/__init__.py index b5fee69..85ce441 100644 --- a/geoscript/geom/__init__.py +++ b/geoscript/geom/__init__.py @@ -11,7 +11,7 @@ from compoundring import CompoundRing from bounds import Bounds from geom import Geometry -from geom import prepare, simplify, densify, transform, buffer, delaunay, voronoi, randomPoints +from geom import prepare, simplify, densify, transform, buffer, delaunay, voronoi, randomPoints, createSierpinskiCarpet from io.wkt import readWKT, writeWKT, fromWKT from io.wkb import readWKB, writeWKB, fromWKB, toWKB from io.json import writeJSON, readJSON diff --git a/geoscript/geom/geom.py b/geoscript/geom/geom.py index 81630ae..be8542a 100644 --- a/geoscript/geom/geom.py +++ b/geoscript/geom/geom.py @@ -15,6 +15,7 @@ from org.geotools.geometry.jts import JTS from org.geotools.referencing.operation.transform import AffineTransform2D from org.locationtech.jts.shape.random import RandomPointsBuilder +from org.locationtech.jts.shape.fractal import SierpinskiCarpetBuilder from geoscript.geom.bounds import Bounds _factory = GeometryFactory() @@ -167,6 +168,19 @@ def randomPoints(g, number): builder.numPoints = number return builder.getGeometry() +def createSierpinskiCarpet(b, numberOfPoints): + """ + Create a Sierpinski Carpet + + *g* The Bounds + + *number* The number of Points + """ + builder = SierpinskiCarpetBuilder(GeometryFactory()) + builder.extent = b + builder.numPoints = numberOfPoints + return builder.getGeometry() + def _bounds(g): return Bounds(env=g.getEnvelopeInternal()) diff --git a/tests/test_geom.py b/tests/test_geom.py index 05e3e0f..496a877 100644 --- a/tests/test_geom.py +++ b/tests/test_geom.py @@ -231,3 +231,8 @@ def testRandomPoints(self): polygon = geom.buffer(geom.Point(1153461.34, 649950.30), 100) pts = geom.randomPoints(polygon, 10) assert pts.getNumGeometries() == 10 + + def testCreateSierpinskiCarpet(self): + bounds = geom.Bounds(-180,-90,180,90) + sierpinskiCarpet = geom.createSierpinskiCarpet(bounds, 50) + assert sierpinskiCarpet.getNumGeometries() > 0