2011-04-29 20 views
11

Necesito permitir que los viajeros usen google maps para trazar una ruta, y luego consultar mi base de datos de puntos de interés (digamos, ubicaciones de McDonald's) y luego mostrar todos estos lugares que están dentro de una milla o dos de la ruta que tomarán. La pregunta es, ¿cómo tomo eficientemente la información de "indicaciones de manejo" que proviene de google (esencialmente una matriz de pares lat/long), y la convierto en una consulta sql para obtener ubicaciones que caen dentro de una cierta distancia de la ruta ?haciendo "puntos de interés a lo largo de una ruta" en google maps

No tiene que ser súper preciso, y "como el pájaro vuela", las distancias de las rutas están bien. Lo que más me preocupa es que sea razonablemente eficiente.

En la base de datos, las cosas se configuran básicamente con cada entrada que tiene una latitud y longitud, pero puedo cambiar el esquema de la base de datos según sea necesario.

A modo de ejemplo, este sitio hace lo que yo quiero hacer (si se le da un punto de partida y el punto final, se mostrará estaciones de Chevron de que están cerca de la carretera que va a tomar): http://www.chevron.com/products/stations/stationfinder/planyourroute.aspx

http://karmatics.com/docs/locationsalongroute.png

Respuesta

12

mira esto

http://google-maps-utility-library-v3.googlecode.com/svn/tags/routeboxer/1.0/examples/routeboxer-v3.html

Aquí está la documentación: http://google-maps-utility-library-v3.googlecode.com/svn/tags/routeboxer/1.0/docs/examples.html

Se puede conseguir la caja de coordenadas RouteBoxer y enviar eso a una secuencia de comandos para el procesamiento serverside

+0

perfecto, exactamente lo que estaba buscando. – rob

+0

Lamento tener solo un voto para dar. – Hemlock

+0

¡He estado buscando una respuesta a esto por una semana! ¡Gracias! – ajbraus

0
<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <title>Polygon arrays</title> 
    <style> 
     #map { 
     height: 100%; 
     } 
     html, body { 
     height: 100%; 
     margin: 0; 
     padding: 0; 
     } 
    </style> 
    </head> 

    <body> 
    <div id="map"></div> 
    <script>  
var map; 
     function initMap() { 
     map = new google.maps.Map(document.getElementById('map'), { 
      center: {lat: 19.2570, lng: 72.8712}, 
      zoom: 10, 
     }); 

     var directionService = new google.maps.DirectionsService(); 
     var directionsRenderer = new google.maps.DirectionsRenderer({ map: map }); 
     var request = { 
      origin: "<?php echo $source;?>", 
      destination: "<?php echo $destination;?>", 
      travelMode: google.maps.DirectionsTravelMode.DRIVING 
     } 


     directionService.route(request, function(result, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 

      var path = result.routes[0].overview_path; 

      var poly = new google.maps.Polyline({ 
       strokeColor: '#FF0000', 
       strokeOpacity: 1.0, 
       strokeWeight: 3, 
      map: map, 
      }); 
      poly.setPath(path); 


      var myTollLocations = [ 
       <?php 

       isset($hello); //$hello is array which comes from database 
       foreach ($hello as $key => $value) { 
       ?> 
        new google.maps.LatLng(<?php echo $hello[$key]->latitude;?>, <?php echo $hello[$key]->longitude;?>), 
       <?php 
       } 
       ?> 

      ]; 


      for (var i = 0; i < myTollLocations.length ; i++) { 
       if (google.maps.geometry.poly.isLocationOnEdge(myTollLocations[i], poly,0.005)) { 
        console.log("found"); 


       }else{ 
        console.log("Not Found!"); 
       } 
      }; 




      <?php 
      $markersLocation = array($source, $destination); 
      foreach ($markersLocation as $key => $values) { 

      ?> 


      //Source Marker(convert address to LatLng for marker) 
      var geocoder = new google.maps.Geocoder();    
      geocoder.geocode({ 'address': '<?php echo $markersLocation[$key]?>'}, function(results, status) { 

       if (status == google.maps.GeocoderStatus.OK) { 
        var latitude = results[0].geometry.location.lat(); 
        var longitude = results[0].geometry.location.lng(); 
       } 

       console.log(latitude); 
       console.log(longitude); 

       var myLatLng = {lat: latitude, lng: longitude}; 



       var marker = new google.maps.Marker({ 
        position: myLatLng, 
        map: map, 
        title: 'source', 
        icon: 'http://innowrap.com/clients/digitoll/ic_red_marker.png' 

       }); 

      }); 


      <?php 
      } 
      ?> 


      } else { 
      alert("Directions query failed: " + status); 
      } 
     }); 


     } 


    </script> 
    <script src="https://maps.googleapis.com/maps/api/js?key=ADD YOUR API KEY&libraries=geometry&callback=initMap" 
     async defer></script> 
    </body> 
</html> 
+0

Si bien este fragmento de código es bienvenido, y puede proporcionar cierta ayuda, sería [mucho mejor si incluyera una explicación] (// meta.stackexchange.com/q/114762) de * cómo * y * por qué * esto resuelve el problema. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, ¡no solo a la persona que pregunta ahora! Por favor [edite] su respuesta para agregar una explicación y dar una indicación de qué limitaciones y suposiciones se aplican. –

Cuestiones relacionadas