আমি যখন মানচিত্রে ক্লিক করি তখন নিকটস্থ চিহ্নিতকারী বা চিহ্নিতকারীদের সন্ধান করার সর্বোত্তম উপায়টি কী হবে? এপিআই-তে কিছু ফাংশন রয়েছে যা আমাকে তা করতে সাহায্য করবে?
এটি গুগল ম্যাপ এপিআই ভি 3।
আমি যখন মানচিত্রে ক্লিক করি তখন নিকটস্থ চিহ্নিতকারী বা চিহ্নিতকারীদের সন্ধান করার সর্বোত্তম উপায়টি কী হবে? এপিআই-তে কিছু ফাংশন রয়েছে যা আমাকে তা করতে সাহায্য করবে?
এটি গুগল ম্যাপ এপিআই ভি 3।
উত্তর:
প্রথমে আপনাকে ইভেন্টলিস্টার যুক্ত করতে হবে
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 নেমস্পেসে ComputeDistanceBetween () পদ্ধতি ব্যবহার করতে পারেন ।
আমি নিকটবর্তী অবস্থানের গণনা এবং আসলে একটি কার্যনির্বাহী সমাধান সরবরাহ করতে পারে সে সম্পর্কে বিভ্রান্ত যে কারও জন্য লেওরের পরামর্শটি প্রসারিত করতে চাই :
আমি একটি 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);
আপনি কি মাইএসকিএল স্পেসিয়াল এক্সটেনশন সম্পর্কে সচেতন? ?
আপনি এমবিআর কনটেনস (জি 1, জি 2) এর মতো কিছু ব্যবহার করতে পারেন ।
এখানে আরও একটি ফাংশন যা আমার জন্য দুর্দান্ত কাজ করে, কিলোমিটারে দূরত্ব ফিরিয়ে দেয়:
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 মানচিত্রের এপিআই পদ্ধতিটি ব্যবহার করুন ।
পদক্ষেপ: -
গুগল ম্যাপে চিহ্নিতকারী তৈরি করুন।
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
});
}
মাউসে আপনার অবস্থানের দীর্ঘ, ল্যাট হওয়ার জন্য ইভেন্ট তৈরি করুন ক্লিক করুন এবং এটি সন্ধান করুন_ক্লসস্ট_মার্কারে () পাস করুন।
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());
}
দেখার এই লিঙ্কে ধাপগুলি অনুসরণ করুন। আপনি আপনার অবস্থানের কাছাকাছি মার্কার পেতে সক্ষম হবেন।