5

我的編程知識非常有限,我正在進行包括編程在內的大學項目。計算融合表中點之間的距離

我想要做的是一張地圖,顯示您當前的位置和回收點的位置。我已經完成了當前的位置部分,並使用融合表在地圖上顯示回收點。但我也想要選擇找到您當前位置和回收點之間的最短路線。

那麼它會做的是計算您的當前位置和每個回收點之間的距離,並顯示最短的一個。

現在我想了解谷歌地圖API教程,我不知道這是可能的,使用融合表。所以我想知道是否有人知道如何做到這一點。

非常感謝!

<!DOCTYPE html> 
<html> 
<head> 
<section id="wrapper"> 
Clique no botão "permitir" para deixar o browser encontrar a sua localização 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> 
<article> 
</article> 
<script> 


function success(position) { 
    var mapcanvas = document.createElement('div'); 
    mapcanvas.id = 'mapcontainer'; 
    mapcanvas.style.height = '350px'; 
    mapcanvas.style.width = '450px'; 
    document.querySelector('article').appendChild(mapcanvas); 

    var coords = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 

    var options = { 
    zoom: 15, 
    center: coords, 
    mapTypeControl: false, 
    navigationControlOptions: { 
     style: google.maps.NavigationControlStyle.SMALL 
    }, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById("mapcontainer"), options); 
    var marker = new google.maps.Marker({ 
     position: coords, 
     map: map, 
     title:"You are here!" 
    }); 

    var layer = new google.maps.FusionTablesLayer({ 
    query: { 
    select: 'Coordenadas', 
    from: '1CwMDrcxebjsb8sjG42rbGVAZB25Zi7CvaLJXOCM' 
    }, 


}); 
layer.setMap(map) 
} 


if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(success); 
} else { 
    error('Geo Location is not supported'); 
} 
</script> 
</section> 

</head> 
<body> 

</body> 

</html> 
+0

表中存儲了多少「回收點」? – geocodezip

+0

現在,只有15個,但我沒有添加點。我仍在等待回收公司的信息。 – JGuerreiro

回答

5

UPDATE

您可以檢索最近的點座標通過發送查詢Google Visualization API

// Initiate the GViz query 
var queryList = []; 
queryList.push("SELECT Location FROM "); 
queryList.push(tableId); 
queryList.push(" ORDER BY ST_DISTANCE(Location, LATLNG("); 
queryList.push(currentLat + "," + currentLng); 
queryList.push(")) "); 
queryList.push(" LIMIT 1"); 

var queryText = encodeURIComponent(queryList.join('')); 
var query = new google.visualization.Query(
         'http://www.google.com/fusiontables/gvizdata?tq=' + 
          queryText); 

// Handling the result of nearest location query 
query.send(function(response) { 
    dataTable = response.getDataTable(); 

    // If there is any result 
    if (dataTable && dataTable.getNumberOfRows()) { 
     console.log("Nearest Point is: " + dataTable.getValue(0,0)); 

     // Result holds the coordinates of nearest point 
     var result = dataTable.getValue(0,0).split(","); 

     // Creates a Google Map LatLng from "result" 
     var latlng = new google.maps.LatLng(result[0], result[1]); 
     showRoute(latlng); 
    } 

}); 

您可以檢查活生生的例子Here


您可以使用Distance Matrix Service作爲此目的。您只需從當前位置讀取您的原​​產地,並向每個回收點發送Distance Matrix Service的請求。在Distance Matrix Sample也有一個例子。

var mylocation = new google.maps.LatLng(CURRENT_LOCATION_LAT, CURRENT_LOCATION_LNG); 

// Destination by address 
var destination1 = "Stockholm, Sweden"; 

// or destination by lat and lng 
var destination2 = new google.maps.LatLng(50.087692, 14.421150); 

// Sending request 
var service = new google.maps.DistanceMatrixService(); 
service.getDistanceMatrix(
    { 
    origins: [mylocation], 
    destinations: [destination1, destination2], 
    travelMode: google.maps.TravelMode.DRIVING, 
    avoidHighways: false, 
    avoidTolls: false 
    }, callback); 

function callback(response, status) { 
    // See Parsing the Results for 
    // the basics of a callback function. 
} 

您可以指定相應計算持續時間的Travel Mode

google.maps.TravelMode.DRIVING(默認)表示使用道路網絡的標準行車路線。
google.maps.TravelMode.BICYCLING要求騎自行車通過自行車道&首選街道。
google.maps.TravelMode.TRANSIT通過公共交通路線請求路線。 google.maps.TravelMode.WALKING通過步行路徑請求步行路線&人行道。

+0

嗨。感謝您的幫助(: 有沒有辦法讓我的融合表點進入目的地? – JGuerreiro

+0

@JGuerreiro,對不起,我沒有訪問我的電腦,我用我的手機衝浪,這是真的不方便,我會盡快給你回覆 –

+0

好的,再次感謝你的回覆 – JGuerreiro