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

rasterize of Raster from YAXArrays fails #475

Closed
felixcremer opened this issue Jul 6, 2023 · 2 comments
Closed

rasterize of Raster from YAXArrays fails #475

felixcremer opened this issue Jul 6, 2023 · 2 comments

Comments

@felixcremer
Copy link
Contributor

The following code throws an error.
I would have expected to get a rasterisation.

This is on YAXArrays 0.5 which should be registered in a few minutes.

using Zarr
using Rasters
using YAXArrays
using GADM
dataset = open_dataset(zopen("https://s3.bgc-jena.mpg.de:9000/esdl-esdc-v3.0.2/esdc-16d-2.5deg-46x72x1440-3.0.2.zarr"))
deu = GADM.get("DEU", depth=0)

rasterize(last,deu.geom, to=Raster(dataset.max_air_temperature_2m), fill=1)
ERROR: MethodError: no method matching _init_bools(::Tuple{}, ::Type{Bool}, ::Nothing; metadata::DimensionalData.Dimensions.LookupArrays.Metadata{Nothing, Dict{Any, Any}})

Closest candidates are:
  _init_bools(::AbstractRasterSeries, ::Type, ::Any; kw...)
   @ Rasters ~/Documents/ESDLTutorials/dev/Rasters/src/polygon_ops.jl:718
  _init_bools(::AbstractRasterStack, ::Type, ::Any; kw...)
   @ Rasters ~/Documents/ESDLTutorials/dev/Rasters/src/polygon_ops.jl:719
  _init_bools(::AbstractRaster, ::Type, ::Any; kw...)
   @ Rasters ~/Documents/ESDLTutorials/dev/Rasters/src/polygon_ops.jl:720
  ...

Stacktrace:
  [1] _init_bools(to::Tuple{}, T::Type; kw::Base.Pairs{Symbol, DimensionalData.Dimensions.LookupArrays.Metadata{Nothing, Dict{Any, Any}}, Tuple{Symbol}, NamedTuple{(:metadata,), Tuple{DimensionalData.Dimensions.LookupArrays.Metadata{Nothing, Dict{Any, Any}}}}})
    @ Rasters ~/Documents/ESDLTutorials/dev/Rasters/src/polygon_ops.jl:717
  [2] _init_bools(to::Tuple{}; kw::Base.Pairs{Symbol, DimensionalData.Dimensions.LookupArrays.Metadata{Nothing, Dict{Any, Any}}, Tuple{Symbol}, NamedTuple{(:metadata,), Tuple{DimensionalData.Dimensions.LookupArrays.Metadata{Nothing, Dict{Any, Any}}}}})
    @ Rasters ~/Documents/ESDLTutorials/dev/Rasters/src/polygon_ops.jl:716
  [3] (::Rasters.var"#193#194"{Tuple{}})(#unused#::Int64)
    @ Rasters ./none:0
  [4] iterate
    @ ./generator.jl:47 [inlined]
  [5] collect
    @ ./array.jl:782 [inlined]
  [6] #_burning_allocs#192
    @ ~/Documents/ESDLTutorials/dev/Rasters/src/polygon_ops.jl:78 [inlined]
  [7] _burning_allocs
    @ ~/Documents/ESDLTutorials/dev/Rasters/src/polygon_ops.jl:75 [inlined]
  [8] rasterize(data::Vector{ArchGDAL.IGeometry{ArchGDAL.wkbMultiPolygon}}; to::Raster{Float32, 3, Tuple{Dim{:lon, DimensionalData.Dimensions.LookupArrays.Sampled{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Regular{Float64}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}, Dim{:lat, DimensionalData.Dimensions.LookupArrays.Sampled{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Regular{Float64}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}, Ti{DimensionalData.Dimensions.LookupArrays.Sampled{DateTime, Vector{DateTime}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Irregular{Tuple{Nothing, Nothing}}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}}, Tuple{}, ZArray{Float32, 3, Zarr.BloscCompressor, Zarr.ConsolidatedStore{Zarr.HTTPStore}}, DimensionalData.NoName, Dict{String, Any}, Missing}, fill::Int64, threaded::Bool, kw::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:reducer, :name), Tuple{typeof(last), Symbol}}})
    @ Rasters ~/Documents/ESDLTutorials/dev/Rasters/src/methods/rasterize.jl:419
  [9] rasterize(reducer::Function, data::Vector{ArchGDAL.IGeometry{ArchGDAL.wkbMultiPolygon}}; kw::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:to, :fill), Tuple{Raster{Float32, 3, Tuple{Dim{:lon, DimensionalData.Dimensions.LookupArrays.Sampled{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Regular{Float64}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}, Dim{:lat, DimensionalData.Dimensions.LookupArrays.Sampled{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Regular{Float64}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}, Ti{DimensionalData.Dimensions.LookupArrays.Sampled{DateTime, Vector{DateTime}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Irregular{Tuple{Nothing, Nothing}}, DimensionalData.Dimensions.LookupArrays.Points, DimensionalData.Dimensions.LookupArrays.NoMetadata}}}, Tuple{}, ZArray{Float32, 3, Zarr.BloscCompressor, Zarr.ConsolidatedStore{Zarr.HTTPStore}}, DimensionalData.NoName, Dict{String, Any}, Missing}, Int64}}})
    @ Rasters ~/Documents/ESDLTutorials/dev/Rasters/src/methods/rasterize.jl:394
 [10] top-level scope
    @ ~/Documents/ESDLTutorials/overallintro.jl:8
@felixcremer
Copy link
Contributor Author

These are the versions of the relevant packages:

(ESDLTutorials) pkg> st Zarr Rasters YAXArrays GADM
Status `~/Documents/ESDLTutorials/Project.toml`
  [a8dd9ffe] GADM v1.1.0
  [a3a2b9e3] Rasters v0.8.1 `dev/Rasters`
  [c21b50f5] YAXArrays v0.5.0 `~/.julia/dev/YAXArrays`
  [0a941bbe] Zarr v0.9.1

@rafaqz
Copy link
Owner

rafaqz commented Jul 25, 2023

Probably you have no X and Y dims so it doesn't know which ones to rasterize into or in what order.

I guess rasterize and similar methods should have a keyword argument like dims=(X=:xdim, Y=:ydim) so you can manually specify which are X and Y.

@rafaqz rafaqz closed this as completed May 19, 2024
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