So we started working towards a GeoDataFrames.jl package, that would wrap an Array{Feature}
into a GeoTable
.
struct GeoTable{T<:Array}
features::T
end
and a GeoTableRow
would handle the individual features
struct GeoTableRow{T, Names, Types}
geometry::T
properties::NamedTuple{Names, Types}
end
Currently many packages define their own geometry types, and rely on the GeoInterface to exchange between different representations. GeometryBasics is an amazing API designed by Simon Danisch from the beginning to work well for geospatial applications. It has well defined standard geometry types along with a good metadata support that allows to represent both geometries and properties as features rows in a DataFrame
through StructArrays that supports the Tables interface .
With the above points in mind, we decided to go against the Python/R convention, i.e. having a separate GeoDataFrames
package since the same functionality can now be availed in individual packages via GeometryBasics
. We modified our plans to work with the GeometryBasics
API and migrate Shapefile.jl
from using its own geometry types to GeometryBasics types and do the same for GeoJSONTables.