2013-03-08 65 views
0

我試圖使用一些函數來計算並顯示距離它們的位置一定距離內的標記的距離,但函數在頁面加載後立即拋出,因此它使用的值不正確如何在上一個功能完成其工作時僅投射功能?

這是我從數據庫中生成標記功能:

<?php while($stmt -> fetch()) { ?> 
var longi = "<?php echo $gLongitude; ?>"; 
var lati = "<?php echo $gLatitude; ?>"; 
var title = "<?php echo $gTitle; ?>"; 
createMarker(lati, longi, title); 
<?php } $stmt -> close(); $mysqli -> close();?> 

,然後調用createMarker

function createMarker(lati, longi, title) { 
    var latLongMarker = new google.maps.LatLng(lati, longi); 
    marker = new google.maps.Marker({ 
     position: latLongMarker, 
     map: map, 
     title: title 
    }); 
    arrMarker.push(marker); 
    marker.setMap(null); 
    setMarker(latLongMarker); 
} 

,然後調用setmarker

function setMarker(position) { 
    console.log(arrMarker.value); 
    for (var i = 0; i < arrMarker.length; i++) { 
     var latLong = arrMarker[i].getPosition(); 
     distance = google.maps.geometry.spherical.computeDistanceBetween(latLong, position); 
     if (distance < 4000) { 
      addMarker(arrMarker[i].getPosition()); 
     } 
    } 
} 

的問題是之前的地理定位是利用設置狀態越來越叫做:

function locateMe() { 
if (navigator.geolocation) { 
    browserSupportFlag = true; 
    navigator.geolocation.getCurrentPosition(function(position) { 
      initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); 
      map.setCenter(initialLocation); 
      map.setZoom(15); 
      setMarkerPosition(position.coords.latitude,position.coords.longitude); 
     }, function() { 
      handleNoGeolocation(browserSupportFlag); 
     }); 
    } 
} 

回答

2

如果你想你的代碼,你有,你應該把這些代碼的getCurrentPosition回調裏面的位置之後運行。

navigator.geolocation.getCurrentPosition(function(position) { 
    initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); 
    map.setCenter(initialLocation); 
    map.setZoom(15); 
    setMarkerPosition(position.coords.latitude,position.coords.longitude); 

    createMarker() // <--- 
}, function() { 
    handleNoGeolocation(browserSupportFlag); 
}); 

不幸的是,沒有辦法將「異步」代碼轉換爲完成時返回的常規函數​​。你可以做的最好的事情是把你調用下一個函數的部分放到參數中。

function locateMe(callback){ 
    googleMapsStuff(function(position){ 
     //things... 
     callback(value_you_would_have_returned) 
    } 
} 
+0

好了,所以我有更多的一個問題,我剛搬來的PHP while循環地理位置成功後,但現在它的調用createMarker進而調用addMarker所以其添加相同的標記在地圖的20倍左右,我只是希望它添加小於500的標記,而不是每次循環通過時都添加相同的標記 – Datsik 2013-03-08 03:22:40

+0

@XCritics:您可能應該在Javascript中而不是在PHP中執行循環。爲此使用PHP本質上是「複製粘貼」代碼。 – hugomg 2013-03-08 03:36:25