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

Error in rstac::stac() Value '' is not a valid property name #156

Open
rokoeh opened this issue Apr 16, 2024 · 1 comment
Open

Error in rstac::stac() Value '' is not a valid property name #156

rokoeh opened this issue Apr 16, 2024 · 1 comment

Comments

@rokoeh
Copy link

rokoeh commented Apr 16, 2024

I was following along the code in https://stacspec.org/en/tutorials/2-using-rstac-and-cql2-to-query-stac-api/ and it seems that this part is not running:


rstac::stac("https://planetarycomputer.microsoft.com/api/stac/v1") |>
  rstac::ext_filter(
    collection == "landsat-c2-l2" &&
      t_intersects(datetime, )
  )

Not sure I'm doing something wrong or if it is a bug

Complete code :

require(sf)
require(rstac)

ashe <- sf::read_sf(system.file("shape/nc.shp", package = "sf"))[1, ]




ashe_bbox <- ashe |>
  sf::st_transform(4326) |>
  sf::st_bbox()

stac_query <- rstac::stac(
  "https://planetarycomputer.microsoft.com/api/stac/v1"
) |>
  rstac::stac_search(
    collections = "landsat-c2-l2",
    bbox = ashe_bbox,
    datetime = "2021-01-01/2021-01-31"
  ) |>
  rstac::get_request()


#stac_query




lapply(stac_query$features, \(x) names(x$properties)) |> 
  unlist() |> 
  unique()



lapply(
  stac_query$features, 
  \(x) data.frame(id = x$id, platform = x$properties$platform)
) |> 
  do.call(what = rbind)




ashe_bbox_geojson <- rstac::cql2_bbox_as_geojson(ashe_bbox)
#ashe_bbox_geojson


time_range <- rstac::cql2_interval("2021-01-01", "2021-01-31")
#time_range



rstac::stac("https://planetarycomputer.microsoft.com/api/stac/v1") |>
  rstac::ext_filter(
    collection == "landsat-c2-l2"
  )




rstac::stac("https://planetarycomputer.microsoft.com/api/stac/v1") |>
  rstac::ext_filter(
    collection == "landsat-c2-l2" &&
      t_intersects(datetime, )
  )

Error: Value '' is not a valid property name

@rolfsimoes
Copy link
Contributor

rolfsimoes commented Jun 10, 2024

Dear @rokoeh,

The issue you're encountering stems from missing arguments in the t_intersects() and s_intersects() functions. It appears that the tutorial inadvertently omitted these parameters, likely due to the requirement of double curly braces ({{...}}) to properly reference the variables time_range and ashe.

Here is the corrected example:

library(sf)
library(rstac)

ashe <- sf::read_sf(system.file("shape/nc.shp", package = "sf"))[1, ]

time_range <- rstac::cql2_interval("2021-01-01", "2021-01-31")

rstac::stac("https://planetarycomputer.microsoft.com/api/stac/v1") |>
  rstac::ext_filter(
    collection == "landsat-c2-l2" &&
      t_intersects(datetime, {{time_range}}) &&
      s_intersects(geometry, {{ashe}})
  ) |>
  rstac::post_request()

CQL2 utilizes non-evaluated expressions to construct complex queries using R syntax. Without the double curly braces, the names provided will be interpreted as feature properties. For example, using t_intersects(datetime, time_range) would still be syntactically correct, but it will not return any results because time_range will be interpreted as NULL inside the items, as it does not exist as a property. To refer to the variable time_range, you need to escape the expression by enclosing it within double curly braces {{...}}.

Using double curly braces ensures that the actual variables time_range and ashe are correctly passed to the functions t_intersects and s_intersects.

Please let us know if you have any further questions or issues.

Best regards,
Rolf

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