use gdal::{errors, vector::Geometry};
use gdal_sys::OGRwkbGeometryType;
fn main() -> errors::Result<()> {
let mut point = Geometry::empty(OGRwkbGeometryType::wkbPoint)?;
point.add_point_2d((1198054.34, 648493.09));
println!("{}", point.wkt()?);
// POINT (1198054.34 648493.09)
Ok(())
}
use gdal::{errors, vector::Geometry};
use gdal_sys::OGRwkbGeometryType;
fn main() -> errors::Result<()> {
let mut line_string = Geometry::empty(OGRwkbGeometryType::wkbLineString)?;
line_string.add_point_2d((1116651.439379124, 637392.6969887456));
line_string.add_point_2d((1188804.0108498496, 652655.7409537067));
line_string.add_point_2d((1226730.3625203592, 634155.0816022386));
line_string.add_point_2d((1281307.30760719, 636467.6640211721));
println!("{}", line_string.wkt()?);
Ok(())
}
use gdal::{errors, vector::Geometry};
use gdal_sys::OGRwkbGeometryType;
fn main() -> errors::Result<()> {
let mut ring = Geometry::empty(OGRwkbGeometryType::wkbLinearRing)?;
ring.add_point_2d((1179091.1646903288, 712782.8838459781));
ring.add_point_2d((1161053.0218226474, 667456.2684348812));
ring.add_point_2d((1214704.933941905, 641092.8288590391));
ring.add_point_2d((1228580.428455506, 682719.3123998424));
ring.add_point_2d((1218405.0658121984, 721108.1805541387));
ring.add_point_2d((1179091.1646903288, 712782.8838459781));
let mut poly = Geometry::empty(OGRwkbGeometryType::wkbPolygon)?;
poly.add_geometry(ring)?;
println!("{}", poly.wkt()?);
Ok(())
}
use gdal::{errors, vector::Geometry};
use gdal_sys::OGRwkbGeometryType;
fn main() -> errors::Result<()> {
let mut outer_ring = Geometry::empty(OGRwkbGeometryType::wkbLinearRing)?;
outer_ring.add_point_2d((1154115.274565847, 686419.4442701361));
outer_ring.add_point_2d((1154115.274565847, 653118.2574374934));
outer_ring.add_point_2d((1165678.1866605144, 653118.2574374934));
outer_ring.add_point_2d((1165678.1866605144, 686419.4442701361));
outer_ring.add_point_2d((1154115.274565847, 686419.4442701361));
let mut inner_ring = Geometry::empty(OGRwkbGeometryType::wkbLinearRing)?;
inner_ring.add_point_2d((1149490.1097279799, 691044.6091080031));
inner_ring.add_point_2d((1149490.1097279799, 648030.5761158396));
inner_ring.add_point_2d((1191579.1097525698, 648030.5761158396));
inner_ring.add_point_2d((1191579.1097525698, 691044.6091080031));
inner_ring.add_point_2d((1149490.1097279799, 691044.6091080031));
let mut poly = Geometry::empty(OGRwkbGeometryType::wkbPolygon)?;
poly.add_geometry(outer_ring)?;
poly.add_geometry(inner_ring)?;
println!("{}", poly.wkt()?);
Ok(())
}
use gdal::{errors, vector::Geometry};
use gdal_sys::OGRwkbGeometryType;
fn main() -> errors::Result<()> {
let mut multi_point = Geometry::empty(OGRwkbGeometryType::wkbMultiPoint)?;
let mut point = Geometry::empty(OGRwkbGeometryType::wkbPoint)?;
point.add_point_2d((1251243.7361610543, 598078.7958668759));
multi_point.add_geometry(point)?;
let mut point = Geometry::empty(OGRwkbGeometryType::wkbPoint)?;
point.add_point_2d((1240605.8570339603, 601778.9277371694));
multi_point.add_geometry(point)?;
let mut point = Geometry::empty(OGRwkbGeometryType::wkbPoint)?;
point.add_point_2d((1250318.7031934808, 606404.0925750365));
multi_point.add_geometry(point)?;
println!("{}", multi_point.wkt()?);
Ok(())
}
use gdal::{errors, vector::Geometry};
use gdal_sys::OGRwkbGeometryType;
fn main() -> errors::Result<()> {
let mut multi_polygon = Geometry::empty(OGRwkbGeometryType::wkbMultiPolygon)?;
let mut ring = Geometry::empty(OGRwkbGeometryType::wkbLinearRing)?;
ring.add_point_2d((1204067.0548148106, 634617.5980860253));
ring.add_point_2d((1204067.0548148106, 620742.1035724243));
ring.add_point_2d((1215167.4504256917, 620742.1035724243));
ring.add_point_2d((1215167.4504256917, 634617.5980860253));
ring.add_point_2d((1204067.0548148106, 634617.5980860253));
let mut poly = Geometry::empty(OGRwkbGeometryType::wkbPolygon)?;
poly.add_geometry(ring)?;
multi_polygon.add_geometry(poly)?;
let mut ring = Geometry::empty(OGRwkbGeometryType::wkbLinearRing)?;
ring.add_point_2d((1179553.6811741155, 647105.5431482664));
ring.add_point_2d((1179553.6811741155, 626292.3013778647));
ring.add_point_2d((1194354.20865529, 626292.3013778647));
ring.add_point_2d((1194354.20865529, 647105.5431482664));
ring.add_point_2d((1179553.6811741155, 647105.5431482664));
let mut poly = Geometry::empty(OGRwkbGeometryType::wkbPolygon)?;
poly.add_geometry(ring)?;
multi_polygon.add_geometry(poly)?;
println!("{}", multi_polygon.wkt()?);
Ok(())
}
use gdal::{errors, vector::Geometry};
use gdal_sys::OGRwkbGeometryType;
fn main() -> errors::Result<()> {
let mut geometry_collection = Geometry::empty(OGRwkbGeometryType::wkbGeometryCollection)?;
let mut point = Geometry::empty(OGRwkbGeometryType::wkbPoint)?;
point.add_point_2d((-122.23, 47.09));
geometry_collection.add_geometry(point)?;
let mut line_string = Geometry::empty(OGRwkbGeometryType::wkbLineString)?;
line_string.add_point_2d((-122.60, 47.14));
line_string.add_point_2d((-122.48, 47.23));
geometry_collection.add_geometry(line_string)?;
println!("{}", geometry_collection.wkt()?);
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt = "POINT (1120351.5712494177 741921.4223245403)";
let point = Geometry::from_wkt(&wkt)?;
let (x, y, _) = point.get_point(0);
println!("{x} {y}");
// 1120351.5712494177 741921.4223245403
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt = r#"{"type":"Point","coordinates":[108420.33,753808.59]}"#;
let point = Geometry::from_geojson(&wkt)?;
let (x, y, _) = point.get_point(0);
println!("{x} {y}");
// 108420.33 753808.59
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt = r#"<gml:Point xmlns:gml="http://www.opengis.net/gml"><gml:coordinates>108420.33,753808.59</gml:coordinates></gml:Point>""#;
let point = Geometry::from_gml(&wkt)?;
let (x, y, _) = point.get_point(0);
println!("{x} {y}");
// 108420.33 753808.59
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkb = [
0x00, 0x80, 0x00, 0x00, 0x01, 0x41, 0x32, 0x47, 0xe6, 0x57, 0x0a, 0x3d, 0x71, 0x41, 0x23,
0xca, 0x5a, 0x2e, 0x14, 0x7a, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
];
let point = Geometry::from_wkb(&wkb)?;
let (x, y, _) = point.get_point(0);
println!("{x} {y}");
// 1198054.34 648493.09
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt = "LINESTRING (1181866.263593049 615654.4222507705, 1205917.1207499576 623979.7189589312, 1227192.8790041457 643405.4112779726, 1224880.2965852122 665143.6860159477)";
let line_string = Geometry::from_wkt(&wkt)?;
let count = line_string.point_count();
println!("Geometry has {count} points");
// Geometry has 4 points
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt = "MULTIPOINT (1181866.263593049 615654.4222507705, 1205917.1207499576 623979.7189589312, 1227192.8790041457 643405.4112779726, 1224880.2965852122 665143.6860159477)";
let points = Geometry::from_wkt(&wkt)?;
let count = points.geometry_count();
println!("Geometry has {count} geometries");
// Geometry has 4 geometries
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt = "POINT (1198054.34 648493.09)";
let point = Geometry::from_wkt(&wkt)?;
let distance = 500.0;
let poly = point.buffer(distance, 2)?;
let poly_wkt = poly.wkt()?;
println!("{wkt} buffered by {distance} is {poly_wkt}");
// POINT (1198054.34 648493.09) buffered by 500 is POLYGON ((1198554.34 648493.09,1198407.89339059 648139.536609407,1198054.34 647993.09,1197700.78660941 648139.536609407,1197554.34 648493.09,1197700.78660941 648846.643390593,1198054.34 648993.09,1198407.89339059 648846.643390593,1198554.34 648493.09))
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt = "POLYGON ((1162440.5712740074 672081.4332727483, 1162440.5712740074 647105.5431482664, 1195279.2416228633 647105.5431482664, 1195279.2416228633 672081.4332727483, 1162440.5712740074 672081.4332727483))";
let poly = Geometry::from_wkt(&wkt)?;
let area = poly.area();
println!("Area: {area:.2}");
// 820175022.47
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt = "LINESTRING (1181866.263593049 615654.4222507705, 1205917.1207499576 623979.7189589312, 1227192.8790041457 643405.4112779726, 1224880.2965852122 665143.6860159477)";
let line_string = Geometry::from_wkt(&wkt)?;
let length = line_string.length();
println!("Length: {length:.2}");
// Length: 76121.94
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkts = [
"POINT (1198054.34 648493.09)",
"LINESTRING (1181866.263593049 615654.4222507705, 1205917.1207499576 623979.7189589312, 1227192.8790041457 643405.4112779726, 1224880.2965852122 665143.6860159477)",
"POLYGON ((1162440.5712740074 672081.4332727483, 1162440.5712740074 647105.5431482664, 1195279.2416228633 647105.5431482664, 1195279.2416228633 672081.4332727483, 1162440.5712740074 672081.4332727483))"
];
for wkt in wkts {
let geom = Geometry::from_wkt(wkt)?;
println!("{}", geom.geometry_name());
}
// POINT
// LINESTRING
// POLYGON
Ok(())
}
use gdal::{errors, vector::Geometry};
fn main() -> errors::Result<()> {
let wkt_1 = "POLYGON ((1208064.271243039 624154.6783778917, 1208064.271243039 601260.9785661874, 1231345.9998651114 601260.9785661874, 1231345.9998651114 624154.6783778917, 1208064.271243039 624154.6783778917))";
let wkt_2 = "POLYGON ((1199915.6662253144 633079.3410163528, 1199915.6662253144 614453.958118695, 1219317.1067437078 614453.958118695, 1219317.1067437078 633079.3410163528, 1199915.6662253144 633079.3410163528)))";
let poly_1 = Geometry::from_wkt(wkt_1)?;
let poly_2 = Geometry::from_wkt(wkt_2)?;
if let Some(intersection) = poly_1.intersection(&poly_2) {
let wkt = intersection.wkt()?;
println!("{}", wkt);
}
// POLYGON ((1208064.27124304 624154.678377892,1219317.10674371 624154.678377892,1219317.10674371 614453.958118695,1208064.27124304 614453.958118695,1208064.27124304 624154.678377892))
Ok(())
}