4个版本
0.2.3 | 2024年2月15日 |
---|---|
0.2.2 |
|
0.2.1 | 2022年3月23日 |
0.2.0 | 2022年3月23日 |
0.1.0 | 2022年3月22日 |
在 地理空间 中排名第94
每月下载量 15,625
在 3 个crate中使用(通过 geos-sys)
3MB
75K SLoC
geos
Rust对GEOS C API的绑定。
支持的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 转换
geo 的对象可以转换为 GEOS 以使用所有geos算法。
完整的示例可以在 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");
静态构建
默认情况下,此crate将动态链接到您系统安装的GEOS或您配置的不同版本。有关更多信息,请参阅 sys/README.md。
如果您想静态链接GEOS,请使用 static
功能。
静态构建使用 sys/geos-src/source
中的GEOS版本。目前是GEOS 3.12.1。
您需要一个支持GEOS静态版本的构建环境。有关更多信息,请参阅 GEOS构建说明,但请注意,说明可能针对的是比静态构建中包含的GEOS版本更新的版本。
贡献
仅实现了地理空间数据集的一部分,欢迎为缺失的功能添加包装器。
所有添加的功能都需要进行测试,并且作为一个C包装器,所有示例/测试都使用valgrind运行,以检查是否存在错误/内存泄漏。