javascript - Calcular la distancia entre puntos en tablas de fusión
Mi conocimiento de programación es muy limitado y estoy trabajando en un proyecto universitario que incluye programación.
Lo que quiero hacer es un mapa, que muestre tu ubicación actual y las ubicaciones de los puntos de reciclaje. Ya hice la parte de la ubicación actual, y usé las tablas de fusión para mostrar los puntos de reciclaje en el mapa. Pero también quería dar la opción de encontrar la ruta más corta entre tu ubicación actual y los puntos de reciclaje.
Entonces lo que haría sería calcular la distancia entre tu ubicación actual y cada punto de reciclaje, y mostrar el más cercano.
En este momento estoy tratando de entender los tutoriales de la API de Google Maps y no sé si esto es posible, utilizando las tablas de fusión. Así que quería saber si alguien sabe cómo hacer esto.
¡Muchas gracias!
<!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>
Respuesta #1
ACTUALIZACIÓN:
Puedes obtener las coordenadas del punto más cercano enviando una consulta a 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);
}
});
Puede consultar el ejemplo en vivo aquí.
Puedes usar el Servicio de Matriz de Distancias para ese propósito. Solo lees tu origen desde tu ubicación actual y envías una solicitud al Servicio de Matriz de Distancias para cada punto de reciclaje. También hay un ejemplo en Ejemplo de Matriz de Distancias.
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.
}
Puedes especificar el Modo de Viaje que calcula la duración en consecuencia.
google.maps.TravelMode.DRIVING (Por defecto) indica direcciones estándar para conducir usando la red vial.
google.maps.TravelMode.BICYCLING solicita direcciones para bicicleta a través de carriles bici y calles preferidas.
google.maps.TravelMode.TRANSIT solicita direcciones a través de rutas de transporte público.
google.maps.TravelMode.WALKING solicita direcciones para caminar a través de caminos peatonales y aceras.
