2015-05-11 4 views
0

Недавно я разработал платформу геолокации дилера с API Google Maps V3 Js API, однако я понял, что когда пользователь вводит почтовый индекс, геолокация плохая ,Google Maps JS APIv3 - геокод возвращает местоположение кода INSEE вместо почтового кода

Например, если пользователь ищет 13001 (1-й округ Марселя), геолокация выполняется в Экс-ан-Провансе (чей код INSEE равен 13001). То же за 13007 (7-й округ Марселя), возвращает Ауриоль в 20 км от Марселя.

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

function GoogleGeocode(){ 
    geocoder = new google.maps.Geocoder(); 
    this.geocode = function(address, callbackFunction) { 
     geocoder.geocode({ 'address': address}, function(results, status) { 
      if (status === google.maps.GeocoderStatus.OK) { 
      var result = {}; 
      result.latitude = results[0].geometry.location.lat(); 
      result.longitude = results[0].geometry.location.lng();       
      callbackFunction(result); 
      } else { 
      if (settings.geocodeErrorAlert != "") { 
       alert(settings.geocodeErrorAlert + status); 
      } 
      callbackFunction(null); 
      } 
     }); 
    }; 
    } 

У вас есть объяснение и решение, чтобы решить эту проблему?

Спасибо всем

ответ

0

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

var rawAddress = jQuery('#postcode').val(); 
    var components = {}; 

    // Test if the address only contains digits 
    if(/^\d+$/.test(rawAddress)){ 
     components.postalCode = address; 
    } 
    var geocoder = new google.maps.Geocoder(); 
     geocoder.geocode({address: address, componentRestrictions: components}, geocoderCallback); 

В этом примере почтовый индекс отправляется правильно, только если поиск не содержит ничего.

Если вы хотите использовать почтовый индекс, который находится в более сложной строке поиска, вам нужно извлечь подстроку цифр от него, как это:

var rawAddress = jQuery('#postcode').val(); 
var digits = rawAddress.match(/\d+/g); 

if(digits != null && digits.length > 0){ 
      for(var i = 0 ; i < digits.length ; i++){ 
       if(digits[i].length == 5){ 
        components.postalCode = digits[i]; 
        address = address.replace(digits[i], ''); 
       } 
      } 
     }