#geocoding #google #api-bindings

google_geocoding

Google Geocoding API的强类型异步Rust接口

2个版本

使用旧Rust 2015

0.1.1 2018年8月20日
0.1.0 2018年8月19日

258 in 地理空间

MIT 许可证

59KB
489

google_geocoding

Google Geocoding API的强类型(非)异步Rust API

同步API(基础)

同步API针对常用用例的易用性进行了优化。

可以从地址中简单地查找坐标

use google_geocoding::geocode;
for coordinates in geocode("1600 Amphitheater Parkway, Mountain View, CA").unwrap() {
    println!("{}", coordinates);
}

从坐标中简单地查找地址

use google_geocoding::{WGS84, degeocode};
let coordinates = WGS84::try_new(37.42241, -122.08561, 0.0).unwrap();
for address in degeocode(coordinates).unwrap() {
    println!("{}", address);
}

请注意,建议使用WGS84::try_new(),因为WGS84::new()在无效坐标时会panic

同步API提供了API响应中的地址或坐标。然而,完整的响应包含了大量其他信息。要访问完整响应,请参阅低级异步API。

同步API(高级)

可以使用GeocodeQuery和DegeocodeQuery对象进行更复杂的查找

use google_geocoding::{GeocodeQuery, Language, Region, geocode};
let query = GeocodeQuery::new("1600 Amphitheater Parkway, Mountain View, CA")
    .language(Language::English)
    .region(Region::UnitedStates);
for coordinates in geocode(query).unwrap() {
    println!("{}", coordinates);
}

异步API

Connection对象提供了对基于异步的低级API的访问。

与同步API不同,这些函数提供了完整的API响应。因此,您将需要提取您所需的具体信息。

这些函数用于实现前面描述的同步API。

extern crate google_geocoding;
extern crate tokio_core;

use google_geocoding::Connection;
use tokio_core::reactor::Core;

const ADDRESS: &str = "1600 Amphitheater Parkway, Mountain View, CA";

let mut core = Core::new().unwrap();
let core_handle = core.handle();
let geocode_future = Connection::new(&core_handle).geocode(ADDRESS);
let reply = core.run(geocode_future).unwrap();

for candidate in reply {
    println!("{}: {}", candidate.formatted_address, candidate.geometry.location);
}

注意事项

这是一个非官方库。

官方Google Geocoding API

许可证:MIT

依赖关系

~19-29MB
~516K SLoC