优化地理编码时的配额使用

地理编码是对地址进行转换的过程(“1600 Amphitheatre Parkway, Mountain View, CA”)转换为地理坐标 (37.423021, -122.083739),可用于放置 标记或定位地图。Google Maps Platform API 提供两种 地理编码方法:

  • 客户端地理编码 该代码会在浏览器中执行,通常在 响应用户操作。Maps JavaScript API 提供 类。如需了解此方法,请参阅 Maps JavaScript API 文档
  • HTTP 服务器端地理编码 这样您的服务器就可以 用于地理编码的 Google 服务器。Geocoding API 是一个面向网络的 服务账号。通常,您可以将此 与在服务器端运行的其他代码结合使用。服务器端地理编码 请参阅 Geocoding API 文档

客户端和服务器端地理编码示例

以下是一个客户端地理编码示例,该示例采用 对其进行地理编码,将地图中心移至该位置,再添加一个 此处为地图标记:

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

如需查看更多示例,请参阅 Maps JavaScript API 文档

下面是一个使用 Python 进行服务器端 地理编码请求:

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)

jsongeocode = response.read()

这段代码生成的 JSON 对象包含以下内容:

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "California",
      "short_name": "CA",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

服务器端地理编码器还提供 XML 格式作为 JSON。如需查看更多示例,请参阅 Geocoding API 文档和 Python 版客户端库 和其他语言。

配额和费用注意事项

地理编码费用、配额和速率限制决定了 文档。

费用

地理编码请求不再使用每日配额 (QPD) 限制。 而是每个地理编码请求,无论是客户端通过浏览器请求,还是服务器端通过 Geocoding API 网络服务, 按每个价格单独收费。 要管理使用费,请考虑: 设置每日配额上限

速率限制

地理编码服务的速率限制为 3,000 QPM(每分钟查询), 则等于客户端和服务器端查询次数之和。

定期(例如 在移动应用中,如果您的所有用户 同时提出多个请求(例如,在 分钟)。为避免出现这种情况,请考虑以下某种方法:

缓存

请参阅 Geocoding API 政策中所述。

使用客户端地理编码的时机

简短的回答是“几乎总是”。原因如下:

  • 客户端请求和响应能够提供更快速、 为用户提供良好的互动体验
  • 客户端请求可包含用于改进地理编码的信息 质量:用户语言、区域和视口。

尤其是在对地址进行地理编码时,客户端地理编码是最佳选择 基于用户的输入生成自定义文本。

客户端地理编码有两个基本架构:

  • 地理编码和显示完全在浏览器中进行。例如, 用户在您的网页上输入地址。应用对其进行地理编码。然后 您的网页会使用该地理编码在地图上创建一个标记。或者,您的应用 进行一些简单的分析。系统不会向您的服务器发送任何数据。 这可以减轻服务器的负荷。
  • 先在浏览器中进行地理编码,然后将其发送至服务器。 例如,用户在您的页面上输入地址。您的应用 在浏览器中对其进行地理编码然后,应用将数据发送到您的服务器。通过 服务器返回一些数据(如附近的景点)。本次 可让您根据自己的数据自定义响应。

使用服务器端地理编码的时机

服务器端地理编码最适合用于 要求您在不从客户端输入的情况下对地址进行地理编码。常见示例 您得到一个独立于用户输入的数据集, 例如,假设有一组固定的、有限的已知 需要进行地理编码的地址。服务器端地理编码可以 还可用作客户端地理编码失败时的备份。

一些可能的顾虑包括对用户来说不必要的增加延迟, 也会导致地理编码结果的质量低于客户端 相关信息。