#osrm #request-builder #object #documentation #nearest #file #nearest-request

rs_osrm_serde

Rust 对 osrm 的包装,由 TehGoat/rs_osrm 派生

1 个不稳定版本

0.1.0 2024年1月17日

139 in 地理空间

MIT 许可证

8.5MB
180K SLoC

C++ 98K SLoC // 0.1% comments Gherkin (Cucumber) 29K SLoC // 0.0% comments JavaScript 10K SLoC // 0.3% comments Rust 5.5K SLoC // 0.0% comments Lua 5K SLoC // 0.1% comments Dart 5K SLoC // 0.1% comments C# 5K SLoC // 0.2% comments Go 4.5K SLoC // 0.1% comments Python 4K SLoC // 0.2% comments PHP 3.5K SLoC // 0.4% comments Java 3K SLoC // 0.3% comments Kotlin 2.5K SLoC // 0.0% comments TypeScript 2K SLoC // 0.5% comments Shell 1K SLoC // 0.4% comments Batch 722 SLoC // 0.1% comments FlatBuffers Schema 508 SLoC // 0.1% comments Bazel 375 SLoC // 0.2% comments C 294 SLoC // 0.2% comments INI 7 SLoC Forge Config 2 SLoC Bitbake 1 SLoC // 0.8% comments

rs_osrm

Crates.io

License: MIT

Rust 对 osrm 的包装

需要安装 osrm 的依赖项

如何使用

  1. 创建一个 EngineConfigBulter,传入 .osrm 文件的路径。您可以更改其他设置,请参阅 osrm 文档。
  2. 使用构建器(例如:NearestRequestBuilder)创建一个请求对象(例如:NearestRequest)
  3. 在请求对象上调用 run 并传入 osrm。

Nearest 示例

 use crate::{
    engine_config::engine_config_builder::EngineConfigBuilder,
    nearest_api::nearest_request_builder::NearestRequestBuilder, Status,
};

fn main() {
    let osrm_result = EngineConfigBuilder::new("<PATH TO .osrm FILE>")
        .set_use_shared_memory(false)
        .set_algorithm(crate::Algorithm::MLD)
        .build();

    match osrm_result {
        Ok(osrm) => {
            let request = NearestRequestBuilder::new(57.804404, 13.448601)
                .set_number_of_results(3)
                .build();

            match request {
                Ok(mut nearest_request) => {
                    let (status, nearest_result) = nearest_request.run(&osrm);

                    if status == Status::Ok {
                        if nearest_result.code.is_some() {
                            println!("code: {}", nearest_result.code.unwrap());
                        }

                        if nearest_result.waypoints.is_some() {
                            for waypoint in nearest_result.waypoints.unwrap() {
                                println!(
                                    "lat: {}, lon: {}, name: {}",
                                    waypoint.location[1], waypoint.location[0], waypoint.name
                                );
                            }
                        }
                    } else {
                        if nearest_result.code.is_some() {
                            println!("code: {}", nearest_result.code.unwrap());
                        }
                        if nearest_result.message.is_some() {
                            println!("message: {}", nearest_result.message.unwrap());
                        }
                    }
                }
                Err(request_error) => {
                    eprintln!("{request_error}");
                }
            }
        }
        Err(osrm_error) => {
            eprintln!("{osrm_error}");
        }
    }
}


依赖项