0

我正在使用以下代码获取我的客户地理坐标:

loc={}
if (navigator.geolocation)
{
   navigator.geolocation.getCurrentPosition(function(position){
      loc.lat = position.coords.latitude;
      loc.lng = position.coords.longitude;
                                                              });
}

然后我试图用下面的代码把它变成一个谷歌地图坐标

var clientLocation = new google.maps.LatLng(loc.lat, loc.lng);

然而,这正在回归

(NaN,NaN)

谁能建议我可能做错了什么?

4

2 回答 2

0

这很可能是因为 getCurrentPosition() 是异步的,但您期望得到同步响应。

getCurrentPosition() 将您的函数作为参数,我假设它将在完成运行时调用。您的函数是一个回调,它更新您的 loc 对象。

那么问题是您希望 loc 在 getCurrentPosition 完成运行之前更新。

您应该做的是让您的函数调用 LatLng 创建,如下所示:

var loc={} // Don't forget the var declaration, or you might mess with the global scope
if (navigator.geolocation)
{
   navigator.geolocation.getCurrentPosition(function(position){
      loc.lat = position.coords.latitude;
      loc.lng = position.coords.longitude;
      createLatLng();
   });
}

function createLatLng() {
     var clientLocation = new google.maps.LatLng(loc.lat, loc.lng);
     // and whatever else you need to do when you have the coordinate
}
于 2013-08-20T07:49:18.663 回答
0

实际上,它将 loc.lat 和 loc.lng 作为 2 个参数。这就是你得到 (NaN,NaN) 错误的原因。通过直接传递坐标值使用以下代码,

 navigator.geolocation.getCurrentPosition(onSuccess, onError);
  function onSuccess(pos) {
     var myCenter = new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude);
     var mapProp = {
        center: myCenter,
        zoom: 15,
        mapTypeId: google.maps.MapTypeId.ROADMAP
     };
     var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
     var marker = new google.maps.Marker({
        position: myCenter,
     });
    marker.setMap(map);
  }

  function onError(){
     alert('error');
  }

希望对你有帮助!!!!!!

于 2016-10-26T05:38:40.730 回答