Skip to content

Commit 49644d7

Browse files
authored
Merge pull request #47 from JuliaGeo/rs/getrings
add getpolygons and getrings functions
2 parents e6feb6b + c537100 commit 49644d7

File tree

2 files changed

+65
-10
lines changed

2 files changed

+65
-10
lines changed

src/defaults.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,24 @@ getring(p::AbstractPolygonTrait, geom, i) = getgeom(p, geom, i)
3737
getexterior(p::AbstractPolygonTrait, geom) = getring(p, geom, 1)
3838
nhole(p::AbstractPolygonTrait, geom) = nring(p, geom) - 1
3939
gethole(p::AbstractPolygonTrait, geom, i) = getring(p, geom, i + 1)
40+
npoint(p::AbstractPolygonTrait, geom) = sum(npoint(p) for p in getring(p))
41+
getpoint(g::AbstractPolygonTrait, geom) = (p for p in getpoint(r) for r in getring(geom))
4042

4143
## MultiLineString
4244
nlinestring(p::AbstractMultiLineStringTrait, geom) = ngeom(p, geom)
4345
getlinestring(p::AbstractMultiLineStringTrait, geom) = getgeom(p, geom)
4446
getlinestring(p::AbstractMultiLineStringTrait, geom, i) = getgeom(p, geom, i)
47+
npoint(g::AbstractMultiLineStringTrait, geom) = sum(npoint(l) for ls in getlinestring(geom))
48+
getpoint(g::AbstractMultiLineStringTrait, geom) = (p for p in getpoint(ls) for l in getlinestring(geom))
4549

4650
## MultiPolygon
4751
npolygon(p::AbstractMultiPolygonTrait, geom) = ngeom(p, geom)
4852
getpolygon(p::AbstractMultiPolygonTrait, geom) = getgeom(p, geom)
4953
getpolygon(p::AbstractMultiPolygonTrait, geom, i) = getgeom(p, geom, i)
54+
nring(p::AbstractMultiPolygonTrait, geom) = sum(nring(p) for p in getpolygon(p))
55+
getring(g::AbstractMultiPolygonTrait, geom) = (r for r in getring(p) for p in getpolygon(geom))
56+
npoint(p::AbstractMultiPolygonTrait, geom) = sum(npoint(r) for r in getring(geom))
57+
getpoint(g::AbstractMultiPolygonTrait, geom) = (p for p in getpoint(r) for r in getring(geom))
5058

5159
## Surface
5260
npatch(p::AbstractPolyHedralSurfaceTrait, geom)::Integer = ngeom(p, geom)

src/interface.jl

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Note that this is only valid for individual [`AbstractPoint`]s.
8484
"""
8585
getcoord(geom, i::Integer) = getcoord(geomtype(geom), geom, i)
8686
"""
87-
getcoord(geom) -> Iterator
87+
getcoord(geom) -> iterator
8888
"""
8989
getcoord(geom) = getcoord(geomtype(geom), geom)
9090

@@ -104,8 +104,11 @@ Return the `i`th Point in given `geom`.
104104
Note that this is only valid for [`AbstractCurve`](@ref)s and [`AbstractMultiPoint`](@ref)s.
105105
"""
106106
getpoint(geom, i::Integer) = getpoint(geomtype(geom), geom, i)
107+
107108
"""
108-
getpoint(geom) -> Iterator
109+
getpoint(geom) -> iterator
110+
111+
Returns an iterator over all points in `geom`.
109112
"""
110113
getpoint(geom) = getpoint(geomtype(geom), geom)
111114

@@ -191,19 +194,26 @@ boundary(geom) = boundary(geomtype(geom), geom)
191194
nring(geom) -> Integer
192195
193196
Return the number of rings in given `geom`.
194-
Note that this is only valid for [`AbstractPolygon`](@ref)s.
197+
Note that this is only valid for [`AbstractPolygon`](@ref)s and
198+
[`AbstractMultiPolygon`](@ref)s
195199
"""
196200
nring(geom) = nring(geomtype(geom), geom)
197201

198202
"""
199203
getring(geom, i::Integer) -> Int
200204
201205
Return the `i`th ring for a given `geom`.
206+
202207
Note that this is only valid for [`AbstractPolygon`](@ref)s.
203208
"""
204209
getring(geom, i::Integer) = getring(geomtype(geom), geom, i)
210+
205211
"""
206-
getring(geom) -> Iterator
212+
getring(geom) -> iterator
213+
214+
Returns an iterator over all rings in `geom`.
215+
Note that this is only valid for [`AbstractPolygon`](@ref)s and
216+
[`AbstractMultiPolygon`](@ref)s in single-argument form.
207217
"""
208218
getring(geom) = getring(geomtype(geom), geom)
209219

@@ -215,23 +225,27 @@ Note that this is only valid for [`AbstractPolygon`](@ref)s.
215225
"""
216226
getexterior(geom) = getexterior(geomtype(geom), geom)
217227

218-
219228
"""
220229
nhole(geom) -> Integer
221230
222231
Returns the number of holes for this given `geom`.
223232
Note that this is only valid for [`AbstractPolygon`](@ref)s.
224233
"""
225234
nhole(geom)::Integer = nhole(geomtype(geom), geom)
235+
226236
"""
227237
gethole(geom, i::Integer) -> Curve
228238
229239
Returns the `i`th interior ring for this given `geom`.
230240
Note that this is only valid for [`AbstractPolygon`](@ref)s.
231241
"""
232242
gethole(geom, i::Integer) = gethole(geomtype(geom), geom, i)
243+
233244
"""
234-
gethole(geom) -> Iterator
245+
gethole(geom) -> iterator
246+
247+
Returns an iterator over all holes in `geom`.
248+
Note that this is only valid for [`AbstractPolygon`](@ref)s.
235249
"""
236250
gethole(geom) = gethole(geomtype(geom), geom)
237251

@@ -251,8 +265,12 @@ Returns the `i`th patch for the given `geom`.
251265
Note that this is only valid for [`AbstractPolyHedralSurface`](@ref)s.
252266
"""
253267
getpatch(geom, i::Integer) = getpatch(geomtype(geom), geom, i)
268+
254269
"""
255-
getpatch(geom) -> Iterator
270+
getpatch(geom) -> iterator
271+
272+
Returns an iterator over all patches in `geom`.
273+
Note that this is only valid for [`AbstractPolyHedralSurface`](@ref)s.
256274
"""
257275
getpatch(geom) = getpatch(geomtype(geom), geom)
258276

@@ -277,8 +295,11 @@ ngeom(geom) = ngeom(geomtype(geom), geom)
277295
Returns the `i`th geometry for the given `geom`.
278296
"""
279297
getgeom(geom, i::Integer) = getgeom(geomtype(geom), geom, i)
298+
280299
"""
281-
getgeom(geom) -> Iterator
300+
getgeom(geom) -> iterator
301+
302+
Returns an iterator over all geometry components in `geom`.
282303
"""
283304
getgeom(geom) = getgeom(geomtype(geom), geom)
284305

@@ -298,8 +319,12 @@ Returns the `i`th linestring for the given `geom`.
298319
Note that this is only valid for [`AbstractMultiLineString`](@ref)s.
299320
"""
300321
getlinestring(geom, i::Integer) = getlinestring(geomtype(geom), geom, i)
322+
301323
"""
302-
getlinestring(geom) -> Iterator
324+
getlinestring(geom) -> iterator
325+
326+
Returns an iterator over all linestrings in a geometry.
327+
Note that this is only valid for [`AbstractMultiLineString`](@ref)s.
303328
"""
304329
getlinestring(geom) = getlinestring(geomtype(geom), geom)
305330

@@ -319,11 +344,33 @@ Returns the `i`th polygon for the given `geom`.
319344
Note that this is only valid for [`AbstractMultiPolygon`](@ref)s.
320345
"""
321346
getpolygon(geom, i::Integer) = getpolygon(geomtype(geom), geom, i)
347+
322348
"""
323-
getpolygon(geom) -> Iterator
349+
getpolygon(geom) -> iterator
350+
351+
Returns an iterator over all polygons in a geometry.
352+
Note that this is only valid for [`AbstractMultiPolygon`](@ref)s.
324353
"""
325354
getpolygon(geom) = getpolygon(geomtype(geom), geom)
326355

356+
"""
357+
getring(geom, i::Integer) -> AbstractCurve
358+
359+
A specific ring `i` in a polygon or multipolygon (exterior and holes).
360+
Note that this is only valid for [`AbstractPolygon`](@ref)s and
361+
[`AbstractMultiPolygon`](@ref)s.
362+
"""
363+
getring(geom, i::Integer) = getring(geomtype(geom), geom, i)
364+
365+
"""
366+
getring(geom) -> iterable
367+
368+
Returns an iterator over all rings in a geometry.
369+
Note that this is only valid for [`AbstractPolygon`](@ref)s and
370+
[`AbstractMultiPolygon`](@ref)s.
371+
"""
372+
getring(geom) = getring(geomtype(geom), geom)
373+
327374
# Other methods
328375
"""
329376
crs(geom) -> T <: GeoFormatTypes.CoordinateReferenceSystemFormat

0 commit comments

Comments
 (0)