1# Author: Robert J. Hijmans
2# Date :  October 2017
3# Version 0.9
4# License GPL v3
5
6setMethod("ext", signature(x="SpatExtent"),
7	function(x){
8		x
9	}
10)
11
12
13setMethod("ext", signature(x="sf"),
14	function(x){
15		sfi <- attr(x, "sf_column")
16		geom <- x[[sfi]]
17		e <- attr(geom, "bbox")
18		ext(e[c(1,3,2,4)])
19	}
20)
21
22setMethod("ext", signature(x="missing"),
23	function(x){
24		e <- methods::new("SpatExtent")
25		e@ptr <- SpatExtent$new()
26		return(e)
27	}
28)
29
30setMethod("ext", signature(x="numeric"),
31	function(x, ...){
32		dots <- unlist(list(...))
33		x <- c(x, dots)
34		if (length(x) < 4) {
35			error("ext", "insufficient number of elements (should be 4)")
36		}
37		if (length(x) > 4) {
38			warn("ext", "more elements than expected (should be 4)")
39		}
40		names(x) <- NULL
41		e <- methods::new("SpatExtent")
42		e@ptr <- SpatExtent$new(x[1], x[2], x[3], x[4])
43		if (methods::validObject(e)) return(e)
44	}
45)
46
47
48setMethod("ext", signature(x="SpatRaster"),
49	function(x){
50		e <- methods::new("SpatExtent")
51		e@ptr <- x@ptr$extent
52		return(e)
53	}
54)
55
56
57setMethod("ext", signature(x="SpatRasterDataset"),
58	function(x){
59		e <- methods::new("SpatExtent")
60		e@ptr <- x[1]@ptr$extent
61		return(e)
62	}
63)
64
65
66setMethod("ext<-", signature("SpatRaster", "SpatExtent"),
67	function(x, value) {
68		x@ptr$extent <- value@ptr
69		messages(x, "ext<-")
70	}
71)
72
73
74setMethod("ext<-", signature("SpatRaster", "numeric"),
75	function(x, value) {
76		e <- ext(value)
77		x@ptr$extent <- e@ptr
78		messages(x, "ext<-")
79	}
80)
81
82
83
84setMethod("ext", signature(x="SpatVector"),
85	function(x, ...) {
86		e <- methods::new("SpatExtent")
87		e@ptr <- x@ptr$extent()
88		return(e)
89	}
90)
91
92
93
94setMethod("ext", signature(x="Extent"),
95	function(x, ...) {
96		ext(as.vector(x))
97	}
98)
99
100setMethod("ext", signature(x="Raster"),
101	function(x) {
102		ext(x@extent)
103	}
104)
105
106setMethod("ext", signature(x="Spatial"),
107	function(x) {
108		ext(as.vector(t(x@bbox)))
109	}
110)
111
112
113
114setMethod("xmin", signature(x="SpatExtent"),
115	function(x){
116		x@ptr$vector[1]
117	}
118)
119setMethod("xmax", signature(x="SpatExtent"),
120	function(x){
121		x@ptr$vector[2]
122	}
123)
124setMethod("ymin", signature(x="SpatExtent"),
125	function(x){
126		x@ptr$vector[3]
127	}
128)
129setMethod("ymax", signature(x="SpatExtent"),
130	function(x){
131		x@ptr$vector[4]
132	}
133)
134
135
136setMethod("xmin<-", signature("SpatExtent", "numeric"),
137	function(x, value){
138		v <- as.vector(x)
139		v[1] <- value
140		ext(v)
141	}
142)
143setMethod("xmax<-", signature("SpatExtent", "numeric"),
144	function(x, value){
145		v <- as.vector(x)
146		v[2] <- value
147		ext(v)
148	}
149)
150setMethod("ymin<-", signature("SpatExtent", "numeric"),
151	function(x, value){
152		v <- as.vector(x)
153		v[3] <- value
154		ext(v)
155	}
156)
157setMethod("ymax<-", signature("SpatExtent", "numeric"),
158	function(x, value){
159		v <- as.vector(x)
160		v[4] <- value
161		ext(v)
162	}
163)
164
165
166setMethod("xmin", signature(x="SpatRaster"),
167	function(x){
168		xmin(ext(x))
169	}
170)
171setMethod("xmax", signature(x="SpatRaster"),
172	function(x){
173		xmax(ext(x))
174	}
175)
176setMethod("ymin", signature(x="SpatRaster"),
177	function(x){
178		ymin(ext(x))
179	}
180)
181setMethod("ymax", signature(x="SpatRaster"),
182	function(x){
183		ymax(ext(x))
184	}
185)
186
187
188setMethod("xmin<-", signature("SpatRaster", "numeric"),
189	function(x, value){
190		v <- as.vector(ext(x))
191		v[1] <- value
192		x@ptr <- x@ptr$deepcopy()
193		ext(x) <- ext(v)
194		x
195	}
196)
197
198
199setMethod("xmax<-", signature("SpatRaster", "numeric"),
200	function(x, value){
201		v <- as.vector(ext(x))
202		v[2] <- value
203		x@ptr <- x@ptr$deepcopy()
204		ext(x) <- ext(v)
205		x
206	}
207)
208setMethod("ymin<-", signature("SpatRaster", "numeric"),
209	function(x, value){
210		v <- as.vector(ext(x))
211		v[3] <- value
212		x@ptr <- x@ptr$deepcopy()
213		ext(x) <- ext(v)
214		x
215	}
216)
217
218setMethod("ymax<-", signature("SpatRaster", "numeric"),
219	function(x, value){
220		v <- as.vector(ext(x))
221		v[4] <- value
222		x@ptr <- x@ptr$deepcopy()
223		ext(x) <- ext(v)
224		x
225	}
226)
227
228
229
230setMethod("xmin", signature(x="SpatVector"),
231	function(x){
232		xmin(ext(x))
233	}
234)
235setMethod("xmax", signature(x="SpatVector"),
236	function(x){
237		xmax(ext(x))
238	}
239)
240setMethod("ymin", signature(x="SpatVector"),
241	function(x){
242		ymin(ext(x))
243	}
244)
245setMethod("ymax", signature(x="SpatVector"),
246	function(x){
247		ymax(ext(x))
248	}
249)
250
251
252
253setMethod("$", "SpatExtent",
254	function(x, name) {
255		as.vector(x)[name]
256	}
257)
258
259
260setMethod("$<-", "SpatExtent",
261	function(x, name, value) {
262		e <- as.vector(x)
263		e[name] <- value
264		ext(e)
265	}
266)
267
268
269
270setMethod("[", c("SpatExtent", "missing", "missing"),
271	function(x, i, j, ... , drop=FALSE) {
272		as.vector(x)
273	}
274)
275
276setMethod("[", c("SpatExtent", "numeric", "missing"),
277	function(x, i, j, ... , drop=FALSE) {
278		x <- as.vector(x)
279		x[i]
280	}
281)
282
283setReplaceMethod("[", c("SpatExtent", "numeric", "missing"),
284	function(x, i, j, value) {
285		e <- as.vector(x)
286		stopifnot(all(i %in% 1:4))
287		e[i] <- value
288		ext(e)
289	}
290)
291
292