2016-09-03 7 views
-1

私は自分のデータベースに緯度経度のセットを持っていて、道路に沿って線で結ばれた/描画された地図にそれらを表示したかったのです。私のデータベースにある緯度経度の中には道のりがありませんが、私は追跡アプリのように一緒につながった道路を見たいと思っていました。Googleの道路に固定

私のコードでは、ロング(座標)が表示されますが、道路に沿って表示されないか、座標が道路上でスナップされません。ここで

は私のコードです:

`function initialize() { 

@foreach($track as $transac) 
    lati = {{$transac->latitude}}; 
    lngi = {{$transac->longitude}}; 
    @endforeach 

    var mapOptions = { 
    zoom: 17, 
    center: {lat: lati, lng: lngi} 
    }; 

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

var locate = [ 
@foreach($transactions as $location) 
     ['{{ $location->address }}<br> {{ $location->details }}', {{ $location->latitude }}, {{ $location->longitude }}], 
@endforeach 
]; 

var alltransaction = [ 
@foreach($alltransactions as $location) 
     ['{{ $location->address }}<br> {{ $location->details }}', {{ $location->latitude }}, {{ $location->longitude }}], 
@endforeach 
]; 

    var marker, i; 

    marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(lati,lngi), 
    map: map, 
    icon: 'images/car.jpg' 
    }); 

runSnapToRoad(); 

} 

// Snap a user-created polyline to roads and draw the snapped path 
function runSnapToRoad() { 
    var pathValues = []; 
    var pathVal = []; 
    var pathcon = []; 
    var utime; 

    @foreach($transactions as $transaction) 
    utime = '{{$transaction->updated_at}}'; 
    @endforeach 


    @foreach($track as $transac) 
    if('{{$transac->updated_at}}' < utime) 
     pathVal.push("{{$transac->latitude}},{{$transac->longitude}}") 
    else 
     pathValues.push("{{$transac->latitude}},{{$transac->longitude}}"); 
    @endforeach 
pathcon.push(pathVal[pathVal.length-1]); 
pathcon.push(pathValues[0]); 
alert(pathcon); 
    $.get('https://roads.googleapis.com/v1/snapToRoads', { 
    interpolate: true, 
    key: apiKey, 
    path: pathValues.join('|') 
    }, function(data) { 
    processSnapToRoadResponse(data); 
    drawSnappedPolyline(); 
    }); 

} 

// Store snapped polyline returned by the snap-to-road method. 
function processSnapToRoadResponse(data) { 
snappedCoordinates = []; 
placeIdArray = []; 
    for (var i = 0; i < data.snappedPoints.length; i++) { 
    var latlng = new google.maps.LatLng(
     data.snappedPoints[i].location.latitude, 
     data.snappedPoints[i].location.longitude); 
snappedCoordinates.push(latlng); 
placeIdArray.push(data.snappedPoints[i].placeId); 
    } 
} 

// Draws the snapped polyline (after processing snap-to-road response). 
function drawSnappedPolyline() { 
    var snappedPolyline = new google.maps.Polyline({ 
    path: snappedCoordinates, 
    strokeColor: 'green', 
    strokeWeight: 3 
    }); 

    snappedPolyline.setMap(map); 
    polylines.push(snappedPolyline); 
} 

$(window).load(initialize); 

setInterval(function myfunction() 
{ 
    $('#btn').click(); 
}, 1000000);` 

答えて

1

あなたの緯度/経度の一部が道路にスナップされていない場合、それはポイントがあまりにも遠く離れていることを示している可能性があります。

Roads demo: "スナップアルゴリズムは、互いに接近しているポイントに最適です。奇妙なスナップ動作が見られる場合は、点を近づけてパスを作成してみてください。」

ポイントが400m以内にあるときに最良の結果が得られました。これは、それらの間のパスを補間し、道路の上にポリラインを置くのに役立ちます。

Btw:the roads inspectorは、緯度/経度データを検査するのに便利です。

関連する問題