Skip to content

Commit fe28197

Browse files
authored
Add support for OFSTJSON when fetching fields (#342)
1 parent e02d964 commit fe28197

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/ogr/feature.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,7 @@ const _FETCHFIELD = Dict{Union{OGRFieldType,OGRFieldSubType},Function}(
515515
OFSTBoolean => asbool,
516516
OFSTInt16 => asint16,
517517
OFSTFloat32 => assingle,
518+
OFSTJSON => asstring,
518519
)
519520

520521
"""

test/test_feature.jl

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,10 @@ end
244244
AG.setsubtype!(fielddefn, AG.OFSTFloat32)
245245
return AG.addfielddefn!(layer, fielddefn)
246246
end
247+
AG.createfielddefn("jsonsubfield", AG.OFTString) do fielddefn
248+
AG.setsubtype!(fielddefn, AG.OFSTJSON)
249+
return AG.addfielddefn!(layer, fielddefn)
250+
end
247251
AG.createfielddefn("uint1616subfield", AG.OFTInteger) do fielddefn
248252
return AG.addfielddefn!(layer, fielddefn)
249253
end
@@ -255,6 +259,7 @@ end
255259
return AG.addfielddefn!(layer, fielddefn)
256260
end
257261
AG.createfeature(layer) do feature
262+
geojsonstring = "{ \"type\": \"Polygon\", \"coordinates\": [ [ [ 4, 44 ], [ 5, 44 ], [ 5, 45 ], [ 4, 45 ], [ 4, 44 ] ] ] }"
258263
AG.setfield!(feature, 0, Int64(1))
259264
AG.setfield!(feature, 1, Float64(1.0))
260265
AG.setfield!(feature, 2, Int32[1, 2])
@@ -270,9 +275,10 @@ end
270275
AG.setfield!(feature, 12, Int8(1))
271276
AG.setfield!(feature, 13, Float32(1.0))
272277
AG.setfield!(feature, 14, Float16(1.0))
273-
AG.setfield!(feature, 15, UInt16(1.0))
274-
AG.setfield!(feature, 16, UInt32(1.0))
275-
AG.setfield!(feature, 17, EnumValue)
278+
AG.setfield!(feature, 15, geojsonstring)
279+
AG.setfield!(feature, 16, UInt16(1.0))
280+
AG.setfield!(feature, 17, UInt32(1.0))
281+
AG.setfield!(feature, 18, EnumValue)
276282
for i in 1:AG.nfield(feature)
277283
@test !AG.isfieldnull(feature, i - 1)
278284
@test AG.isfieldsetandnotnull(feature, i - 1)
@@ -289,9 +295,10 @@ end
289295
@test AG.getfield(feature, 12) === Int16(1) # Widened from Int8
290296
@test AG.getfield(feature, 13) === Float32(1.0)
291297
@test AG.getfield(feature, 14) === Float32(1.0) # Widened from Float16
292-
@test AG.getfield(feature, 15) === Int32(1) # Widened from UInt16
293-
@test AG.getfield(feature, 16) === Int64(1) # Widened from UInt32
294-
@test AG.getfield(feature, 17) === false # Enum is lost
298+
@test AG.getfield(feature, 15) === geojsonstring
299+
@test AG.getfield(feature, 16) === Int32(1) # Widened from UInt16
300+
@test AG.getfield(feature, 17) === Int64(1) # Widened from UInt32
301+
@test AG.getfield(feature, 18) === false # Enum is lost
295302

296303
AG.addfeature(layer) do newfeature
297304
AG.setfrom!(newfeature, feature)

0 commit comments

Comments
 (0)