创建合适的导航路径

Create a proper path for navigation

本文关键字:导航 路径 创建      更新时间:2023-09-26

我必须为船只创建一个导航路径。所有的船都来到一个中心点,在那里停一会儿。船的坐标和中心点(母舰)来自数据库。

选择数据的代码。中心点是静态的

<?php
    $sqlqry = "SELECT * FROM ship WHERE id=" . $id . " AND start_date BETWEEN '" . $s_date . "' AND '" . $e_date . "'";
    $result = mysqli_query($bd, $sqlqry);
    $locations = array();
    $counter=0;
    while($row = mysqli_fetch_array($result)) {
        array_push($locations, $row);
    }
    $nrows = mysqli_num_rows($result);
?>

问题是有一些船是从水中的中心点出发的。他们应该从陆地开始和结束。

就像这里,你可以看到一艘船在红线的起点(陆地),一艘在绿线的起点(在中心点所在的水中)。

这是我的google maps JavaScript部分的初始化部分。

var nrows = <?php echo json_encode($nrows,JSON_NUMERIC_CHECK);?>;
    var locMatrix = <?php echo json_encode($locations,JSON_NUMERIC_CHECK);?>;
    var m_ship_rows = <?php echo json_encode($m_ship_rows,JSON_NUMERIC_CHECK);?>;
    var m_ship = <?php echo json_encode($m_ship,JSON_NUMERIC_CHECK);?>;
      var line;
      var line1;
      var lineArray = [];
      var lineArray1 = [];
      var DrivePath = [];
      // This example adds an animated symbol to a polyline.
      function initMap() {
        var intervalForAnimation;
        var count = 0;
        var n = 2;
        for(var i=0;i<=nrows-1;i++)
        {
        console.log(DrivePath[i]);
        DrivePath.push(new google.maps.LatLng(locMatrix[i][1], locMatrix[i][2]),
                  new google.maps.LatLng(17.8674, 66.543),
                  new google.maps.LatLng(locMatrix[i][3], locMatrix[i][4]));
      }
        var Colors = [
        "#FF0000", 
        "#00FF00", 
        "#0000FF", 
        "#FFFFFF", 
        "#000000", 
        "#FFFF00", 
        "#00FFFF", 
        "#FF00FF"
        ];

完整的代码在JSFiddle.

你也可以访问我的github repo获取整个代码。

http://github.com/Tejas-Nanaware/ship-scheduling-and-animation-tool

我找到了一个不同的解决方案,这在一定程度上帮助了我。

// Create the polyline and add the symbol to it via the 'icons' property.
        for(var i=0; i <=nrows; i++)
        {
          var line = new google.maps.Polyline({
            path: [{lat: locMatrix[i][1], lng: locMatrix[i][2]},
            {lat: 17.8674, lng: 66.543},
            {lat: locMatrix[i][3], lng: locMatrix[i][4]}],
            icons: [{
              icon: lineSymbol,
              offset: '100%'
          }],
          strokeColor: '#000000',
          strokeOpacity: 1.0,
          map: map
      });
          animateCircle(line);
      }

animateCircle()函数:

function animateCircle(line) {
          var count = 0;
          window.setInterval(function() {
            count = (count+0.5) % 200;
            var icons = line.get('icons');
            icons[0].offset = (count / 2) + '%';
            line.set('icons', icons);
        }, 20);
      }

我想问题是由于您的开始日期有一个左闭间隔。确实有一些船在起始日期之后才从母船出发,但事实上,它们从陆地出发的实际日期比你参数化的起始日期要早。所以,你需要决定如何处理那些在你的开始日期已经在旅途中的船只,但在那一天到这一刻之间,它们也在一艘母船上。如果不想显示它们的路径,则需要排除它们。如果您想要收集这些船只的早期事件,那么您将需要为这些特定船只运行另一个选择以收集早期数据。在任何情况下,您都需要一个函数,该函数将获得船舶的起点,并确定它是母船还是干地。