2012-01-17 2 views
0

Я новичок в этом, но у меня есть карта Google V3, которая загружается из информации о геокодировании браузера W3C пользователя, и я тяну страну, штат, и город из объекта геокода и окна ввода обновлений. Если пользователь вводит уличный адрес, я хочу его геокодировать через Google и менять map.setCenter и setZoom и отображать обновленную карту. Когда это сработает, я хочу добавить маркер и infowindow. Несмотря на часы исследований и испытаний, я не могу заставить геокод и обновление работать. Инструмент разработчика в Chrome, по-видимому, указывает, что выполнение прекращает/терпит неудачу в строке geocoder.geocode, которая выделена жирным шрифтом ниже. Вот соответствующий код.имеют карту Google V3, не могут обновить map.setCenter с пользовательского ввода

var map, geocoder, marker, infowindow; //global variables 

function initializeMap() { 
// Try W3C Geolocation to geolocate desktop user 
//initialize Google map, geolocate desktop user, and display after page loads 
//find country, state, and city for the user's location - this all works 
} 
window.onload = initializeMap; 

//change the Google Map after a user enters a street address 
$("#streetAddress").blur(function() { 
    //if state, city and street address locations are present 
if ($(this).val().length > 0 && $("#state").val().length > 0 && $("#city3").val().length > 0 ) { 
    var gAddress = [$(this).val() + ", " + $("#city3").val() + ", " + $("#state").val()] ; 
    //get coordinates of this address 
    //if no geocode object exists, create one 
    if (!geocoder) { 
    geocoder = new google.maps.Geocoder(); //create Geocoder object else use existing one from initializeMap() ? 
    }  
    //create a GeocoderRequest object with user's street address 
    var geoCoderRequest = {address: gAddress} 
    //make a Geocoder request 
    geocoder.geocode(geoCoderRequest, function(results, status) { **//this line fails** 
    //check if status is OK 
      if (status === google.maps.GeocoderStatus.OK) { 
      //update center of existing map on location returned for this address 
      map.setCenter(results[0].geometry.location); 
      map.setZoom(14); 
      } 
    });   
    } else { 
      return; //no action if gAddress is incomplete 
     } 
}); 

ответ

1

Согласно documentation, адрес должен быть строкой, но вы создали gAddress как массив.

Try:

var gAddress = $(this).val() + ", " + $("#city3").val() + ", " + $("#state").val(); 

Update: в ответ на Ваше желание сделать увеличение произойдет после того, как карта изначально загружена (например, в ответ на ввод пользователя), вот простой пример.

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<style type="text/css"> 
html { height: 100% } 
body { height: 100%; margin: 0; padding: 0 } 
#map_canvas { height: 100% } 
</style> 

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> 

<script type="text/javascript"> 
    var map; 
    var start = 1; 

    function initialize() { 
     var homeLatlng = new google.maps.LatLng(51.476706,0); // London 

     var myOptions = { 
      zoom: 15, 
      center: homeLatlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    } 

    function setZoom() { 
     map.setZoom(18); 
    } 

    function setTimedZoom() { 
     map.setZoom(start); 

     start = start+1; 
     if (start > 18) { 
      start = 1; // lets go round again and again; in reality you'd probably stop zooming at this point. 
     } 

     setTimeout(setTimedZoom, 3000); 
    } 

    google.maps.event.addDomListener(window, 'load', initialize); 
</script> 
</head> 
<body> 
    <a href="javascript:setZoom()">Zoom In</a> 
    <a href="javascript:setTimedZoom()">Timed</a> 
    <div id="map_canvas"></div> 
</body> 
</html> 
+0

Да и спасибо. Это очень полезно. Код теперь выполняется должным образом через «if status == OK», и я получаю OK, но он не устанавливаетCenter на адрес ввода пользователя или setZoom. –

+0

После некоторой дополнительной работы кажется, что карта Google не может быть обновлена. Я не читал этого нигде, но его поведение я получаю. Когда я создаю новую карту (то же, что и в первый раз, но с геокодом из нового входного адреса пользователя), она создает новую «обновленную» карту. У меня есть несколько других проблем для решения, но я, кажется, на правильном пути. Странно, что его можно перемещать по карте вручную с помощью курсора, но, по-видимому, это невозможно сделать с помощью кода обновления. –

+0

Должно быть, что-то не так с вашим кодом, у меня не было проблем с обновлением существующей карты для изменения центра или масштабирования. – duncan

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

  • Нет связанных вопросов^_^