जब मैं मानचित्र पर क्लिक करता हूं, जो निकटतम मार्कर या मार्कर खोजने का सबसे अच्छा तरीका होगा? क्या एपी में कुछ कार्य हैं जो मुझे ऐसा करने में मदद करेंगे?
यह google map api v3 है।
जब मैं मानचित्र पर क्लिक करता हूं, जो निकटतम मार्कर या मार्कर खोजने का सबसे अच्छा तरीका होगा? क्या एपी में कुछ कार्य हैं जो मुझे ऐसा करने में मदद करेंगे?
यह google map api v3 है।
जवाबों:
सबसे पहले आपको इवेंटलिस्ट को जोड़ना होगा
google.maps.event.addListener(map, 'click', find_closest_marker);
फिर एक फ़ंक्शन बनाएं जो मार्करों के सरणी से गुजरता है और क्लिक से प्रत्येक मार्कर की दूरी की गणना करने के लिए हैवरसाइन फॉर्मूला का उपयोग करता है ।
function rad(x) {return x*Math.PI/180;}
function find_closest_marker( event ) {
var lat = event.latLng.lat();
var lng = event.latLng.lng();
var R = 6371; // radius of earth in km
var distances = [];
var closest = -1;
for( i=0;i<map.markers.length; i++ ) {
var mlat = map.markers[i].position.lat();
var mlng = map.markers[i].position.lng();
var dLat = rad(mlat - lat);
var dLong = rad(mlng - lng);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(rad(lat)) * Math.cos(rad(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;
distances[i] = d;
if ( closest == -1 || d < distances[closest] ) {
closest = i;
}
}
alert(map.markers[closest].title);
}
यह निकटतम मार्करों का ट्रैक रखता है और इसके शीर्षक को सचेत करता है।
मेरे पास मेरे मानचित्र ऑब्जेक्ट पर एक सरणी के रूप में मेरे मार्कर हैं
आप google.maps.geometry.spherical namespace में computeDistanceBetween () विधि का उपयोग कर सकते हैं ।
मैं Leor के सुझाव पर विस्तार करना चाहता हूं निकटतम स्थान की गणना करने और वास्तव में एक कार्यशील समाधान प्रदान करने के बारे में उलझन में किसी के लिए :
मैं एक markers
सरणी में मार्करों का उपयोग कर रहा हूँ जैसे var markers = [];
।
तो फिर चलो हमारी स्थिति कुछ इस तरह है var location = new google.maps.LatLng(51.99, -0.74);
फिर हम अपने मार्करों को हमारे द्वारा पसंद किए गए स्थान के विरुद्ध कम कर देते हैं:
markers.reduce(function (prev, curr) {
var cpos = google.maps.geometry.spherical.computeDistanceBetween(location.position, curr.position);
var ppos = google.maps.geometry.spherical.computeDistanceBetween(location.position, prev.position);
return cpos < ppos ? curr : prev;
}).position
जो पॉप आउट करता है वह आपकी निकटतम मार्कर LatLng
वस्तु है।
ऊपर दिया गया सूत्र मेरे लिए काम नहीं करता था, लेकिन मैंने बिना किसी समस्या के इसका उपयोग किया। फ़ंक्शन के लिए अपना वर्तमान स्थान पास करें, और निकटतम को खोजने के लिए मार्कर की एक सरणी के माध्यम से लूप करें:
function find_closest_marker( lat1, lon1 ) {
var pi = Math.PI;
var R = 6371; //equatorial radius
var distances = [];
var closest = -1;
for( i=0;i<markers.length; i++ ) {
var lat2 = markers[i].position.lat();
var lon2 = markers[i].position.lng();
var chLat = lat2-lat1;
var chLon = lon2-lon1;
var dLat = chLat*(pi/180);
var dLon = chLon*(pi/180);
var rLat1 = lat1*(pi/180);
var rLat2 = lat2*(pi/180);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
distances[i] = d;
if ( closest == -1 || d < distances[closest] ) {
closest = i;
}
}
// (debug) The closest marker is:
console.log(markers[closest]);
}
markers
सरणी को कैसे आबाद करते हैं ? यह एक मार्कर का उपयोग करके बना रहा है var marker1 = new google.maps.Marker({ ... })
?
map.markers = map.markers || [];
प्रत्येक मार्कर के लिएmap.markers.push(marker);
क्या आप मैसकल स्पैटियल एक्सटेंशन के बारे में जानते हैं ?
आप MBRContains (g1, g2) जैसी किसी चीज़ का उपयोग कर सकते हैं ।
यहाँ एक और कार्य है जो मेरे लिए बहुत अच्छा काम करता है, किलोमीटर में दूरी तय करता है:
function distance(lat1, lng1, lat2, lng2) {
var radlat1 = Math.PI * lat1 / 180;
var radlat2 = Math.PI * lat2 / 180;
var radlon1 = Math.PI * lng1 / 180;
var radlon2 = Math.PI * lng2 / 180;
var theta = lng1 - lng2;
var radtheta = Math.PI * theta / 180;
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
dist = Math.acos(dist);
dist = dist * 180 / Math.PI;
dist = dist * 60 * 1.1515;
//Get in in kilometers
dist = dist * 1.609344;
return dist;
}
Google मानचित्र पर अपने स्थान और मार्कर सूची के बीच मार्कर की गणना करने के लिए computeDistanceBetween () Google मानचित्र API विधि का उपयोग करें।
कदम:-
गूगल मैप पर मार्कर बनाएं।
function addMarker(location) {
var marker = new google.maps.Marker({
title: 'User added marker',
icon: {
path: google.maps.SymbolPath.BACKWARD_CLOSED_ARROW,
scale: 5
},
position: location,
map: map
});
}
माउस पर अपने स्थान के लंबे, लंबे होने के लिए ईवेंट बनाएं पर क्लिक करें और उसे खोजने के लिए पास करें_closest_marker ()।
function find_closest_marker(event) {
var distances = [];
var closest = -1;
for (i = 0; i < markers.length; i++) {
var d = google.maps.geometry.spherical.computeDistanceBetween(markers[i].position, event.latLng);
distances[i] = d;
if (closest == -1 || d < distances[closest]) {
closest = i;
}
}
alert('Closest marker is: ' + markers[closest].getTitle());
}
इस लिंक पर जाएँ चरणों का पालन करें। आप अपने स्थान के करीब पहुंच सकते हैं।