4个稳定版本
1.1.1 | 2023年8月18日 |
---|---|
1.1.0 | 2022年10月11日 |
1.0.1 | 2022年10月10日 |
#67 in 地理空间
用于 open-stock
22KB
448 行
photon-geocoding-rs
适用于Rust语言的Komoot Photon API的API客户端。
它支持正向和反向地理编码以及实时搜索。
主要代码库托管在 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