javascript - Google maps api v3 draw polyline - Stack Overflow

I'm new in javascript so i have problem with drawing polyline on my map. I'm receiving coordi

I'm new in javascript so i have problem with drawing polyline on my map. I'm receiving coordinates from GPS in vehicle and i want to draw car movement. So for i put markers on the places my car passed, but i'm not sure how to add polyline. Can anybody help me?

I've written this so far:

    var map;
    var markers=[];
    var timeout=5000;
    var interval=null;

    function init2(){
        var myLatlng = new google.maps.LatLng(45.7997016667,15.97143);
        var mapOptions = {
            zoom: 14,
            center: myLatlng,
            zoomControl: true,
            zoomControlOptions: {
                style: google.maps.ZoomControlStyle.SMALL
            },
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
        update_markers();
    }
    function update_markers(){
        console.log('update...');
        for(var x in markers){
            markers[x].setMap(null);
        }
        markers=[];
        $.getJSON('/get',
            function(d){
                var l=d.length;
                for(var x=l-5;x<l;x++){
                    var f1=parseFloat(d[x].lat);
                    var f2=parseFloat(d[x].long);
                    if(f1>100){
                        continue;
                        f1=f1/100.0;
                        f2=f2/100.0;
                    }

                    markers.push(new google.maps.Marker({
                        position: new google.maps.LatLng(f1, f2),
                        map: map,
                        title: d[x].time
                    }));
                }
            }
        );
        interval=setTimeout(update_markers, timeout);
    }

    google.maps.event.addDomListener(window, 'load', init2);

    $(function(){
        $('#timeout_sel').change(function(){
            clearTimeout(interval);
            timeout=$(this).val();
            update_markers();
        });
    });

And i don't know how to put this into my code:

    function initialize() {
  var myLatLng = new google.maps.LatLng(0, -180);
  var mapOptions = {
    zoom: 3,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };

  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  var flightPlanCoordinates = [
      new google.maps.LatLng(37.772323, -122.214897),
      new google.maps.LatLng(21.291982, -157.821856),
      new google.maps.LatLng(-18.142599, 178.431),
      new google.maps.LatLng(-27.46758, 153.027892)
  ];
  var flightPath = new google.maps.Polyline({
    path: flightPlanCoordinates,
    strokeColor: '#FF0000',
    strokeOpacity: 1.0,
    strokeWeight: 2
  });

  flightPath.setMap(map);
}

google.maps.event.addDomListener(window, 'load', initialize);

Can you give me some tips? The second code is from google examples and it uses fixed latlng, how do i add this in may update_markers function so it uses the same coordinates as marker?

EDIT:

    var map;
    var markers=[];
    var timeout=5000;
    var interval=null;
    var flightPlanCoordinates=[];

    function init2(){
        var myLatlng = new google.maps.LatLng(45.7997016667,15.97143);
        var mapOptions = {
            zoom: 14,
            center: myLatlng,
            zoomControl: true,
            zoomControlOptions: {
                style: google.maps.ZoomControlStyle.SMALL
            },
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
        update_markers();
    }
    function update_markers(){
        console.log('update...');
        for(var x in markers){
            markers[x].setMap(null);
        }
        markers=[];
        $.getJSON('/get',
            function(d){
                var l=d.length;
                for(var x=l-5;x<l;x++){
                    var f1=parseFloat(d[x].lat);
                    var f2=parseFloat(d[x].long);
                    if(f1>100){
                        continue;
                        f1=f1/100.0;
                        f2=f2/100.0;
                    }

                    markers.push(new google.maps.Marker({
                        position: new google.maps.LatLng(f1, f2),
                        map: map,
                        title: d[x].time
                    }));
                    flightPlanCoordinates = new google.maps.LatLng(f1,f2);
                 }
                 var flightPath = new google.maps.Polyline({
         path: flightPlanCoordinates,
         strokeColor: '#FF0000',
         strokeOpacity: 1.0,
         strokeWeight: 2
             });
            }
        );
        interval=setTimeout(update_markers, timeout);
    }

    google.maps.event.addDomListener(window, 'load', init2);

    $(function(){
        $('#timeout_sel').change(function(){
            clearTimeout(interval);
            timeout=$(this).val();
            update_markers();
        });
    });

I'm new in javascript so i have problem with drawing polyline on my map. I'm receiving coordinates from GPS in vehicle and i want to draw car movement. So for i put markers on the places my car passed, but i'm not sure how to add polyline. Can anybody help me?

I've written this so far:

    var map;
    var markers=[];
    var timeout=5000;
    var interval=null;

    function init2(){
        var myLatlng = new google.maps.LatLng(45.7997016667,15.97143);
        var mapOptions = {
            zoom: 14,
            center: myLatlng,
            zoomControl: true,
            zoomControlOptions: {
                style: google.maps.ZoomControlStyle.SMALL
            },
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
        update_markers();
    }
    function update_markers(){
        console.log('update...');
        for(var x in markers){
            markers[x].setMap(null);
        }
        markers=[];
        $.getJSON('/get',
            function(d){
                var l=d.length;
                for(var x=l-5;x<l;x++){
                    var f1=parseFloat(d[x].lat);
                    var f2=parseFloat(d[x].long);
                    if(f1>100){
                        continue;
                        f1=f1/100.0;
                        f2=f2/100.0;
                    }

                    markers.push(new google.maps.Marker({
                        position: new google.maps.LatLng(f1, f2),
                        map: map,
                        title: d[x].time
                    }));
                }
            }
        );
        interval=setTimeout(update_markers, timeout);
    }

    google.maps.event.addDomListener(window, 'load', init2);

    $(function(){
        $('#timeout_sel').change(function(){
            clearTimeout(interval);
            timeout=$(this).val();
            update_markers();
        });
    });

And i don't know how to put this into my code:

    function initialize() {
  var myLatLng = new google.maps.LatLng(0, -180);
  var mapOptions = {
    zoom: 3,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };

  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  var flightPlanCoordinates = [
      new google.maps.LatLng(37.772323, -122.214897),
      new google.maps.LatLng(21.291982, -157.821856),
      new google.maps.LatLng(-18.142599, 178.431),
      new google.maps.LatLng(-27.46758, 153.027892)
  ];
  var flightPath = new google.maps.Polyline({
    path: flightPlanCoordinates,
    strokeColor: '#FF0000',
    strokeOpacity: 1.0,
    strokeWeight: 2
  });

  flightPath.setMap(map);
}

google.maps.event.addDomListener(window, 'load', initialize);

Can you give me some tips? The second code is from google examples and it uses fixed latlng, how do i add this in may update_markers function so it uses the same coordinates as marker?

EDIT:

    var map;
    var markers=[];
    var timeout=5000;
    var interval=null;
    var flightPlanCoordinates=[];

    function init2(){
        var myLatlng = new google.maps.LatLng(45.7997016667,15.97143);
        var mapOptions = {
            zoom: 14,
            center: myLatlng,
            zoomControl: true,
            zoomControlOptions: {
                style: google.maps.ZoomControlStyle.SMALL
            },
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
        update_markers();
    }
    function update_markers(){
        console.log('update...');
        for(var x in markers){
            markers[x].setMap(null);
        }
        markers=[];
        $.getJSON('/get',
            function(d){
                var l=d.length;
                for(var x=l-5;x<l;x++){
                    var f1=parseFloat(d[x].lat);
                    var f2=parseFloat(d[x].long);
                    if(f1>100){
                        continue;
                        f1=f1/100.0;
                        f2=f2/100.0;
                    }

                    markers.push(new google.maps.Marker({
                        position: new google.maps.LatLng(f1, f2),
                        map: map,
                        title: d[x].time
                    }));
                    flightPlanCoordinates = new google.maps.LatLng(f1,f2);
                 }
                 var flightPath = new google.maps.Polyline({
         path: flightPlanCoordinates,
         strokeColor: '#FF0000',
         strokeOpacity: 1.0,
         strokeWeight: 2
             });
            }
        );
        interval=setTimeout(update_markers, timeout);
    }

    google.maps.event.addDomListener(window, 'load', init2);

    $(function(){
        $('#timeout_sel').change(function(){
            clearTimeout(interval);
            timeout=$(this).val();
            update_markers();
        });
    });
Share Improve this question edited Jul 4, 2013 at 18:45 la lluvia asked Jul 4, 2013 at 18:12 la lluviala lluvia 7253 gold badges11 silver badges20 bronze badges 3
  • Take a look at your current code and the code you want to add. Do you see that some parts are mon between the two, or at least very similar, and some parts are different? You already have the mon parts, now you need to add the different parts. Specifically, that will be the three statements that create the flightPlanCoordinates and the flightPath and adds that to the map. – Michael Geary Commented Jul 4, 2013 at 18:16
  • With regard to the specific question of how to use the marker latlngs instead of the hard coded values, do this: (1) Create an empty array before your marker loop with var flightPlanCoordinates = []; (2) Each time you add a marker, push the same LatLng value (your position) onto that array. (3) After the loop, create the new PolyLine and add it to the map. – Michael Geary Commented Jul 4, 2013 at 18:22
  • i edited post so you can correct me if i'm doing something wrong. i did first and second thing. but i'm not sure how to: add it to the map. – la lluvia Commented Jul 4, 2013 at 18:47
Add a ment  | 

1 Answer 1

Reset to default 1

Here's a update based on your updated code. This should be pretty close. You need to push each position onto the flightPlanCoordinates array, not assign to that variable. Also that array doesn't need to be global. Regarding adding the polyline to the map, that's either the .setMap() call in the original code, or you can use the map property when you create the polyline, as you do for the markers and shown in the code below.

I also pushed the polyline onto the markers array so it will be removed along with the markers. You may want to change the name of this array to reflect that it's not just markers but basically is everything you want to clear from the map on an update.

I also moved this clearing code into the $.getJSON() callback instead of doing it before you make the call. This will give a smoother update instead of blanking the markers and polyline for a short time while you wait for the new data.

Another tip: never use a for..in loop on an array (the loop that clears the markers from the map with setMap(null)). Use a numeric for loop instead.

var map;
var markers=[];
var timeout=5000;
var interval=null;

function init2(){
    var myLatlng = new google.maps.LatLng(45.7997016667,15.97143);
    var mapOptions = {
        zoom: 14,
        center: myLatlng,
        zoomControl: true,
        zoomControlOptions: {
            style: google.maps.ZoomControlStyle.SMALL
        },
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    update_markers();
}
function update_markers(){
    console.log('update...');
    $.getJSON('/get',
        function(d){
            for(var i = 0;  i < markers.length;  ++i){
                markers[i].setMap(null);
            }
            markers=[];
            var polylineCoordinates = [];
            var l=d.length;
            for(var x=l-5;x<l;x++){
                var f1=parseFloat(d[x].lat);
                var f2=parseFloat(d[x].long);
                if(f1>100){
                    continue;
                    f1=f1/100.0;
                    f2=f2/100.0;
                }

                var position = new google.maps.LatLng(f1, f2);
                markers.push(new google.maps.Marker({
                    position: position,
                    map: map,
                    title: d[x].time
                }));
                polylineCoordinates.push( position );
            }
            markers.push(new google.maps.Polyline({
                map: map,
                path: polylineCoordinates,
                strokeColor: '#FF0000',
                strokeOpacity: 1.0,
                strokeWeight: 2
            }));
        }
    );
    interval=setTimeout(update_markers, timeout);
}

google.maps.event.addDomListener(window, 'load', init2);

$(function(){
    $('#timeout_sel').change(function(){
        clearTimeout(interval);
        timeout=$(this).val();
        update_markers();
    });
});

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745311176a4622006.html

相关推荐

  • javascript - Google maps api v3 draw polyline - Stack Overflow

    I'm new in javascript so i have problem with drawing polyline on my map. I'm receiving coordi

    4小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信