对于用户在地址输入中输入的相同地址,前端(带有Javacript)的Google 自动完成API 返回单个结果,因此< strong>用户的唯一选择。 后端(PHP)上的 Geocoder API 返回两个不同的结果。
我有一个后端验证,该验证通过自动完成功能来获取用户输入的地址,并使用地址解析器检查该地址。如果我使用地理编码器没有结果,或者没有一个以上的结果(这是我的情况,因为使用地理编码器有2个结果),我会抛出异常。
这对我来说是个问题,因为我对地址解析器的验证应该可以依靠自动填充功能。
请在下面找到我的额外解释
说明:
我在我的网站上有一个表格,用户在其中输入地址。此输入使用带有javascript的google自动完成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
(如您所见,地址21
和bis
之间缺少空格),在前端, google自动填充功能似乎可以识别该地址并为用户提供一个唯一的选择。如您所见:
如果我执行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
,并将其提交给后端的Geocoder API网址
https://maps.googleapis.com/maps/api/geocode/json?key=myKey&language=fr®ion=fr&address=21bis+Rue+Claude+Bernard%2C+75005+Paris%2C+France
(如您在URL参数中所见,21
和bis
之间没有空格,因为我的用户根据Google Autocomplete的选择提交的地址也不包含空格)
我从地址解析器获得以下结果:
如您所见,使用地址解析器从地址21bis Rue Claude Bernard, 75005 Paris, France
得到了两个结果。
但是我只能通过自动完成功能获得一个结果。
事件place_ids不相同。使用自动完成API,place_id为ChIJzX6RiOtx5kcRCaog3ti3QT
。但是使用地理编码API,我可以得到另外两个place_id,分别是ChIJVeIPVu9x5kcRPHRX59oID5M
和ChIJG9djYOxx5kcR1JtnnCReAxU
。
我会怎样
为什么Google Geocoder不能返回与Google自动完成相同的结果?我该如何解决我的问题?
我要
:-我的自动填充功能返回与我的地址解析器相同的2个结果
-我的地理编码器返回一个结果,与“自动完成”相同
(ps:顺便说一句,我尝试在https://developers.google.com/maps/documentation/geocoding/intro上的Google在线地理编码器中输入相同的地址,而且我也得到了一个地址,如下所示。所以我的后端使用情况如何地理编码API仍会返回2个结果??