Guru is Brahmā(the creator of universe), Guru is Vishnu(the protector of universe),
Guru is Shiv(the destroyer of universe, infact Guru is Parbrahma(the source of energy),
and I bow to him, The Sadhguru(The Ultimate Pious Spiritual Guide)
As a शिष्य(student) I can't be thankful enough to my गुरु(mentor) Martijn Visser who mentored me on this project and for all the learning that I've done under him.
Packages like Shapefile/GeoJSON/ArchGDAL are main parsers for geospatial data into Julia. There has been a lot of discussion on having a tabular representation for geospatial data. R has sf
and Python has GeoPandas
. In Julia there has been interest in similar functionality for quite sometime now. Thanks to the Tables interface in Shapefile, GeoJSONTables and ArchGDAL we are getting closer.
This image of R's sf credits: Allison Horst
clearly depicts our vision of having special columns that hold geometry, tagged along with their properties in a DataFrame
.
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.