Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andelf/rust-postgis
postgis helper library.
https://github.com/andelf/rust-postgis
Last synced: 6 days ago
JSON representation
postgis helper library.
- Host: GitHub
- URL: https://github.com/andelf/rust-postgis
- Owner: andelf
- License: mit
- Created: 2015-05-25T04:02:42.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2022-05-02T00:52:22.000Z (over 2 years ago)
- Last Synced: 2024-10-27T01:49:41.367Z (24 days ago)
- Language: Rust
- Size: 199 KB
- Stars: 52
- Watchers: 10
- Forks: 23
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
rust-postgis
============[![Build Status](https://travis-ci.org/andelf/rust-postgis.svg?branch=master)](https://travis-ci.org/andelf/rust-postgis)
[![Crates.io](https://meritbadge.herokuapp.com/postgis)](https://crates.io/crates/postgis)[Documentation](https://docs.rs/postgis/)
An extension to rust-postgres, adds support for PostGIS.
- PostGIS type helper
- GCJ02 support (used offically in Mainland China)
- Tiny WKB (TWKB) support## 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 last_stop = route.points().last().unwrap();
let _ = client.execute("INSERT INTO stops (stop) VALUES ($1)", &[&last_stop]);
}
}
```Handling NULL values:
```rust
let route = row.try_get::<_, Option>("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:
* `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 ST_AsTWKB(route) FROM busline", &[]).unwrap() {
let route: twkb::LineString = row.get(0);
let last_stop = route.points().last().unwrap();
let _ = conn.execute("INSERT INTO stops (stop) VALUES ($1)", &[&last_stop.as_ewkb()]);
}
```## 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