Native support for GeoPackage file format
Issue
The GeoPackage file format was developed by OGC a while ago to store "vector" and "raster" data as SQLite containers. It is widely adopted in open datasets like GADM and GeoBR.
GeoIO.jl currently relies on the external GDAL library to load/save .gpkg files:
load
https://github.com/JuliaEarth/GeoIO.jl/blob/e2f1bc5e9d6b79f9ce5892b4e143fe2cbd260003/src/extra/gis.jl#L66-L69
save
https://github.com/JuliaEarth/GeoIO.jl/blob/e2f1bc5e9d6b79f9ce5892b4e143fe2cbd260003/src/extra/gis.jl#L53-L55
Given the numerous reports of GDAL build failures (at least one per year for the last 5 years):
- https://github.com/JuliaGeo/GDAL.jl/issues/191
- https://github.com/JuliaGeo/GDAL.jl/issues/179
- https://github.com/JuliaGeo/GDAL.jl/issues/174
- https://github.com/JuliaGeo/GDAL.jl/issues/173
- https://github.com/JuliaGeo/GDAL.jl/issues/158
- https://github.com/JuliaGeo/GDAL.jl/issues/151
- https://github.com/JuliaGeo/GDAL.jl/issues/130
- https://github.com/JuliaGeo/GDAL.jl/issues/126
- https://github.com/JuliaGeo/GDAL.jl/issues/113
- https://github.com/JuliaGeo/GDAL.jl/issues/101
we can't rely on it moving forward.
Bounty
We need a new extra/gpkg.jl implementation that handles GeoPackage "vector" tables in native Julia.
The load implementation should consist of SQLite.jl queries that convert
- the table of attributes stored in the database into a Tables.jl
table - the geometries (with CRS information) into a vector of geometries
geomsfrom Meshes.jl
followed by a geotable = georef(table, geoms) call to combine these two objects into a GeoTable.
The save implementation should do the reverse operation, i.e. it should save
- the
values(geotable)as a SQLite attribute table - the
domain(geotable)as SQLite geometries
in the final GeoPackage file.
A solution that
- implements the corresponding OGC GeoPackage specification
- can load/save all
*.gpkgfiles from GeoArtifacts.GADM - can load/save all
*.gpkgfiles from GeoArtifacts.GeoBR - adheres to our code style and passes our current tests
will get a /bounty $500.
Tips
- The GeoPackage guidance document contains useful information, including an implementation guide
- If you need any assistance, please feel free to ask questions in our Zulip channel
💎 $500 bounty • JuliaEarth
Steps to solve:
- Start working: Comment
/attempt #167with your implementation plan - Submit work: Create a pull request including
/claim #167in the PR body to claim the bounty - Receive payment: 100% of the bounty is received 2-5 days post-reward. Make sure you are eligible for payouts
❗ Important guidelines:
- If anything is unclear, ask for clarification here or in our Zulip channel
- Please read our GDSJL book if you need an overview of our ecosystem
- Make sure your PR follows the surrounding code style and is idiomatic
- Low quality AI PRs will not receive review and will be closed
Thank you for contributing to JuliaEarth/GeoIO.jl!
| Attempt | Started (UTC) | Solution | Actions |
|---|---|---|---|
| 🟢 @MAVRICK-1 | Sep 03, 2025, 04:24:58 PM | #172 | Reward |
I'd be happy to continue working with you @juliohm
So if GeoArtifacts provide gpkg, is there example user or package which produces GeoTables that need to be saved as gpkg.
Ie. Does anyone produce a GeoTable without reading it from a gpkg?
Maybe a better question would be: for the user of gpkg = save(geotable), where did they acquire the geotable information from?
Hi @Omar-Elrefaei , that is great to hear.
Answering your question: any GeoTable over a GeometrySet where the geometries are described in terms of 2D coordinates can be saved into gpkg. Like other GIS formats, the gpkg format also has some partial support for 3D coordinates.
Does that answer your question? A common thing to do in practice is load *.shp files and save into *.gpkg because the former has limitations, see http://switchfromshapefile.org
- To claim a bounty, you need to provide a short demo video of your changes in your pull request
- Do not ask to be assigned unless you've contributed before
Please ignore these bot messages. I need to find where I can configure them later.
Hi, @juliohm I'm planning to give this bounty a go since I have graduated recently. However, I'm from Mongolia and algora account doesn't support my country. So I don't know about how to get the bounty in an event of completion. Although I'm not an expert, I have some knowledge about GIS, Julia and Python. I'm able to commit lot of hours that's it.
@MendeBadra feel free to take a jab at it. I'm currently a bit occupied and I'm not fully sure when am I going to be able to work on it.
@MendeBadra it is unfortunate that Algora doesn't support Mongolia yet. Maybe try to contact the Algora team to see why that is the case and if there is any upcoming support.
Ok, I am going to attempt implementing it. I will try to contact Algora team.
Currently, I am not working on this issue. However, I am learning SQL at the moment. I might be little bit unqualified for this task.
/attempt #167
#174 Just pushing my work I have collected so far.
Not interested in cash reward, just want to contribute to simply be able to showcase accolades on my github profile
Definitely interested in future contributions, so please accept this as an entry contribution for future issues
@juliohm is this open ? i saw #177 . i can help to complete it
There is another ongoing PR. Let's wait a bit more before parallel attempts.
Em qua., 10 de set. de 2025, 22:32, Saheli Saha @.***> escreveu:
Sahelisaha04 left a comment (JuliaEarth/GeoIO.jl#167) https://github.com/JuliaEarth/GeoIO.jl/issues/167#issuecomment-3277253259
@juliohm https://github.com/juliohm is this open ? i saw #177 https://github.com/JuliaEarth/GeoIO.jl/pull/177 . i can help to complete it
— Reply to this email directly, view it on GitHub https://github.com/JuliaEarth/GeoIO.jl/issues/167#issuecomment-3277253259, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAZQW3LS5GO4I27V524MCNL3SDUMFAVCNFSM6AAAAAB6A7S3Z6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTENZXGI2TGMRVHE . You are receiving this because you were mentioned.Message ID: @.***>
@jph6366 finished the reader part of this issue in #188. We merged the PR today.
He already has an open PR for the writer in #182, which we will hopefully update and merge soon.
Thank you all for the comments and interest on this issue.