18 个版本
0.9.0 | 2021年9月23日 |
---|---|
0.8.0 | 2021年2月7日 |
0.7.0 | 2020年3月25日 |
0.6.0 | 2018年3月17日 |
0.1.6 | 2015年6月13日 |
#171 在 数据库接口
20,977 每月下载量
在 11 个 Crates 中使用 (10 个直接使用)
155KB
3.5K SLoC
rust-postgis
rust-postgres 的扩展,增加了对 PostGIS 的支持。
- PostGIS 类型辅助工具
- 支持 GCJ02 (在中国大陆官方使用)
- 支持 Tiny WKB (TWKB)
使用方法
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]);
}
}
处理 NULL 值
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) }
}
将其他几何类型写入 PostGIS
rust-postgis 支持将以下 traits 实现的几何类型写入 PostGIS
Point
,LineString
, ...AsEwkbPoint
,AsEwkbLineString
, ...
以 TWKB 实现为例。
读取 TWKB 几何体并将其写回 EWKB 的示例
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()]);
}
单元测试
默认情况下,需要 PostgreSQL 连接的单元测试被忽略。要运行数据库测试,请在环境变量 DBCONN
中声明连接。示例
export DBCONN=postgresql://user@localhost/testdb
使用以下命令运行测试
cargo test -- --ignored
依赖项
~3.5MB
~86K SLoC