javascript - Updating google map markers without reloading map and blinking -


i doing project should create web page shows google map markers @ specified gps coordinates. project organized in following way. @ server side, have php script accepts http request gps device, receives , stores gps coordinates in corresponding .txt file. php file includes javascript/jquery code reads .txt file gps coordinates, create new instance of google map , put markers on map user make request in web browser. electronic hardware engineer, pretty new me. code found reloads map on every 5 second, makes map flashing/blinking while on each reload. also, if change zooming manually in browser, resets default on each map reload. there way avoid map blinking, , update markers smoothly. in following snippet of javascript/jquery code have.

function initialize()     {         mapprop = {           center:mycenter,           zoom:17,           maptypeid:google.maps.maptypeid.roadmap           };         setinterval('mark()',5000);     }      function mark()     {             map=new google.maps.map(document.getelementbyid("googlemap"),mapprop);         var file = "gps.txt";         $.ajaxsetup({cache: false});                 $.get(file, function(txt) {              var lines = txt.split("\n");              (var i=0;i<lines.length;i++){                 console.log(lines[i]);                 var words=lines[i].split(",");                 if ((words[0]!="")&&(words[1]!=""))                 {                     marker=new google.maps.marker({                           position:new google.maps.latlng(words[0],words[1]),                           });                     marker.setmap(map);                     map.setcenter(new google.maps.latlng(words[0],words[1]));                     map.addmarker(new markeroptions().position(entry.getvalue()).title(entry.getkey()));                 }             }             lastlength = lines.length;             marker.setanimation(google.maps.animation.bounce);         });      }      google.maps.event.adddomlistener(window, 'load', initialize); 

what going on

you keep recreating map on every update rather creating once , add new markers it.

fixed code, comments:

function initialize() {     // map starting point    var mycenter = new google.maps.latlng(0, 0);     // coordinates file    var file = "gps.txt";     // init , keep reference last line of coordinates    var lastlength = 0;     // init , keep reference last set marker    var marker;     // map options    var mapprop = {       center:mycenter,       zoom:17,       maptypeid:google.maps.maptypeid.roadmap    };     // create map    var map = new google.maps.map(document.getelementbyid("googlemap"), mapprop);     // execute once    mark();     // set update    setinterval(mark, 5000);     // runs on schedule add new markers    function mark() {        $.ajaxsetup({cache:false});        $.get(file, function(txt) {           var lines = txt.split("\n");           // disable animation on last marker previous update          if(marker) {             marker.setanimation(null);          }           // start last line + 1 previous update          for(var i=lastlength; i<lines.length; ++i) {              // debug             //console.log(lastlength);             //console.log(lines[i]);              var words=lines[i].split(",");              if(words[0] != "" && words[1] != "") {                 // new marker                marker = new google.maps.marker({                   position:new google.maps.latlng(words[0],words[1]),                });                 // put marker on map                marker.setmap(map);                 // center on marker                map.setcenter(new google.maps.latlng(words[0],words[1]));                 // don't know api enough fix part although seems work without                //map.addmarker(new markeroptions().position(entry.getvalue()).title(entry.getkey()));             }          }           // update list starting position          lastlength = lines.length;           //set animation on current last marker          marker.setanimation(google.maps.animation.bounce);       }, 'text'); // added datatype:text    } }  // init google.maps.event.adddomlistener(window, 'load', initialize); 

Comments