地理编码是对地址进行转换的过程(“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(每分钟查询), 则等于客户端和服务器端查询次数之和。
定期(例如 在移动应用中,如果您的所有用户 同时提出多个请求(例如,在 分钟)。为避免出现这种情况,请考虑以下某种方法:
- 为请求引入随机间隔(抖动)。确保请求 在整个用户群中是随机的。
- 如果是针对 Android 进行开发,请使用不完全匹配的 重复闹钟。
- 如果针对 Android 进行开发,请选择适当的位置 策略。
缓存
请参阅 Geocoding API 政策中所述。
使用客户端地理编码的时机
简短的回答是“几乎总是”。原因如下:
- 客户端请求和响应能够提供更快速、 为用户提供良好的互动体验
- 客户端请求可包含用于改进地理编码的信息 质量:用户语言、区域和视口。
尤其是在对地址进行地理编码时,客户端地理编码是最佳选择 基于用户的输入生成自定义文本。
客户端地理编码有两个基本架构:
- 地理编码和显示完全在浏览器中进行。例如, 用户在您的网页上输入地址。应用对其进行地理编码。然后 您的网页会使用该地理编码在地图上创建一个标记。或者,您的应用 进行一些简单的分析。系统不会向您的服务器发送任何数据。 这可以减轻服务器的负荷。
- 先在浏览器中进行地理编码,然后将其发送至服务器。 例如,用户在您的页面上输入地址。您的应用 在浏览器中对其进行地理编码然后,应用将数据发送到您的服务器。通过 服务器返回一些数据(如附近的景点)。本次 可让您根据自己的数据自定义响应。
使用服务器端地理编码的时机
服务器端地理编码最适合用于 要求您在不从客户端输入的情况下对地址进行地理编码。常见示例 您得到一个独立于用户输入的数据集, 例如,假设有一组固定的、有限的已知 需要进行地理编码的地址。服务器端地理编码可以 还可用作客户端地理编码失败时的备份。
一些可能的顾虑包括对用户来说不必要的增加延迟, 也会导致地理编码结果的质量低于客户端 相关信息。