2014-02-24 197 views
0

我正在學習谷歌地圖API,並堅持在這個問題,當我試圖將當前座標添加到數組。這裏是我的代碼:谷歌地圖API如何設置當前位置標記

var locations = []; 

在初始化()我有:

function initialize() { 
    infowindow = new google.maps.InfoWindow(); 
    var myOptions = { 
     zoom: 10, 
     mapTypeControl: true, 
     navigationControl: true, 
    } 
    map = new google.maps.Map(document.getElementById("map"), myOptions); 

    add_location('Place 1', 37.2846372, -123.3270422); 
    set_current_location(); 
    set_markers(new google.maps.LatLngBounds(), map); 
} 

第一個標誌設置,而set_current_location()似乎並沒有工作。這裏是其餘的代碼:

// add new location to the locations array 
function add_location(description, lastitude, longtitude) { 
    locations.push([description, lastitude, longtitude]); 
} 

// Set all the markers in the location arrays and bound/frame the map 
function set_markers(bounds, map) { 
    for (i = 0; i < locations.length; i++) { 
     marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
      map: map 
     }); 
     bounds.extend(marker.position); 
     google.maps.event.addListener(marker, 'click', (function (marker, i) { 
      return function() { 
       infowindow.setContent(locations[i][0]); 
       infowindow.open(map, marker); 
      } 
     })(marker, i)); 
    } 
    map.fitBounds(bounds); 
} 

// Get current location based on the IP Address 
function set_current_location() { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position) { 
      var pos = new google.maps.LatLng(position.coords.latitude, 
      position.coords.longitude); 
      var myLat = position.coords.latitude; 
      var myLong = position.coords.longitude; 
      add_location('My location', position.coords.latitude, position.coords.longitude); 
     }); 
    } else { 
     alert("Geolocation is not supported by this browser."); 
    } 
} 

任何人都可以幫助或給我一個提示嗎?我想將當前位置添加到位置數組,以便可以跟蹤我已添加的位置數。非常感謝。

+1

在'getCurrentPosition'回調末尾調用'set_markers',而不是'initialize'。檢索用戶位置是一個異步過程,當初始化完成時,結果不可用。 –

+0

我同意莫勒博士。我看到了同樣的事情。 getCurrentPosition()是一個在後臺執行的異步調用,因此在上面的代碼中不保證在調用set_markers()時getCurrentPosition()已完成。將set_markers()調用放在getCurrentPosition()的末尾可以保證用戶的地理位置將在標記放置在地圖上之前完成。 –

回答

0

如果您只是將set_markers()移動到success的末端,並且用戶拒絕分享他的位置,您將無法獲得地圖,只能看到灰色區域。沒有center爲您的地圖設置是必需的屬性。更好地界定它喜歡:

var myOptions = { 
    zoom: 10, 
    center: new google.maps.LatLng(37.339386, -121.894955), 
    mapTypeControl: true, 
    navigationControl: true, 
} 
map = new google.maps.Map(document.getElementById("map"), myOptions); 
... 

此外,您也可以撥打set_markers()error回調getCurrentPosition()末,這樣的情況下,用戶拒絕他的位置共享,則可以顯示可用的位置:

// Get current location based on the IP Address 
function set_current_location() { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position) { 
      /* 
      var pos = new google.maps.LatLng(position.coords.latitude, 
              position.coords.longitude); 
      var myLat = position.coords.latitude; 
      var myLong = position.coords.longitude; 
      */ 
      add_location('My location', 
         position.coords.latitude, 
         position.coords.longitude); 

      set_markers(new google.maps.LatLngBounds(), map); 
     }, function error(err) { 
      console.log('error: ' + err.message); 
      set_markers(new google.maps.LatLngBounds(), map);    
     }); 
    } else { 
     alert("Geolocation is not supported by this browser."); 
    } 
} 

請參閱example at jsbin

+0

謝謝,你的代碼實際上解決了這個問題,但是我的目標比這個更進一步。我想將當前位置的位置(長/最後)保存到數組方向以供進一步使用。不幸的是,在set_current_location()之後,當前位置不會被推送到數組。我如何獲得/保存這些數據?謝謝 – Kiddo

+0

你如何檢查?如果你在'set_current_location()'之後的'initialize()'函數中檢查了那個函數,那麼你會得到錯誤的結果,因爲'getCurrentPosition()'是異步函數。你必須檢查'add_location()'函數中'位置'的變化。如果我分享我的位置,我會更新標記和變量'locations'。查看更新的jsbin示例並打開控制檯日誌。 –

相關問題