2013-09-22 4 views
0

Я пытаюсь получить Геокодер Google Maps, чтобы вернуть LatLng с адреса, а затем инициализировать карту с помощью этого LatLng в центре.Почему геокодер Google Maps не вызывает инициализацию?

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

Приведенный ниже код отлично работает, пока я не изменю глобальные значения lat и lon на ноль. Затем геоккер вызывается с адресом, и LatLng возвращается в порядке. Все, что я получаю, это пустое окно, и предупреждение в функции инициализации никогда не запускается.

Может кто-нибудь объяснить, почему это не работает, прежде чем я начну путь инициализации на 0,0, а затем по центру?

Благодаря

var lat = 37.425593; 
var lon = -122.075915; 
var address = '1600 Amphitheatre Pky, Mountain View, CA'; 
var LatLon = new google.maps.LatLng(0, 0); 

function initialize() { 

    alert("2. "+LatLon); 

    var mapOptions = { 
     center: LatLon, 
     zoom: 14, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

    var marker = new google.maps.Marker({ 
     position: LatLon, 
     map: map 
    }); 

} 

if (lat == 0 && lon == 0) { 
    alert('address = '+address); 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0]) { 
       LatLon = results[0].geometry.location; 
       alert("1. "+LatLon); 
       google.maps.event.addDomListener(window, 'load', initialize); 
      } else { 
       alert("No results found"); 
      } 
     } else { 
      alert("Geocoder failed: " + status); 
     } 
    }); 
} else { 
    alert('lat/lon = '+lat+' '+lon); 
    LatLon = new google.maps.LatLng(lat, lon); 
    alert("1. "+LatLon); 
    google.maps.event.addDomListener(window, 'load', initialize); 
} 
+0

возможно дубликат [пропусканием широты и долготы моей карты сценария] (http://stackoverflow.com/questions/18936231/passing-the-latitude-and-longitude-to- моя карта-сценарий) – geocodezip

ответ

0

Геокодер является асинхронным. Вы не поместили свой код в контекст, но время, необходимое для возврата координат, должно означать, что событие загрузки окна уже запущено, когда координаты возвращаются с сервера, поэтому функция инициализации никогда не запускается. Он будет работать, если вы используете событие onload для запуска операции с геокодом или если вы вызываете инициализацию напрямую и помещаете код внизу страницы, чтобы он не выполнялся до тех пор, пока страница не будет полностью отображена (а карта имеет размер).

<script type="text/javascript"> 
var address = '1600 Amphitheatre Pky, Mountain View, CA'; 
var LatLon = new google.maps.LatLng(0, 0); 

function initialize(LatLon) { 
    var mapOptions = { 
     center: LatLon, 
     zoom: 14, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

    var marker = new google.maps.Marker({ 
     position: LatLon, 
     map: map 
    }); 

} 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[0]) { 
       var LatLon = results[0].geometry.location; 
       initialize(LatLon); 
      } else { 
       alert("No results found"); 
      } 
     } else { 
      alert("Geocoder failed: " + status); 
     } 
    }); 
</script> 
</body> 

working example

Смежные вопросы