# \[ANN\] GeoIO.jl - Load/save geospatial data in Julia

**URL:** <https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031>\
**Category:** Package Announcements\
**Tags:** package, announcement, data, geo, io\
**Created:** [November 10, 2023, 12:00pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031 "2023-11-10T12:00:35Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [November 10, 2023, 12:00pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/1 "2023-11-10T12:00:35Z")

</div>

[GeoIO.jl](https://github.com/JuliaEarth/GeoIO.jl) uses various backend packages spread across different Julia organizations to load a universal representation of geospatial data as discussed in the book [_Geospatial Data Science with Julia_](https://juliaearth.github.io/geospatial-data-science-with-julia).

The current list of supported formats can be obtained with:

```julia
julia> using GeoIO

julia> GeoIO.formats()
┌───────────┬───────────────┬───────────────┐
│ extension │ load │ save │
├───────────┼───────────────┼───────────────┤
│ .geojson │ GeoJSON.jl │ GeoJSON.jl │
│ .gpkg │ ArchGDAL.jl │ ArchGDAL.jl │
│ .gslib │ GslibIO.jl │ GslibIO.jl │
│ .jpeg │ ImageIO.jl │ ImageIO.jl │
│ .jpg │ ImageIO.jl │ ImageIO.jl │
│ .kml │ ArchGDAL.jl │ │
│ .parquet │ GeoParquet.jl │ GeoParquet.jl │
│ .ply │ PlyIO.jl │ │
│ .png │ ImageIO.jl │ ImageIO.jl │
│ .shp │ Shapefile.jl │ Shapefile.jl │
│ .tif │ ImageIO.jl │ ImageIO.jl │
│ .tiff │ ImageIO.jl │ ImageIO.jl │
│ .vtp │ ReadVTK.jl │ │
│ .vtu │ ReadVTK.jl │ │
└───────────┴───────────────┴───────────────┘

```

Many other formats are being added. If you would like to help, check the list [here](https://github.com/JuliaEarth/GeoIO.jl/issues/20).

If you are good at reducing pre-compilation time of Julia packages, we highly appreciate your help [here](https://github.com/JuliaEarth/GeoIO.jl/issues/23).

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [November 13, 2023, 9:15pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/2 "2023-11-13T21:15:08Z")

</div>

# GeoIO.jl v1.4.0

Added support to load/save all non-parallel VTK formats with ReadVTK.jl and WriteVTK.jl: .vtu, .vtp, .vts, .vtr, .vti

Needs more testing, but the release is out.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [December 12, 2023, 8:44pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/3 "2023-12-12T20:44:53Z")

</div>

# GeoIO.jl v1.8.0

Added support to load/save STL files with triangle meshes and NetCDF and GRIB files with NCDatasets.jl and GRIBDatasets.jl

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [January 4, 2024, 11:16pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/4 "2024-01-04T23:16:05Z")

</div>

# GeoIO.jl v1.12

Added support to load/save OBJ, OFF and MSH files with unstructured meshes, and GeoTIFF with lazy transformed grids.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [July 2, 2024, 8:11pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/5 "2024-07-02T20:11:16Z")

</div>

# GeoIO.jl v1.14

GeoJSON files are now loaded with native coordinate reference system (CRS) from CoordRefSystems.jl:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/1/6/16af2199d8fdda6b83b687e9b8fe73ceefc71ad4.png)

Closer look:

![image](https://global.discourse-cdn.com/julialang/original/3X/6/7/67429d7031340402e46e3929baf148707a77410c.png)

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [July 10, 2024, 5:23pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/6 "2024-07-10T17:23:32Z")

</div>

# GeoIO.jl v1.15

Shapefiles are now loaded with native Julia CRS, assuming ESRI WKT or OGC WKT 2 string formats.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [July 26, 2024, 10:31pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/7 "2024-07-26T22:31:31Z")

</div>

# GeoIO.jl v1.16

The `fix` option in `GeoIO.load` was replaced by `repair` as explained in the new docstring. The option can be set to `false` if repairing geometries by default is not desired (e.g., large geotables).

All repairs are now implemented using `Repair` transforms from Meshes.jl

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [August 2, 2024, 10:07pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/8 "2024-08-02T22:07:39Z")

</div>

GeoTIFF files are now loaded with native Julia CRS, assuming a projected coordinate system (e.g., Mercator, UTM, etc.). Geographic coordinates are not supported yet.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [August 8, 2024, 2:09pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/9 "2024-08-08T14:09:34Z")

</div>

# GeoIO.jl v1.16.5

All GeoTIFF files are now loaded with native Julia CRS, including those with a geographic coordinate system.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [August 8, 2024, 10:03pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/10 "2024-08-08T22:03:58Z")

</div>

Cross-posting a concrete example:

> [@\[ANN\] GeoStats.jl - Geospatial Data Science and Geostatistical Modeling in Julia](https://discourse.julialang.org/t/ann-geostats-jl/101054/17):
>
> A few tweaks here and there, and we are now able to visualize moderately large “raster” data stored in GeoTIFF files with any CRS in native Julia. To illustrate the feature, consider the following example with data from the NaturalEarth project: using GeoStats using GeoIO import GLMakie as Mke # https://www.naturalearthdata.com/downloads/50m-raster-data/50m-gray-earth raster = GeoIO.load("GRAY\_50M\_SR\_OB.tif") |\> Coerce(Continuous) # upscale for 3D mesh visualization coarse = raster |\> Upsca…

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [August 13, 2024, 8:16pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/11 "2024-08-13T20:16:45Z")

</div>

# GeoIO.jl v1.17

New option `lenunit` to specify the unit of coordinates in file formats that don’t include units in their specs (e.g., obj, msh, off, stl)

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [September 25, 2024, 7:18pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/12 "2024-09-25T19:18:52Z")

</div>

# GeoIO.jl v1.18

The option `lenunit` is now available in all backends.

### Breaking

Predefined columns in specific backends are now lowercase.

Example: COLOR → color, DATA → data

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [September 30, 2024, 10:35pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/13 "2024-09-30T22:35:57Z")

</div>

GeoIO.jl v1.18.1

All file formats of the CommonDataModel.jl are now loaded with native Julia CRS. This includes the NetCDF format with CF conventions.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [November 1, 2024, 1:51pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/14 "2024-11-01T13:51:25Z")

</div>

# GeoIO.jl v1.19

GeoTIFF files are now loaded with native Julia code.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [March 13, 2026, 5:11pm UTC](https://discourse.julialang.org/t/ann-geoio-jl-load-save-geospatial-data-in-julia/106031/15 "2026-03-13T17:11:10Z")

</div>

## GeoIO.jl v1.22

The project reached a very important milestone:

 ![Screenshot_20260313_092612](https://global.discourse-cdn.com/julialang/original/3X/4/4/4463cd531402ba48b5e5d16f7daa2d30b0cef4fd.png)

We no longer depend on external libraries, and this solves a series of issues as reported in [Native support for GeoPackage file format · Issue #167 · JuliaEarth/GeoIO.jl · GitHub](https://github.com/JuliaEarth/GeoIO.jl/issues/167)
