Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
9 changes: 5 additions & 4 deletions src/fallbacks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ getexterior(t::AbstractPolygonTrait, geom) = getring(t, geom, 1)
nhole(t::AbstractPolygonTrait, geom) = nring(t, geom) - 1
gethole(t::AbstractPolygonTrait, geom) = (getgeom(t, geom, i) for i in 2:ngeom(t, geom))
gethole(t::AbstractPolygonTrait, geom, i) = getring(t, geom, i + 1)
npoint(t::AbstractPolygonTrait, geom) = sum(npoint(p) for p in getring(t, geom))
npoint(t::AbstractPolygonTrait, geom) = sum(npoint(p) for p in getring(t, geom); init=0)
getpoint(t::AbstractPolygonTrait, geom) = flatten((p for p in getpoint(r)) for r in getring(t, geom))

## MultiPoint
Expand All @@ -55,16 +55,16 @@ getpoint(t::AbstractMultiPointTrait, geom, i) = getgeom(t, geom, i)
nlinestring(t::AbstractMultiCurveTrait, geom) = ngeom(t, geom)
getlinestring(t::AbstractMultiCurveTrait, geom) = getgeom(t, geom)
getlinestring(t::AbstractMultiCurveTrait, geom, i) = getgeom(t, geom, i)
npoint(t::AbstractMultiCurveTrait, geom) = sum(npoint(ls) for ls in getgeom(t, geom))
npoint(t::AbstractMultiCurveTrait, geom) = sum(npoint(ls) for ls in getgeom(t, geom); init=0)
getpoint(t::AbstractMultiCurveTrait, geom) = flatten((p for p in getpoint(ls)) for ls in getgeom(t, geom))

## MultiPolygon
npolygon(t::AbstractMultiPolygonTrait, geom) = ngeom(t, geom)
getpolygon(t::AbstractMultiPolygonTrait, geom) = getgeom(t, geom)
getpolygon(t::AbstractMultiPolygonTrait, geom, i) = getgeom(t, geom, i)
nring(t::AbstractMultiPolygonTrait, geom) = sum(nring(p) for p in getpolygon(t, geom))
nring(t::AbstractMultiPolygonTrait, geom) = sum(nring(p)::Int for p in getpolygon(t, geom); init=0)
getring(t::AbstractMultiPolygonTrait, geom) = flatten((r for r in getring(p)) for p in getpolygon(t, geom))
npoint(t::AbstractMultiPolygonTrait, geom) = sum(npoint(r) for r in getring(t, geom))
npoint(t::AbstractMultiPolygonTrait, geom) = sum(npoint(r)::Int for r in getring(t, geom); init=0)
getpoint(t::AbstractMultiPolygonTrait, geom) = flatten((p for p in getpoint(r)) for r in getring(t, geom))

## Surface
Expand Down Expand Up @@ -130,6 +130,7 @@ function calc_extent(t::AbstractPointTrait, geom)
end
end
function calc_extent(t::AbstractGeometryTrait, geom)
isempty(t, geom) && return nothing
points = getpoint(t, geom)
X = extrema(p -> x(p), points)
Y = extrema(p -> y(p), points)
Expand Down
12 changes: 12 additions & 0 deletions test/test_primitives.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ struct MyPoint end
struct MyEmptyPoint end
struct MyCurve end
struct MyPolygon end
struct MyEmptyPolygon end
struct MyTriangle end
struct MyMultiPoint end
struct MyMultiCurve end
Expand Down Expand Up @@ -46,6 +47,12 @@ GeoInterface.ngeom(::PolygonTrait, geom::MyPolygon) = 2
GeoInterface.getgeom(::PolygonTrait, geom::MyPolygon, i) = MyCurve()
GeoInterface.ncoord(t::PolygonTrait, geom::MyPolygon) = 2

GeoInterface.isgeometry(::Type{MyEmptyPolygon}) = true
GeoInterface.geomtrait(::MyEmptyPolygon) = PolygonTrait()
GeoInterface.ngeom(::PolygonTrait, geom::MyEmptyPolygon) = 0
GeoInterface.getgeom(::PolygonTrait, geom::MyEmptyPolygon, i) = nothing
GeoInterface.isempty(::PolygonTrait, geom::MyEmptyPolygon) = true

GeoInterface.isgeometry(::Type{MyTriangle}) = true
GeoInterface.geomtrait(::MyTriangle) = TriangleTrait()
GeoInterface.ngeom(::TriangleTrait, geom::MyTriangle) = 3
Expand Down Expand Up @@ -173,6 +180,11 @@ GeoInterface.crs(::RasterTrait, ::Raster) = GeoFormatTypes.EPSG(4326)
@test GeoInterface.nring(geom) == 1
@test GeoInterface.nhole(geom) == 0
@test GeoInterface.npoint(geom) == 3

geom = MyEmptyPolygon()
@test GeoInterface.isempty(geom)
@test GeoInterface.nring(geom) == 0
@test GeoInterface.npoint(geom) == 0
end

@testset "MultiPoint" begin
Expand Down
Loading