2 个不稳定版本
0.3.0 | 2021年12月28日 |
---|---|
0.1.0 | 2021年8月6日 |
#143 在 地理空间 中
125KB
250 行
zonebuilder
用于构建区域的Rust crate。
这是一个正在进行的项目,旨在用系统编程语言Rust实现zonebuilder
R包中的功能。
为什么?
- 它最终将使更多人能够受益于用于创建分区系统的免费和开源软件,因为Rust可以使Windows、Mac和最初开发此包的免费和开源Linux操作系统上的二进制文件得以创建。
- 为了在线部署zonebuilder技术,如web文件夹中所示(Rust还可以编译为WASM,使如A/B Street之类的复杂应用程序能够在浏览器中运行——这种想法是,如果它可以在浏览器中运行,那么构建区域的简单应用程序也可以!)
- 计算效率:构建区域的过程并不特别计算密集,但这个Rust crate最终可能会很快并且安装使用,可能通过Rust接口如
extendr
从高级语言如R中实现 - 为了娱乐和教育:作为一个简单的crate,它展示了Rust代码的组织方式和其工作原理
Rust crate的安装
要安装zonebuilder crate,您首先需要安装Rust。使用以下命令在crates.io上安装最新版本
cargo install zonebuilder
您可以通过以下方式安装开发版本
cargo install --git https://github.com/zonebuilders/zonebuilder-rust --branch main
下载和运行二进制文件
Rust可以为所有主要操作系统创建二进制文件。请关注这里,了解如何使用二进制文件运行zonebuilders(无需编译或Rust工具链)。
从系统命令行运行zonebuilder
zonebuilder二进制文件具有命令行界面。假设您正在本地安装crate,您可以为Windows、Mac和Linux系统shell构建以下二进制文件
cargo build
## Finished dev [unoptimized + debuginfo] target(s) in 0.02s
您可以使用以下命令查看使用该工具的说明
./target/debug/zonebuilder -h
## zb 0.1.0
## Configures a clockboard diagram
##
## USAGE:
## zonebuilder [FLAGS] [OPTIONS]
##
## FLAGS:
## -h, --help Prints help information
## --projected Is the data projected?
## -V, --version Prints version information
##
## OPTIONS:
## -d, --distances <distances>...
## The distances between concentric rings. `triangular_sequence` is useful to generate these distances
## [default: 1.0,3.0,6.0,10.0,15.0]
## -s, --num-segments <num-segments>
## The number of radial segments. Defaults to 12, like the hours on a clock [default: 12]
##
## -v, --num-vertices-arc <num-vertices-arc>
## The number of vertices per arc. Higher values approximate a circle more accurately [default: 10]
##
## -p, --precision <precision>
## The number of decimal places in the resulting output GeoJSON files. Set to 6 by default. Larger numbers mean
## more precision, but larger file sizes [default: 6]
让我们尝试使用更少的分段和圆(分别通过 -s
和 -d
参数指定)来创建区域。
./target/debug/zonebuilder -s 3 -d 1.0,3.0 > zones.geojson
结果看起来是这样的
您还可以设置输出的精度。默认为6位小数,如下面的输出所示
head(sf::st_coordinates(z))
## X Y L1 L2
## [1,] 0.000000 0.009043 1 1
## [2,] 0.001867 0.008846 1 1
## [3,] 0.003653 0.008261 1 1
## [4,] 0.005280 0.007316 1 1
## [5,] 0.006675 0.006051 1 1
## [6,] 0.007779 0.004521 1 1
让我们看看使用2位小数精度时的输出
./target/debug/zonebuilder --precision 2 > zones.geojson
结果是这个
您可以按照以下方式运行该crate(注意使用 --
将参数传递给zonebuilder二进制文件,而不是 cargo run
)
cargo run -- --precision 3 > zones.geojson
## Finished dev [unoptimized + debuginfo] target(s) in 0.02s
## Running `target/debug/zonebuilder --precision 3`
看看输出
head -n 20 zones.geojson
## {
## "features": [
## {
## "geometry": {
## "coordinates": [
## [
## [
## 0.0,
## 0.009
## ],
## [
## 0.0,
## 0.009
## ],
## [
## 0.0,
## 0.008
## ],
## [
## 0.001,
然后使用另一个工具读取GeoJSON文件,例如R(此步骤在已安装 sf
库的R控制台中运行)
zones = sf::read_sf("zones.geojson")
plot(zones)
# interactive version:
# mapview::mapview(zones)
file.remove("zones.geojson")
## [1] TRUE
您可以使用以下方法使用 zonebuilder
包在R中生成相同的绘图
zones = zonebuilder::zb_zone(x = "london", n_circles = 5)
## Loading required namespace: tmaptools
plot(zones$geometry)
依赖关系
~7MB
~126K SLoC