#duck-db #postgis #geospatial #data-transformation #load-file #process-file

bin+lib duckdb-postgis

A library for transforming geospatial data using DuckDB and ingesting it into a PostGIS database

4 releases

0.1.5 Oct 22, 2024
0.1.4 Oct 12, 2024
0.1.3 Oct 12, 2024
0.1.2 Oct 8, 2024

#535 in Database interfaces

29 downloads per month

MIT license

3MB
294 lines

DuckDB Rust lib for writing geospatial data to Postgis

Crates.io

Current v0.1.5 release notes

This Rust library does the following things:

  • Reads in a path for a geospatial data file (Geopackage, Shapefile, etc)
  • Reads in a table name for the PostGIS database
  • Loads this file into DuckDB
  • Determines the schema and current CRS of the data - returns both
  • Performs CRS transformation on the data if required - ensuring the CRS is ESPG:4326
  • Loads the data into a PostGIS table with a correctly defined geometry column

Improvements for release 0.1.6:

  • Handle raster data file formats
  • Discard rows where there may be errors in the geometry column / ensure the programme doesn't crash when a geometry error is encountered - skip over it and log it instead

Example usage

mod duckdb_load;
use duckdb_load::launch_process_file;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    launch_process_file(
        "test_files/hotosm_twn_populated_places_points_geojson.geojson",
        "test-table",
        "postgresql://admin:password@localhost:5432/gridwalk",
        "test-schema",
    )?;
    Ok(())
}

Dependencies

~23–32MB
~375K SLoC