2010-11-08 13 views

Respuesta

4

No creo que pueda determinar si un punto es una carretera o un edificio puramente con datos de Google Maps. Para hacer esto, creo que necesitaría alguna fuente de datos adicional.

Sin embargo, es posible que pueda determinar si un punto es una carretera utilizando la técnica Snap point to street.

He vuelto a escribir la técnica para utilizar Google Maps API v3 y he añadido la función Haversine para indicar la distancia (en km) entre el punto seleccionado originalmente y el punto correspondiente en la calle más cercana.

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps JavaScript API v3 Example: Directions Simple</title> 
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 

rad = function(x) {return x*Math.PI/180;} 

distHaversine = function(p1, p2) { 
    var R = 6371; // earth's mean radius in km 
    var dLat = rad(p2.lat() - p1.lat()); 
    var dLong = rad(p2.lng() - p1.lng()); 

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) * Math.sin(dLong/2) * Math.sin(dLong/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; 

    return d.toFixed(3); 
} 

    var dirn = new google.maps.DirectionsService(); 
    var map; 

    function initialize() { 
    var center = new google.maps.LatLng(53.7877, -2.9832); 
    var myOptions = { 
     zoom:15, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     center: center 
    } 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    google.maps.event.addListener(map, "click", function(event) { 
     // == When the user clicks on a the map, get directiobns from that point to itself == 
     var request = { 
      origin: event.latLng, 
      destination: event.latLng, 
      travelMode: google.maps.DirectionsTravelMode.DRIVING 
     }; 
     dirn.route(request, function(response, status) { 
      if (status == google.maps.DirectionsStatus.OK) { 
       if(response.routes && response.routes.length > 0){ 
        route = response.routes[0]; 
        if(route.overview_path && route.overview_path.length > 0){ 
         pos = route.overview_path[0]; 
         new google.maps.Marker({ 
           position: pos, 
           map: map 
         }); 
         alert(distHaversine(request.origin, pos)); 
        } 
       } 
      } 
     }); 
    }); 
    } 




</script> 
</head> 
<body onload="initialize()"> 
<div id="map_canvas"></div> 
</body> 
</html> 

Espero que sea útil.

+0

Supongo que esto podría usarse para determinar si un punto se encuentra fuera de la carretera. Importé una tonelada de puntos GPS de OpenStreetMap que eran solo carreteras de una sección que especifiqué, pero sé que verificar un punto en contra de toda la colección no sería la mejor manera. – Stevus

2

El mejor lugar para preguntar es https://gis.stackexchange.com/. ¿No es posible determinar la ubicación de la carretera desde la capa que contiene las carreteras? Te darán los lat-long de todos los nodos de ruta. A menos que sea una línea curva, puede encontrar si su punto de latitud larga lies on the road line. Para convertir lat-long to cartesian, siga el enlace.

+0

He hecho algo similar a esto, pero es para determinar la sección de carretera más cercana dado un punto de GPS. Estoy tratando de determinar una forma de saber si un automóvil se ha desviado de la carretera y habría chocado con un edificio/paisaje/terreno accidentado. – Stevus

+0

AFAIK, la única manera de averiguarlo es tener una capa donde los edificios se marcan como edificios (o vectores similares). En cuanto al terreno, los mapas proporcionan vectores delimitados que representan los contornos y varios otros terrenos. Si puede subcontratar su trabajo, también puede conseguir que alguien cree manualmente una capa y marque todos los edificios, utilizando AutoCAD (así es como se hacen los mapas) O compre mapas o capas de fuentes que ya hayan marcado los edificios. – Nav

+0

¿Alguna idea de dónde descargar/comprar juegos de datos de mapas GPS? Uso mucho OpenStreetMap, pero tengo curiosidad por saber cómo está creando Google sus vistas de mapas. Deben obtener sus datos de algún lugar similar. – Stevus

Cuestiones relacionadas