Skip to content

Commit 31cade4

Browse files
Fix _extent when called on an extent (#852)
* add a dispatch to _extent so it returns itself * Update src/methods/burning/extents.jl * Update src/methods/burning/extents.jl * test extent * uncomment a test that isn't broken anymore * use Rasters._extent Co-authored-by: Rafael Schouten <[email protected]> * forward keywords * make better use of _get_geometries * add a test for float32 * fix test --------- Co-authored-by: Rafael Schouten <[email protected]>
1 parent a2e2d46 commit 31cade4

File tree

3 files changed

+22
-25
lines changed

3 files changed

+22
-25
lines changed

src/methods/burning/extents.jl

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
const XYExtent = Extents.Extent{(:X,:Y),Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}}}
22

33
# Get the bounds of a geometry
4-
_extent(geom; kw...)::XYExtent = _extent(GI.trait(geom), geom; kw...)
5-
function _extent(::Nothing, data; geometrycolumn, kw...)::XYExtent
4+
function _extent(data; geometrycolumn=nothing, kw...)::XYExtent
65
geoms = _get_geometries(data, geometrycolumn)
7-
6+
_extent(GI.trait(geoms), geoms)
7+
end
8+
function _extent(::Nothing, geoms)::XYExtent
9+
# because geoms was returned from _get_geometries, it must be an iterable of valid geometries
810
g1 = first(geoms)
911
if GI.trait(g1) isa GI.PointTrait
1012
xs = extrema(p -> GI.x(p), geoms)
1113
ys = extrema(p -> GI.y(p), geoms)
1214
return _float64_xy_extent(Extents.Extent(X=xs, Y=ys))
1315
else
14-
ext = reduce(geoms; init=_extent(first(geoms))) do ext, geom
15-
Extents.union(ext, _extent(geom))
16+
ext = reduce(geoms; init=_extent(GI.trait(g1), g1)) do ext, geom
17+
Extents.union(ext, _extent(GI.trait(geom), geom))
1618
end
1719
return _float64_xy_extent(ext)
1820
end
@@ -33,23 +35,8 @@ function _extent(::GI.AbstractGeometryTrait, geom; kw...)::XYExtent
3335
return _float64_xy_extent(geomextent)
3436
end
3537
end
36-
_extent(::GI.AbstractFeatureTrait, feature; kw...)::XYExtent = _extent(GI.geometry(feature); kw...)
37-
function _extent(::GI.GeometryCollectionTrait, collection; kw...)::XYExtent
38-
geometries = GI.getgeom(collection)
39-
init = _float64_xy_extent(_extent(first(geometries)))
40-
ext = reduce(geometries; init) do acc, g
41-
Extents.union(acc, _extent(g))
42-
end
43-
return _float64_xy_extent(ext)
44-
end
45-
function _extent(::GI.AbstractFeatureCollectionTrait, features; kw...)::XYExtent
46-
features = GI.getfeature(features)
47-
init = _float64_xy_extent(_extent(first(features)))
48-
ext = reduce(features; init) do acc, f
49-
Extents.union(acc, _extent(f))
50-
end
51-
return _float64_xy_extent(ext)
52-
end
38+
39+
_extent(ext::Extent; kw...) = _float64_xy_extent(ext)
5340

5441
function _float64_xy_extent(ext::Extents.Extent)
5542
xbounds = map(Float64, ext.X)

test/methods.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,3 +762,15 @@ test = rebuild(ga; name = :test)
762762
@test_throws "strictly positive" Rasters.sample(StableRNG(123), test, 3, skipmissing = true, replace = false)
763763
@test_throws "Cannot draw" Rasters.sample(StableRNG(123), test, 5, replace = false)
764764
end
765+
766+
@testset "extent" begin
767+
ga = Raster(A, (X(1.0:1:2.0), Y(1.0:1:2.0)); missingval=missing)
768+
ext = extent(ga)
769+
@test ext === Extent(X=(1.0,2.0), Y=(1.0,2.0))
770+
@test Rasters._extent(ext) === ext
771+
772+
ga2 = Raster(A, (X(Float32.(1:2)), Y(Float32.(1:2))))
773+
ext2 = extent(ga2)
774+
@test ext2 === Extent(X=(1.0f0,2.0f0), Y=(1.0f0,2.0f0))
775+
@test Rasters._extent(ext2) === ext # currently this converts to float64!
776+
end

test/resample.jl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,7 @@ include(joinpath(dirname(pathof(Rasters)), "../test/test_utils.jl"))
6464
resampled = resample(cea; method)
6565
@test crs(cea) == crs(resampled)
6666
@test cea == resampled
67-
# There is some floating point error here after Rasters -> GDAL -> Rasterss...
68-
# Should we correct it by detecting almost identical extent and using the original?
69-
# @test_broken extent(cea) == extent(resampled)
67+
@test extent(cea) == extent(resampled)
7068
end
7169

7270
@testset "only `res` kw changes the array size predictably" begin

0 commit comments

Comments
 (0)