2011-04-29 51 views
11

Tôi cần cho phép khách du lịch sử dụng bản đồ google để vẽ đường, sau đó truy vấn cơ sở dữ liệu của tôi về các địa điểm ưa thích (ví dụ: vị trí của McDonald) và sau đó hiển thị tất cả những vị trí này nằm trong phạm vi một hoặc hai dặm của tuyến đường mà họ sẽ thực hiện. Câu hỏi đặt ra là, làm cách nào tôi có thể lấy thông tin "hướng dẫn lái xe" một cách hiệu quả từ google (về cơ bản là một loạt các cặp lat/long) và biến nó thành truy vấn sql để có được vị trí nằm trong khoảng cách nhất định từ tuyến đường ?làm "điểm quan tâm dọc theo tuyến đường" trong google maps

Nó không phải là siêu chính xác, và "như chim bay" khoảng cách từ các tuyến đường là tốt. Tôi quan tâm nhất về nó là hợp lý hiệu quả.

Trong cơ sở dữ liệu, mọi thứ được thiết lập khá cơ bản với mỗi mục có vĩ độ và kinh độ, nhưng tôi có thể thay đổi giản đồ cơ sở dữ liệu nếu cần.

Như một ví dụ, trang web này làm những gì tôi muốn làm (nếu bạn cho một điểm khởi đầu và điểm kết thúc, nó sẽ hiển thị các trạm chevron rằng đang ở gần đường cao tốc, bạn sẽ được tham gia): http://www.chevron.com/products/stations/stationfinder/planyourroute.aspx

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

Trả lời

12

Kiểm tra này ra

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

đây là tài liệu hướng dẫn: http://google-maps-utility-library-v3.googlecode.com/svn/tags/routeboxer/1.0/docs/examples.html

Bạn có thể nhận được hộp phối từ RouteBoxer và gửi đến một kịch bản phía máy chủ cho chế biến

+0

hoàn hảo, chính xác những gì tôi đang tìm kiếm. – rob

+0

Tôi rất tiếc là tôi có một người bỏ phiếu để bỏ phiếu. – Hemlock

+0

Tôi đã tìm kiếm câu trả lời cho điều này trong một tuần! Cám ơn! – 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

Trong khi đoạn mã này được chào đón, và có thể cung cấp một số trợ giúp, nó sẽ được [cải thiện rất nhiều nếu nó bao gồm một lời giải thích] (// meta.stackexchange.com/q/114762) của * how * và * why * this giải quyết vấn đề. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ là người hỏi ngay bây giờ! Vui lòng [sửa] câu trả lời của bạn để thêm giải thích và đưa ra chỉ dẫn về những giới hạn và giả định được áp dụng. –

Các vấn đề liên quan