#geocoding #google-maps #api-bindings #latitude-longitude #rust

geocoder

Rust 包,提供使用 Google 地理编码 API 的简单方法。

3 个版本

0.1.2 2024 年 7 月 27 日
0.1.1 2024 年 7 月 27 日
0.1.0 2024 年 7 月 26 日

#434 in 网页编程

Download history 340/week @ 2024-07-26 21/week @ 2024-08-02 14/week @ 2024-08-09 10/week @ 2024-08-16

每月 385 次下载

MIT 许可证

11KB
106

Geocoder

Build Status Coverage Status

提供使用 Google 地理编码 API 的简单方法的 Rust 包。

有关 Google 地理编码 API 的更多信息,请参阅以下链接: Google 地理编码 API

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
geocoder = "0.1.0"

用法

使用示例

use geocoder::Geocoder;
use std::env;

#[tokio::main]
async fn main() {
    // Set your API key as an environment variable.
    let api_key = env::var("GEOCODER_API_KEY").expect("GEOCODER_API_KEY must be set");

    // Create a new Geocoder instance.
    let geocoder = Geocoder::new(&api_key);

    // Geocode an address to a location (latitude, longitude).
    match geocoder.geocode("1600 Amphitheatre Parkway, Mountain View, CA").await {
        Ok(address) => {
            println!("Formatted address: {}", address.formatted_address);
        }
        Err(e) => eprintln!("Error: {}", e),
    }
}

示例

将地址转换为纬度和经度

use geocoder::Geocoder;
use std::env;

#[tokio::main]
async fn main() {
    let api_key = env::var("GEOCODER_API_KEY").expect("GEOCODER_API_KEY must be set");
    let geocoder = Geocoder::new(&api_key);
    match geocoder.geocode("1600 Amphitheatre Parkway, Mountain View, CA").await {
        Ok(address) => {
            println!("Formatted address: {}", address.formatted_address);
            println!("Latitude: {}", address.geometry.location.lat);
            println!("Longitude: {}", address.geometry.location.lng);
        }
        Err(e) => eprintln!("Error: {}", e),
    }
}

逆向地理编码 将纬度和经度转换为地址

use geocoder::{Geocoder, structs::LatLng};
use std::env;

#[tokio::main]
async fn main() {
    let api_key = env::var("GEOCODER_API_KEY").expect("GEOCODER_API_KEY must be set");
    let geocoder = Geocoder::new(&api_key);
    let location = LatLng { lat: 37.4224764, lng: -122.0842499 };
    match geocoder.reverse_geocode(location).await {
        Ok(addresses) => {
            if let Some(address) = addresses.first() {
                println!("Formatted address: {}", address.formatted_address);
            }
        }
        Err(e) => eprintln!("Error: {}", e),
    }
}

许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。

贡献

  1. 创建一个问题(可选)
  2. 分支仓库
  3. 进行更改
  4. 提交更改(代码示例:git commit -am 'Some cool feature'
  5. 推送到分支(代码示例:git push origin master
  6. 创建一个新的拉取请求

使用异步函数

通过更多努力,您可以使用 异步 函数与 tokio 一起使用。

use geocoder::Geocoder;
use std::env;
use tokio::task;

async fn geocode_address(geocoder: Geocoder, address: &str) {
    match geocoder.geocode(address).await {
        Ok(result) => {
            println!("Formatted address: {}", result.formatted_address);
        }
        Err(e) => eprintln!("Error: {}", e),
    }
}

#[tokio::main]
async fn main() {
    let api_key = env::var("GEOCODER_API_KEY").expect("GEOCODER_API_KEY must be set");
    let geocoder = Geocoder::new(&api_key);
    let address = "1600 Amphitheatre Parkway, Mountain View, CA";

    let handle = task::spawn(async move {
        geocode_address(geocoder, address).await;
    });

    handle.await.unwrap();
}

依赖项

~6–17MB
~246K SLoC