2011-05-29 10 views
6

मेरे पास Google मानचित्र V3 पॉलीलाइन है। मैं पूरी पॉलीलाइन पर क्लिक इवेंट्स का पता लगा सकता हूं, लेकिन क्या मैं क्लिक इवेंट के साथ और कुछ भी उन्नत कर सकता हूं?Google मानचित्र पॉलीलाइन: पॉलीलाइन और वापसी आईडी के अनुभाग पर क्लिक करें?

मैं क्या करना चाहता हूं यह पता लगाने के लिए कि पॉलीलाइन का कौन सा अनुभाग क्लिक किया गया है, और इसे एक अलर्ट में दिखाएं।

routePath = new google.maps.Polyline({ 
    path: routeCoordinates, 
    strokeColor: "#CC33FF", 
    strokeWeight: 3 
});  
routePath.setMap(map); 
google.maps.event.addListener(routePath, 'click', function() { 
    alert(routePath); 
    // TODO: display which section of the polyline has been clicked? 
}); 

क्या कोई यह जानता है कि Google मानचित्र में यह कैसे करें?

धन्यवाद!

उत्तर

8

क्लिक ईवेंट पर आप क्लिक किए गए समन्वय का LatLng प्राप्त कर सकते हैं। हालांकि, चूंकि यह संभवतः सटीक बिंदु नहीं होगा जो पॉलीलाइन बना रहा है, आपको निकटतम बिंदु खोजने की आवश्यकता है। आप Google मानचित्र लाइब्रेरी में computeDistance के बीच का उपयोग कर सकते हैं या आप पाइथागोरस प्रमेय का उपयोग कर सकते हैं क्योंकि इससे आपको इस मामले में पर्याप्त सटीकता मिलनी चाहिए।

आप computeDistanceBetween यहां पर अधिक जानकारी प्राप्त कर सकते हैं: https://developers.google.com/maps/documentation/javascript/reference#spherical

यहाँ एक कोड उदाहरण है कि कैसे आप computeDistanceBetween साथ यह कर सकता है।

google.maps.event.addListener(routePath, 'click', function(h) { 
    var latlng=h.latLng; 
    alert(routePath); 
    var needle = { 
     minDistance: 9999999999, //silly high 
     index: -1, 
     latlng: null 
    }; 
    routePath.getPath().forEach(function(routePoint, index){ 
     var dist = google.maps.geometry.spherical.computeDistanceBetween(latlng, routePoint); 
     if (dist < needle.minDistance){ 
      needle.minDistance = dist; 
      needle.index = index; 
      needle.latlng = routePoint; 
     } 
    }); 
    // The closest point in the polyline 
    alert("Closest index: " + needle.index); 

    // The clicked point on the polyline 
    alert(latlng); 

}); 
0

दूरी विश्लेषण द्वारा निकटतम बिंदु ढूंढना बहुत से मामलों में विफल हो जाएगा जहां एक पथ वापस या उसके पास पार हो जाता है।

आप इसका इस्तेमाल उम्मीदवारों पहचान कर सकते हैं, लेकिन आप cross product और/या यदि आप क्लिक बिंदु का उपयोग 2 लगातार पॉलीलाइन अंक

1

मैं में भाग विभाजित करने के लिए बनाई गई 2 लाइनों के dot product तुलना करके उन्हें पुष्टि करनी चाहिए एक ही है, यहां मुद्दा यह है कि कैसे मैं इसके साथ निपटा: जब हैंडलर की स्थापना:

google.maps.event.addListener(routePath, 'click', function(e) { 
    handelPolyClick(e, this) 
}); 

var handelPolyClick(eventArgs, polyLine) { 
    // now you can access the polyLine 
    alert(polyLine.strokeColor); 
}); 

या आप एक संबंधित वस्तु में सेट का उपयोग करने के पॉलीलाइन पर एक चर बनाने के द्वारा चाहते हैं:

routePath.car = $.extend({}, cars[1]); // shallow copy of cars[1] 

तो आप ईवेंट से अपनी कार का उपयोग कर सकते हैं:

alert(this.car.color); 
संबंधित मुद्दे