#geocoding #api #locations #api-client #geocodio

geocodio_lib_rust

与 Geocodio API 交互的客户端库

2 个版本

0.1.1 2024 年 7 月 9 日
0.1.0 2024 年 7 月 8 日

#5#locations

Download history 191/week @ 2024-07-04 40/week @ 2024-07-11 1/week @ 2024-07-18

每月下载 232 次

MIT 许可证

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