Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion geoscript/geom/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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, createSierpinskiCarpet
from geom import prepare, simplify, densify, transform, buffer, delaunay, voronoi, randomPoints, createSierpinskiCarpet, variableBuffer
from io.wkt import readWKT, writeWKT, fromWKT
from io.wkb import readWKB, writeWKB, fromWKB, toWKB
from io.json import writeJSON, readJSON
Expand Down
16 changes: 16 additions & 0 deletions geoscript/geom/geom.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
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 org.locationtech.jts.operation.buffer import VariableBuffer
from geoscript.geom.bounds import Bounds

_factory = GeometryFactory()
Expand Down Expand Up @@ -155,6 +156,21 @@ def buffer(g, distance, singleSided=False):

return BufferOp.bufferOp(g, distance, bp)

def variableBuffer(g, distances):
"""
Computes a buffer with variable distances.

*g* is the :class:`Geometry <geoscript.geom.Geometry>` to buffer.

*distances* is an array of buffer distances
"""
if len(distances) == 2:
return VariableBuffer.buffer(g, distances[0], distances[1])
elif len(distances) == 3:
return VariableBuffer.buffer(g, distances[0], distances[1], distances[2])
else:
return VariableBuffer.buffer(g, distances)

def randomPoints(g, number):
"""
Create a number of random Points within the given Geometry
Expand Down
11 changes: 11 additions & 0 deletions tests/test_geom.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,3 +236,14 @@ def testCreateSierpinskiCarpet(self):
bounds = geom.Bounds(-180,-90,180,90)
sierpinskiCarpet = geom.createSierpinskiCarpet(bounds, 50)
assert sierpinskiCarpet.getNumGeometries() > 0

def testVariableBuffer(self):
line = geom.LineString((1,2), (10,20), (30,50), (100, 150))
buffer = geom.variableBuffer(line, [10,50])
assert str(buffer).startswith("POLYGON")

buffer = geom.variableBuffer(line, [10, 20, 50])
assert str(buffer).startswith("POLYGON")

buffer = geom.variableBuffer(line, [10, 20, 50, 75])
assert str(buffer).startswith("POLYGON")