@@ -14,17 +14,32 @@ function write(path, t; geocolumns=GeoInterface.geometrycolumns(t), crs=GeoInter
1414 dcrs = Dict (" crs" => GeoFormatTypes. val (jcrs))
1515 end
1616 ct = Tables. columntable (t)
17- colmetadata = Dict {Symbol,Vector{Pair{String,String}}} ()
17+ metadata = DataAPI. metadata (t)
18+ if ! isnothing (metadata)
19+ metadata = (k=> string (v) for (k,v) in pairs (metadata))
20+ end
21+ colmetadata = Dict {Symbol,Dict{String,String}} ()
22+ tcolmetadata = DataAPI. colmetadata (t)
23+ if ! isnothing (tcolmetadata)
24+ for (k, v) in pairs (tcolmetadata)
25+ colmetadata[k] = Dict (k=> string (v) for (k, v) in pairs (v))
26+ end
27+ end
1828 for column in geocolumns
1929 column in Tables. columnnames (t) || error (" Geometry column $column not found in table" )
2030 data = Tables. getcolumn (t, column)
2131 T = nonmissingtype (Tables. columntype (t, column))
2232 GeoInterface. isgeometry (T) || error (" Geometry in $column must support the GeoInterface" )
2333 ct = merge (ct, NamedTuple {(column,)} ((Wrapper .(Ref (encoding), data),)))
2434
25- colmetadata[column] = [" ARROW:extension:metadata" => JSON3. write (dcrs)]
35+ geometa = Dict (" ARROW:extension:metadata" => JSON3. write (dcrs))
36+ if haskey (colmetadata, column)
37+ merge! (colmetadata[column], geometa)
38+ else
39+ colmetadata[column] = geometa
40+ end
2641 end
27- Arrow. write (path, ct; colmetadata, kwargs... )
42+ Arrow. write (path, ct; metadata, colmetadata, kwargs... )
2843end
2944
3045"""
0 commit comments