自动补全(新)

请选择平台: Android iOS JavaScript 网络服务

“自动补全(新)”服务是一项 Web 服务,可在 HTTP 请求的响应中返回地点预测结果和查询预测结果。在请求中,指定文本搜索字符串和用于控制搜索区域的地理边界。

自动补全(新)服务可以根据输入的完整字词和子字符串进行匹配,从而解析地点名称、地址和 Plus Codes。因此,应用可以在用户输入内容时发送查询,从而即时提供地点和查询预测。

Autocomplete(新)API 的响应可以包含两种类型的预测:

  • 地点预测:根据指定的输入文本字符串和搜索区域提供的地点,例如商家、地址和地图注点。默认情况下,系统会返回地点预测结果。
  • 查询预测:与输入文本字符串和搜索区域匹配的查询字符串。默认情况下,查询预测不会返回。使用 includeQueryPredictions 请求参数将查询预测结果添加到响应中。

例如,您可以使用包含部分用户输入内容(“Sicilian piz”)的字符串作为输入来调用 API,并将搜索区域限制为加利福尼亚州旧金山。然后,响应中会包含与搜索字符串和搜索区域匹配的地点预测结果列表(例如名为“Sicilian Pizza Kitchen”的餐厅),以及相应地点的详细信息。

系统会向用户显示返回的地点预测结果,以帮助他们选择所需的地点。您可以发出地点详情(新)请求,详细了解所返回的任何地点预测。

响应还可以包含与搜索字符串和搜索区域(例如“Sicilian Pizza & Pasta”)匹配的查询预测结果列表。响应中的每个查询预测结果都包含一个 text 字段,其中包含建议的文本搜索字符串。将该字符串用作文本搜索(新版)的输入,以执行更详细的搜索。

借助 API Explorer,您可以发出实时请求,以便熟悉 API 和 API 选项:

试试看!

“自动补全(新)”请求

自动补全(新)请求是对以下格式的网址的 HTTP POST 请求:

https://places.googleapis.com/v1/places:autocomplete

将 JSON 请求正文或标头中的所有参数作为 POST 请求的一部分传递。例如:

curl -X POST -d '{
  "input": "pizza",
  "locationBias": {
    "circle": {
      "center": {
        "latitude": 37.7937,
        "longitude": -122.3965
      },
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

关于响应

“自动补全(新)”会返回 JSON 对象作为响应。在回复中:

  • suggestions 数组包含所有预测的地点和查询,并会根据预测的相关性对其进行排序。每个地点都由 placePrediction 字段表示,每个查询都由 queryPrediction 字段表示。
  • placePrediction 字段包含有关单个地点预测的详细信息,包括地点 ID 和文本说明。
  • queryPrediction 字段包含有关单个预测查询的详细信息。

完整的 JSON 对象的格式如下:

{
  "suggestions": [
    {
      "placePrediction": {
        "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "text": {
          "text": "Amoeba Music, Haight Street, San Francisco, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }]
        },
      ...
    },
    {
      "queryPrediction": {
        "text": {
          "text": "Amoeba Music",
          "matches": [
            {
              "endOffset": 6
            }]
        },
        ...
    }
  ...]
}

必需参数

  • 输入

    要搜索的文本字符串。指定完整字词和子字符串、地点名称、地址和 Plus Codes。 “自动补全(新)”服务会根据此字符串返回候选匹配项,并按照其判断的相关程度对结果排序。

可选参数

  • FieldMask

    通过创建响应字段掩码,指定要在响应中返回的字段列表。 使用 HTTP 标头 X-Goog-FieldMask 将响应字段掩码传递给该方法。

    指定要返回的建议字段列表(以英文逗号分隔)。例如,检索建议的 suggestions.placePrediction.placesuggestions.placePrediction.text

      X-Goog-FieldMask: places.displayName,places.formattedAddress

    使用 * 可以检索所有字段。

      X-Goog-FieldMask: *
  • includedPrimaryTypes

    地点只能具有 表格 A表格 B 中列出的一种主要类型。例如,主要类型可能是 "mexican_restaurant""steak_house"

    默认情况下,该 API 会根据 input 参数返回所有地点,无论与地点关联的主要类型值如何。通过传递 includedPrimaryTypes 参数,将结果限制为特定主要类型或主要类型。

    使用此参数可指定 表格 A表格 B 中的最多五个类型值。地点必须与指定的主要类型值之一匹配,才能包含在响应中。

    此参数也可以改为包含 (regions)(cities) 之一。 (regions) 类型集合过滤器适用于区域或分区,例如社区和邮政编码。(cities) 类型集合用于过滤 Google 识别为城市的地点。

    如果出现以下情况,请求会被拒绝并显示 INVALID_REQUEST 错误:

    • 指定了超过五种类型。
    • 除了 (cities)(regions) 之外,还指定了任何类型。
    • 指定了任何无法识别的类型。
  • includePureServiceAreaBusinesses

    如果设置为 true,则响应中会包含直接上门或为客户提供上门服务,但没有实体营业地点的商家。如果设置为 false,则 API 仅返回有实际营业地点的商家。

  • includeQueryPredictions

    如果为 true,则响应中同时包含地点和查询预测结果。默认值为 false,表示响应仅包含地点预测结果。

  • includedRegionCodes

    仅包含指定地区列表中的结果,以最多 15 个 ccTLD(“顶级域名”)双字符值的数组形式指定。如果省略,则不会对响应应用任何限制。例如,要将区域限制为德国和法国:

        "includedRegionCodes": ["de", "fr"]

    如果您同时指定 locationRestrictionincludedRegionCodes,结果将位于这两项设置的交集区域中。

  • inputOffset

    从零开始的 Unicode 字符偏移量,表示 input 中的光标位置。 光标位置会影响返回的预测结果。如果为空,则默认为 input 的长度。

  • languageCode

    返回结果时使用的首选语言。如果 input 中使用的语言不同于 languageCode 指定的值,或者返回的地点没有从本地语言翻译为 languageCode 的译文,则结果可能会混用多种语言。

    • 您必须使用 IETF BCP-47 语言代码来指定首选语言。
    • 如果未提供 languageCode,API 会使用 Accept-Language 标头中指定的值。如果未指定这两项,则默认值为 en。如果您指定的语言代码无效,则 API 会返回 INVALID_ARGUMENT 错误。
    • 首选语言对 API 选择返回的结果集以及结果的返回顺序有较小的影响。这也会影响 API 纠正拼写错误的能力。
    • API 会尝试提供用户和当地人都能看懂的街道地址,同时反映用户输入的内容。地点预测的格式因每次请求中的用户输入而异。
      • 系统会先选择 input 参数中的匹配字词,使用与 languageCode 参数指示的语言偏好设置一致的名称(如果有),否则使用与用户输入最匹配的名称。
      • 只有在选择与 input 参数中的字词匹配的字词后,系统才会以当地语言(尽可能使用用户能看懂的文字)设置街道地址的格式。
      • 选择与 input 参数中的字词匹配的匹配字词后,所有其他地址均以首选语言返回。如果某个名称没有以首选语言提供,API 会使用最接近的匹配项。
  • locationBias 或 locationRestriction

    您可以指定 locationBiaslocationRestriction 来定义搜索区域,但不能同时指定这两者。您可以将 locationRestriction 视为指定结果必须位于其中的区域,将 locationBias 视为指定结果必须位于附近但可以位于该区域之外的区域。

    • locationBias

      指定要搜索的区域。此位置可用作偏差,这意味着可以返回指定位置周围的结果,包括指定区域以外的结果。

    • locationRestriction

      指定要搜索的区域。系统不会返回指定区域以外的结果。

    locationBiaslocationRestriction 区域指定为矩形视口圆形

    • 圆形由中心点和半径(以米为单位)定义。半径必须介于 0.0 和 50000.0 之间(含 0.0 和 50000.0)。默认值为 0.0。对于 locationRestriction,您必须将半径设置为大于 0.0 的值。否则,请求将不会返回任何结果。

      例如:

      "locationBias": {
        "circle": {
          "center": {
            "latitude": 37.7937,
            "longitude": -122.3965
          },
          "radius": 500.0
        }
      }
    • 矩形是纬度-经度视口,表示为两个对角的 low 和高点。视口被视为封闭区域,也就是说,视口包含其边界。纬度边界必须介于 -90 度和 90 度(包括这两个数值)之间,经度边界必须介于 -180 度和 180 度(包括这两个数值)之间:

      • 如果 low = high,则视口由该单个点组成。
      • 如果 low.longitude > high.longitude,则经度范围会反转(视口跨越 180 度经线)。
      • 如果 low.longitude = -180 度且 high.longitude = 180 度,视口将包含所有经度。
      • 如果 low.longitude = 180 度且 high.longitude = -180 度,则经度范围为空。

      必须填充 lowhigh,并且表示的框不能为空。视口为空会导致错误。

      例如,此视口完全包含纽约市:

      "locationBias": {
        "rectangle": {
          "low": {
            "latitude": 40.477398,
            "longitude": -74.259087
          },
          "high": {
            "latitude": 40.91618,
            "longitude": -73.70018
          }
        }
      }
  • 用于计算距目的地直线距离的起点(返回为 distanceMeters)。如果省略此值,将不会返回直线距离。必须指定为经纬度坐标:

    "origin": {
        "latitude": 40.477398,
        "longitude": -74.259087
    }
  • regionCode

    用于设置响应格式的地区代码,指定为 ccTLD(“顶级域名”)双字符值。大多数 ccTLD 代码都与 ISO 3166-1 代码相同,但也有一些需要注意的例外情况。例如,英国的 ccTLD 为“uk”(.co.uk),而其 ISO 3166-1 代码为“gb”(特指“大不列颠及北爱尔兰联合王国”)。

    如果您指定的地区代码无效,则该 API 会返回 INVALID_ARGUMENT 错误。根据适用法律,该参数可能会影响结果。

  • sessionToken

    会话令牌是用户生成的字符串,用于将“自动补全(新)”调用作为“会话”进行跟踪。“自动补全”(新)使用会话令牌将用户自动补全搜索的查询和选择阶段归入不同的会话,以便进行结算。如需了解详情,请参阅会话令牌

自动补全(新)示例

使用 locationRestriction 将搜索范围限制在某个区域

locationRestriction 用于指定要搜索的区域。系统不会返回指定区域以外的结果。在以下示例中,您使用 locationRestriction 将请求限制为以旧金山为中心、半径为 5000 米的圆圈

curl -X POST -d '{
  "input": "Art museum",
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 5000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

suggestions 数组中包含指定区域内的所有结果:

  {
    "suggestions": [
      {
        "placePrediction": {
          "place": "places/ChIJkQQVTZqAhYARHxPt2iJkm1Q",
          "placeId": "ChIJkQQVTZqAhYARHxPt2iJkm1Q",
          "text": {
            "text": "Asian Art Museum, Larkin Street, San Francisco, CA, USA",
            "matches": [
              {
                "startOffset": 6,
                "endOffset": 16
              }
            ]
          },
          "structuredFormat": {
            "mainText": {
              "text": "Asian Art Museum",
              "matches": [
                {
                  "startOffset": 6,
                  "endOffset": 16
                }
              ]
            },
            "secondaryText": {
              "text": "Larkin Street, San Francisco, CA, USA"
            }
          },
          "types": [
            "establishment",
            "museum",
            "point_of_interest"
          ]
        }
      },
      {
        "placePrediction": {
          "place": "places/ChIJI7NivpmAhYARSuRPlbbn_2w",
          "placeId": "ChIJI7NivpmAhYARSuRPlbbn_2w",
          "text": {
            "text": "de Young Museum, Hagiwara Tea Garden Drive, San Francisco, CA, USA",
            "matches": [
              {
                "endOffset": 15
              }
            ]
          },
          "structuredFormat": {
            "mainText": {
              "text": "de Young Museum",
              "matches": [
                {
                  "endOffset": 15
                }
              ]
            },
            "secondaryText": {
              "text": "Hagiwara Tea Garden Drive, San Francisco, CA, USA"
            }
          },
          "types": [
            "establishment",
            "point_of_interest",
            "tourist_attraction",
            "museum"
          ]
        }
      },
      /.../
    ]
  }

您还可以使用 locationRestriction 将搜索范围限制为矩形视口。以下示例将请求限制为旧金山市区:

  curl -X POST -d '{
    "input": "Art museum",
    "locationRestriction": {
      "rectangle": {
        "low": {
          "latitude": 37.7751,
          "longitude": -122.4219
        },
        "high": {
          "latitude": 37.7955,
          "longitude": -122.3937
        }
      }
    }
  }' \
  -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
  https://places.googleapis.com/v1/places:autocomplete

结果包含在 suggestions 数组中:

  {
    "suggestions": [
      {
        "placePrediction": {
          "place": "places/ChIJkQQVTZqAhYARHxPt2iJkm1Q",
          "placeId": "ChIJkQQVTZqAhYARHxPt2iJkm1Q",
          "text": {
            "text": "Asian Art Museum, Larkin Street, San Francisco, CA, USA",
            "matches": [
              {
                "startOffset": 6,
                "endOffset": 16
              }
            ]
          },
          "structuredFormat": {
            "mainText": {
              "text": "Asian Art Museum",
              "matches": [
                {
                  "startOffset": 6,
                  "endOffset": 16
                }
              ]
            },
            "secondaryText": {
              "text": "Larkin Street, San Francisco, CA, USA"
            }
          },
          "types": [
            "point_of_interest",
            "museum",
            "establishment"
          ]
        }
      },
      {
        "placePrediction": {
          "place": "places/ChIJyQNK-4SAhYARO2DZaJleWRc",
          "placeId": "ChIJyQNK-4SAhYARO2DZaJleWRc",
          "text": {
            "text": "International Art Museum of America, Market Street, San Francisco, CA, USA",
            "matches": [
              {
                "startOffset": 14,
                "endOffset": 24
              }
            ]
          },
          "structuredFormat": {
            "mainText": {
              "text": "International Art Museum of America",
              "matches": [
                {
                  "startOffset": 14,
                  "endOffset": 24
                }
              ]
            },
            "secondaryText": {
              "text": "Market Street, San Francisco, CA, USA"
            }
          },
          "types": [
            "museum",
            "point_of_interest",
            "tourist_attraction",
            "art_gallery",
            "establishment"
          ]
        }
      }
    ]
  }

使用 locationBias 将搜索范围限定在某个区域内

使用 locationBias 时,相应位置会作为偏向项,这意味着系统可以返回指定位置周围的结果,包括指定区域之外的结果。在以下示例中,您将请求偏向于旧金山市区:

curl -X POST -d '{
  "input": "Amoeba",
  "locationBias": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 5000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

现在,结果包含更多内容,包括 5000 米半径范围之外的结果:

{
  "suggestions": [
    {
      "placePrediction": {
        "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "text": {
          "text": "Amoeba Music, Haight Street, San Francisco, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }
          ]
        },
        "structuredFormat": {
          "mainText": {
            "text": "Amoeba Music",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "secondaryText": {
            "text": "Haight Street, San Francisco, CA, USA"
          }
        },
        "types": [
          "electronics_store",
          "point_of_interest",
          "store",
          "establishment",
          "home_goods_store"
        ]
      }
    },
    {
      "placePrediction": {
        "place": "places/ChIJr7uwwy58hYARBY-e7-QVwqw",
        "placeId": "ChIJr7uwwy58hYARBY-e7-QVwqw",
        "text": {
          "text": "Amoeba Music, Telegraph Avenue, Berkeley, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }
          ]
        },
        "structuredFormat": {
          "mainText": {
            "text": "Amoeba Music",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "secondaryText": {
            "text": "Telegraph Avenue, Berkeley, CA, USA"
          }
        },
        "types": [
          "electronics_store",
          "point_of_interest",
          "establishment",
          "home_goods_store",
          "store"
        ]
      }
    },
    ...
  ]
}

您还可以使用 locationBias 将搜索范围限制为矩形视口。以下示例将请求限制为旧金山市区:

  curl -X POST -d '{
    "input": "Amoeba",
    "locationBias": {
      "rectangle": {
        "low": {
          "latitude": 37.7751,
          "longitude": -122.4219
        },
        "high": {
          "latitude": 37.7955,
          "longitude": -122.3937
        }
      }
    }
  }' \
  -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
  https://places.googleapis.com/v1/places:autocomplete

虽然矩形视口内的搜索结果显示在响应中,但由于偏差,有些结果超出了定义的边界。结果也包含在 suggestions 数组中:

  {
    "suggestions": [
      {
        "placePrediction": {
          "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko",
          "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko",
          "text": {
            "text": "Amoeba Music, Haight Street, San Francisco, CA, USA",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "structuredFormat": {
            "mainText": {
              "text": "Amoeba Music",
              "matches": [
                {
                  "endOffset": 6
                }
              ]
            },
            "secondaryText": {
              "text": "Haight Street, San Francisco, CA, USA"
            }
          },
          "types": [
            "point_of_interest",
            "store",
            "establishment"
          ]
        }
      },
      {
        "placePrediction": {
          "place": "places/ChIJr7uwwy58hYARBY-e7-QVwqw",
          "placeId": "ChIJr7uwwy58hYARBY-e7-QVwqw",
          "text": {
            "text": "Amoeba Music, Telegraph Avenue, Berkeley, CA, USA",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "structuredFormat": {
            "mainText": {
              "text": "Amoeba Music",
              "matches": [
                {
                  "endOffset": 6
                }
              ]
            },
            "secondaryText": {
              "text": "Telegraph Avenue, Berkeley, CA, USA"
            }
          },
          "types": [
            "point_of_interest",
            "store",
            "establishment"
          ]
        }
      },
      {
        "placePrediction": {
          "place": "places/ChIJRdmfADq_woARYaVhnfQSUTI",
          "placeId": "ChIJRdmfADq_woARYaVhnfQSUTI",
          "text": {
            "text": "Amoeba Music, Hollywood Boulevard, Los Angeles, CA, USA",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "structuredFormat": {
            "mainText": {
              "text": "Amoeba Music",
              "matches": [
                {
                  "endOffset": 6
                }
              ]
            },
            "secondaryText": {
              "text": "Hollywood Boulevard, Los Angeles, CA, USA"
            }
          },
          "types": [
            "point_of_interest",
            "store",
            "establishment"
          ]
        }
      },
    /.../
    ]
  }

使用 includePrimaryType

使用 includedPrimaryTypes 参数最多可指定 表格 A表格 B 中的五个类型值,或者仅指定 (regions) 或仅指定 (cities)。地点必须与指定的主要类型值之一匹配,才能包含在响应中。

在以下示例中,您指定了“Soccer”的 input 字符串,并使用 includedPrimaryTypes 参数将结果限制为类型为 "sporting_goods_store" 的场所:

curl -X POST -d '{
  "input": "Soccer",
  "includedPrimaryTypes": ["sporting_goods_store"],
  "locationBias": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

如果您省略 includedPrimaryTypes 参数,则结果可能会包含您不想要类型的建筑物,例如 "athletic_field"

请求预测查询

默认情况下,查询预测不会返回。使用 includeQueryPredictions 请求参数将查询预测结果添加到响应中。例如:

curl -X POST -d '{
  "input": "Amoeba",
  "includeQueryPredictions": true,
  "locationBias": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 5000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

suggestions 数组现在同时包含地点预测和查询预测,如上文响应简介中所示。每个查询预测都包含 text 字段,该字段包含建议的文本搜索字符串。您可以发出文本搜索(新)请求,以获取有关任何返回的联想查询的更多信息。

使用来源

在此示例中,将 origin 作为经度和纬度坐标包含在请求中。当您添加 origin 时,API 会在响应中添加 distanceMeters 字段,其中包含从 origin 到目的地的直线距离。以下示例将原点设置为旧金山市中心:

curl -X POST -d '{
  "input": "Amoeba",
  "origin": {
    "latitude": 37.7749,
    "longitude": -122.4194
  },
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7749,
        "longitude": -122.4194
      },
      "radius": 5000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
https://places.googleapis.com/v1/places:autocomplete

响应现在包含 distanceMeters

{
  "suggestions": [
    {
      "placePrediction": {
        "place": "places/ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "placeId": "ChIJ5YQQf1GHhYARPKG7WLIaOko",
        "text": {
          "text": "Amoeba Music, Haight Street, San Francisco, CA, USA",
          "matches": [
            {
              "endOffset": 6
            }
          ]
        },
        "structuredFormat": {
          "mainText": {
            "text": "Amoeba Music",
            "matches": [
              {
                "endOffset": 6
              }
            ]
          },
          "secondaryText": {
            "text": "Haight Street, San Francisco, CA, USA"
          }
        },
        "types": [
          "home_goods_store",
          "establishment",
          "point_of_interest",
          "store",
          "electronics_store"
        ],
        "distanceMeters": 3012
      }
    }
  ]
}

试试看!

在 API Explorer 中,您可以发出示例请求,以便您熟悉 API 和 API 选项。

  1. 选择页面右侧的 API 图标 展开 API Explorer。
  2. (可选)展开显示标准参数,然后将 fields 参数设置为字段掩码
  3. 您可以视需要修改请求正文
  4. 选择执行按钮。在弹出式窗口中,选择您要用于发出请求的账号。
  5. 在 API Explorer 面板中,选择展开图标 展开 API Explorer。 以展开 API Explorer 窗口。