2 个版本
0.1.1 | 2024 年 7 月 9 日 |
---|---|
0.1.0 | 2024 年 7 月 8 日 |
#5 在 #locations
每月下载 232 次
30KB
421 行
Geocodio Lib Rust
一个从 Geocodio API 客户端库中分叉出来的客户端库。然而,这个 Crate 有很大不同。我重构了几乎所有现有的代码,添加了多个新功能,并创建了文档。
如何使用
要开始使用,建议在您的项目中创建一个 .env
文件并添加变量 GEOCODIO_API_KEY
。一旦您有了您的 API 密钥分配,您可以使用 GeocodioProxy::new()
来开始使用客户端库。
let geocodio = GeocodioProxy::new().unwrap();
如果您使用其他方法获取您的 API 密钥,您可以使用 GeocodioProxy::new_from_key()
并将密钥作为变量传递。
let geocodio = GeocodioProxy::new_from_key(my_api_key).unwrap();
一旦将 GeocodioProxy
分配给变量,您可以进行以下四件事情
地理编码
地址参数
在地理编码地址时,所需的输入地址必须是枚举 AddressParams
。如果您只有地址(作为字符串),您可以使用 AddressParams::String
来包装它。但是,如果您有能力控制如何输入地址,建议使用 AddressParams::AddressInput
以获得更准确的结果。AddressInput 字段是(所有字段都是 Option
)
- line_1(街道号码、名称和后缀)
- line_2
- 城市
- 州
- 国家
- 邮政编码
单个地址地理编码
use geocodio_lib_rust::{request::address::{AddressInput, AddressParams}, GeocodioProxy};
#[tokio::main]
async fn main() {
let geocodio = GeocodioProxy::new().unwrap();
let response = geocodio
.geocode(
AddressParams::AddressInput(AddressInput {
line_1: Some("1500 Sugar Bowl Dr".to_string()),
line_2: None,
city: Some("New Orleans".to_string()),
state: Some("LA".to_string()),
country: Some("US".to_string()),
postal_code: Some("70112".to_string()),
}),
None,
)
.await
.unwrap();
println!(
"The coordinates for the Superdome are: {}, {}",
response.results[0].location.latitude,
response.results[0].location.longitude
)
}
批量地理编码
use geocodio_lib_rust::{request::address::AddressParams, response::BatchResult, GeocodioProxy};
#[tokio::main]
async fn main() {
let addresses = vec![
AddressParams::String("1500 Sugar Bowl Dr, New Orleans, LA 70112".to_string()),
AddressParams::String("1 MetLife Stadium Dr, East Rutherford, NJ 07073".to_string()),
AddressParams::String("1 AT&T Way, Arlington, TX 76011".to_string())
];
let geocodio = GeocodioProxy::new().unwrap();
let response = geocodio
.geocode_batch(addresses)
.await
.unwrap();
response.results.map(|res: Vec<BatchResult>| {
res.iter().map(|address: &BatchResult| {
if let Some(input) = &address.query {
println!("INPUT ADDRESS: {:?}", input);
};
if let Some(response) = &address.response {
if let Some(results) = &response.results {
println!("ADDRESS COMPONENTS: {:?}", results[0].address_components);
println!("FORMATTED ADDRESS: {:?}", results[0].formatted_address);
println!("LOCATION: {:?}", results[0].location);
println!("ACCURACY: {:?}", results[0].accuracy);
println!("ACCURACY TYPE: {:?}", results[0].accuracy_type);
println!("SOURCE: {:?}", results[0].source);
}
};
println!("============================")
}).collect::<Vec<_>>()
});
}
反向地理编码
单个坐标反向地理编码
use geocodio_lib_rust::{request::address::Coordinates, GeocodioProxy};
#[tokio::main]
async fn main() {
let geocodio = GeocodioProxy::new().unwrap();
let coordinates = Coordinates { latitude: 40.81352, longitude: -74.074333 };
let response = geocodio
.reverse_geocode(coordinates)
.await
.unwrap();
println!("{:?}", response);
}
反向批量地理编码
use geocodio_lib_rust::{request::address::Coordinates, GeocodioProxy};
#[tokio::main]
async fn main() {
let geocodio = GeocodioProxy::new().unwrap();
let coordinates = vec![
Coordinates { latitude: 40.81352, longitude: -74.074333 },
Coordinates { latitude: 35.9746000, longitude: -77.9658000 },
Coordinates { latitude: 32.8793700, longitude: -96.6303900 },
];
let response = geocodio
.reverse_geocode_batch(coordinates)
.await
.unwrap();
println!("{:?}", response);
}
依赖项
~6–18MB
~254K SLoC