Google maps 谷歌地图API设置位置错误

Google maps 谷歌地图API设置位置错误,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正在使用谷歌地图API v3。我的脚本工作正常,只要 标记未定义。但是当我在数据库中更新long-lat并且ajax函数通过json返回一个新的long-lat时,marker.setPosition(newLatLng)会使标记消失 请帮帮我,有什么问题吗?这是我的密码: $(document).ready(function () { var map; var marker; function initialize() { var myLatlng

我正在使用谷歌地图API v3。我的脚本工作正常,只要 标记未定义。但是当我在数据库中更新long-lat并且ajax函数通过json返回一个新的long-lat时,
marker.setPosition(newLatLng)
会使标记消失

请帮帮我,有什么问题吗?这是我的密码:

 $(document).ready(function () {
    var map;
    var marker;
    function initialize() {
        var myLatlng = new google.maps.LatLng(<?php echo $c_lat; ?>, <?php echo $c_long; ?>);
        var myOptions = {
            zoom: 19,
            center: myLatlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }

        map = new google.maps.Map(document.getElementById('driver_loc'), myOptions);
    }
function getLongLat(){
     $.ajax({
           type: "POST",
           url: "config/getLongLat.php?id=<?php echo $driverId; ?>",
           dataType: "json",
           success: function(data)
                {   
            var lat=data.lat; //returns new lat via db
            var lon=data.lon;
                // alert(lat);   
           var newLatLng = new google.maps.LatLng(lat, lon);

            if (marker != undefined)
                marker.setPosition(newLatLng);
            else
                marker = new google.maps.Marker({
                    position: newLatLng,
                    map: map,   
                    icon: 'images/car.png',
                    animation: google.maps.Animation.DROP, 
                    draggable: true
                });
            }
        });
        console.log(marker);
    }
    // Onload handler to fire off the app.
    google.maps.event.addDomListener(window, 'load', initialize);
  //  google.maps.event.addDomListener(window, 'load', callPosition);
    window.setInterval(function(){
  getLongLat();
}, 6326);
});
$(文档).ready(函数(){
var映射;
var标记;
函数初始化(){
var mylatng=newgoogle.maps.LatLng(,);
变量myOptions={
缩放:19,
中心:myLatlng,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById('driver_loc'),myOptions);
}
函数getLongLat(){
$.ajax({
类型:“POST”,
url:“config/getLongLat.php?id=”,
数据类型:“json”,
成功:功能(数据)
{   
var lat=data.lat;//通过数据库返回新的lat
var lon=data.lon;
//警报(lat);
var newLatLng=newgoogle.maps.LatLng(lat,lon);
如果(标记!=未定义)
标记器。设置位置(新LATLNG);
其他的
marker=新的google.maps.marker({
职位:newLatLng,
地图:地图,
图标:“images/car.png”,
动画:google.maps.animation.DROP,
德拉格布尔:是的
});
}
});
控制台日志(标记器);
}
//用于启动应用程序的Onload处理程序。
google.maps.event.addDomListener(窗口“加载”,初始化);
//google.maps.event.addDomListener(窗口'load',callPosition);
setInterval(函数(){
getLongLat();
}, 6326);
});

一个好的实践是对json数据使用parseFloat方法。新位置可以位于当前视口之外。要处理它,只需使用map.setCenter([new_position])方法。您还可以使用map.setZoom([zoom_level])更改缩放级别。 就你而言:

  $(document).ready(function () {
    var map;
    var marker;
    function initialize() {
      var myLatlng = new google.maps.LatLng(<?php echo $c_lat; ?>, <?php echo $c_long; ?>);
      var myOptions = {
        zoom: 19,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      }
      map = new google.maps.Map(document.getElementById('driver_loc'), myOptions);
    }
    function getLongLat(){
      $.ajax({ type: "POST", url: "config/getLongLat.php?id=<?php echo $driverId; ?>", dataType: "json",
               success: function(data){   
                 var lat=parseFloat(data.lat); //returns new lat via db
                 var lon=parseFloat(data.lon);
                 var newLatLng = new google.maps.LatLng(lat, lon);

                 if (marker != undefined){
                   marker.setPosition(newLatLng);
                 } else {
                   marker = new google.maps.Marker({
                     position: newLatLng,
                     map: map,   
                     icon: 'images/car.png',
                     animation: google.maps.Animation.DROP, 
                     draggable: true
                   });
                 }
                 //Center map on a new position
                 map.setCenter(newLatLng);
                 //Change zoom level
                 //map.setZoom(19);
               }
      });
    }
    // Onload handler to fire off the app.
    google.maps.event.addDomListener(window, 'load', initialize);
    //  google.maps.event.addDomListener(window, 'load', callPosition);
    window.setInterval(function(){
      getLongLat();
    }, 6326);
  });
$(文档).ready(函数(){
var映射;
var标记;
函数初始化(){
var mylatng=newgoogle.maps.LatLng(,);
变量myOptions={
缩放:19,
中心:myLatlng,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById('driver_loc'),myOptions);
}
函数getLongLat(){
$.ajax({type:“POST”,url:“config/getLongLat.php?id=”,数据类型:“json”,
成功:函数(数据){
var lat=parseFloat(data.lat);//通过db返回新的lat
var lon=parseFloat(data.lon);
var newLatLng=newgoogle.maps.LatLng(lat,lon);
如果(标记!=未定义){
标记器。设置位置(新LATLNG);
}否则{
marker=新的google.maps.marker({
职位:newLatLng,
地图:地图,
图标:“images/car.png”,
动画:google.maps.animation.DROP,
德拉格布尔:是的
});
}
//将地图居中放置在新位置
地图设置中心(newLatLng);
//更改缩放级别
//map.setZoom(19);
}
});
}
//用于启动应用程序的Onload处理程序。
google.maps.event.addDomListener(窗口“加载”,初始化);
//google.maps.event.addDomListener(窗口'load',callPosition);
setInterval(函数(){
getLongLat();
}, 6326);
});

你确定标记消失了吗,也许他在更新后被放在了视口外。ooo yeah u r right它会在5秒内移动,因为lat变化太大,请告诉我如何更改视口,因为我想显示更新markerI使用了var lat=parseFloat(data.lat)//通过db var lon=parseFloat(data.lon)返回新的lat;但同样的问题是,当新的长lat来自db时,标记消失了……也许,您的情况可以通过使用新位置更新视图端口来解决。我已经更新了上面的代码。