4 个版本
0.1.2 | 2024 年 6 月 1 日 |
---|---|
0.1.1-alpha | 2024 年 5 月 31 日 |
0.1.0-alpha | 2024 年 5 月 30 日 |
在 地理空间 中排名第 117
每月下载量 108
24KB
152 行 代码
ArcGIS Runtime in Rust 🗺️
🗺️ _~^~^~_ 🔧
\) / o o \ (/
'_ - _'
/ '-----' \
注意:此运行时仍在开发中,请报告任何错误或问题,以帮助我们使此运行时更加可靠!
欢迎使用 ArcGIS Rust!该项目是一个基于 Rust 的地理空间智能库,受 ArcGIS Runtime 启发。它提供核心地理空间类型、渲染能力和地理处理和定位任务的执行。
目录
简介
该项目旨在提供 Rust 的综合地理空间智能库。它包括
- 核心地理空间类型(点、多边形、边界框等)
- 用于管理地理特征的要素层
- 使用
wgpu
进行地图视图渲染的能力 - 使用
reqwest
执行地理处理和定位任务的执行
安装
要在项目中使用此库,请将以下内容添加到您的 Cargo.toml
[dependencies]
arcgis_rust = { git = "https://github.com/dfridkin/arcgis-rust-runtime.git" }
geo = "0.23.0"
wgpu = "0.12.0"
winit = "0.26.0"
reqwest = { version = "0.11", features = ["json"] }
tokio = { version = "1", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
使用
示例
创建和使用地理空间类型
use arcgis_rust::core::geometry::*;
use geo::point;
fn main() {
let point = point!(x: 1.0, y: 2.0);
println!("Point: {:?}", point);
let envelope = Envelope {
min: point!(x: 0.0, y: 0.0),
max: point!(x: 10.0, y: 10.0),
};
let point_inside = point!(x: 5.0, y: 5.0);
let point_outside = point!(x: 15.0, y: 15.0);
println!("Point inside: {}", envelope.contains(&point_inside));
println!("Point outside: {}", envelope.contains(&point_outside));
}
执行地理处理任务
use arcgis_rust::tasks::geoprocessing::GeoprocessingTask;
use tokio;
#[tokio::main]
async fn main() {
let geoprocessing_task = GeoprocessingTask {
url: "https://example.com/arcgis/rest/services/GP/Service".to_string(),
};
match geoprocessing_task.execute("parameters").await {
Ok(result) => println!("Geoprocessing result: {}", result),
Err(e) => println!("Error: {}", e),
}
}
API 规范
核心模块
点
表示具有 x 和 y 坐标的 2D 点。
#[derive(Debug, Clone)]
pub struct Point {
pub x: f64,
pub y: f64,
}
边界框
表示由其最小和最大坐标定义的矩形边界框。
#[derive(Debug, Clone)]
pub struct Envelope {
pub min: Point<f64>,
pub max: Point<f64>,
pub fn contains(&self, point: &Point<f64>) -> bool;
}
交集
计算两个几何体的交集。
use arcgis_rust::core::geometry::{Polygon, run_intersection};
let poly1 = polygon![
(x: 0.0, y: 0.0),
(x: 10.0, y: 0.0),
(x: 10.0, y: 10.0),
(x: 0.0, y: 10.0),
(x: 0.0, y: 0.0)
];
let poly2 = polygon![
(x: 5.0, y: 5.0),
(x: 15.0, y: 5.0),
(x: 15.0, y: 15.0),
(x: 5.0, y: 15.0),
(x: 5.0, y: 5.0)
];
let intersection = run_intersection(&poly1, &poly2);
println!("Intersection: {:?}", intersection);
并集
将多个几何体合并为一个单一几何体。
use arcgis_rust::core::geometry::{Polygon, run_union};
let poly1 = polygon![
(x: 0.0, y: 0.0),
(x: 10.0, y: 0.0),
(x: 10.0, y: 10.0),
(x: 0.0, y: 10.0),
(x: 0.0, y: 0.0)
];
let poly2 = polygon![
(x: 5.0, y: 5.0),
(x: 15.0, y: 5.0),
(x: 15.0, y: 15.0),
(x: 5.0, y: 15.0),
(x: 5.0, y: 5.0)
];
let union = run_union(&poly1, &poly2);
println!("Union: {:?}", union);
边界
检索几何体的边界。
use arcgis_rust::core::geometry::{Polygon, calculate_boundaries};
let poly = polygon![
(x: 0.0, y: 0.0),
(x: 10.0, y: 0.0),
(x: 10.0, y: 10.0),
(x: 0.0, y: 10.0),
(x: 0.0, y: 0.0)
];
let boundaries = calculate_boundaries(&poly);
println!("Boundaries: {:?}", boundaries);
数据模块
要素
表示具有几何和属性的地理要素。
#[derive(Debug, Clone)]
pub struct Feature {
pub geometry: Geometry<f64>,
pub attributes: HashMap<String, String>,
}
要素层
管理要素集合。
pub struct FeatureLayer {
pub features: Vec<Feature>,
pub fn query(&self, envelope: &Envelope) -> Vec<&Feature>;
}
渲染模块
地图视图
管理地图视图的渲染。
pub struct MapView {
pub fn new(event_loop: &EventLoop<()>) -> Self;
pub fn add_layer(&mut self, layer: Box<dyn Layer>);
pub fn render(&self);
}
层
用于定义可渲染层的特性。
pub trait Layer {
fn render(&self);
}
任务模块
地理处理任务
执行地理处理任务。
pub struct GeoprocessingTask {
pub url: String,
pub async fn execute(&self, parameters: &str) -> Result<String, reqwest::Error>;
}
定位任务
执行地理编码任务。
pub struct LocatorTask {
pub url: String,
pub async fn geocode(&self, address: &str) -> Result<Point<f64>, reqwest::Error>;
}
贡献
我们欢迎贡献,使这个项目更加出色!要贡献,请按照以下步骤操作
Fork the repository.
Create a new branch (git checkout -b feature-branch).
Make your changes.
Commit your changes (git commit -m 'Add new feature').
Push to the branch (git push origin feature-branch).
Open a pull request.
许可协议
本项目采用MIT许可证。详情请参阅LICENSE文件。
编码愉快,愿您的Rust之旅充满快乐和发现!🦀❤️
依赖项
~14–33MB
~501K SLoC