-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(sdt): keep integrating to occ interf
- Loading branch information
Showing
4 changed files
with
87 additions
and
92 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
import Base: getindex | ||
import Base: setindex! | ||
import SimpleSDMLayers: mask!, mask | ||
|
||
""" | ||
Base.getindex(p::T, occ::AbstractOccurrence) | ||
Extracts the value of a layer at a given position for a `AbstractOccurrence`. If the | ||
`AbstractOccurrence` has no latitude or longitude, this will return `nothing`. | ||
""" | ||
function Base.getindex(layer::SDMLayer, occ:T) where {T <: AbstractOccurrence} | ||
ismissing(place(occ)) && return nothing | ||
return layer[place(occ)...] | ||
end | ||
|
||
""" | ||
Base.setindex!(layer::SDMLayer, v, occ::T) where {T <: AbstractOccurrence} | ||
Changes the values of the cell including the point at the requested latitude and | ||
longitude. | ||
""" | ||
function Base.setindex!( | ||
layer::SDMLayer{T}, | ||
v::T, | ||
occ::O, | ||
) where {T, O <: AbstractOccurrence} | ||
ismissing(place(occ)) && return nothing | ||
return setindex!(layer, v, place(occ)...) | ||
end | ||
|
||
""" | ||
Base.getindex(layer::SDMLayer, occ::T) where {T <: AbstractOccurrenceCollection} | ||
Returns the values of a layer at all occurrences in a `AbstractOccurrenceCollection`. | ||
""" | ||
function Base.getindex(layer::SDMLayer, occ::T) where {T <: AbstractOccurrenceCollection} | ||
K = eltype(layer) | ||
return convert( | ||
Vector{K}, | ||
filter(!isnothing, [layer[o] for o in elements(occ)]), | ||
) | ||
end | ||
|
||
function SimpleSDMLayers.quantize( | ||
layer::SDMLayer, | ||
occ:T, | ||
) where {T <: AbstractOccurrenceCollection} | ||
ef = StatsBase.ecdf(layer[occ]) | ||
return ef.(layer) | ||
end | ||
|
||
function SimpleSDMLayers.mask( | ||
layer::SDMLayer, | ||
occ::T, | ||
) where {T <: AbstractOccurrenceCollection} | ||
out = zeros(layer, Bool) | ||
for record in elements(occ) | ||
out[record] = presence(occ) | ||
end | ||
return out | ||
end | ||
|
||
function SimpleSDMLayers.mask( | ||
layer::SDMLayer, | ||
occ::O, | ||
::Type{T}, | ||
) where {T <: Number, O <: AbstractOccurrenceCollection} | ||
out = zeros(layer, T) | ||
for record in elements(occ) | ||
out[record] += one(T) | ||
end | ||
return out | ||
end |