2012-10-26 13 views
6

के साथ infowindow इस उदाहरण का उपयोग करके 8 मार्करों के साथ एक मार्ग स्थापित करने के लिए।Google मैप्स वी 3 - वेप पॉइंट्स + यादृच्छिक पाठ

<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <title>Google Maps JavaScript API v3 Example: Directions Waypoints</title> 
<style> 
    #map{ 
    width: 100%; 
    height: 450px; 
} 
</style> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> 
    <script> 
     jQuery(function() { 
    var stops = [ 
         {"Geometry":{"Latitude":52.1615470947258,"Longitude":20.80514430999756}}, 
         {"Geometry":{"Latitude":52.15991486090931,"Longitude":20.804049968719482}}, 
         {"Geometry":{"Latitude":52.15772967999426,"Longitude":20.805788040161133}}, 
         {"Geometry":{"Latitude":52.15586034371232,"Longitude":20.80460786819458}}, 
         {"Geometry":{"Latitude":52.15923693975469,"Longitude":20.80113172531128}}, 
         {"Geometry":{"Latitude":52.159849043774074, "Longitude":20.791990756988525}}, 
         {"Geometry":{"Latitude":52.15986220720892,"Longitude":20.790467262268066}}, 
         {"Geometry":{"Latitude":52.16202095784738,"Longitude":20.7806396484375}}, 
         {"Geometry":{"Latitude":52.16088894313116,"Longitude":20.77737808227539}}, 
         {"Geometry":{"Latitude":52.15255590234335,"Longitude":20.784244537353516}}, 
         {"Geometry":{"Latitude":52.14747369312591,"Longitude":20.791218280792236}}, 
         {"Geometry":{"Latitude":52.14963304460396,"Longitude":20.79387903213501}} 



        ] ; 

    var map = new window.google.maps.Map(document.getElementById("map")); 

    // new up complex objects before passing them around 
    var directionsDisplay = new window.google.maps.DirectionsRenderer(); 
    var directionsService = new window.google.maps.DirectionsService(); 

    Tour_startUp(stops); 

    window.tour.loadMap(map, directionsDisplay); 
    window.tour.fitBounds(map); 

    if (stops.length > 1) 
     window.tour.calcRoute(directionsService, directionsDisplay); 
}); 

function Tour_startUp(stops) { 
    if (!window.tour) window.tour = { 
     updateStops: function (newStops) { 
      stops = newStops; 
     }, 
     // map: google map object 
     // directionsDisplay: google directionsDisplay object (comes in empty) 
     loadMap: function (map, directionsDisplay) { 
      var myOptions = { 
       zoom: 13, 
       center: new window.google.maps.LatLng(51.507937, -0.076188), // default to London 
       mapTypeId: window.google.maps.MapTypeId.ROADMAP 
      }; 
      map.setOptions(myOptions); 
      directionsDisplay.setMap(map); 
     }, 
     fitBounds: function (map) { 
      var bounds = new window.google.maps.LatLngBounds(); 

      // extend bounds for each record 
      jQuery.each(stops, function (key, val) { 
       var myLatlng = new window.google.maps.LatLng(val.Geometry.Latitude, val.Geometry.Longitude); 
       bounds.extend(myLatlng); 
      }); 
      map.fitBounds(bounds); 
     }, 
     calcRoute: function (directionsService, directionsDisplay) { 
      var batches = []; 
      var itemsPerBatch = 10; // google API max = 10 - 1 start, 1 stop, and 8 waypoints 
      var itemsCounter = 0; 
      var wayptsExist = stops.length > 0; 

      while (wayptsExist) { 
       var subBatch = []; 
       var subitemsCounter = 0; 

       for (var j = itemsCounter; j < stops.length; j++) { 
        subitemsCounter++; 
        subBatch.push({ 
         location: new window.google.maps.LatLng(stops[j].Geometry.Latitude, stops[j].Geometry.Longitude), 
         stopover: true 
        }); 
        if (subitemsCounter == itemsPerBatch) 
         break; 
       } 

       itemsCounter += subitemsCounter; 
       batches.push(subBatch); 
       wayptsExist = itemsCounter < stops.length; 
       // If it runs again there are still points. Minus 1 before continuing to 
       // start up with end of previous tour leg 
       itemsCounter--; 
      } 

      // now we should have a 2 dimensional array with a list of a list of waypoints 
      var combinedResults; 
      var unsortedResults = [{}]; // to hold the counter and the results themselves as they come back, to later sort 
      var directionsResultsReturned = 0; 

      for (var k = 0; k < batches.length; k++) { 
       var lastIndex = batches[k].length - 1; 
       var start = batches[k][0].location; 
       var end = batches[k][lastIndex].location; 

       // trim first and last entry from array 
       var waypts = []; 
       waypts = batches[k]; 
       waypts.splice(0, 1); 
       waypts.splice(waypts.length - 1, 1); 

       var request = { 
        origin: start, 
        destination: end, 
        waypoints: waypts, 
        travelMode: window.google.maps.TravelMode.WALKING 
       }; 
       (function (kk) { 
        directionsService.route(request, function (result, status) { 
         if (status == window.google.maps.DirectionsStatus.OK) { 

          var unsortedResult = { order: kk, result: result }; 
          unsortedResults.push(unsortedResult); 

          directionsResultsReturned++; 

          if (directionsResultsReturned == batches.length) // we've received all the results. put to map 
          { 
           // sort the returned values into their correct order 
           unsortedResults.sort(function (a, b) { return parseFloat(a.order) - parseFloat(b.order); }); 
           var count = 0; 
           for (var key in unsortedResults) { 
            if (unsortedResults[key].result != null) { 
             if (unsortedResults.hasOwnProperty(key)) { 
              if (count == 0) // first results. new up the combinedResults object 
               combinedResults = unsortedResults[key].result; 
              else { 
               // only building up legs, overview_path, and bounds in my consolidated object. This is not a complete 
               // directionResults object, but enough to draw a path on the map, which is all I need 
               combinedResults.routes[0].legs = combinedResults.routes[0].legs.concat(unsortedResults[key].result.routes[0].legs); 
               combinedResults.routes[0].overview_path = combinedResults.routes[0].overview_path.concat(unsortedResults[key].result.routes[0].overview_path); 

               combinedResults.routes[0].bounds = combinedResults.routes[0].bounds.extend(unsortedResults[key].result.routes[0].bounds.getNorthEast()); 
               combinedResults.routes[0].bounds = combinedResults.routes[0].bounds.extend(unsortedResults[key].result.routes[0].bounds.getSouthWest()); 
              } 
              count++; 
             } 
            } 
           } 
           directionsDisplay.setDirections(combinedResults); 
          } 
         } 
        }); 
       })(k); 
      } 
     } 
    }; 
} 
    </script> 
    </head> 
    <body> 
    <div id="map"></div> 
</body> 
</html> 

यह एक आकर्षण की तरह काम करता है लेकिन मुझे प्रत्येक मार्ग के लिए एक infowindow स्थापित करने में समस्या है। मैं ए, बी, सी जैसे मार्कर नाम छोड़ना चाहता हूं या इसे अन्य में उत्पन्न करना चाहता हूं लेकिन ए, बी, सी या 1,2,3 पैटर्न रखने के लिए + मैं प्रत्येक मार्कर में इन्फॉइंडो जोड़ना चाहता हूं जिसमें शीर्षक टेक्स्ट और लिंक होगा।

मैं किसी भी जानकारी या उदाहरण खोजने की कोशिश कर रहा था लेकिन कामों को ध्यान में रख रहा था। हो सकता है कि किसी के पास यह विचार हो और विचार करें कि इस कोड में infowindow को आसानी से कैसे जोड़ा जाए।

धन्यवाद,

चार्ल्स

+0

मैं तुम्हें ठीक से मिल सहारे मई, आप प्रत्येक मार्कर मार्कर नाम प्रदर्शित करता है कि के लिए एक Infowindow बनाने के लिए करना चाहते हैं? – Cdeez

+0

"शीर्षक टेक्स्ट और लिंक" को परिभाषित करें। हालांकि, मुझे यकीन नहीं है कि आपका प्रयास टीओएस का उल्लंघन है या नहीं। –

+0

हाँ, मैं मार्कर कस्टम एचटीएमएल सामग्री के साथ infowindow चाहता हूं जहां मैं बिंदु नाम, बिंदु जानकारी, और बिंदु लिंक डाल देंगे। जहां तक ​​मुझे पता है कि यह TOS – Charles

उत्तर

11
यहाँ

एक उदाहरण है कि कस्टम मार्कर और infowindows के साथ शुरू से दिशाओं खींचता है:

Example

आप DirectionsRenderer पर suppressInfoWindows विकल्प का उपयोग करते , आप केवल उस हिस्से का उपयोग कर सकते हैं जो मार्कर और उनके संबंधित इन्फॉन्डोज़ बनाता है।

Working example based on your code

कोड:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
 
    <meta charset="utf-8"> 
 
    <title>Google Maps JavaScript API v3 Example: Directions Waypoints</title> 
 
<style> 
 
    #map{ 
 
    width: 100%; 
 
    height: 450px; 
 
} 
 
</style> 
 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
 
    <script src="https://maps.googleapis.com/maps/api/js"></script> 
 
    <script> 
 
     jQuery(function() { 
 
    var stops = [ 
 
         {"Geometry":{"Latitude":52.1615470947258,"Longitude":20.80514430999756}}, 
 
         {"Geometry":{"Latitude":52.15991486090931,"Longitude":20.804049968719482}}, 
 
         {"Geometry":{"Latitude":52.15772967999426,"Longitude":20.805788040161133}}, 
 
         {"Geometry":{"Latitude":52.15586034371232,"Longitude":20.80460786819458}}, 
 
         {"Geometry":{"Latitude":52.15923693975469,"Longitude":20.80113172531128}}, 
 
         {"Geometry":{"Latitude":52.159849043774074, "Longitude":20.791990756988525}}, 
 
         {"Geometry":{"Latitude":52.15986220720892,"Longitude":20.790467262268066}}, 
 
         {"Geometry":{"Latitude":52.16202095784738,"Longitude":20.7806396484375}}, 
 
         {"Geometry":{"Latitude":52.16088894313116,"Longitude":20.77737808227539}}, 
 
         {"Geometry":{"Latitude":52.15255590234335,"Longitude":20.784244537353516}}, 
 
         {"Geometry":{"Latitude":52.14747369312591,"Longitude":20.791218280792236}}, 
 
         {"Geometry":{"Latitude":52.14963304460396,"Longitude":20.79387903213501}} 
 

 

 

 
        ] ; 
 

 
    var map = new window.google.maps.Map(document.getElementById("map")); 
 

 
    // new up complex objects before passing them around 
 
    var directionsDisplay = new window.google.maps.DirectionsRenderer({suppressMarkers: true}); 
 
    var directionsService = new window.google.maps.DirectionsService(); 
 

 
    Tour_startUp(stops); 
 

 
    window.tour.loadMap(map, directionsDisplay); 
 
    window.tour.fitBounds(map); 
 

 
    if (stops.length > 1) 
 
     window.tour.calcRoute(directionsService, directionsDisplay); 
 
}); 
 

 
function Tour_startUp(stops) { 
 
    if (!window.tour) window.tour = { 
 
     updateStops: function (newStops) { 
 
      stops = newStops; 
 
     }, 
 
     // map: google map object 
 
     // directionsDisplay: google directionsDisplay object (comes in empty) 
 
     loadMap: function (map, directionsDisplay) { 
 
      var myOptions = { 
 
       zoom: 13, 
 
       center: new window.google.maps.LatLng(51.507937, -0.076188), // default to London 
 
       mapTypeId: window.google.maps.MapTypeId.ROADMAP 
 
      }; 
 
      map.setOptions(myOptions); 
 
      directionsDisplay.setMap(map); 
 
     }, 
 
     fitBounds: function (map) { 
 
      var bounds = new window.google.maps.LatLngBounds(); 
 

 
      // extend bounds for each record 
 
      jQuery.each(stops, function (key, val) { 
 
       var myLatlng = new window.google.maps.LatLng(val.Geometry.Latitude, val.Geometry.Longitude); 
 
       bounds.extend(myLatlng); 
 
      }); 
 
      map.fitBounds(bounds); 
 
     }, 
 
     calcRoute: function (directionsService, directionsDisplay) { 
 
      var batches = []; 
 
      var itemsPerBatch = 10; // google API max = 10 - 1 start, 1 stop, and 8 waypoints 
 
      var itemsCounter = 0; 
 
      var wayptsExist = stops.length > 0; 
 

 
      while (wayptsExist) { 
 
       var subBatch = []; 
 
       var subitemsCounter = 0; 
 

 
       for (var j = itemsCounter; j < stops.length; j++) { 
 
        subitemsCounter++; 
 
        subBatch.push({ 
 
         location: new window.google.maps.LatLng(stops[j].Geometry.Latitude, stops[j].Geometry.Longitude), 
 
         stopover: true 
 
        }); 
 
        if (subitemsCounter == itemsPerBatch) 
 
         break; 
 
       } 
 

 
       itemsCounter += subitemsCounter; 
 
       batches.push(subBatch); 
 
       wayptsExist = itemsCounter < stops.length; 
 
       // If it runs again there are still points. Minus 1 before continuing to 
 
       // start up with end of previous tour leg 
 
       itemsCounter--; 
 
      } 
 

 
      // now we should have a 2 dimensional array with a list of a list of waypoints 
 
      var combinedResults; 
 
      var unsortedResults = [{}]; // to hold the counter and the results themselves as they come back, to later sort 
 
      var directionsResultsReturned = 0; 
 

 
      for (var k = 0; k < batches.length; k++) { 
 
       var lastIndex = batches[k].length - 1; 
 
       var start = batches[k][0].location; 
 
       var end = batches[k][lastIndex].location; 
 

 
       // trim first and last entry from array 
 
       var waypts = []; 
 
       waypts = batches[k]; 
 
       waypts.splice(0, 1); 
 
       waypts.splice(waypts.length - 1, 1); 
 

 
       var request = { 
 
        origin: start, 
 
        destination: end, 
 
        waypoints: waypts, 
 
        travelMode: window.google.maps.TravelMode.WALKING 
 
       }; 
 
       (function (kk) { 
 
        directionsService.route(request, function (result, status) { 
 
         if (status == window.google.maps.DirectionsStatus.OK) { 
 

 
          var unsortedResult = { order: kk, result: result }; 
 
          unsortedResults.push(unsortedResult); 
 

 
          directionsResultsReturned++; 
 

 
          if (directionsResultsReturned == batches.length) // we've received all the results. put to map 
 
          { 
 
           // sort the returned values into their correct order 
 
           unsortedResults.sort(function (a, b) { return parseFloat(a.order) - parseFloat(b.order); }); 
 
           var count = 0; 
 
           for (var key in unsortedResults) { 
 
            if (unsortedResults[key].result != null) { 
 
             if (unsortedResults.hasOwnProperty(key)) { 
 
              if (count == 0) // first results. new up the combinedResults object 
 
               combinedResults = unsortedResults[key].result; 
 
              else { 
 
               // only building up legs, overview_path, and bounds in my consolidated object. This is not a complete 
 
               // directionResults object, but enough to draw a path on the map, which is all I need 
 
               combinedResults.routes[0].legs = combinedResults.routes[0].legs.concat(unsortedResults[key].result.routes[0].legs); 
 
               combinedResults.routes[0].overview_path = combinedResults.routes[0].overview_path.concat(unsortedResults[key].result.routes[0].overview_path); 
 

 
               combinedResults.routes[0].bounds = combinedResults.routes[0].bounds.extend(unsortedResults[key].result.routes[0].bounds.getNorthEast()); 
 
               combinedResults.routes[0].bounds = combinedResults.routes[0].bounds.extend(unsortedResults[key].result.routes[0].bounds.getSouthWest()); 
 
              } 
 
              count++; 
 
             } 
 
            } 
 
           } 
 
           directionsDisplay.setDirections(combinedResults); 
 
           var legs = combinedResults.routes[0].legs; 
 
           // alert(legs.length); 
 
           for (var i=0; i < legs.length;i++){ 
 
\t \t \t \t var markerletter = "A".charCodeAt(0); 
 
\t \t \t \t markerletter += i; 
 
            markerletter = String.fromCharCode(markerletter); 
 
            createMarker(directionsDisplay.getMap(),legs[i].start_location,"marker"+i,"some text for marker "+i+"<br>"+legs[i].start_address,markerletter); 
 
           } 
 
           var i=legs.length; 
 
           var markerletter = "A".charCodeAt(0); 
 
\t \t \t   markerletter += i; 
 
           markerletter = String.fromCharCode(markerletter); 
 
           createMarker(directionsDisplay.getMap(),legs[legs.length-1].end_location,"marker"+i,"some text for the "+i+"marker<br>"+legs[legs.length-1].end_address,markerletter); 
 
          } 
 
         } 
 
        }); 
 
       })(k); 
 
      } 
 
     } 
 
    }; 
 
} 
 
var infowindow = new google.maps.InfoWindow(
 
    { 
 
    size: new google.maps.Size(150,50) 
 
    }); 
 

 
var icons = new Array(); 
 
icons["red"] = new google.maps.MarkerImage("mapIcons/marker_red.png", 
 
     // This marker is 20 pixels wide by 34 pixels tall. 
 
     new google.maps.Size(20, 34), 
 
     // The origin for this image is 0,0. 
 
     new google.maps.Point(0,0), 
 
     // The anchor for this image is at 9,34. 
 
     new google.maps.Point(9, 34)); 
 

 

 

 
function getMarkerImage(iconStr) { 
 
    if ((typeof(iconStr)=="undefined") || (iconStr==null)) { 
 
     iconStr = "red"; 
 
    } 
 
    if (!icons[iconStr]) { 
 
     icons[iconStr] = new google.maps.MarkerImage("http://www.google.com/mapfiles/marker"+ iconStr +".png", 
 
     // This marker is 20 pixels wide by 34 pixels tall. 
 
     new google.maps.Size(20, 34), 
 
     // The origin for this image is 0,0. 
 
     new google.maps.Point(0,0), 
 
     // The anchor for this image is at 6,20. 
 
     new google.maps.Point(9, 34)); 
 
    } 
 
    return icons[iconStr]; 
 

 
} 
 
    // Marker sizes are expressed as a Size of X,Y 
 
    // where the origin of the image (0,0) is located 
 
    // in the top left of the image. 
 
    
 
    // Origins, anchor positions and coordinates of the marker 
 
    // increase in the X direction to the right and in 
 
    // the Y direction down. 
 

 
    var iconImage = new google.maps.MarkerImage('mapIcons/marker_red.png', 
 
     // This marker is 20 pixels wide by 34 pixels tall. 
 
     new google.maps.Size(20, 34), 
 
     // The origin for this image is 0,0. 
 
     new google.maps.Point(0,0), 
 
     // The anchor for this image is at 9,34. 
 
     new google.maps.Point(9, 34)); 
 
    var iconShadow = new google.maps.MarkerImage('http://www.google.com/mapfiles/shadow50.png', 
 
     // The shadow image is larger in the horizontal dimension 
 
     // while the position and offset are the same as for the main image. 
 
     new google.maps.Size(37, 34), 
 
     new google.maps.Point(0,0), 
 
     new google.maps.Point(9, 34)); 
 
     // Shapes define the clickable region of the icon. 
 
     // The type defines an HTML &lt;area&gt; element 'poly' which 
 
     // traces out a polygon as a series of X,Y points. The final 
 
     // coordinate closes the poly by connecting to the first 
 
     // coordinate. 
 
    var iconShape = { 
 
     coord: [9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0], 
 
     type: 'poly' 
 
    }; 
 

 

 
function createMarker(map, latlng, label, html, color) { 
 
// alert("createMarker("+latlng+","+label+","+html+","+color+")"); 
 
    var contentString = '<b>'+label+'</b><br>'+html; 
 
    var marker = new google.maps.Marker({ 
 
     position: latlng, 
 
     map: map, 
 
     shadow: iconShadow, 
 
     icon: getMarkerImage(color), 
 
     shape: iconShape, 
 
     title: label, 
 
     zIndex: Math.round(latlng.lat()*-100000)<<5 
 
     }); 
 
     marker.myname = label; 
 

 
    google.maps.event.addListener(marker, 'click', function() { 
 
     infowindow.setContent(contentString); 
 
     infowindow.open(map,marker); 
 
     }); 
 
    return marker; 
 
} 
 
    </script> 
 
    </head> 
 
    <body> 
 
    <div id="map"></div> 
 
</body> 
 
</html>

+0

के साथ ठीक होना चाहिए, वैसे मैंने इस उदाहरण को देखा लेकिन मुझे मौजूदा फ़ंक्शन पर infowindow जोड़ना है क्योंकि कभी-कभी 8 तरीके पॉइंट्स – Charles

+0

अधिक उदाहरण होंगे 8 उदाहरण पॉइंट्स का उपयोग नहीं करते हैं, लेकिन कोई भी नहीं है कारण आप अवधारणा का उपयोग नहीं कर सकते हैं। देखें [यह उदाहरण] (http://www.geocodezip.com/v3_directions_multipleWayPts_CustomMrkrsB.html) आपके उदाहरण के आधार पर (उत्तर में भी जोड़ा गया)। – geocodezip

संबंधित मुद्दे