0

私はGoogleマップで作業しています。具体的には、http://hpneo.github.io/gmapsで作業していますGPS トラッカー シミュレーションの場合、ここでは各ポイントの位置を更新する必要があります。gmaps スクリプトでは、マーカーは配列に格納されており、各ポイントを取得して setPoint メソッドを使用して位置を更新することを考えていましたが、gmaps スクリプトにはこのメソッドが実装されていません。私はこの方法を実装することを考えていましたが、私の質問は次のとおりです。gmapsスクリプトにマーカーの配列を作成した後、正しいマーカーの位置を更新するために各マーカーをどのように識別できるか、またはおそらく外部に保存する必要があります配列、各マーカーを識別するのに役立つ連想配列ですが、それらを更新すると、gmapスクリプトの配列も更新されずに同じ位置に保持されると考えています。コードを添付しています

/** Positions and map statuses **/
var isLoaded = false;
/** **/
var refreshIntervalId;
var vehicles;
var map;
function setVehicleAsCenter (registration) {
    alert("Hola");
}
function loadPoints (positions) {
    console.debug('loading markers');
    var lttd;
    var lgtd;
    for (var i=0; i < positions.length; i++) {
        lttd = positions[i].latitude;
        lgtd = positions[i].longitude;
        marker = map.addMarker({
            lat: lttd,
            lng: lgtd,
        });
        markers[positions[i].registration] = marker;
    };
    map.fitZoom();
    isLoaded = true
}
function updatePoints (positions) {
    /**
    how could be the alorithm here
    */
    console.debug('updating markers');
}
function requestPoints() {
    $.ajax({
        url:'{% url 'gpstracking.ajax.request_tracks' %}',
        type: 'get',
        dataType: 'json',
        data: {
            vehicles: vehicles
        },
        success: function (positions) {
            if (isLoaded == false) {
                loadPoints (positions);
            } else {
                updatePoints (positions);
            }
        }
    });
}
$(document).ready(function() {
    /** Buttons Click Event Set **/
    $('.map-mode').click(function(){
        vehicles = '';
        $("#jstree").jstree("get_checked",null,true).find('a[rel="vehicle"]').each(function(){
            vehicles =  vehicles + $.trim(this.text) + "|";
        });
        if (vehicles == '') {
            console.debug('No vehicles to display');
            return;
        }
        option = $(this).attr('rel');
        if (option == 'show') {
            console.debug('Ordering to show');
            clearInterval(refreshIntervalId);
            requestPoints();
        }
        if (option == 'listen') {
            console.debug('Listening');
            requestPoints();
            refreshIntervalId = setInterval("requestPoints()", 10000);
        }
        if (option == 'clear') {
            console.debug('Clearing');
            clearInterval(refreshIntervalId);
            markers = new Object();
            map.removeMarkers();
            isLoaded = false;
        }
    });
    /** Map loading **/
    map = new GMaps({
        div: '#map-canvas',
        lat: -16.4237766667,
        lng: -71.54262,
    });
});
4

1 に答える 1

2

Google マップ マーカーはsetPosition、このためのメソッドを公開します。

markers変数はどこかで宣言されており、マップ上の各マーカーへの参照を保持していると思います:

function updatePoints (positions) {
    for (var i=0; i < positions.length; i++) {
        var pos=positions[i];
        var marker=markers[pos.registration];
        if(marker){
            // this marker already exists, so reposition it
            var latlong=new google.maps.LatLng(pos.latitude, pos.longitude);
            marker.setPosition(latlong);
        }else{
            // this is a new marker so create it
            marker = map.addMarker({
                lat: pos.latitude,
                lng: pos.longitude,
            });
            markers[pos.registration] = marker;
        }
    }
}
于 2013-05-08T04:54:42.643 に答える