#geocoding #api-client #osm #photon #reverse #forward #komoot

photon-geocoding

适用于Rust语言的Komoot Photon API的API客户端

4个稳定版本

1.1.1 2023年8月18日
1.1.0 2022年10月11日
1.0.1 2022年10月10日

#67 in 地理空间


用于 open-stock

Apache-2.0

22KB
448

photon-geocoding-rs

version License crates.io

适用于Rust语言的Komoot Photon API的API客户端。

它支持正向和反向地理编码以及实时搜索。


Get it on Codeberg

主要代码库托管在 codeberg.org。建议在那里提交问题和拉取请求,但您也可以在GitHub上提交。


Photon

Photon是由Komoot托管的开源API,由ElasticSearch提供支持。它返回来自OpenStreetMap项目的数据,该数据根据ODbL License授权。

API可在photon.komoot.io获取,并受Apache 2.0 License许可。

重要:请注意Photon的使用条款和条件!它是免费的,所以请公平使用,避免过度请求!

使用

在您的 cargo.toml 中包含此内容

[dependencies]
photon-geocoding = { version = "1.1.0" }

正向地理编码

use photon_geocoding::{PhotonApiClient, PhotonFeature};

let api: PhotonApiClient = PhotonApiClient::default();
let result: Vec<PhotonFeature> = api.forward_search("munich", None).unwrap();

反向地理编码

use photon_geocoding::{PhotonApiClient, PhotonFeature};

let api: PhotonApiClient = PhotonApiClient::default();
let result: Vec<PhotonFeature> = api.reverse_search(LatLon::new(48.123, 11.321), None).unwrap();

自托管实例(自定义URL)

use photon_geocoding::PhotonApiClient;

let api: PhotonApiClient = PhotonApiClient::new("https://example.com");
// requests will now go to https://example.com/api and https://example.com/reverse

过滤器

use photon_geocoding::filter::{ForwardFilter, PhotonLayer};
use photon_geocoding::{BoundingBox, LatLon, PhotonApiClient};

let api: PhotonApiClient = PhotonApiClient::default();
let filter = ForwardFilter::new()
    .language("FR")
    .bounding_box(BoundingBox {
        south_west: LatLon::new(40.0, 10.0),
        north_east: LatLon::new(50.0, 15.0),
    })
    .layer(vec![PhotonLayer::City, PhotonLayer::State])
    .additional_query(vec![("osm_tag", "!key:value")]);

let results = api.forward_search("munich", Some(filter)).unwrap();

// resulting query string: "q=munich&bbox=10%2C40%2C15%2C50&lang=fr&layer=city&layer=state&osm_tag=%21key%3Avalue"

所有请求都在阻塞模式下执行,因此不涉及异步行为。但是,PhotonApiClient是线程安全的,因此您可以选择使用相同的实例并行执行多个请求。

功能和错误

请随时提出新的问题!我总是很高兴改进这个包。

由于我是Rust的新手,因此请不要犹豫,就代码风格和/或可用性(特别是关于所有权、借用等)提出改进建议!

贡献

请随时提交拉取请求,帮助改进这个包!

依赖关系

~2.3–3.5MB
~93K SLoC