javascript - 自动更新 Google map Javascript API 上的标记位置

标签 javascript php mysql google-maps google-maps-api-3

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

我想使用数据库中更新的坐标自动更新 map 上标记的位置,而无需刷新 map 。我尝试在互联网上搜索,但找不到有助于实时更新坐标的解决方案。任何帮助将不胜感激。

<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>`

任何替代解决方案也是可以接受的。

最佳答案

我无法同时实时更新多个标记。相反,当旅程开始时,我删除了所有标记,并开始使用 Ajax 和 setInterval 命令仅实时更新一个特定标记。

关于javascript - 自动更新 Google map Javascript API 上的标记位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41879738/

相关文章:

javascript - 如何在 Google map API 上的标记周围添加圆圈

javascript - Ckeditor 4 和 Rails 在同一页面上有 2 个配置不同的 ckeditor

javascript - 如何使用 Href 但不被重定向?使用 HTML

mysql - 挂载 LVM2 并从故障 HDD 中恢复丢失的数据?

javascript - 如何判断父节点是否是body节点?

javascript - 在 AngularJS 中渲染 View 时会触发哪个事件?

php - 直接使用另一个查询返回的值进行插入 (PHP)

php - 如何在我网站的特定页面上将 http 请求重写为 https?

php - 使用数据库信息更改文本的 CSS/外观

mysql - fatal error : Uncaught Error: Class 'Illuminate\Foundation\Application' not found