我使用谷歌地图将我的json标记放在地图中 ( this is my map website )这是我的主要代码
function initialize(pram) {
var mapOptions = {
center: new google.maps.LatLng(33.3118943, 44.4959916),
zoom: 11,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
$.getJSON('data.php?search=' + pram, function (data) {
$.each(data.points, function (i, value) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(value.lat, value.lon),
map: map
});
google.maps.event.addListener(marker, 'click', portInfo);
function portInfo() {
$("#moreInfoId").html(value.id);
$("#moreInfoPortName").html(value.port_name);
$("#moreInfoTime").html(value.time);
$('#mapModal').modal();
}
});
});
}
我只想在点击标记时获得最接近的5个标记 我是怎么做到的?
答案 0 :(得分:0)
一种方法可能是有一些逻辑来确定两点之间的距离。然后使用该逻辑对您的标记数组进行排序(您必须将它们存储在数组中)并检索前五个。
Sort将其使用的对象作为参数进行比较,因此您需要部分应用您作为参考的对象来计算距离。这可能是执行排序的逻辑:
function distance(p1, p2) {
return Math.sqrt(Math.pow((p2.lat - p1.lat), 2) + Math.pow((p2.lon - p1.lon), 2));
}
function sortByDistance(me, a, b) {
return a === me ? 1 : b === me ? -1 : distance(me, a) - distance(me, b);
}
var dummy = [{lat: 6, lon: 6}, {lat: 7, lon: 1}, {lat: 1, lon: 8}, {lat: 9, lon: 10}, {lat: 5, lon: 4}, {lat: 3, lon: 2}, {lat: 6, lon: 7}, {lat: 2, lon: 7}, {lat: 10, lon: 9}, {lat: 4, lon: 3}];
dummy.forEach(function(me) {
console.log('My five nearest points are:');
console.log(dummy.sort(sortByDistance.bind(null, me)).slice(0, 5));
});

然后你会在你的逻辑中使用这个逻辑:
function initialize(pram) {
var mapOptions = {
center: new google.maps.LatLng(33.3118943, 44.4959916),
zoom: 11,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
$.getJSON('data.php?search=' + pram, function(data) {
// Array to store the markers.
var markers = [];
$.each(data.points, function(i, value) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(value.lat, value.lon),
map: map
});
// Store the marker in the array
markers.push(marker);
google.maps.event.addListener(marker, 'click', portInfo);
function portInfo() {
// Use the functions I presented earlier to sort the array and retrieve the nearest five
var nearestFive = markers.sort(sortByDistance.bind(null, value)).slice(0, 5);
$("#moreInfoId").html(value.id);
$("#moreInfoPortName").html(value.port_name);
$("#moreInfoTime").html(value.time);
$('#mapModal').modal();
}
});
});
}

这将是主要想法。我想你必须做一些调整并测试它是否表现良好但是,为了检索最接近的五个,你需要根据到某个值的距离对数组进行排序。为了提高性能,您可以以某种方式存储这些近似值,以避免在用户单击标记时随时重新计算它们,但这是我留给您的内容。
希望它有所帮助。