diff --git a/src/io.jl b/src/io.jl index 68686eb..adce30a 100644 --- a/src/io.jl +++ b/src/io.jl @@ -74,6 +74,7 @@ function _lower(obj; geometrycolumn = first(GI.geometrycolumns(obj))) end elseif Tables.istable(obj) !(geometrycolumn isa Symbol) && throw(ArgumentError("GeoJSON.jl can only write a single geometry column which must be specified as a `Symbol`, but was passed `$(geometrycolumn)` instead.")) + geometrycolumn != :geometry && @warn "GeoJSON specification requires the geometry column to be named 'geometry'. The column '$(geometrycolumn)' will be written as 'geometry' in the output." geom_col_idx = Tables.columnindex(obj, geometrycolumn) # There is a strange bug where Tables.columnnames on some tables is empty, # so we use the schema instead diff --git a/test/runtests.jl b/test/runtests.jl index 36f58db..6eac346 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -399,6 +399,16 @@ include("geojson_samples.jl") @test t2_geojson.prop1 == getproperty.(t2, :prop1) @test t2_geojson.prop2 == getproperty.(t2, :prop2) + @testset "geometrycolumn warnings" begin + # Test warning is shown for non-geometry column + t_warn = [(somethingelse=(1.0, 2.0), prop1=1)] + @test_logs (:warn, r"GeoJSON specification requires.*geometry.*somethingelse.*") GeoJSON.write(t_warn; geometrycolumn = :somethingelse) + + # Test no warning for geometry column + t_no_warn = [(geometry=(1.0, 2.0), prop1=1)] + @test_logs GeoJSON.write(t_no_warn; geometrycolumn = :geometry) + end + @testset "Metadata" begin @test GI.DataAPI.metadatasupport(typeof(t2_geojson)) == (; read = true, write = false) @test GI.DataAPI.metadatakeys(t2_geojson) == ("GEOINTERFACE:geometrycolumns", "GEOINTERFACE:crs")