В большинстве, если не во всех странах, каждый населенный пункт (address_components - "types": ["locality", "polit"]) имеет хотя бы один почтовый индекс, в больших городах есть несколько почтовых индексов (address_components - "types": [ "Почтовый индекс" ]).
Но большинство населенных пунктов имеют только один почтовый индекс.
При использовании API Google Geocode для населенных пунктов только с одним почтовым индексом местность (например, "richterswil") и населенный пункт плюс соответствующий почтовый индекс (пример: "8805 + richterswil) возвращают разные координаты. Это неожиданно для меня, и делает определенные задачи намного сложнее
чем они должны быть (подумайте о поиске координат для места, в которое пользователи входят - некоторые будут включать почтовый индекс, а некоторые - нет, что приводит к разным координатам по существу для одной и той же вещи). В чем причина этого и как правильно работать вокруг него (получить одинаковые координаты для всех случаев без запроса почтового индекса в поле ввода)?
-Я обнаружил, что, если не включить почтовый индекс в вызов API Geocode, координаты искомого места находятся точно в том же месте, где Google отображает название населенного пункта на карте (метка).
-При включении почтового индекса координаты кажутся произвольно смещенными на 500-1000 метров.
Я использовал эти вызовы API для экспериментов (добавьте свой собственный ключ API):
- Нет Почтовый индекс:
https://maps.googleapis.com/maps/api/geocode/json?address=richterswil&components=country:CH&key=YOUR_API_KEY&language=de
- Почтовый индекс:
https://maps.googleapis.com/maps/api/geocode/json?address=8805+richterswil&components=country:CH&key=YOUR_API_KEY&language=de
- Ответ (без почтового индекса):
{
"results" : [
{
"address_components" : [
{
"long_name" : "Richterswil",
"short_name" : "Richterswil",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Horgen",
"short_name" : "Horgen",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Zürich",
"short_name" : "ZH",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Schweiz",
"short_name" : "CH",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Richterswil, Schweiz",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 47.2335482,
"lng" : 8.7409239
},
"southwest" : {
"lat" : 47.18228,
"lng" : 8.661769999999999
}
},
"location" : {
"lat" : 47.2053892,
"lng" : 8.7070691
},
"location_type" : "APPROXIMATE",
"viewport" : {
"northeast" : {
"lat" : 47.2335482,
"lng" : 8.7409239
},
"southwest" : {
"lat" : 47.18228,
"lng" : 8.661769999999999
}
}
},
"place_id" : "ChIJO0JjJ6CxmkcRLdEGdhgDTXg",
"types" : [ "locality", "political" ]
}
],
"status" : "OK"
}
- Ответ (включая почтовый индекс):
{
"results" : [
{
"address_components" : [
{
"long_name" : "8805",
"short_name" : "8805",
"types" : [ "postal_code" ]
},
{
"long_name" : "Richterswil",
"short_name" : "Richterswil",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Horgen",
"short_name" : "Horgen",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Zürich",
"short_name" : "ZH",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Schweiz",
"short_name" : "CH",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "8805 Richterswil, Schweiz",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 47.2201589,
"lng" : 8.713399599999999
},
"southwest" : {
"lat" : 47.1962357,
"lng" : 8.679173199999999
}
},
"location" : {
"lat" : 47.2097073,
"lng" : 8.696259999999999
},
"location_type" : "APPROXIMATE",
"viewport" : {
"northeast" : {
"lat" : 47.2201589,
"lng" : 8.713399599999999
},
"southwest" : {
"lat" : 47.1962357,
"lng" : 8.679173199999999
}
}
},
"place_id" : "ChIJ-Ub3o--xmkcRNqm0YtWPm1U",
"types" : [ "postal_code" ]
}
],
"status" : "OK"
}