#zone #geospatial #spatial #command-line-interface

bin+lib zonebuilder

用于创建用于城市分析的规则地理区域的crate和命令行界面

2 个不稳定版本

0.3.0 2021年12月28日
0.1.0 2021年8月6日

#143地理空间

AGPL-3.0-or-later

125KB
250

crates.io

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