Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unit metadata from aux.json not used when reading SpatRaster #1688

Closed
brownag opened this issue Dec 29, 2024 · 1 comment
Closed

Unit metadata from aux.json not used when reading SpatRaster #1688

brownag opened this issue Dec 29, 2024 · 1 comment

Comments

@brownag
Copy link
Contributor

brownag commented Dec 29, 2024

For reading file types where SpatRaster metadata are stored in an aux.json file, it appears units are not always set in the result.

With most recent CRAN (1.8.5) and current development (1.8.7), reading GeoTIFF metadata works fine, but with other file types, e.g. netCDF and GRD, units(x) returns "" rather than the expected value "m". It appears the correct values are written to aux.json file, and that reading fails to load the units into the new SpatRaster object

library(terra)
#> terra 1.8.7

dir.create("metadata_test", showWarnings = FALSE)

x <- rast(system.file("ex", "elev.tif", package = "terra"))
x
#> class       : SpatRaster 
#> dimensions  : 90, 95, 1  (nrow, ncol, nlyr)
#> resolution  : 0.008333333, 0.008333333  (x, y)
#> extent      : 5.741667, 6.533333, 49.44167, 50.19167  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84 (EPSG:4326) 
#> source      : elev.tif 
#> name        : elevation 
#> min value   :       141 
#> max value   :       547

time(x) <- as.Date("2024-12-25") 
units(x) <- "m"
x
#> class       : SpatRaster 
#> dimensions  : 90, 95, 1  (nrow, ncol, nlyr)
#> resolution  : 0.008333333, 0.008333333  (x, y)
#> extent      : 5.741667, 6.533333, 49.44167, 50.19167  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84 (EPSG:4326) 
#> source      : elev.tif 
#> name        : elevation 
#> min value   :       141 
#> max value   :       547 
#> unit        :         m 
#> time (days) : 2024-12-25

writeRaster(x, "metadata_test/test.tif", overwrite = TRUE)

# works stored internally in TIFF
y <- rast("metadata_test/test.tif")
time(y)
#> [1] "2024-12-25"
units(y)
#> [1] "m"


# does not work, units in aux.json but not result
writeRaster(x, "metadata_test/test2.nc", overwrite=T)
#> Warning: [writeRaster] consider writeCDF to write ncdf files
y <- rast("metadata_test/test2.nc")
cat(readLines("metadata_test/test2.nc.aux.json"), sep = "\n")
#> {
#> "time":["2024-12-25"],
#> "timestep":"days",
#> "unit":["m"]
#> }
time(y)
#> [1] "2024-12-25"
units(y)
#> [1] ""

# does not work, units in aux.json but not result
writeRaster(x, "metadata_test/test3.grd", overwrite=T)
y <- rast("metadata_test/test3.grd")
cat(readLines("metadata_test/test3.grd.aux.json"), sep = "\n")
#> {
#> "time":["2024-12-25"],
#> "timestep":"days",
#> "unit":["m"]
#> }
time(y)
#> [1] "2024-12-25"
units(y)
#> [1] ""
@rhijmans
Copy link
Member

Thank you. I now get:

library(terra)
dir.create("metadata_test", showWarnings = FALSE)
x <- rast(system.file("ex", "elev.tif", package = "terra"))
time(x) <- as.Date("2024-12-25") 
units(x) <- "m"

y <- writeRaster(x, "metadata_test/test.tif", overwrite = TRUE)
time(y)
[#1] "2024-12-25"
units(y)
#[1] "m"
 
z <- writeRaster(x, "metadata_test/test2.nc", overwrite=T)
#Warning message:
#[writeRaster] consider writeCDF to write ncdf files 
time(z)
#[1] "2024-12-25"
units(z)
#[1] "m"
 
a <- writeRaster(x, "metadata_test/test3.grd", overwrite=T)
time(a)
#[1] "2024-12-25"
units(a)
#[1] "m"

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Feb 8, 2025
# Version 1.8-15

## Bug Fixes

- `Readrds` Failed For Rasters With Timestep="Seconds"
  [#1711](Https://github.com/Rspatial/terra/issues/1711) by Pascal
  Oettli

- `divide<SpatVector>` always returned NULL
  [#1724](rspatial/terra#1724) by Márcia
  Barbosa

- `erase` failed in some cases
  [#1710](rspatial/terra#1710) by
  erkent-carb

## enhancements

- `bestMatch` now has argument "fun" to allow the use of different
  distance measures, and a <matrix> method

- `wrap` (and `writeRDS`) now captures varnames/longnames
  [#1719](rspatial/terra#1719) by Andrew
  Gene Brown

- improved raster metadata writing
  [#1714](rspatial/terra#1714) by Andrew Gene
  Brown

- `vect` and `writeVector` now properly read and write date and
  datetime
  data. [#1718](rspatial/terra#1718) by
  Andrew Gene Brown

- improved estimate of available memory on linux systems
  [#1506](rspatial/terra#1506) by Cedric
  Rossi

# version 1.8-10

Released 2025-01-13

## bug fixes

- `expanse<SpatRaster>(transform=TRUE)` crashed R when the crs was
  "local". [#1671](rspatial/terra#1671) by
  Michael Chirico

- `patches(values=TRUE)` wrapped around the edges
  [#1675](rspatial/terra#1675) by Michael
  Chirico

- `spin` now correctly handles spherical coordinates
  [#1576](rspatial/terra#1576) by jeanlobry

- `mosaic` sometimes crashed R
  [#1524](rspatial/terra#1524) by John
  Baums, Dave Klinges, and Hugh Graham.

- `spatSample` ignored argument "exp" when taking a random sample with
  na.rm=TRUE on a large raster
  [#1437](rspatial/terra#1437) by Babak
  Naimi

- `split<SpatVector,SpatVector>` did not work properly
  [#1619](rspatial/terra#1619) by Michael
  Sumner

- `autocor` improved handling of NA cells for global Moran computation
  [#1992](rspatial/terra#1592) by Nicholas
  Berryman

- `shade` is more
  memory-safe. [#1452](rspatial/terra#1452)
  by Francis van Oordt and Chris English

- fixed bug in `rasterize` revealed when using `crop(mask=TRUE)`
  [#1686](rspatial/terra#1686) by edixon1

- fixed `to_id = NA` bug in `nearest`
  [#1471](rspatial/terra#1471) by Mats
  Blomqvist

- better handling of date/unit
  [#1684](rspatial/terra#1684) and
  [#1688](rspatial/terra#1688) by Andrew
  Gene Brown

- `spatSample(method="regular")` on a raster with one column returned
  too many samples
  [#1362](rspatial/terra#1362) by Daniel R
  Schlaepfer


## enhancements

- `plot<SpatVector>` now uses the same default viridis color palette
  as `plot<SpatRaster>`
  [#1670](rspatial/terra#1670) by Márcia
  Barbosa

- `relate` now accepts relation="equals"
  [#1672](rspatial/terra#1672) by Krzysztof
  Dyba

- `init` now accepts additional arguments for function "fun"

- better handling of the 32 connections limitation set by the HDF4
  library [#1481](rspatial/terra#1481) by
  Dimitri Falk

- When using RStudio a once per session warning is given when using
  draw, sel or click
  [#1063](rspatial/terra#1063) by Sergei
  Kharchenko

- `distance<SpatRaster>` from lon and lat lines/polygons computes
  distance to the edges instead of the nodes
  [#1462](rspatial/terra#1462) by Derek
  Friend

- `distance<SpatVector,SpatVector>` now works for lon/lat data
  [#1615](rspatial/terra#1615) by Wencheng
  Lau-Medrano

- using overviews for faster plotting of COGs over http
  [#1353](rspatial/terra#1353) by Michael
  Sumner and [#1412](rspatial/terra#1412);
  and argument `plot(x, overview=)` to change the default behavior.

- `extract` with points is now faster for rasters accessed over http
  [#1504](rspatial/terra#1504) by Krzysztof
  Dyba

- `extract` with many points on very large rasters was slower in
  compared to doing the same with "raster" (which uses terra for
  that!) [#1584](rspatial/terra#1584) by
  Hassan Masoomi

- `merge` now has three alternative algorithms
  [1366](rspatial/terra#1366) by Hassan
  Masoomi and [#1650](rspatial/terra#1650)
  by Agustin Lobo


## new

- `$<SpatRaster>` can now be used to get a categorical SpatRaster with
  a different active category

- `scale_linear<SpatRaster>` method for linear scaling of cell values
  between a minimum and maximum value such as 0 and 1

- `distance` and related methods get argument "method" to choose the
  distance algorithm for lon/lat data
  [#1677](rspatial/terra#1677) by Márcia
  Barbosa

- `divide<SpatRaster>` and `divide<SpatVector>` methods

- `nseg` counts the number of segments in a SpatVector
  [#1647](rspatial/terra#1674) by Michael
  Chirico

- `extract` argument "search_radius" to extract values from the
  nearest raster cell that is not `NA`
  [#873](rspatial/terra#873) by
  matthewseanmarcus

- `combineLevels` to combine the levels of all layers
  [link](https://stackoverflow.com/questions/79340152/how-to-set-factor-levels-in-a-rast-stack-using-terra-when-different-levels-exi)
  on SO by Sam
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants