我正在开发一个快餐客户服务应用程序调用中心应该能够通过单击已有旧标记(分支机构)的 map 来添加调用者的地址( map 上的标记)并自动添加应该计算距离添加的标记最近的分支。
我可以将标记添加到数组中,我使用 this计算函数,不过我需要知道如何在单击事件后调用此函数并将其连接到添加的新标记。 代码如下
识别分支
var map;
var markers = [];
var marker, i;
var locations = [
['Title A', 3.180967,101.715546, 1],
['Title B', 3.200848,101.616669, 2],
['Title C', 3.147372,101.597443, 3],
['Title D', 3.19125,101.710052, 4]];
初始化函数
function initialize() {
var haightAshbury = new google.maps.LatLng(3.171368, 101.653404);
var mapOptions = {
zoom: 12,
center: haightAshbury,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
google.maps.event.addListener(map, 'click', function(event) {
addMarker(event.latLng);
});
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locations[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
google.maps.event.addListener(map, 'click', find_closest_marker);
}
}
添加新标记
function addMarker(location) {
var marker1 = new google.maps.Marker({
position: location,
map: map
});
markers.push(marker);
}
向数组添加新标记
setAllMap(map)
{
for (var i = 0; i < markers.length; i++)
{
markers[i].setMap(map);
}
}
计算函数
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 Library来计算距离。两个参数都必须是 LatLng 对象。
google.maps.geometry.spherical.computeDistanceBetween(markerPosition, mainPosition);
当然你需要加载几何库
&libraries=geometry
jsfiddle 中代码的工作示例。最近的标记将打印在控制台 (F12) 中。请注意代码中的注释,所有错误均已修复。
关于javascript - 查找与添加的客户服务应用程序中的新标记最接近的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22294729/