Skip to content

Commit 66b68e4

Browse files
authored
Merge pull request #48 from JuliaGeo/rs/standardise_traitargs
standardise trait arg passing
2 parents ddee198 + 6303188 commit 66b68e4

File tree

1 file changed

+48
-45
lines changed

1 file changed

+48
-45
lines changed

src/defaults.jl

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
# Four options in SF, xy, xyz, xym, xyzm
77
const default_coord_names = (:X, :Y, :Z, :M)
88

9-
coordnames(::AbstractGeometryTrait, geom) = default_coord_names[1:ncoord(geom)]
9+
coordnames(t::AbstractGeometryTrait, geom) = default_coord_names[1:ncoord(t, geom)]
1010

1111
# Maybe hardcode dimension order? At least for X and Y?
12-
x(::AbstractPointTrait, geom) = getcoord(geom, findfirst(isequal(:X), coordnames(geom)))
13-
y(::AbstractPointTrait, geom) = getcoord(geom, findfirst(isequal(:Y), coordnames(geom)))
14-
z(::AbstractPointTrait, geom) = getcoord(geom, findfirst(isequal(:Z), coordnames(geom)))
15-
m(::AbstractPointTrait, geom) = getcoord(geom, findfirst(isequal(:M), coordnames(geom)))
12+
x(t::AbstractPointTrait, geom) = getcoord(t, geom, findfirst(isequal(:X), coordnames(geom)))
13+
y(t::AbstractPointTrait, geom) = getcoord(t, geom, findfirst(isequal(:Y), coordnames(geom)))
14+
z(t::AbstractPointTrait, geom) = getcoord(t, geom, findfirst(isequal(:Z), coordnames(geom)))
15+
m(t::AbstractPointTrait, geom) = getcoord(t, geom, findfirst(isequal(:M), coordnames(geom)))
1616

1717
is3d(::AbstractPointTrait, geom) = :Z in coordnames(geom)
1818
ismeasured(::AbstractPointTrait, geom) = :M in coordnames(geom)
@@ -24,46 +24,46 @@ getgeom(::AbstractPointTrait, geom) = nothing
2424
getgeom(::AbstractPointTrait, geom, i) = nothing
2525

2626
## LineStrings
27-
npoint(c::AbstractCurveTrait, geom) = ngeom(c, geom)
28-
getpoint(c::AbstractCurveTrait, geom) = getgeom(c, geom)
29-
getpoint(c::AbstractCurveTrait, geom, i) = getgeom(c, geom, i)
30-
startpoint(c::AbstractCurveTrait, geom) = getpoint(c, geom, 1)
31-
endpoint(c::AbstractCurveTrait, geom) = getpoint(c, geom, length(geom))
27+
npoint(t::AbstractCurveTrait, geom) = ngeom(t, geom)
28+
getpoint(t::AbstractCurveTrait, geom) = getgeom(t, geom)
29+
getpoint(t::AbstractCurveTrait, geom, i) = getgeom(t, geom, i)
30+
startpoint(t::AbstractCurveTrait, geom) = getpoint(t, geom, 1)
31+
endpoint(t::AbstractCurveTrait, geom) = getpoint(t, geom, length(geom))
3232

3333
## Polygons
34-
nring(p::AbstractPolygonTrait, geom) = ngeom(p, geom)
35-
getring(p::AbstractPolygonTrait, geom) = getgeom(p, geom)
36-
getring(p::AbstractPolygonTrait, geom, i) = getgeom(p, geom, i)
37-
getexterior(p::AbstractPolygonTrait, geom) = getring(p, geom, 1)
38-
nhole(p::AbstractPolygonTrait, geom) = nring(p, geom) - 1
39-
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))
34+
nring(t::AbstractPolygonTrait, geom) = ngeom(t, geom)
35+
getring(t::AbstractPolygonTrait, geom) = getgeom(t, geom)
36+
getring(t::AbstractPolygonTrait, geom, i) = getgeom(t, geom, i)
37+
getexterior(t::AbstractPolygonTrait, geom) = getring(t, geom, 1)
38+
nhole(t::AbstractPolygonTrait, geom) = nring(t, geom) - 1
39+
gethole(t::AbstractPolygonTrait, geom, i) = getring(t, geom, i + 1)
40+
npoint(p::AbstractPolygonTrait, geom) = sum(npoint(p) for p in getring(t, geom))
41+
getpoint(t::AbstractPolygonTrait, geom) = (p for p in getpoint(r) for r in getring(t, geom))
4242

4343
## MultiLineString
44-
nlinestring(p::AbstractMultiLineStringTrait, geom) = ngeom(p, geom)
45-
getlinestring(p::AbstractMultiLineStringTrait, geom) = getgeom(p, geom)
46-
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))
44+
nlinestring(t::AbstractMultiLineStringTrait, geom) = ngeom(t, geom)
45+
getlinestring(t::AbstractMultiLineStringTrait, geom) = getgeom(t, geom)
46+
getlinestring(t::AbstractMultiLineStringTrait, geom, i) = getgeom(t, geom, i)
47+
npoint(t::AbstractMultiLineStringTrait, geom) = sum(npoint(ls) for ls in getgeom(t, geom))
48+
getpoint(t::AbstractMultiLineStringTrait, geom) = (p for p in getpoint(ls) for ls in getgeom(t, geom))
4949

5050
## MultiPolygon
51-
npolygon(p::AbstractMultiPolygonTrait, geom) = ngeom(p, geom)
52-
getpolygon(p::AbstractMultiPolygonTrait, geom) = getgeom(p, geom)
53-
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))
51+
npolygon(t::AbstractMultiPolygonTrait, geom) = ngeom(t, geom)
52+
getpolygon(t::AbstractMultiPolygonTrait, geom) = getgeom(t, geom)
53+
getpolygon(t::AbstractMultiPolygonTrait, geom, i) = getgeom(t, geom, i)
54+
nring(t::AbstractMultiPolygonTrait, geom) = sum(nring(p) for p in getpolygon(t, geom))
55+
getring(t::AbstractMultiPolygonTrait, geom) = (r for r in getring(p) for p in getpolygon(t, geom))
56+
npoint(t::AbstractMultiPolygonTrait, geom) = sum(npoint(r) for r in getring(t, geom))
57+
getpoint(t::AbstractMultiPolygonTrait, geom) = (p for p in getpoint(r) for r in getring(t, geom))
5858

5959
## Surface
60-
npatch(p::AbstractPolyHedralSurfaceTrait, geom)::Integer = ngeom(p, geom)
61-
getpatch(p::AbstractPolyHedralSurfaceTrait, geom) = getgeom(p, geom)
62-
getpatch(p::AbstractPolyHedralSurfaceTrait, geom, i::Integer) = getgeom(p, geom, i)
60+
npatch(t::AbstractPolyHedralSurfaceTrait, geom)::Integer = ngeom(t, geom)
61+
getpatch(t::AbstractPolyHedralSurfaceTrait, geom) = getgeom(t, geom)
62+
getpatch(t::AbstractPolyHedralSurfaceTrait, geom, i::Integer) = getgeom(t, geom, i)
6363

6464
## Default iterator
65-
getgeom(p::AbstractGeometryTrait, geom) = (getgeom(p, geom, i) for i in 1:ngeom(p, geom))
66-
getcoord(p::AbstractPointTrait, geom) = (getcoord(p, geom, i) for i in 1:ncoord(p, geom))
65+
getgeom(t::AbstractGeometryTrait, geom) = (getgeom(t, geom, i) for i in 1:ngeom(t, geom))
66+
getcoord(t::AbstractPointTrait, geom) = (getcoord(t, geom, i) for i in 1:ncoord(t, geom))
6767

6868
## Npoints
6969
npoint(::LineTrait, _) = 2
@@ -73,25 +73,28 @@ npoint(::QuadTrait, _) = 4
7373
npoint(::PentagonTrait, _) = 5
7474
npoint(::HexagonTrait, _) = 6
7575

76-
issimple(::AbstractCurveTrait, geom) = allunique([getpoint(geom, i) for i in 1:npoint(geom)-1]) && allunique([getpoint(geom, i) for i in 2:npoint(geom)])
77-
isclosed(::AbstractCurveTrait, geom) = getpoint(geom, 1) == getpoint(geom, npoint(geom))
78-
isring(x::AbstractCurveTrait, geom) = issimple(x, geom) && isclosed(x, geom)
76+
issimple(::AbstractCurveTrait, geom) =
77+
allunique([getpoint(t, geom, i) for i in 1:npoint(geom)-1]) && allunique([getpoint(t, geom, i) for i in 2:npoint(t, geom)])
78+
isclosed(t::AbstractCurveTrait, geom) = getpoint(t, geom, 1) == getpoint(t, geom, npoint(t, geom))
79+
isring(t::AbstractCurveTrait, geom) = issimple(t, geom) && isclosed(t, geom)
7980

8081
# TODO Only simple if it's also not intersecting itself, except for its endpoints
81-
issimple(::AbstractMultiCurveTrait, geom) = all(i -> issimple(getgeom(geom, i)), 1:ngeom(geom))
82-
isclosed(::AbstractMultiCurveTrait, geom) = all(i -> isclosed(getgeom(geom, i)), 1:ngeom(geom))
82+
issimple(t::AbstractMultiCurveTrait, geom) = all(i -> issimple(getgeom(t, geom, i)), 1:ngeom(t, geom))
83+
isclosed(t::AbstractMultiCurveTrait, geom) = all(i -> isclosed(getgeom(t, geom, i)), 1:ngeom(t, geom))
8384

84-
issimple(::MultiPointTrait, geom) = allunique((getgeom(geom, i) for i in 1:ngeom(geom)))
85+
issimple(t::AbstractMultiPointTrait, geom) = allunique((getgeom(t, geom, i) for i in 1:ngeom(t, geom)))
86+
getpoint(t::AbstractMultiPointTrait, geom) = getgeom(t, geom)
87+
getpoint(t::AbstractMultiPointTrait, geom, i) = getgeom(t, geom, i)
8588

8689
crs(::AbstractGeometryTrait, geom) = nothing
8790
extent(::AbstractGeometryTrait, geom) = nothing
8891

8992
# Backwards compatibility
90-
function coordinates(::AbstractPointTrait, geom)
91-
collect(getcoord(geom))
93+
function coordinates(t::AbstractPointTrait, geom)
94+
collect(getcoord(t, geom))
9295
end
93-
function coordinates(::AbstractGeometryTrait, geom)
94-
collect(coordinates.(getgeom(geom)))
96+
function coordinates(t::AbstractGeometryTrait, geom)
97+
collect(coordinates.(getgeom(t, geom)))
9598
end
9699

97100
# Subtraits

0 commit comments

Comments
 (0)