你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure Maps 搜索服务来搜索位置

搜索服务是一组 REST API,旨在帮助开发人员按名称、类别和其他地理信息搜索地址、位置和业务列表。 除了支持传统的地理编码以外,该服务还可以根据纬度和经度对地址和十字街执行反向地理编码。 在诸如路线天气服务之类的其他 Azure Maps 中,可将搜索返回的纬度和经度值用作参数。

本文演示了以下内容的操作方法:

  • 使用搜索地址请求地址(地理编码地址位置)的纬度和经度坐标。
  • 使用模糊搜索搜索地址或兴趣点 (POI)。
  • 使用反向地址搜索,将坐标位置转换为街道地址。
  • 使用搜索地址反向十字街将坐标位置转换为人类可理解的十字街,这在跟踪从设备或资产接收 GPS 源的应用程序以及希望知道坐标所在位置的应用程序时最常需要。

先决条件

重要

在本文的 URL 示例中,需要将 {Your-Azure-Maps-Subscription-key} 替换为你的 Azure Maps 订阅密钥。

本文使用 bruno 应用程序,但你也可以选择其他 API 开发环境。

请求地址的纬度和经度(地理编码)

本部分中的示例使用获取搜索地址将地址转换为纬度和经度坐标。 此过程也称为“地理编码”。 除了返回坐标外,响应还会返回详细的地址属性,例如街道、邮政编码、市政当局和国家/地区信息。

提示

如果你有一组需执行地理编码的地址,则可以使用发布搜索地址批处理,以通过单个请求发送一批查询。

  1. 打开 bruno 应用,选择“新建请求”以创建请求。 在“新建请求”窗口中,将“类型”设置为 HTTP。 输入请求的“名称”。

  2. URL 下拉列表中选择 GET HTTP 方法,然后输入以下 URL:

    https://atlas.microsoft.com/search/address/json?&subscription-key={Your-Azure-Maps-Subscription-key}&api-version=1.0&language=en-US&query=400 Broad St, Seattle, WA 98109
    
  3. 选择“创建”按钮。

  4. 选择“运行”按钮。

    此请求会搜索特定地址:400 Broad St, Seattle, WA 98109。 接下来,搜索具有多个可能位置的地址。

  5. 在“Params”部分中,将 query 键更改为 400 Broad, Seattle,然后选择“运行”按钮。

    搜索地址

  6. 接下来,请尝试将 query 键设置为 400 Broa,然后选择“运行”按钮。

    响应包括来自多个国家/地区的结果。 若要让结果在地理上偏近用户的相关区域,始终要在请求中添加尽可能多的位置详细信息。

模糊搜索支持标准单行搜索和自由格式搜索。 如果不知道搜索请求的用户输入类型,我们建议使用 Azure Maps 模糊搜索 API。 此查询输入可以是完整或部分地址。 它还可以是兴趣点 (POI) 标记,如 POI 名称、POI 类别或品牌名称。 此外,若要改善搜索结果的相关性,请使用坐标位置和半径或通过定义边界框来限制查询结果。

提示

大多数搜索查询默认指定 maxFuzzyLevel=1,以提高性能并减少不正常的结果。 使用 maxFuzzyLevelminFuzzyLevel 参数调整模糊度。 有关 maxFuzzyLevel 的详细信息以及所有可选参数的完整列表,请参阅模糊搜索 URI 参数

本部分中的示例使用 Fuzzy Search 在整个世界范围内搜索“pizza”,然后在特定国家/地区范围内搜索。 最后,演示如何使用坐标位置和半径来将搜索限定在特定区域内,并限制返回的结果数。

重要

若要让结果在地理上偏近用户的相关区域,始终要添加尽可能多的位置详细信息。 有关详细信息,请参阅搜索最佳做法

  1. 打开 bruno 应用,选择“新建请求”以创建请求。 在“新建请求”窗口中,将“类型”设置为 HTTP。 输入请求的“名称”。

  2. URL 下拉列表中选择 GET HTTP 方法,然后输入以下 URL:

    https://atlas.microsoft.com/search/fuzzy/json?api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&language=en-US&query=pizza
    

    注意

    URL 路径中的 json 属性确定响应格式。 为便于使用和阅读,本文使用 json。 若要查找其他受支持的响应格式,请参阅 URI 参数参考文档中的 format 参数定义。

  3. 选择“运行”按钮,然后查看响应正文。

    “pizza”的模糊查询字符串返回了“pizza”和“restaurant”类别中的 10 个兴趣点 (POI) 结果。 每个结果都包含相应位置的街道地址、纬度和经度值、视区和入口点。 现在此查询的结果各不相同,且与任何参照位置都不相关。

    在下一步中,你将使用 countrySet 参数,以便仅指定应用程序需要覆盖的国家/地区。 有关支持的国家/地区的完整列表,请参阅 Azure Maps 地理编码覆盖

  4. 默认行为是在全球搜索,这样可能会返回不需要的结果。 接下来,仅在美国范围内搜索 pizza。 将 countrySet 键添加到“参数”部分,并将其值设置为 US。 将 countrySet 键设置为 US 会将结果限定在美国范围内。

    在美国范围内搜索 pizza

    结果现在受限为国家/地区代码,查询返回了美国境内的比萨餐馆。

  5. 若要执行更具针对性的搜索,可以在纬度/经度坐标对的范围内搜索。 以下示例使用西雅图太空针塔的维度/经度坐标。 由于我们只想返回 400 米半径范围内的结果,因此我们添加 radius 参数。 此外,我们还添加 limit 参数,将结果限制为最近的五个比萨店位置。

    在“参数”部分中,添加以下键/值对:

    密钥
    lat 47.620525
    lon -122.349274
    radius 400
    limit 5
  6. 选择运行。 响应包含西雅图太空针塔附近的比萨店。

获取搜索地址反向将坐标转换为人类可理解的街道地址。 此 API 通常用于使用 GPS 源并且要发现位于特定坐标点的地址的应用程序。

重要

若要让结果在地理上偏近用户的相关区域,始终要添加尽可能多的位置详细信息。 有关详细信息,请参阅搜索最佳做法

提示

如果你有一组需要执行反向地理编码的坐标位置,则可以使用 发布搜索地址反向批处理,以通过单个请求发送一批查询。

此示例演示了使用几个可用的可选参数执行反向搜索。 有关可选参数的完整列表,请参阅反向搜索参数

  1. 打开 bruno 应用,选择“新建请求”以创建请求。 在“新建请求”窗口中,将“类型”设置为 HTTP。 输入请求的“名称”。

  2. URL 下拉列表中选择 GET HTTP 方法,然后输入以下 URL:

    https://atlas.microsoft.com/search/address/reverse/json?api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&language=en-US&query=47.591180,-122.332700
    
  3. 选择“运行”按钮,并查看响应正文。 应该会看到一个查询结果。 该响应包括有关 Safeco Field 的关键地址信息。

  4. 接下来,在“参数”部分中,添加以下键/值对:

    返回
    数字 1 响应可能包含街道的边侧(左/右)以及该数字的偏移位置。
    returnSpeedLimit true 返回该地址的速度限制。
    returnRoadUse true 返回该地址的道路使用类型。 有关所有可能的道路使用类型,请参阅道路使用类型
    returnMatchType true 返回匹配类型。 若要查看所有可能的值,请参阅反向地址搜索结果

    执行反向搜索。

  5. 选择“运行”按钮,并查看响应正文。

  6. 接下来,添加 entityType 键,并将其值设置为 MunicipalityentityType 键覆盖上一步中的 returnMatchType 键。 returnSpeedLimitreturnRoadUse 还需要删除,因为你正在请求有关市政当局的信息。 有关所有可能的实体类型,请参阅实体类型

    搜索反向 entityType。

  7. 选择“运行”按钮。 将结果与步骤 5 中返回的结果进行比较。 由于请求的实体类型现在为 municipality,因此响应不包含街道地址信息。 此外,返回的 geometryId 可用于通过 Azure Maps 获取搜索多边形 API 请求边界多边形。

提示

有关这些参数以及其他参数的详细信息,请参阅反向搜索参数

此示例演示如何根据地址的坐标搜索十字街。

  1. 打开 bruno 应用,选择“新建请求”以创建请求。 在“新建请求”窗口中,将“类型”设置为 HTTP。 输入请求的“名称”。

  2. URL 下拉列表中选择 GET HTTP 方法,然后输入以下 URL:

    https://atlas.microsoft.com/search/address/reverse/crossstreet/json?api-version=1.0&subscription-key={Your-Azure-Maps-Subscription-key}&language=en-US&query=47.591180,-122.332700
    
  3. 选择“运行”按钮,并查看响应正文。 注意,响应包含 South Atlantic StreetcrossStreet 值。

后续步骤