Skip to content

Commit 010bab1

Browse files
authored
Merge pull request #64 from geoscript/GEOSCRIPTPY-61.VariableBuffer
Add variable width buffer
2 parents 6ddf5d2 + e65834e commit 010bab1

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

geoscript/geom/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from compoundring import CompoundRing
1212
from bounds import Bounds
1313
from geom import Geometry
14-
from geom import prepare, simplify, densify, transform, buffer, delaunay, voronoi, randomPoints, createSierpinskiCarpet
14+
from geom import prepare, simplify, densify, transform, buffer, delaunay, voronoi, randomPoints, createSierpinskiCarpet, variableBuffer
1515
from io.wkt import readWKT, writeWKT, fromWKT
1616
from io.wkb import readWKB, writeWKB, fromWKB, toWKB
1717
from io.json import writeJSON, readJSON

geoscript/geom/geom.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from org.geotools.referencing.operation.transform import AffineTransform2D
1717
from org.locationtech.jts.shape.random import RandomPointsBuilder
1818
from org.locationtech.jts.shape.fractal import SierpinskiCarpetBuilder
19+
from org.locationtech.jts.operation.buffer import VariableBuffer
1920
from geoscript.geom.bounds import Bounds
2021

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

156157
return BufferOp.bufferOp(g, distance, bp)
157158

159+
def variableBuffer(g, distances):
160+
"""
161+
Computes a buffer with variable distances.
162+
163+
*g* is the :class:`Geometry <geoscript.geom.Geometry>` to buffer.
164+
165+
*distances* is an array of buffer distances
166+
"""
167+
if len(distances) == 2:
168+
return VariableBuffer.buffer(g, distances[0], distances[1])
169+
elif len(distances) == 3:
170+
return VariableBuffer.buffer(g, distances[0], distances[1], distances[2])
171+
else:
172+
return VariableBuffer.buffer(g, distances)
173+
158174
def randomPoints(g, number):
159175
"""
160176
Create a number of random Points within the given Geometry

tests/test_geom.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,14 @@ def testCreateSierpinskiCarpet(self):
236236
bounds = geom.Bounds(-180,-90,180,90)
237237
sierpinskiCarpet = geom.createSierpinskiCarpet(bounds, 50)
238238
assert sierpinskiCarpet.getNumGeometries() > 0
239+
240+
def testVariableBuffer(self):
241+
line = geom.LineString((1,2), (10,20), (30,50), (100, 150))
242+
buffer = geom.variableBuffer(line, [10,50])
243+
assert str(buffer).startswith("POLYGON")
244+
245+
buffer = geom.variableBuffer(line, [10, 20, 50])
246+
assert str(buffer).startswith("POLYGON")
247+
248+
buffer = geom.variableBuffer(line, [10, 20, 50, 75])
249+
assert str(buffer).startswith("POLYGON")

0 commit comments

Comments
 (0)