From e83bdcde960387a195ae192d53cadb0e9ae94e84 Mon Sep 17 00:00:00 2001 From: Jared Erickson Date: Fri, 12 Jun 2020 19:36:49 -0700 Subject: [PATCH] Add sierpinski carpet method to geometry --- examples/sierpinskiCarpet.py | 6 ++++++ geoscript/geom/__init__.py | 2 +- geoscript/geom/geom.py | 14 ++++++++++++++ tests/test_geom.py | 5 +++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 examples/sierpinskiCarpet.py 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