open-AIMS / ReefGuideAPI.jl

API for Reef Guidance and Assessment
MIT License
1 stars 0 forks source link

ERRROR "does not match lookup step" for some tiles #44

Open arlowhite opened 2 days ago

arlowhite commented 2 days ago

With the default criteria params in the app, some tiles have this error:

ERROR

http://localhost:8000/tile/10/932/564?region=Cairns-Cooktown&rtype=slopes&Depth=-10%3A0&Slope=0%3A45&Turbidity=0%3A60&WavesHs=0%3A1&WavesTp=0%3A6

┌ Error: ERROR:
│   exception =
│    ArgumentError: lookup step -9.11151611184128e-5 does not match lookup step 9.111516111914852e-5
│    Stacktrace:
│      [1] _steperror(values::LinRange{Float64, Int64}, span::DimensionalData.Dimensions.Lookups.Regular{Float64})
│        @ DimensionalData.Dimensions C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:149
│      [2] _format
│        @ C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:115 [inlined]
│      [3] format
│        @ C:\Users\awhite\.julia\packages\Rasters\0qvMe\src\lookup.jl:25 [inlined]
│      [4] format
│        @ C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:53 [inlined]
│      [5] _format
│        @ C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:47 [inlined]
│      [6] map
│        @ .\tuple.jl:383 [inlined]
│      [7] format(dims::Tuple{DimensionalData.Dimensions.X{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.X{Colon}}}, DimensionalData.Dimensions.Y{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ReverseOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.Y{Colon}}}}, axes::Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}})
│        @ DimensionalData.Dimensions C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:38
│      [8] format
│        @ C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:35 [inlined]
│      [9] copy(bc::Base.Broadcast.Broadcasted{DimensionalData.DimensionalStyle{Base.Broadcast.DefaultArrayStyle{2}}, Tuple{DimensionalData.Dimensions.DimUnitRange{Int64, Base.OneTo{Int64}, DimensionalData.Dimensions.X{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.X{Colon}}}}, DimensionalData.Dimensions.DimUnitRange{Int64, Base.OneTo{Int64}, DimensionalData.Dimensions.Y{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ReverseOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.Y{Colon}}}}}, typeof(convert), Tuple{Base.RefValue{Type{UInt8}}, Rasters.Raster{Bool, 2, Tuple{DimensionalData.Dimensions.X{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.X{Colon}}}, DimensionalData.Dimensions.Y{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ReverseOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.Y{Colon}}}}, Tuple{}, SubArray{Bool, 2, BitMatrix, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}, Symbol, DimensionalData.Dimensions.Lookups.Metadata{Rasters.GDALsource, Dict{String, Any}}, Bool}}})
│        @ DimensionalData C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\array\broadcast.jl:79
│     [10] materialize(bc::Base.Broadcast.Broadcasted{DimensionalData.DimensionalStyle{Base.Broadcast.DefaultArrayStyle{2}}, Nothing, typeof(convert), Tuple{Base.RefValue{Type{UInt8}}, Rasters.Raster{Bool, 2, Tuple{DimensionalData.Dimensions.X{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.X{Colon}}}, DimensionalData.Dimensions.Y{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ReverseOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.Y{Colon}}}}, Tuple{}, SubArray{Bool, 2, BitMatrix, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}, Symbol, DimensionalData.Dimensions.Lookups.Metadata{Rasters.GDALsource, Dict{String, Any}}, Bool}}})
│        @ Base.Broadcast .\broadcast.jl:867
│     [11] threshold_mask(reg_criteria::RegionalCriteria{DataFrames.DataFrame}, rtype::Symbol, crit_map::Vector{ReefGuideAPI.CriteriaBounds{Function}}, lons::Tuple{Float64, Float64}, lats::Tuple{Float64, Float64})
│        @ ReefGuideAPI C:\Users\awhite\code\ReefGuideAPI.jl\src\criteria_assessment\query_thresholds.jl:288
│     [12] (::ReefGuideAPI.var"#15#18"{Dict{String, Any}, OrderedCollections.OrderedDict{String, Union{DataFrames.DataFrame, Dict, RegionalCriteria}}})(req::HTTP.Messages.Request, z::Int64, x::Int64, y::Int64)
│        @ ReefGuideAPI C:\Users\awhite\code\ReefGuideAPI.jl\src\criteria_assessment\tiles.jl:193
│     [13] #5
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\handlers.jl:36 [inlined]
│     [14] #14#15
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\handlers.jl:54 [inlined]
│     [15] #14
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\handlers.jl:53 [inlined]
│     [16] (::Oxygen.Core.var"#53#55"{ReefGuideAPI.var"#15#18"{Dict{String, Any}, OrderedCollections.OrderedDict{String, Union{DataFrames.DataFrame, Dict, RegionalCriteria}}}, @NamedTuple{info::@NamedTuple{name::Symbol, args::Vector{Oxygen.Core.Types.Param}, kwargs::Vector{Oxygen.Core.Types.Param}, sig::Vector{Oxygen.Core.Types.Param}, sig_map::Dict{Symbol, Oxygen.Core.Types.Param}}, pathparams::Vector{Any}, pathnames::Vector{Symbol}, queryparams::Vector{Any}, querynames::Vector{Symbol}, headers::Vector{Any}, headernames::Vector{Symbol}, bodyargs::Vector{Any}, bodynames::Vector{Symbol}}, Oxygen.Core.Handlers.var"#14#16"{Oxygen.Core.Handlers.var"#14#15#17"{Oxygen.Core.Handlers.var"#5#11"}}})(req::HTTP.Messages.Request)
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:674
│     [17] (::HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing})(req::HTTP.Messages.Request)
│        @ HTTP.Handlers C:\Users\awhite\.julia\packages\HTTP\sJD5V\src\Handlers.jl:439
│     [18] (::Oxygen.Core.var"#36#39"{HTTP.Messages.Request, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}})()
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:406
│     [19] handlerequest(getresponse::Oxygen.Core.var"#36#39"{HTTP.Messages.Request, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}}, catch_errors::Bool; show_errors::Bool)
│        @ Oxygen.Core.Util C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\utilities\misc.jl:35
│     [20] handlerequest
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\utilities\misc.jl:30 [inlined]
│     [21] #35
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:405 [inlined]
│     [22] (::ReefGuideAPI.var"#79#80"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}})(req::HTTP.Messages.Request)
│        @ ReefGuideAPI C:\Users\awhite\code\ReefGuideAPI.jl\src\Middleware.jl:21
│     [23] (::Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}})(req::HTTP.Messages.Request)
│        @ Oxygen.Core.Middleware C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\middleware.jl:56
│     [24] (::Oxygen.Core.var"#42#46"{HTTP.Messages.Request, Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service})()
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:420
│     [25] handlerequest(getresponse::Oxygen.Core.var"#42#46"{HTTP.Messages.Request, Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service}, catch_errors::Bool; show_errors::Bool)
│        @ Oxygen.Core.Util C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\utilities\misc.jl:35
│     [26] handlerequest
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\utilities\misc.jl:30 [inlined]
│     [27] #41
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:417 [inlined]
│     [28] (::Oxygen.Core.var"#30#32"{Oxygen.Core.var"#41#45"{Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, String})(req::HTTP.Messages.Request)
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:390
│     [29] #13
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:246 [inlined]
│     [30] (::HTTP.Handlers.var"#1#2"{Oxygen.Core.var"#13#15"{Oxygen.Core.var"#30#32"{Oxygen.Core.var"#41#45"{Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, String}, Sockets.IPv4, HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.Connections.Connection{Sockets.TCPSocket}}}})(stream::HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.Connections.Connection{Sockets.TCPSocket}})
│        @ HTTP.Handlers C:\Users\awhite\.julia\packages\HTTP\sJD5V\src\Handlers.jl:58
│     [31] #16
│        @ C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:263 [inlined]
│     [32] (::Oxygen.Core.var"#20#23"{HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.Connections.Connection{Sockets.TCPSocket}}, Oxygen.Core.var"#16#17"{Oxygen.Core.var"#30#32"{Oxygen.Core.var"#41#45"{Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, String}}})()
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\core.jl:277
└ @ Oxygen.Core.Util C:\Users\awhite\.julia\packages\Oxygen\ObBBn\src\utilities\misc.jl:38

No Error

same criteria, but no error http://localhost:8000/tile/10/927/560?region=Cairns-Cooktown&rtype=slopes&Depth=-10%3A0&Slope=0%3A45&Turbidity=0%3A60&WavesHs=0%3A1&WavesTp=0%3A6

ConnectedSystems commented 2 days ago

In attempting to recreate this bug, I found another bug to do with the caching again (addressed in #45).

Unfortunately, after this issue is addressed, I cannot recreate the reported issue. The provided URL said to cause the issue works (albeit returns a blank tile) when running the server in both debug and "normal" mode.

The strange thing for me is that the bug fixed in #45 should only be hit when the debug flag in .config.toml is set to true. In regular production mode, the server would use the defined cache directory.

Did the datasets change recently? Am I lagging behind in that respect?

arlowhite commented 1 day ago

I'm still seeing this. http://localhost:8000/tile/8/230/138?region=Townsville-Whitsunday&rtype=slopes&Depth=-10%3A0&Slope=0%3A45&Turbidity=0%3A60&WavesHs=0%3A1&WavesTp=0%3A6

┌ Error: ERROR:
│   exception =
│    ArgumentError: lookup step -9.358646348680964e-5 does not match lookup step 9.358646348545108e-5
│    Stacktrace:
│      [1] _steperror(values::LinRange{Float64, Int64}, span::DimensionalData.Dimensions.Lookups.Regular{Float64})
│        @ DimensionalData.Dimensions C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:149
│      [2] _format
│        @ C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:115 [inlined]
│      [3] format
│        @ C:\Users\awhite\.julia\packages\Rasters\0qvMe\src\lookup.jl:25 [inlined]
│      [4] format
│        @ C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:53 [inlined]
│      [5] _format
│        @ C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:47 [inlined]
│      [6] map
│        @ .\tuple.jl:383 [inlined]
│      [7] format(dims::Tuple{DimensionalData.Dimensions.X{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.X{Colon}}}, DimensionalData.Dimensions.Y{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ReverseOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.Y{Colon}}}}, axes::Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}})
│        @ DimensionalData.Dimensions C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:38
│      [8] format
│        @ C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\Dimensions\format.jl:35 [inlined]
│      [9] copy(bc::Base.Broadcast.Broadcasted{DimensionalData.DimensionalStyle{Base.Broadcast.DefaultArrayStyle{2}}, Tuple{DimensionalData.Dimensions.DimUnitRange{Int64, Base.OneTo{Int64}, DimensionalData.Dimensions.X{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.X{Colon}}}}, DimensionalData.Dimensions.DimUnitRange{Int64, Base.OneTo{Int64}, DimensionalData.Dimensions.Y{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ReverseOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.Y{Colon}}}}}, typeof(convert), Tuple{Base.RefValue{Type{UInt8}}, Rasters.Raster{Bool, 2, Tuple{DimensionalData.Dimensions.X{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.X{Colon}}}, DimensionalData.Dimensions.Y{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ReverseOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.Y{Colon}}}}, Tuple{}, SubArray{Bool, 2, BitMatrix, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}, Symbol, DimensionalData.Dimensions.Lookups.Metadata{Rasters.GDALsource, Dict{String, Any}}, Bool}}})
│        @ DimensionalData C:\Users\awhite\.julia\packages\DimensionalData\hhCBb\src\array\broadcast.jl:79
│     [10] materialize(bc::Base.Broadcast.Broadcasted{DimensionalData.DimensionalStyle{Base.Broadcast.DefaultArrayStyle{2}}, Nothing, typeof(convert), Tuple{Base.RefValue{Type{UInt8}}, Rasters.Raster{Bool, 2, Tuple{DimensionalData.Dimensions.X{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ForwardOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.X{Colon}}}, DimensionalData.Dimensions.Y{Rasters.Projected{Float64, LinRange{Float64, Int64}, DimensionalData.Dimensions.Lookups.ReverseOrdered, DimensionalData.Dimensions.Lookups.Regular{Float64}, DimensionalData.Dimensions.Lookups.Intervals{DimensionalData.Dimensions.Lookups.Start}, DimensionalData.Dimensions.Lookups.NoMetadata, GeoFormatTypes.WellKnownText{GeoFormatTypes.CRS}, Nothing, DimensionalData.Dimensions.Y{Colon}}}}, Tuple{}, SubArray{Bool, 2, BitMatrix, Tuple{UnitRange{Int64}, UnitRange{Int64}}, false}, Symbol, DimensionalData.Dimensions.Lookups.Metadata{Rasters.GDALsource, Dict{String, Any}}, Bool}}})
│        @ Base.Broadcast .\broadcast.jl:867
│     [11] threshold_mask(reg_criteria::RegionalCriteria{DataFrames.DataFrame}, rtype::Symbol, crit_map::Vector{ReefGuideAPI.CriteriaBounds{Function}}, lons::Tuple{Float64, Float64}, lats::Tuple{Float64, Float64})
│        @ ReefGuideAPI C:\Users\awhite\code\ReefGuideAPI.jl\src\criteria_assessment\query_thresholds.jl:288
│     [12] (::ReefGuideAPI.var"#15#18"{Dict{String, Any}, OrderedCollections.OrderedDict{String, Union{DataFrames.DataFrame, Dict, RegionalCriteria}}})(req::HTTP.Messages.Request, z::Int64, x::Int64, y::Int64)
│        @ ReefGuideAPI C:\Users\awhite\code\ReefGuideAPI.jl\src\criteria_assessment\tiles.jl:193
│     [13] #5
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\handlers.jl:36 [inlined]
│     [14] #14#15
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\handlers.jl:54 [inlined]
│     [15] #14
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\handlers.jl:53 [inlined]
│     [16] (::Oxygen.Core.var"#53#55"{ReefGuideAPI.var"#15#18"{Dict{String, Any}, OrderedCollections.OrderedDict{String, Union{DataFrames.DataFrame, Dict, RegionalCriteria}}}, @NamedTuple{info::@NamedTuple{name::Symbol, args::Vector{Oxygen.Core.Types.Param}, kwargs::Vector{Oxygen.Core.Types.Param}, sig::Vector{Oxygen.Core.Types.Param}, sig_map::Dict{Symbol, Oxygen.Core.Types.Param}}, pathparams::Vector{Any}, pathnames::Vector{Symbol}, queryparams::Vector{Any}, querynames::Vector{Symbol}, headers::Vector{Any}, headernames::Vector{Symbol}, bodyargs::Vector{Any}, bodynames::Vector{Symbol}}, Oxygen.Core.Handlers.var"#14#16"{Oxygen.Core.Handlers.var"#14#15#17"{Oxygen.Core.Handlers.var"#5#11"}}})(req::HTTP.Messages.Request)
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:682
│     [17] (::HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing})(req::HTTP.Messages.Request)
│        @ HTTP.Handlers C:\Users\awhite\.julia\packages\HTTP\sJD5V\src\Handlers.jl:439
│     [18] (::Oxygen.Core.var"#36#39"{HTTP.Messages.Request, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}})()
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:414
│     [19] handlerequest(getresponse::Oxygen.Core.var"#36#39"{HTTP.Messages.Request, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}}, catch_errors::Bool; show_errors::Bool)
│        @ Oxygen.Core.Util C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\utilities\misc.jl:35
│     [20] handlerequest
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\utilities\misc.jl:30 [inlined]
│     [21] #35
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:413 [inlined]
│     [22] (::ReefGuideAPI.var"#79#80"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}})(req::HTTP.Messages.Request)
│        @ ReefGuideAPI C:\Users\awhite\code\ReefGuideAPI.jl\src\Middleware.jl:21
│     [23] (::Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}})(req::HTTP.Messages.Request)
│        @ Oxygen.Core.Middleware C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\middleware.jl:56
│     [24] (::Oxygen.Core.var"#42#46"{HTTP.Messages.Request, Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service})()
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:428
│     [25] handlerequest(getresponse::Oxygen.Core.var"#42#46"{HTTP.Messages.Request, Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service}, catch_errors::Bool; show_errors::Bool)
│        @ Oxygen.Core.Util C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\utilities\misc.jl:35
│     [26] handlerequest
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\utilities\misc.jl:30 [inlined]
│     [27] #41
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:425 [inlined]
│     [28] (::Oxygen.Core.var"#30#32"{Oxygen.Core.var"#41#45"{Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, String})(req::HTTP.Messages.Request)
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:398
│     [29] #13
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:247 [inlined]
│     [30] (::HTTP.Handlers.var"#1#2"{Oxygen.Core.var"#13#15"{Oxygen.Core.var"#30#32"{Oxygen.Core.var"#41#45"{Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, String}, Sockets.IPv4, HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.Connections.Connection{Sockets.TCPSocket}}}})(stream::HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.Connections.Connection{Sockets.TCPSocket}})
│        @ HTTP.Handlers C:\Users\awhite\.julia\packages\HTTP\sJD5V\src\Handlers.jl:58
│     [31] #16
│        @ C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:264 [inlined]
│     [32] (::Oxygen.Core.var"#20#23"{HTTP.Streams.Stream{HTTP.Messages.Request, HTTP.Connections.Connection{Sockets.TCPSocket}}, Oxygen.Core.var"#16#17"{Oxygen.Core.var"#30#32"{Oxygen.Core.var"#41#45"{Oxygen.Core.Middleware.var"#2#5"{Oxygen.Core.var"#35#38"{HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, Bool, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, ReentrantLock, Vector{typeof(ReefGuideAPI.CorsMiddleware)}, Dict{String, Tuple}, Dict{String, Function}}, Oxygen.Core.AppContext.Service, Bool}, HTTP.Handlers.Router{typeof(HTTP.Handlers.default404), typeof(HTTP.Handlers.default405), Nothing}, String}}})()
│        @ Oxygen.Core C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\core.jl:284
└ @ Oxygen.Core.Util C:\Users\awhite\.julia\packages\Oxygen\XYPmN\src\utilities\misc.jl:38