Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌地图Javascript API上的自动更新标记位置_Javascript_Php_Mysql_Google Maps_Google Maps Api 3 - Fatal编程技术网

谷歌地图Javascript API上的自动更新标记位置

谷歌地图Javascript API上的自动更新标记位置,javascript,php,mysql,google-maps,google-maps-api-3,Javascript,Php,Mysql,Google Maps,Google Maps Api 3,我们使用MySQL和PHP定期存储当前位置坐标(纬度和经度)。这是我们从数据库获取的位置坐标向地图添加标记的代码 我想使用数据库中更新的坐标自动更新标记在地图上的位置,而不刷新地图。我尝试过在互联网上搜索,但找不到一个能够帮助实时更新坐标的解决方案。我们将非常感谢您的帮助 <div id="map"></div> <script> var map; function initMap() { map = new google.maps.Map(

我们使用MySQL和PHP定期存储当前位置坐标(纬度和经度)。这是我们从数据库获取的位置坐标向地图添加标记的代码

我想使用数据库中更新的坐标自动更新标记在地图上的位置,而不刷新地图。我尝试过在互联网上搜索,但找不到一个能够帮助实时更新坐标的解决方案。我们将非常感谢您的帮助

<div id="map"></div>
 <script>
  var map;
  function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 16,
      center: new google.maps.LatLng( lat , long),
      mapTypeId: 'roadmap'
    });

    var iconBase = 'XXXXXXX';
    var icons = {
      spot: {
        icon: 'XXXXXX'
      },
      0: {
        icon: iconBase + 'XXXXX'
      },
      1: {
        icon: iconBase + 'XXXX'
      },
    };

     function addMarker(feature) {
      var marker = new google.maps.Marker({
        position: feature.position,
        icon: icons[feature.type].icon,
        map: map
      });
      map.setCenter(marker.getPosition())
        if(feature.type!="spot"){
         var content = '<font color="#636363"><h3><img src="http://XXXX"> '+feature.rto+'<br><img style="vertical-align: middle" src="http://XXXXXXX"> <a style="text-decoration:none" href="tel:+91'+feature.phone+'">'+feature.phone+'</a></h3></font>';  
     }
     else {
        var content = '<b>Address: </b>'+feature.address+'<br><b>Information: </b>XXXXXXXX';
     }
        var infowindow = new google.maps.InfoWindow()

        google.maps.event.addListener(marker,'click', (function(marker,content,infowindow){ 
            return function() {
                infowindow.setContent(content);
                infowindow.open(map,this);
            };
        })(marker,content,infowindow)); 
    }

    var features = [
      {
        <?php echo "position: new google.maps.LatLng(".$lat.", ".$long."),";
        echo "type: 'spot',
        address: '".$r['address']."'";
        ?>
      } 
      <?php
        $e = mysqli_fetch_assoc(mysqli_query($con, "select distpref,radius from XXXXX XXXXXXXXXXXXXXX"));
        $er = $e['radius'];
        $dp = $e['distpref'];
      $sql = "SELECT *, ( $dp * acos( cos( radians(" . $lat . ") ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(" . $long . ") ) + sin( radians(" . $lat . ") ) * sin( radians( latitude ) ) ) ) AS distance FROM markers HAVING distance<$er";

      $result = mysqli_query($con, $sql);
      while($row = mysqli_fetch_assoc($result)) {
      echo ", {
        position: new google.maps.LatLng(".$row['latitude'].", ".$row['longitude']."),
        type: '".$row['type']."',
        phone: '".$row['phone']."'
        }";
      }
      ?>
    ];

    for (var i = 0, feature; feature = features[i]; i++) {
      addMarker(feature);
    }
  }
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY&callback=initMap">
</script>`

var映射;
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
缩放:16,
中心:新google.maps.LatLng(lat,long),
mapTypeId:“路线图”
});
var iconBase='XXXXXXX';
变量图标={
地点:{
图标:“XXXXXX”
},
0: {
图标:iconBase+'XXXXX'
},
1: {
图标:iconBase+'XXXX'
},
};
功能添加标记(功能){
var marker=new google.maps.marker({
位置:feature.position,
图标:图标[feature.type]。图标,
地图:地图
});
map.setCenter(marker.getPosition())
if(特征类型!=“点”){
var content=''+feature.rto+'
'; } 否则{ 变量内容='地址:'+功能。地址+'
信息:XXXXXXXX'; } var infowindow=new google.maps.infowindow() google.maps.event.addListener(标记,'click',(函数(标记,内容,信息窗口){ 返回函数(){ infowindow.setContent(content); 打开(地图,这个); }; })(标记、内容、信息窗口); } 变量特征=[ {
我无法同时实时更新多个标记。相反,当旅程开始时,我删除了所有标记,并开始使用Ajax和setInterval命令仅实时更新一个特定标记。

要实时更新坐标,需要调用php模块的Ajax…您应该将代码拆分为..javascript部分以进行渲染使用映射和基于事件的ajax调用调用php服务器端代码来检索新坐标,并在ajax成功函数中使用新坐标管理地图的更新…很长的路要走。@scaisEdge如何做到这一点?我可以进行ajax调用,但如何更新标记的位置?在ajax调用中,您将获得成功然后使用此函数可以调用一个简单的marker setposition,例如:var latlng=new google.maps.latlng(your_new_lat,your_new_lng);marker.setposition(latlng)@scaisEdge如果我的地图只有一个标记,这似乎是可行的,但这里我有多个标记,那么我如何更新单个标记?如果你有更多的标记,你应该使用循环,…并不是那么困难