39 个版本 (稳定)
3.2.0 | 2024年2月26日 |
---|---|
3.1.0 | 2023年11月28日 |
2.5.0 | 2023年7月13日 |
2.4.3 | 2023年3月14日 |
0.1.6 | 2016年10月12日 |
#33 in 地理空间
每月242次 下载
用于 4 crate
400KB
630 行
Polylabel-rs
Polylabel 算法的 Rust 实现
橙色圆点是多边形质心。青色圆点是理想的标签位置。红色框表示搜索空间。
您可以通过克隆此仓库,切换到 visualise
分支,并打开 visualise.ipynb
Jupyter 笔记本,然后逐个单元格运行来生成此可视化。您还可以使用笔记本轻松可视化您自己的多边形。
使用方法
extern crate polylabel;
use polylabel::polylabel;
extern crate geo;
use geo::{Point, Polygon};
let coords = vec![
(0.0, 0.0),
(4.0, 0.0),
(4.0, 1.0),
(1.0, 1.0),
(1.0, 4.0),
(0.0, 4.0),
(0.0, 0.0)
];
let poly = Polygon::new(coords.into(), vec![]);
let label_pos = polylabel(&poly, &0.10);
// Point(0.5625, 0.5625)
命令行工具
提供了一个命令行工具:cargo install polylabel_cmd
。这启用了 polylabel
命令,该命令以 GeoJSON 文件作为输入,以及一个可选的(-t / --tolerance
)容忍值。更多信息请参阅 crates.io。
文档
FFI
启用 Cargo 的 ffi
和 headers
功能以启用此功能
使用以下三个必填参数调用 polylabel_ffi
Array
(一个有两个字段的 struct)data
:一个指向两个元素c_double
数组的空指针,每个数组代表多边形外部壳上的一个点)len
:表示data
数组长度的,一个size_t
类型。
WrapperArray
(一个包含两个字段的结构体)data
:指向一个Array
数组的一个空指针,每个条目代表一个内部多边形环。如果没有环,则为空。len
:表示data
数组长度的,一个size_t
类型。如果为空,则为0。
tolerance
,一个c_double
该函数返回一个包含两个c_double
字段的struct
。
x_pos
y_pos
头文件位于include
目录下。一个Python示例可以在ffi.py
中找到。
自动生成的头文件可在include/header.h
中找到。
性能与精度
使用一个4核心2.3GHz的Intel Core i5处理器,在具有约9k个顶点(代表挪威大陆)的多边形上找到标签位置,容忍度为1.0
,大约需要9毫秒。根据您多边形的尺寸,可能需要更高的容忍度(即更小的数字)。有关每个小数位提供的精度的指导,请参见这里。
二进制文件
可在发布版中找到。
许可证
依赖项
~8.5MB
~131K SLoC