Skip to content

Commit 5a9c8cf

Browse files
fix Selectors for Projected lookups (#869)
* changes to selectindices * fix and text for `IntSelector{<:Tuple}` * fix for intselector of tuple take 2 * remove stray code in tests
1 parent 212db85 commit 5a9c8cf

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

src/lookup.jl

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -91,28 +91,25 @@ dim(lookup::Projected) = lookup.dim
9191

9292
@inline function LA.selectindices(l::Projected, sel::LA.Selector; kw...)
9393
selval = reproject(mappedcrs(l), crs(l), dim(l), val(sel))
94-
LA._selectindices(l, rebuild(sel; val=selval); kw...)
95-
end
96-
@inline function LA.selectindices(l::Projected, sel::LA.Selector{<:AbstractVector}; kw...)
97-
selval = reproject(mappedcrs(l), crs(l), dim(l), val(sel))
98-
LA._selectvec(l, rebuild(sel; val=selval); kw...)
99-
end
100-
@inline function LA.selectindices(l::Projected, sel::LA.IntSelector{<:Tuple}; kw...)
101-
selval = reproject(mappedcrs(l), crs(l), dim(l), val(sel))
102-
LA._selecttuple(l, rebuild(sel; val=selval); kw...)
94+
LA._selectindices(l, rebuild(sel, selval); kw...)
10395
end
96+
@inline LA.selectindices(l::Projected, sel::LA.Selector{<:AbstractVector}; kw...) =
97+
LA._selectvec(l, sel; kw...) # no reprojecting because _selectvec calls selectindices
98+
@inline LA.selectindices(l::Projected, sel::LA.IntSelector{<:Tuple}; kw...) =
99+
LA._selecttuple(l, sel; kw...)
104100
@inline LA.selectindices(l::Projected{<:Tuple}, sel::LA.IntSelector{<:Tuple}; kw...) = LA._selectindices(l, sel; kw...)
105101
@inline LA.selectindices(l::Projected{<:Tuple}, sel::LA.IntSelector{<:Tuple{<:Tuple,<:Tuple}}; kw...) =
106102
LA._selecttuple(l, sel; kw...)
107103

108104
function LA.selectindices(l::Projected, sel::Between{<:Tuple})
109105
selval = map(v -> reproject(mappedcrs(l), crs(l), dim(l), v), val(sel))
110-
LA.between(l, rebuild(sel; val=selval))
106+
LA.between(l, rebuild(sel, selval))
111107
end
112108
function LA.selectindices(l::Projected, sel::T) where T<:DD.IntervalSets.Interval
113109
left, right = map(v -> reproject(mappedcrs(l), crs(l), dim(l), v), (sel.left, sel.right))
114-
LA.between(l, T(left, right))
110+
LA.between(l, basetypeof(T)(left, right))
115111
end
112+
LA.selectindices(l::Projected, sel::Where) = LA.selectindices(convertlookup(Mapped, l), sel)
116113

117114
"""
118115
Mapped <: AbstractProjected

test/reproject.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,19 @@ end
8888
@test index(Aconv) == (index(convertedlon), index(convertedlat))
8989
@test val.(span(Aconv)) == val.(span.((convertedlon, convertedlat)))
9090
end
91+
92+
@testset "selectors on projected dims" begin
93+
x = X(Projected(0:1e5:2e5;
94+
order = ForwardOrdered(), crs=EPSG(3857), mappedcrs = EPSG(4326),
95+
sampling=Intervals(Start()), span = Regular(1e5)
96+
))
97+
A = Raster(rand(x))
98+
@test A[X = 2:3] ==
99+
A[X = Near([1, 2])] ==
100+
A[X = Near((1, 2))] ==
101+
A[X = 0.5 .. 3] ==
102+
A[X = Contains([1,2])] ==
103+
A[X = Between(0.5,3)] ==
104+
A[X = Where(x -> 3 > x > 0.5)] ==
105+
A[X = Not(At(0))]
106+
end

0 commit comments

Comments
 (0)