From dd38887fe94265985272dda0ec86ae1e0215ca40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlio=20Hoffimann?= Date: Thu, 30 Nov 2023 12:28:25 -0300 Subject: [PATCH] Add geometric transforms to extension --- ext/GeoTablesTableTransformsExt.jl | 29 ++++++++++++++++++++++++++++- test/geometric.jl | 10 ++++++++++ test/runtests.jl | 1 + 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 test/geometric.jl diff --git a/ext/GeoTablesTableTransformsExt.jl b/ext/GeoTablesTableTransformsExt.jl index 16b9c46..144c1ff 100644 --- a/ext/GeoTablesTableTransformsExt.jl +++ b/ext/GeoTablesTableTransformsExt.jl @@ -10,12 +10,19 @@ using TableTransforms import TableTransforms: divide, attach import TableTransforms: applymeta, revertmeta +import TableTransforms: apply, revert, reapply -# table traits +# ----------------------- +# TABLE TRANSFORM TRAITS +# ----------------------- divide(geotable::AbstractGeoTable) = values(geotable), domain(geotable) attach(table, dom::Domain) = georef(table, dom) +# ------------------- +# FEATURE TRANSFORMS +# ------------------- + # transforms that change the order or number of # rows in the table need a special treatment @@ -108,4 +115,24 @@ function revertmeta(::Sample, newdom::Domain, mcache) GeometrySet(ugeoms) end +# --------------------- +# GEOMETRIC TRANSFORMS +# --------------------- + +function apply(transform::GeometricTransform, geotable::AbstractGeoTable) + newdom, cache = apply(transform, domain(geotable)) + newdata = georef(values(geotable), newdom) + newdata, cache +end + +function revert(transform::GeometricTransform, newdata::AbstractGeoTable, cache) + dom = revert(transform, domain(newdata), cache) + georef(values(newdata), dom) +end + +function reapply(transform::GeometricTransform, geotable::AbstractGeoTable, cache) + newdom = reapply(transform, domain(geotable), cache) + georef(values(geotable), newdom) +end + end diff --git a/test/geometric.jl b/test/geometric.jl new file mode 100644 index 0000000..f8a45be --- /dev/null +++ b/test/geometric.jl @@ -0,0 +1,10 @@ +@testset "Geometric transforms" begin + d = georef((z=rand(100), w=rand(100))) + p = StdCoords() + n, c = apply(p, d) + dom = domain(n) + cen = centroid.(dom) + xs = first.(coordinates.(cen)) + @test dom isa CartesianGrid + @test all(x -> -0.5 ≤ x ≤ 0.5, xs) +end diff --git a/test/runtests.jl b/test/runtests.jl index b2117b3..e947d23 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -22,6 +22,7 @@ testfiles = [ "indices.jl", "operations.jl", "feature.jl", + "geometric.jl", "shows.jl" ]