2

基本的に、自分の位置 (navigator.geolocation で取得) にマーカーを設定し、移動するときにマーカーの位置を更新して、実際の位置を表示したいと考えています。これは私のコードです。

  var map;
  var marker;
  var newLatlng;
  var i = 0;

  //here i create a map centered on 0,0
  function initialize() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    var chicago = new google.maps.LatLng(0,0);
    var mapOptions = {
      zoom: 6,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: chicago
    }
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    directionsDisplay.setMap(map);

    updatePos();

  }


//here I set my marker (if i==0 -> first run)
function updatePos(){

var options = {
    timeout: 500000, enableHighAccuracy: true
};
var myUpdatedPos = navigator.geolocation.watchPosition(onSuccess, onError, options);

function onSuccess(position) {

    if (i==0){
        marker = new google.maps.Marker({
                        position: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
                        map: map,
                        animation: google.maps.Animation.DROP
                    });
    }
    i++;

    //here I update the position
    newLatlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
    marker.setPosition(newLatlng);
}

// onError Callback receives a PositionError object
//
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
        'message: ' + error.message + '\n');
    }
}

このコードは機能していますが、位置の更新が少し遅いです。次の理由が考えられます。

new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

それは私の位置が変わるたびに呼び出されます。しかし、この構造が実際に何をするのかはわかりません。サーバーに呼び出しを行い、応答を待つ必要がありますか?

このコードを高速化するための良いアドバイスはありますか?

前もって感謝します!

4

1 に答える 1

4

watchPosition を使用すると、キャッシュされた位置の期間を指定できます。短すぎず、長すぎないものを使用してください。

位置を更新する簡単な例:

navigator.geolocation.getCurrentPosition(onSuccess, onError, { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true });

参照:

http://docs.phonegap.com/en/2.5.0/cordova_geolocation_geolocation.md.html#geolocationOptions

于 2013-04-09T14:22:17.120 に答える