5

Le mie conoscenze di programmazione sono molto limitate e sto lavorando a un progetto universitario che include la programmazione.Calcola la distanza tra i punti nelle tabelle di fusione

Quello che voglio fare è una mappa, che mostra la posizione corrente e le posizioni dei punti di riciclaggio. Ho già realizzato la parte relativa alla posizione corrente e ho utilizzato le tabelle di fusione per visualizzare i punti di riciclaggio sulla mappa. Ma volevo anche dare la possibilità di trovare il percorso più breve tra la tua posizione attuale e i punti di riciclaggio.

Quindi, ciò che sarebbe stato fare era calcolare la distanza tra la posizione corrente e ogni punto di riciclaggio e mostrare quello più breve.

In questo momento sto cercando di capire i tutorial di google maps api e non so se è possibile, utilizzando le tabelle di fusione. Quindi volevo sapere se qualcuno sa come farlo.

Grazie mille!

<!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

Quanti "punti di riciclaggio" sono memorizzati nella tabella? – geocodezip

+0

Al momento, ce ne sono solo 15 ma non ho aggiunto punti. Sto ancora aspettando informazioni da una società di riciclaggio. – JGuerreiro

risposta

5

UPDATE:

Si può recuperare il punto più vicino coordina con l'invio di una query per 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); 
    } 

}); 

Check l'esempio vivo Here.


A tale scopo è possibile utilizzare Distance Matrix Service. Basta leggere l'origine dalla posizione corrente e inviare una richiesta a Distance Matrix Service per ciascun punto di riciclaggio. C'è anche un esempio allo 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. 
} 

È possibile specificare il Travel Mode che calcola la durata di conseguenza.

google.maps.TravelMode.DRIVING (predefinito) indica le direzioni di guida standard utilizzando la rete stradale.
google.maps.TravelMode.BICYCLING richieste di indicazioni stradali in bicicletta attraverso le piste ciclabili & preferite.
google.maps.TravelMode.TRANSIT richieste indicazioni tramite le vie di trasporto pubblico. google.maps.TravelMode.WALKING richieste indicazioni pedonali via pedonale & marciapiedi.

+0

Hii. Grazie per il vostro aiuto (: C'è un modo per mettere i miei punti delle tabelle di fusione nelle destinazioni? – JGuerreiro

+0

@JGuerreiro, Spiacente, non ho accesso al mio computer e sto navigando SO con il mio telefono che è veramente –

+0

Ok. Grazie mille ancora. – JGuerreiro