diff --git a/R/stars.R b/R/stars.R index 3e5b1644..c6009524 100644 --- a/R/stars.R +++ b/R/stars.R @@ -198,6 +198,11 @@ colrow_from_xy = function(x, obj, NA_outside = FALSE) { if (inherits(obj, "dimensions")) gt = get_geotransform(obj) + if (isTRUE(st_is_longlat(st_crs(obj)))) { + bb = st_bbox(obj) + sign = ifelse(x[,1] < bb["xmin"], 1., ifelse(x[,1] > bb["xmax"], -1., 0.)) + x[,1] = x[,1] + sign * 360. + } if (!any(is.na(gt))) { # have geotransform inv_gt = gdal_inv_geotransform(gt) if (any(is.na(inv_gt))) diff --git a/R/warp.R b/R/warp.R index bc194ef6..857b6a90 100644 --- a/R/warp.R +++ b/R/warp.R @@ -52,7 +52,7 @@ default_target_grid = function(x, crs, cellsize = NA_real_, segments = NA) { } rename_xy_dimensions = function(x, dims) { - stopifnot(inherits(x, "stars"), inherits(dims, "dimensions")) + #stopifnot(inherits(x, "stars"), inherits(dims, "dimensions")) dx = st_dimensions(x) xxy = attr(dx, "raster")$dimensions dimsxy = attr(dims, "raster")$dimensions @@ -69,7 +69,7 @@ rename_xy_dimensions = function(x, dims) { # transform grid x to dimensions target # x is a stars object, target is a dimensions object transform_grid_grid = function(x, target) { - stopifnot(inherits(target, "dimensions")) + stopifnot(inherits(x, "stars"), inherits(target, "dimensions")) x = rename_xy_dimensions(x, target) # so we can match by name xy_names = attr(target, "raster")$dimensions new_pts = st_coordinates(target[xy_names]) @@ -87,16 +87,14 @@ transform_grid_grid = function(x, target) { d = st_dimensions(x) # get col/row from x/y: xy = colrow_from_xy(pts, x, NA_outside = TRUE) - - from = x[[1]] #[,,1] dims = dim(x) - index = matrix(1:prod(dims[dxy]), dims[ dxy[1] ], dims[ dxy[2] ])[xy] + index = matrix(seq_len(prod(dims[dxy])), dims[ dxy[1] ], dims[ dxy[2] ])[xy] if (length(dims) > 2) { remaining_dims = dims[setdiff(names(dims), dxy)] newdim = c(prod(dims[dxy]), prod(remaining_dims)) for (i in seq_along(x)) { dim(x[[i]]) = newdim - x[[i]] = x[[i]][index,] + x[[i]] = x[[i]][index,] # FIXME: won't work for dims > 3? dim(x[[i]]) = c(dim(target)[dxy], remaining_dims) } } else {