23个稳定版本 (9个主要版本)
9.0.0 | 2024年5月2日 |
---|---|
8.3.1 | 2024年2月7日 |
8.3.0 | 2023年6月5日 |
8.1.0 | 2022年4月27日 |
0.3.0 | 2018年4月9日 |
#2 in 地理空间
每月20,521次下载
用于 10 crates
740KB
19K SLoC
geos
GEOS C API的Rust绑定。
支持的GEOS版本为 >= 3.5
免责声明
GEOS对输入几何的有效性可能有点严格,且在无效输入的情况下容易崩溃,因此需要在包装器中进行检查。本项目已使用valgrind进行检查,但如果您遇到崩溃,请随意打开一个问题,说明问题。
使用示例
您可以在 examples/
目录中查看示例。
从WKT构建几何图形
use geos::Geom;
let gg1 = geos::Geometry::new_from_wkt("POLYGON ((0 0, 0 5, 6 6, 6 0, 0 0))")
.expect("invalid WKT");
let gg2 = geos::Geometry::new_from_wkt("POLYGON ((1 1, 1 3, 5 5, 5 1, 1 1))")
.expect("invalid WKT");
let mut gg3 = gg1.difference(&gg2).expect("difference failed");
// normalize is only used for consistent ordering of vertices
gg3.normalize().expect("normalize failed");
assert_eq!(
gg3.to_wkt_precision(0).expect("to_wkt failed"),
"POLYGON ((0 0, 0 5, 6 6, 6 0, 0 0), (1 1, 5 1, 5 5, 1 3, 1 1))",
);
"准备"几何图形以在重复调用上进行更快的谓词(相交、包含等)计算
let g1 = geos::Geometry::new_from_wkt("POLYGON ((0 0, 0 5, 5 5, 5 0, 0 0))")
.expect("invalid WKT");
let g2 = geos::Geometry::new_from_wkt("POLYGON ((1 1, 1 3, 5 5, 5 0, 1 1))")
.expect("invalid WKT");
let pg1 = geos::PreparedGeometry::new(&g1)
.expect("PreparedGeometry::new failed");
let result = pg1.intersects(&g2).expect("intersects failed");
assert_eq!(result, true);
从geo转换
完整示例可在 examples/from_geo.rs
中找到
use geos::geo_types::{LineString, Coordinate, Polygon};
// first we create a Geo object
let exterior = LineString(vec![
Coordinate::from((0., 0.)),
Coordinate::from((0., 1.)),
Coordinate::from((1., 1.)),
]);
let interiors = vec![
LineString(vec![
Coordinate::from((0.1, 0.1)),
Coordinate::from((0.1, 0.9)),
Coordinate::from((0.9, 0.9)),
]),
];
let p = Polygon::new(exterior, interiors);
// and we can create a Geos geometry from this object
let geom: geos::Geometry = (&p).try_into()
.expect("failed conversion");
// do some stuff with geom
沃罗诺伊图
绑定中提供了沃罗诺伊图的计算。
为了更容易与geo一起使用,voronoi.rs
中提供了一些辅助函数。
use geos::compute_voronoi;
use geos::geo_types::Point;
let points = vec![
Point::new(0., 0.),
Point::new(0., 1.),
Point::new(1., 1.),
Point::new(1., 0.),
];
let voronoi = compute_voronoi(&points, None, 0., false)
.expect("compute_voronoi failed");
静态构建
默认情况下,此包会动态链接到系统中安装的GEOS或您配置的另一个版本。有关更多信息,请参阅sys/README.md。
如果您想将GEOS静态链接,请使用static
特性。
静态构建使用位于sys/geos-src/source
的git子模块中的GEOS版本。目前是GEOS 3.12.1。
您需要有一个支持GEOS静态版本的构建环境。有关更多信息,请参阅GEOS构建说明,但请注意,说明可能适用于比静态构建中包含的GEOS版本更新的版本。
贡献
仅实现了geos的一小部分功能,欢迎为缺失的功能添加包装器。
所有添加的功能都需要进行测试,并且作为一个C包装器,valgrind将在所有示例/测试上运行以检查是否存在错误/内存泄漏。
依赖项
~0.4–1.5MB
~32K SLoC