An extension to rust-postgres, adds support for PostGIS.
```rust use postgres::{Connection, TlsMode}; use postgis::ewkb; use postgis::LineString;
fn main() { // conn .... for row in &conn.query("SELECT * FROM busline", &[]).unwrap() { let route: ewkb::LineString = row.get("route"); let laststop = route.points().last().unwrap(); let _ = conn.execute("INSERT INTO stops (stop) VALUES ($1)", &[&laststop]); } } ```
Handling NULL values:
rust
let route = row.get_opt::<_, Option<ewkb::LineString>>("route");
match route.unwrap() {
Ok(Some(geom)) => { println!("{:?}", geom) }
Ok(None) => { /* Handle NULL value */ }
Err(err) => { println!("Error: {}", err) }
}
rust-postgis supports writing geometry types into PostGIS which implement the following traits:
Point
, LineString
, ...AsEwkbPoint
, AsEwkbLineString
, ...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 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