2013-03-08 66 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