2016-09-15 17 views
4

船舶の航行経路を作成する必要があります。すべての船は中心点に来てしばらくそこで停止します。 船の座標と中心点(MotherShip)は、データベースから来ています。ナビゲーション用の適切なパスを作成する

データを選択するコード。中心点は静的です。

<?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); 
?> 

問題は、水の中心点から始まる船がいくつかあることです。彼らは土地で始まり、終わるべきです。

Like here you can see one ship at the start of red line(land) and one at the start of green line (in water where center point is).

ここに私のGoogleマップでは、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リポジトリにアクセスすることもできます。

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

+0

Guysは、これは十分に文書化問題であり、有効な問題を示しています。それを閉じないでください。 –

答えて

2

私は部分的に私を助けた別の解決策を見つけました。

// 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); 
     } 
0

私はこの問題は、開始日のために左閉じた間隔を持っているという事実から来ていると仮定します。出発日以降、母船から出発した船は確かにありますが、土地からの実際の開始日はパラメータ化された開始日よりも早いです。だから、あなたは出発日にすでに旅に入っていた船で何をすべきかを決める必要がありますが、その日と今の瞬間には母船に乗っています。パスを表示したくない場合は、パスを除外する必要があります。それらの船舶の初期イベントを収集する場合は、これらの特定の船舶について、以前のデータを収集するために別の選択肢を実行する必要があります。いずれにせよ、船の出発点となる船舶が母船か乾燥地であるかを判断する機能が必要です。

+0

いいえLajos。開始日が選択された2つの日付の間にある船を表示しました。船が既に始まっていれば、それは表示されません。水中でさえない。 私はそれを初期化する方法にいくつかの問題があると私は信じています。 新しいgoogle.maps.LatLng()は、2点の線を作成するのに役立ちます。一方、私は3つのポイントを持つパスを作成する必要があります。 私は初期化するときに、1本の船が土地から始まり母船で終わり、もう1本の船が母船から始まり土地で終わると思う。 船が陸地から中心地点に移動して再び上陸する経路を作るにはどうすればよいですか? – EnclosedMail

+0

母船から別の脚を作って土地に戻したいのですか?母船から第1脚と異なる土地までのルートはありますか?私はあなたには新しい脚(ポリライン)が必要だと思うが、その方向に関するデータは依然としてデータベースから来てプロットされる。 – adjuremods

+0

@adjuremodsナビゲーションパスは、海の1つのポイント(母船)とその土地にある2つのラインで構成されています。ナビゲーションパスは母船で曲がります。両方の線がマップに表示されます。しかし問題は、初期化の間、私は3つの点すべてを与えているということです。それは道に論理的な誤りを作り、2つの異なる船に分けます。船は土地から始まり母船で終わり、2つ目は母船から始まり、土地で終わります。これは起こらないはずです。これらの3つのポイントを開始する1つの船がなければなりません、マザー船、終わり – EnclosedMail

関連する問題