我正在使用,所以成员可以添加他们的位置。然后我把这些信息保存在我的数据库里。现在我想寻找来自“哥本哈根”的所有成员。但这是一个问题,因为使用完整地址的成员被保存在丹麦语名称“K benhavn”下。同样的问题也适用于居住在一个有着不同母语和英语名称的城市的所有成员。更糟糕的是
是否有可能强制address_components,这里特定的地方是英语?
我很确定我已经将place强加给Enligsh,因为国家是对的。这里是“丹麦”而不是“丹麦”。
我如何使用google places。首先,我注册脚本:
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBQuOpK6nVv7bmGJbB6WoZcnWxKE2yGIGM&libraries=places&language=en"></script>接下来,我在我的输入元素中添加了google places自动完成功能:
var autocompleteElm = <HTMLInputElement>document.getElementById('autocomplete');
if (autocompleteElm) {
this.autocomplete = new google.maps.places.Autocomplete(
(autocompleteElm), {
types: ['geocode']
});
}至少,但不是最后一次调用,在成员按下保存按钮后,通过调用API收集数据:
this.autocomplete.getPlace();这是一个用Angular2编写的TypeScript组件。
我从谷歌克隆了Fiddle示例,以说明我的问题:https://jsfiddle.net/dnrn/71t99yzs/
如果你搜索:"Dortheavej“,它会显示这个城市是”K benhavn“,而不是”哥本哈根“。
更糟糕的似乎是,有时是国家,有时是城市,不是来自"language=en",而是来自当地的成员。
发布于 2020-06-08 13:29:38
我知道这发生在将近4年后,但我发现了你的问题,同时寻找解决同样的问题,所以我将离开这个解决办法,如果其他人需要它。
tl;dr:
根据您想要的城市的邮政编码进行额外的反向地理编码。
问题是:我需要将位置城市统一地保存到db (即英文),而不管用户的区域设置是什么。我还在所有查询中添加了language=en,但它似乎不起作用。
示例:https://maps.googleapis.com/maps/api/place/autocomplete/json?input=St. Basil's Cathedral&language=en返回:
{
"description": "St. Basil's Cathedral, Red Square, Moscow, Russia",
...
"place_id": "ChIJBZbmYllKtUYR5TrL54oWz6Q",
}到目前为止,我正在寻找的城市是“莫斯科”。
但是,获取地点详细信息(即本地)的另一个搜索将返回(除其他外) https://maps.googleapis.com/maps/api/place/details/json?place_id=ChIJBZbmYllKtUYR5TrL54oWz6Q&language=en:
{
"long_name": "Moskva",
"short_name": "Moskva",
"types": [
"locality",
"political"
]
}显然,"Moskva"不是英语中的城市名称,尽管查询param是langauge=en。显然,这是API 如前所述的预期行为。
在我看来,它似乎只本地化了用于名称的字母,或者默认为拉丁文。例如,莫斯科在俄语中的最初名称是"Москва“,他们使用西里尔字母。因此,如果我设置language=en (使用拉丁字母),它将把它“翻译”为"Moskva“(这是用拉丁字母写的"Москва”,而不是英语)。同样,如果我设置了language=sr,我将收到"Москва“,因为塞尔维亚语也是用西里尔语写的,所以它会像原来那样写它。第三个选项是language=ja,它也将返回"Moskva“,而不是日语(既不是语言也不是字母),因为它似乎默认为拉丁语。
现在是解决办法:
似乎“官方”城市名称可以翻译成你所设置的语言,如果明确地是你要寻找的城市(而不是地址、邻居等的一部分)。
因此,为了获得“莫斯科”(或任何其他语言中的莫斯科名称,或任何其他城市的名称),请执行以下操作:
place_id (如上面的示例所示)place_id获取位置详细信息(也如上文所示)address_components: "address_components": [
...
{
"long_name": "Moskva",
"short_name": "Moskva",
"types": [
"locality",
"political"
]
},
...
{
"long_name": "Russia",
"short_name": "RU",
"types": [
"country",
"political"
]
},
{
"long_name": "109012",
"short_name": "109012",
"types": [
"postal_code"
]
}
]现在,以postal_code、locality和country为例,将它们连接在一个字符串中,如:109012, Moskva, Russia (几乎像邮件格式)。
最后,将此字符串作为geocode API的输入,以便按地址进行反向搜索,以及所需的语言(en):https://maps.googleapis.com/maps/api/geocode/json?address=109012, Moskva, Russia&language=en
现在就以英语中的地方为例:
{
"long_name": "Moscow",
"short_name": "Moscow",
"types": [
"locality",
"political"
]
}就这样!
迄今已知的“陷阱”:
postal_code可以是null,所以请确保检查它,并将其排除在上面的字符串之外(它仍然有效)sublocality_level_1 )就这样,希望它能帮到别人!
https://stackoverflow.com/questions/40328358
复制相似问题