66# Four options in SF, xy, xyz, xym, xyzm
77const 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
1717is3d (:: AbstractPointTrait , geom) = :Z in coordnames (geom)
1818ismeasured (:: AbstractPointTrait , geom) = :M in coordnames (geom)
@@ -24,46 +24,46 @@ getgeom(::AbstractPointTrait, geom) = nothing
2424getgeom (:: 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
6969npoint (:: LineTrait , _) = 2
@@ -73,25 +73,28 @@ npoint(::QuadTrait, _) = 4
7373npoint (:: PentagonTrait , _) = 5
7474npoint (:: 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
8689crs (:: AbstractGeometryTrait , geom) = nothing
8790extent (:: 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))
9295end
93- function coordinates (:: AbstractGeometryTrait , geom)
94- collect (coordinates .(getgeom (geom)))
96+ function coordinates (t :: AbstractGeometryTrait , geom)
97+ collect (coordinates .(getgeom (t, geom)))
9598end
9699
97100# Subtraits
0 commit comments