首页 > 解决方案 > Google 地理编码和自动完成不会返回相同数量的结果

问题描述

对于用户在地址输入中输入的相同地址,前端的 google Autocomplete API (使用 javacript)返回一个结果,从而为用户返回一个选择。而后端 (PHP) 上的Geocoder API返回两个不同的结果

我有一个后端验证,它通过自动完成获取用户输入的地址,并使用地理编码器检查这个地址。如果地理编码器没有结果或有多个结果(这是我的情况,因为我使用地理编码器得到 2 个结果),我会抛出异常。

这对我来说是个问题,因为我对地理编码器的验证应该能够依赖于自动完成。

请在下面找到我的额外解释

解释:

我的网站上有一个表格,用户在地址输入中输入他的地址。此输入使用带有 javascript 的 google Autocomplete API,如下所示。

var addressAutocompleteGoogleMaps = new google.maps.places.Autocomplete($myInputJqueryElement[0], {
    componentRestrictions: {country: 'fr'},
    types: ['geocode']
});

addressAutocompleteGoogleMaps.addListener('place_changed', function() {
    var addressAutocompleteSelectedAddress = $myInputJqueryElement.val();
    var autocompletionFormattedAddress = addressAutocompleteGoogleMaps.getPlace().formatted_address;
    $myInputJqueryElement.val(autocompletionFormattedAddress);

    // After having changed my form value to the formatted_address, I submit the form.
});

现在如果用户输入以下地址

21bis Rue Claude Bernard, 75005 Paris, France

(如您所见,地址中的 the21和 the之间缺少一个空格bis),在前端,google Autocomplete 似乎可以识别该地址并为用户提供一个唯一的选择。如下所示:

在此处输入图像描述

如果我执行 a console.log(addressAutocompleteGoogleMaps.getPlace());,我可以在我的控制台中看到一个具有以下属性的结果:

place_id: "ChIJzX6RiOtx5kcRCaog3ti3QTs"
formatted_address: "21bis Rue Claude Bernard, 75005 Paris, France"
geometry: {location: _.P, viewport: _.Q}

但在我的后端,我使用 Google 的地理编码器服务,并且不能容忍来自 API 的多个结果。

formatted_address如果我在前端使用与自动完成结果相同的地址,即21bis Rue Claude Bernard, 75005 Paris, France,然后我将其提交到后端的地理编码器 API,并使用此 URL

https://maps.googleapis.com/maps/api/geocode/json?key=myKey&language=fr&region=fr&address=21bis+Rue+Claude+Bernard%2C+75005+Paris%2C+France 

(正如您在 URL 参数中看到的那样,和之间没有空格21bis因为我的用户提交的地址,基于谷歌自动完成的选择也不包含空格)

我从地理编码器得到以下结果:

在此处输入图像描述

如您所见,我使用地址解析器得到了两个结果21bis Rue Claude Bernard, 75005 Paris, France

但我只得到一个自动完成的结果。

事件 place_ids 不一样。使用自动完成 API,place_id 是ChIJzX6RiOtx5kcRCaog3ti3QT. 但是使用地理编码 API,我得到了另外两个 place_id,它们是ChIJVeIPVu9x5kcRPHRX59oID5MChIJG9djYOxx5kcR1JtnnCReAxU.

我想要什么

为什么 Google 地理编码器不返回与 Google 自动完成相同的结果?我该如何解决我的问题?

我想:

- 我的自动完成返回与我的地理编码器相同的 2 个结果

- 我的地理编码器返回单个结果,与自动完成相同

(ps:顺便说一句,我尝试在https://developers.google.com/maps/documentation/geocoding/intro上的 Google 在线地理编码器上输入相同的地址,我也得到了一个地址,如下所示. 那么为什么我的地理编码 API 的后端使用仍然返回 2 个结果??)

在此处输入图像描述

标签: google-mapsgoogle-maps-api-3autocompletegoogle-places-apigoogle-geocoder

解决方案


推荐阅读