2016-09-03 34 views
-1

我在我的數據庫中有一組lat,我想在地圖上將它們顯示在連在一起的地圖上。我在數據庫中的一些經緯度不在路上,但我希望他們能夠像跟蹤應用程序一樣連接在一起。Google Snap to Roads

我的代碼顯示lats longs(座標),但不遵循道路或者座標不在路上。

這裏是我的代碼:

`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便於檢查緯度/經度數據。