google-maps - 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®ion=fr&address=21bis+Rue+Claude+Bernard%2C+75005+Paris%2C+France
(正如您在 URL 参数中看到的那样,和之间没有空格21
,bis
因为我的用户提交的地址,基于谷歌自动完成的选择也不包含空格)
我从地理编码器得到以下结果:
如您所见,我使用地址解析器得到了两个结果21bis Rue Claude Bernard, 75005 Paris, France
。
但我只得到一个自动完成的结果。
事件 place_ids 不一样。使用自动完成 API,place_id 是ChIJzX6RiOtx5kcRCaog3ti3QT
. 但是使用地理编码 API,我得到了另外两个 place_id,它们是ChIJVeIPVu9x5kcRPHRX59oID5M
和ChIJG9djYOxx5kcR1JtnnCReAxU
.
我想要什么
为什么 Google 地理编码器不返回与 Google 自动完成相同的结果?我该如何解决我的问题?
我想:
- 我的自动完成返回与我的地理编码器相同的 2 个结果
- 我的地理编码器返回单个结果,与自动完成相同
(ps:顺便说一句,我尝试在https://developers.google.com/maps/documentation/geocoding/intro上的 Google 在线地理编码器上输入相同的地址,我也得到了一个地址,如下所示. 那么为什么我的地理编码 API 的后端使用仍然返回 2 个结果??)
解决方案
推荐阅读
- ios - Swift 数组索引超出范围和 Nil 值
- jquery - 将对象从 getJSON 传递到外部函数?
- c++ - PocketSphinx ps_process_raw 样本缓冲区大小影响
- google-cloud-platform - Dataproc 更改工作器大小
- c++ - Text file Issues (Visual C++)
- ruby-on-rails - 是否有用于 nodejs/expressjs 的 RailsPanel?
- python - 根据两个列表中元组的出现更新 defaultdict 计数
- java - 如何并行化 Kafka 消息消费
- algorithm - 我确实理解了 CLRS 中给出的原始证明,但是在给定的推论中,为什么切割 VC,(V-VC)尊重 A?
- c# - 是否可以在 DataGridView 中显示连接查询?