5

Я использую геокодеру Google с возможностью возвращать только результаты из ГерманииКак предотвратить Google геокодер от возвращения результатов из других стран

Вот соответствующая часть моей функции

... 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({"address":address,"region":"DE" }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0].geometry.location) { 
       completeGeo(results[0],address); 
      } else { 
       completeGeo(null,address); 
      } 

    ... 

но если я геокодировать «cuvry» тоже найти эту улицу в германии

Google возвращается к примеру «Cuvry, Франция», который находится за пределами параметра области

Как я могу запретить геокодеру google возвращать результаты, которые не находятся в определенной стране? Я имею в виду возврат, а не проверку обратного вызова, если код страны соответствует.

+0

_Примечание, что смещающий предпочитает только результаты для конкретного домена; если более релевантные результаты существуют за пределами этого домена, они могут быть включены. – putvande

+0

Да, я отметил, что это заставило меня задать вопрос: D –

+0

Ну, это ответ .. вы не можете. – putvande

ответ

2

Когда я изменил его на geocoder.geocode({"address":address, "componentRestrictions":{"country":"DE"} }, для германии моих результатов поиска найден Вьетнам.

я изменил его к этому:

geocoder.geocode({'address':address + ', Deutschland'}, function(results, status) 

Это прекрасно работает со странами называют в родном языке.

+1

Да, наконец, хороший ответ :) –

+0

Не для меня ... «Будапешт, Франция» найти его в реальном Будапеште, Венгрии и компоненте. Ограничения на FR делают даже плохую просьбу (например: grevrsvrqnrenreoi) - GeocoderStatus.OK, расположенную в некотором случайном место во Франции. Я пробовал оба, это не лучше ... – DestyNova

+0

У меня была такая же проблема. Если я включу компонентRestrictions, скажем, в США, независимо от того, какую тарабарщину я пытаюсь геокодировать, GeocoderStatus всегда возвращается как ОК. Если я удалю компонентRestrictions и поиск той же тарабарщины, он возвращает ZERO_RESULTS. – tjans

2

Короткий ответ: вы не можете.

Проблемы был подан с помощью Google здесь:

https://code.google.com/p/gmaps-api-issues/issues/detail?id=4233

Единственного, что вы можете попробовать это пропускание «приняла границу» в геокодер. Это далеко не идеально, но немного помогло моему проекту. Вот грубая копия кода, который я использую для попытки ограничить геокодер Google в западных Соединенных Штатах. Очевидно, что вы хотели бы изменить границы представлять регион вы заинтересованы в.

var geocoder = new google.maps.Geocoder() 

var callGoogleGeocoder = function(str) { 
    var geo_bounds; 
    geo_bounds = setGeoBounds(); 
    return geocoder.geocode({ 
    address: str, 
    bounds: geo_bounds 
    }, function(results, status) { 
    console.log(results); 
    }); 
} 

var setGeoBounds = function() { 
    var geo_bounds, ne, sw; 
    geo_bounds = new google.maps.LatLngBounds(); 
    sw = new google.maps.LatLng(41.24843789608676, -126.5633079709794); 
    ne = new google.maps.LatLng(49.01224853841337, -108.3479759397294); 
    geo_bounds.extend(sw); 
    geo_bounds.extend(ne); 
    return geo_bounds; 
}; 

Пожалуйста, найдите время, чтобы проголосовать по этому вопросу в Google я связан выше. Для меня это # ​​1 функция Google Geocoder отсутствует.

Удачи вам!

+0

Большое спасибо, что выглядит как хороший подход! я отвечу, когда я попробовал –

+0

Хороший подход да, но только для стран, получивших монолитные границы. Он не может действительно работать для таких стран, как Франция, которые получили острова на многих океанах, в Тихом океане и т. Д. – DestyNova

13

Это может работать с использованием фильтров компонентов. «компоненты»: «Страна: DE»

var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({"address":address, "componentRestrictions":{"country":"DE"} }, 
function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     if (results[0].geometry.location) { 
      completeGeo(results[0],address); 
     } else { 
      completeGeo(null,address); 
     } 
}); 
+3

это приводит к тому, что «Uncaught InvalidValueError: неизвестные компоненты свойств» –

+0

Я думаю, что я могу быть прав. Я просто еще не понял. [link] https://developers.google.com/maps/documentation/javascript/reference#GeocoderComponentRestrictions – foobar

+0

Думаю, я попробовал «componentRestrictions»: {«country»: «DE»} – foobar

1

Используйте полное название страны, поскольку последний не работает (возвращаемые результаты за пределами NL) (например The Netherlands вместо NL.):

geocoder.geocode({"address":address, "componentRestrictions":{"country":"The Netherlands"} }, 
+0

Нет, для меня нет изменений – DestyNova

+0

В какой стране вы используете? Для меня это был единственный способ, которым это работало. – joost

+0

Франция, это был тот же эффект, я думаю, что ответ iamjpg прав, когда он написал «вы не можете» ... – DestyNova

1

Я только что получил такую ​​же проблему и решить ее таким образом (для Германии):

var searchObject = { 
    'address': address, 
    componentRestrictions: { 
     country: 'DE' 
    } 
}; 


geocoder().geocode(searchObject, function (result, status) { 
    if (status !== google.maps.GeocoderStatus.OK) { 
     return reject(); 
    } 

    if (result[0].formatted_address === 'Deutschland' && address !== 'Deutschland') { 
     return reject(); 
    } 

    return reject(); 
}); 

Итак, когда вы ищете неправильный адрес, Google всегда возвращает Deutschland в качестве адреса при использовании componentRestrictions. Это единственный способ заставить меня работать, потому что когда вы удаляете componentRestrictions, Google приведет к угаданному местоположению, что неверно для моего варианта использования.

Поиск почтового индекса 12345, который не действителен в Германии.

  1. Без componentRestrictions - Результат: Schenectady, New York 12345, USA

  2. С Deutschland добавлен к адресу - Результат: 12345 High Germany Rd SE, Little Orleans, MD 21766, USA

  3. С componentRestrictions - Результат: Deutschland

Update

Другим решением является проверка partial_match флаг:

if (result[0].partial_match) { 
    return reject(); 
} 
Смежные вопросы