Геокодер Google возвращает неправильную страну, игнорируя подсказку региона

Я использую Геокодер Google для нахождения lat координат СПГ для данного адреса.

    var geocoder = new google.maps.Geocoder();
    geocoder.geocode(
    {
        'address':  address,
        'region':   'uk'
    }, function(results, status) {
        if(status == google.maps.GeocoderStatus.OK) {
            lat: results[0].geometry.location.lat(),
            lng: results[0].geometry.location.lng()
    });

address переменная взята от поля ввода.

Я хочу искать местоположения только в Великобритании. Я думал то определение 'region': 'uk' должен быть достаточно, но это не. Когда я ввожу в "Бостоне", это находит Бостон в США, и я хотел тот в Великобритании.

Как ограничить Геокодер для возврата местоположений только из одной страны или возможно из определенного lat диапазона СПГ?

Спасибо

30
задан John Carter 1 December 2011 в 20:15
поделиться

2 ответа

ОБНОВЛЕНИЕ: Этот ответ больше не может быть лучшим подходом.См. Комментарии под ответом для получения более подробной информации.


В дополнение к тому, что Пекка уже предложил , вы можете связать ', UK' со своим адресом , как в следующем примере:

<!DOCTYPE html>
<html> 
<head> 
   <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
   <title>Google Maps Geocoding only in UK Demo</title> 
   <script src="http://maps.google.com/maps/api/js?sensor=false" 
           type="text/javascript"></script> 
</head> 
<body> 
   <div id="map" style="width: 400px; height: 300px"></div> 

   <script type="text/javascript"> 

   var mapOptions = { 
      mapTypeId: google.maps.MapTypeId.TERRAIN,
      center: new google.maps.LatLng(54.00, -3.00),
      zoom: 5
   };

   var map = new google.maps.Map(document.getElementById("map"), mapOptions);
   var geocoder = new google.maps.Geocoder();

   var address = 'Boston';

   geocoder.geocode({
      'address': address + ', UK'
   }, 
   function(results, status) {
      if(status == google.maps.GeocoderStatus.OK) {
         new google.maps.Marker({
            position:results[0].geometry.location,
            map: map
         });
      }
   });

   </script> 
</body> 
</html>

Скриншот:

Geocoding only in UK

Я считаю, что это очень надежно. С другой стороны, следующий пример показывает, что ни параметр region , ни параметр bounds не имеют никакого эффекта в этом случае:

<!DOCTYPE html>
<html> 
<head> 
   <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
   <title>Google Maps Geocoding only in UK Demo with Bounds</title> 
   <script src="http://maps.google.com/maps/api/js?sensor=false" 
           type="text/javascript"></script> 
</head> 
<body> 
   <div id="map" style="width: 500px; height: 300px"></div> 

   <script type="text/javascript"> 

   var mapOptions = { 
      mapTypeId: google.maps.MapTypeId.TERRAIN,
      center: new google.maps.LatLng(50.00, -33.00),
      zoom: 3
   };

   var map = new google.maps.Map(document.getElementById("map"), mapOptions);   
   var geocoder = new google.maps.Geocoder();

   // Define north-east and south-west points of UK
   var ne = new google.maps.LatLng(60.00, 3.00);
   var sw = new google.maps.LatLng(49.00, -13.00);

   // Define bounding box for drawing
   var boundingBoxPoints = [
      ne, new google.maps.LatLng(ne.lat(), sw.lng()),
      sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne
   ];

   // Draw bounding box on map    
   new google.maps.Polyline({
      path: boundingBoxPoints,
      strokeColor: '#FF0000',
      strokeOpacity: 1.0,
      strokeWeight: 2,
      map: map
   });

   // Geocode and place marker on map
   geocoder.geocode({
      'address': 'Boston',
      'region':  'uk',
      'bounds':  new google.maps.LatLngBounds(sw, ne)
   }, 
   function(results, status) {
      if(status == google.maps.GeocoderStatus.OK) {
         new google.maps.Marker({
            position:results[0].geometry.location,
            map: map
         });
      }
   });

   </script> 
</body> 
</html>
22
ответ дан 27 November 2019 в 23:04
поделиться

Согласно документам , параметр региона, похоже, устанавливает только смещение (вместо реального предела в этот регион). Я думаю, когда API не находит точный адрес в Великобритании, он расширяет поиск независимо от того, в какой регион вы вводите.

В прошлом у меня неплохо получалось указывать код страны в адресе (в дополнение к региону). Однако у меня еще не было большого опыта работы с одинаковыми названиями мест в разных странах. Тем не менее, попробовать стоит. Попробуйте

'address': '78 Austin Street, Boston, UK'

, он должен вернуть без адреса (вместо американского Бостона), и

'address': '78 Main Street, Boston, UK'

должен вернуть Бостон в Великобритании, потому что там на самом деле есть главная улица.

Обновление:

Как запретить геокодеру возвращать местоположения только из одной страны или, может быть, из определенного диапазона широты и долготы?

Вы можете установить параметр границы . См. здесь

Для этого, конечно, нужно будет вычислить прямоугольник британского размера.

8
ответ дан 27 November 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: