7个版本 (破坏性更新)
0.7.0 | 2024年4月16日 |
---|---|
0.6.0 | 2023年3月29日 |
0.5.0 | 2020年10月18日 |
0.4.0 | 2020年9月2日 |
0.1.0 | 2019年3月10日 |
#189 in 算法
每月75次下载
140KB
3K SLoC
sfcgal-rs
Rust绑定,提供对SFCGAL
库的高层API访问以及与其他Rust生态系统几何crate的转换。
基于sfcgal-sys crate,它提供了低层绑定。
底层库的一些关键特性
- 支持ISO 19107和OGC简单特征访问1.2进行3D操作。
- 读取和写入WKT,对于2D和3D几何,使用精确的有理数坐标表示。
- 交集、差集和并集。
- 直线骨架、镶嵌、Minkowski和、alpha形状和凸包。
SFCGAL的所需版本目前是1.5.x(最新版本 - 2023-10-30)。
用法
使用3元组为3D坐标和WKT的示例:
extern crate sfcgal;
use sfcgal::{SFCGeometry, CoordSeq, ToCoordinates, ToSFCGAL};
// create a linestring from WKT:
let line_3d = SFCGeometry::new("LINESTRING(-0.5 -0.5 2.5, 0.0 0.0 4.0)")?;
// create a polygon as Vec of 3-member tuples...
let coords_polygon = vec![
vec![ // Exterior ring
(-1., -1., 3.0),
(1., -1., 3.0),
(1., 1., 3.0),
(-1., 1., 3.0),
(-1., -1., 3.0),
],
vec![ // 1 interior ring
(0.1, 0.1, 3.0),
(0.1, 0.9, 3.0),
(0.9, 0.9, 3.0),
(0.9, 0.1, 3.0),
(0.1, 0.1, 3.0),
],
];
// ...by using the CoordSeq enum variants to match the wanted SFCGAL geometry type
// (returns a SFCGeometry)
let polygon_3d = CoordSeq::Polygon(coords_polygon).to_sfcgal()?;
// ...
let intersection = line_3d.intersection_3d(&polygon_3d)?;
// Retrieve coordinates of the resulting geometry as 3-member tuples:
let coords_intersection: CoordSeq<(f64, f64, f64)> = intersection.to_coordinates()?;
println!("{:?} and {:?} intersects at {:?}", line_3d, polygon_3d, coords_intersection);
使用geo-types的示例:
extern crate geo_types;
extern crate sfcgal;
use geo_types::{LineString, Polygon};
use sfcgal::ToSFCGAL;
// create a geo_types Polygon:
let polygon = Polygon::new(
LineString::from(vec![(0., 0.), (1., 0.), (1., 1.), (0., 1.,), (0., 0.)]),
vec![LineString::from(
vec![(0.1, 0.1), (0.1, 0.9,), (0.9, 0.9), (0.9, 0.1), (0.1, 0.1)])]);
// create a geo_types LineString:
let line = LineString::from(vec![(-0.5, -0.5), (1.3, 1.), (1.1, 1.9)]);
// convert them to sfcgal geometries:
let polyg_sfc = polygon.to_sfcgal().unwrap();
let line_sfc = line.to_sfcgal().unwrap();
// Use SFCGAL operations:
assert!(polyg_sfc.intersects(&line_sfc).unwrap(), true);
示例
查看examples/skeleton_geojson.rs
,以了解如何与其他Rust-geo生态系统crate一起使用。
动机
需要一个SFCGAL特性用于Rust的侧项目,我想这是一个尝试使用bindgen在SFCGAL C API上的好机会。
最终,API的大部分内容都被包装了,因此现在它在crates.io上发布后,可能可以被某人重用或改进。
许可
根据您的选择,许可为以下之一
- Apache许可证2.0版本(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0》)
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT》)
。
贡献
除非您明确声明,否则您有意提交的工作将被双重许可,如上所述,没有其他条款或条件。
依赖
~1.8–5MB
~97K SLoC