您可以将 Places 服务和 Geocoding API 与 Maps SDK for Android 搭配使用,以搜索区域并获取有关地点的更多信息。Places 服务和 Geocoding API 是强大且稳定的替代方案,可以用来获取地点 ID。如果您已经在使用地点 ID,则可以重复使用这些 ID 来设置边界的数据驱动型样式。
您可以通过以下方式将地点服务和地理编码服务添加到您的 Maps SDK for Android 应用:
- Places SDK for Android 是一个 Android 库,包含用于返回地点相关信息的方法。
- Places API 可通过 HTTP 请求来返回有关地点的信息。
- Geocoder 类可根据用户输入的内容动态地进行地理编码和反向地理编码。
- Geocoding API 可用于对静态的已知地址进行地理编码。
使用地点服务
使用新版文本搜索功能查找地点 ID
您可以在 Places API 中使用 Text Search (New) REST API,通过在字段掩码中指定 places.id
来获取包含区域数据的地点 ID。使用“文本搜索(新)”请求地点 ID 不会产生任何费用。了解详情。
例如,如需获取加利福尼亚州特立尼达市的地点 ID,您可以执行以下 API 调用:
curl -X POST -d '{ "textQuery" : "Trinidad, CA" }' \ -H 'Content-Type: application/json' -H 'X-Goog-Api-Key: API_KEY' \ -H 'X-Goog-FieldMask: places.id' \ 'https://places.googleapis.com/v1/places:searchText'
使用地点自动补全功能查找区域
Places SDK for Android 中的地点自动补全服务让您的用户可以方便地搜索区域。如需将地点自动补全服务配置为仅返回区域,请使用 AutocompleteSupportFragment.setTypesFilter(List)
将类型过滤条件设置为 PlaceTypes.REGIONS
。
获取某个区域的地点详情
Places SDK for Android 中的地点详情服务会返回某个区域的数据,这项功能非常有用。例如,您可以:
- 根据地点名称搜索边界地点 ID。
- 获取视口以缩放至相应边界。
- 获取边界的地图项类型(例如
locality
)。 - 获取采用特定格式的地址。美国区域的地址会解析为“地点名称,州,国家”(例如“Ottumwa, IA, USA”)。
- 获取照片等其他实用数据。
使用 Geocoding API
借助 Geocoding API,您可以将地址转换为经纬度坐标以及地点 ID,也可以将经纬度坐标或地点 ID 转换为地址。在设置边界的数据驱动型样式时,您还可以搭配采用以下措施:
- 使用地理编码服务获取某个区域的视口。
- 在地理编码调用中应用组成部分过滤,以获取 1 至 4 级行政区、市行政区或邮政编码对应的地点 ID。
- 使用反向地理编码按经纬度坐标查找地点 ID,甚至返回特定位置的所有组成部分的地点 ID。
以下示例使用地址(经过网址转义)向 Geocoding API 发出请求:
https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Amphitheatre%20Pkwy%20Mountain%20View%20CA&key=YOUR_API_KEY
您可以使用反向地理编码来查找地点 ID。下例中的地理编码服务函数会返回指定纬度和经度坐标处所有地址组成部分的地点 ID:
https://maps.googleapis.com/maps/api/geocode/json?latlng=41.864182,-87.676930&key=YOUR_API_KEY
将反向地理编码与组成部分过滤结合使用,以获取指定位置处以下一种或多种类型的地址组成部分:
administrativeArea
country
locality
postalCode
下例中的函数说明了如何使用地理编码服务,通过反向地理编码添加组成部分限制,从而获取指定位置处仅限 locality
类型的所有地址组成部分:
https://maps.googleapis.com/maps/api/geocode/json?latlng=41.864182,-87.676930&result_type=locality&key=YOUR_API_KEY