Expand description
Postgis geometry type encoding for Diesel. Requires the with-postgis-diesel
feature.
§PostGIS usage example with Diesel
Declare model and select Ewkb types directly with GeoZero and Diesel
use diesel::pg::PgConnection;
use diesel::{Connection, QueryDsl, RunQueryDsl};
use diesel::prelude::*;
use geozero::wkb::Ewkb;
diesel::table! {
use diesel::sql_types::*;
use geozero::postgis::diesel::sql_types::*;
geometries (name) {
name -> Varchar,
geom -> Nullable<Geometry>,
}
}
#[derive(Queryable, Debug, Insertable)]
#[diesel(table_name = geometries)]
pub struct Geom {
pub name: String,
pub geom: Option<Ewkb<Vec<u8>>>,
}
pub fn establish_connection() -> PgConnection {
let database_url = std::env::var("DATABASE_URL").expect("Unable to find database url.");
PgConnection::establish(&database_url).unwrap()
}
let conn = &mut establish_connection();
let wkb = Ewkb(vec![
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 64, 0, 0, 0, 0, 0, 0, 52, 192,
]);
let insert_geometry = Geom {
name: "GeoZeroTest".to_string(),
geom: Some(wkb),
};
let inserted: Geom = diesel::insert_into(geometries::table)
.values(&insert_geometry)
.get_result(conn)
.expect("Unable to insert into postgis");
let geometry_vec: Vec<Geom> = geometries::dsl::geometries
.limit(10)
.load::<Geom>(conn)
.expect("Error loading geometries");