0

次のコードを使用して、クライアントの地理座標を取得しています。

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

次に、次のコードを使用して、これを Google マップの座標に変換しようとしています。

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

しかし、これは戻ってきています

(NaN,NaN)

誰かが私が間違っているかもしれないことを提案できますか?

4

2 に答える 2

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 に答える
0

getCurrentPosition() は非同期ですが、同期応答を期待している可能性が最も高いです。

getCurrentPosition() は関数を引数として取ります。これは、実行が終了したときに呼び出されると想定しています。関数は、loc オブジェクトを更新するコールバックです。

問題は、 getCurrentPosition の実行が完了する前に loc が更新されることを期待していることです。

代わりにすべきことは、次のように、関数に 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 に答える