rust-postgis

Build Status Crates.io

Documentation

An extension to rust-postgres, adds support for PostGIS.

Usage

```rust use postgres::{Client, NoTls}; use postgis::{ewkb, LineString};

fn main() { let mut client = Client::connect("host=localhost user=postgres", NoTls).unwrap(); for row in &client.query("SELECT * FROM busline", &[]).unwrap() { let route: ewkb::LineString = row.get("route"); let laststop = route.points().last().unwrap(); let _ = client.execute("INSERT INTO stops (stop) VALUES ($1)", &[&laststop]); } } ```

Handling NULL values: rust let route = row.try_get::<_, Option<ewkb::LineString>>("route"); match route { Ok(Some(geom)) => { println!("{:?}", geom) } Ok(None) => { /* Handle NULL value */ } Err(err) => { println!("Error: {}", err) } }

Writing other geometry types into PostGIS

rust-postgis supports writing geometry types into PostGIS which implement the following traits:

See the TWKB implementation as an example.

An example for reading a TWKB geometry and writing it back as EWKB:

```rust use postgis::twkb; use postgis::LineString;

for row in &conn.query("SELECT STAsTWKB(route) FROM busline", &[]).unwrap() { let route: twkb::LineString = row.get(0); let laststop = route.points().last().unwrap(); let _ = conn.execute("INSERT INTO stops (stop) VALUES ($1)", &[&laststop.asewkb()]); } ```

Unit tests

Unit tests which need a PostgreSQL connection are ignored by default. To run the database tests, declare the connection in an environment variable DBCONN. Example:

export DBCONN=postgresql://user@localhost/testdb

Run the tests with

cargo test -- --ignored