12 次重大发布
0.13.1 | 2024年4月30日 |
---|---|
0.12.1 | 2024年3月11日 |
0.12.0 | 2023年12月2日 |
0.11.0 | 2023年10月6日 |
0.1.0 | 2019年1月21日 |
#35 在 地理空间 中
903 每月下载量
用于 hrdf-routing-engine
200KB
1.5K SLoC
contour-rs
通过将行进方格算法应用于数值矩形阵列,计算等高线、等高线多边形和等高带。
输出环形坐标或 geo-types 几何形状。
结果可以轻松序列化为 GeoJSON。
注意:算法的核心是从 d3-contour 端口移植的。
使用方法
将此添加到您的 Cargo.toml
[dependencies]
contour = "0.13.1"
并将此添加到您的 crate 根目录
extern crate contour;
API公开
-
一个
ContourBuilder
结构体,它为阈值值的Vec
计算等距环坐标,并可以将它们转换为Contour
(包含阈值值和作为MultiPolygon
的几何形状的类型),或者Line
(包含阈值值和作为MultiLineString
的几何形状的类型)。Band
(包含最小值、最大值和作为MultiPolygon
的几何形状)。
-
contour_rings
函数,它为单个阈值值计算等距环坐标(返回一个包含环形坐标的Vec
- 这是ContourBuilder
内部使用的)。
ContourBuilder
是推荐使用此crate的方式,因为它更灵活且易于使用(它允许指定网格的原点和步长,并平滑等高线,而 contour_rings
只在网格坐标中说话,并且不会平滑结果环)。
Line
、Contour
和 Band
可以使用 geojson
功能序列化为 GeoJSON。
示例
不定义原点和步长
let c = ContourBuilder::new(10, 10, false); // x dim., y dim., smoothing
let res = c.contours(&vec![
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 1., 1., 1., 0., 0., 0., 0.,
0., 0., 0., 1., 1., 1., 0., 0., 0., 0.,
0., 0., 0., 1., 1., 1., 0., 0., 0., 0.,
0., 0., 0., 1., 1., 1., 0., 0., 0., 0.,
0., 0., 0., 1., 1., 1., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
], &[0.5])?; // values, thresholds
有原点和步长
let c = ContourBuilder::new(10, 10, true) // x dim., y dim., smoothing
.x_step(2) // The horizontal coordinate for the origin of the grid.
.y_step(2) // The vertical coordinate for the origin of the grid.
.x_origin(100) // The horizontal step for the grid
.y_origin(200); // The vertical step for the grid
let res = c.contours(&[
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
], &[0.5]).unwrap(); // values, thresholds
使用 geojson
功能
geojson
功能默认未启用,因此您需要在您的 Cargo.toml
中指定它
[dependencies]
contour = { version = "0.13.1", features = ["geojson"] }
let c = ContourBuilder::new(10, 10, true) // x dim., y dim., smoothing
.x_step(2) // The horizontal coordinate for the origin of the grid.
.y_step(2) // The vertical coordinate for the origin of the grid.
.x_origin(100) // The horizontal step for the grid
.y_origin(200); // The vertical step for the grid
let res = c.contours(&[
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 1., 1., 0., 1., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
], &[0.5]).unwrap(); // values, thresholds
println!("{:?}", res[0].to_geojson()); // prints the GeoJSON representation of the first contour
输出
Feature {
bbox: None,
geometry: Some(Geometry {
bbox: None,
value: MultiPolygon([
[[
[110.0, 215.0], [110.0, 213.0], [110.0, 211.0], [110.0, 209.0],
[110.0, 207.0], [109.0, 206.0], [107.0, 206.0], [106.0, 207.0],
[106.0, 209.0], [106.0, 211.0], [106.0, 213.0], [106.0, 215.0],
[107.0, 216.0], [109.0, 216.0], [110.0, 215.0]
]],
[[
[114.0, 215.0], [114.0, 213.0], [114.0, 211.0], [114.0, 209.0],
[114.0, 207.0], [113.0, 206.0], [112.0, 207.0], [112.0, 209.0],
[112.0, 211.0], [112.0, 213.0], [112.0, 215.0], [113.0, 216.0],
[114.0, 215.0]
]]
]),
foreign_members: None
}),
id: None,
properties: Some({"threshold": Number(0.5)}),
foreign_members: None
}
使用 f32
功能
默认情况下,此crate期望输入为f64
值,并使用f64
值进行计算。如果您想使用f32
值,则需要在您的 Cargo.toml
中指定f32
功能
[dependencies]
contour = { version = "0.13.1", features = ["f32"] }
WASM演示
此crate编译为WebAssembly并从JavaScript中使用的演示:wasm_demo_contour。
与contour-isobands crate(来自mthh/contour-isobands-rs仓库)的差异
虽然此crate从等高线(cf. wikipedia:Marching_squares)计算等高线,从中推导出等高多边形(即包含所有高于给定等高线阈值点的多边形)和等值线(即包含所有在最小和最大界限之间的点的多边形),但contour-isobands-rs仅用于计算等值线,并使用稍有不同的算法来区分鞍点(cf. wikipedia:Marching_squares)。
许可证
根据您的选择,以下任一许可证
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
自由选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交给包含在作品中的任何贡献都应如上所述双重许可,没有任何额外条款或条件。
依赖项
~0.7–1.2MB
~23K SLoC