Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google Maps API-最近的标记函数更改为最近的n个标记_Javascript_Google Maps Api 3_Google Maps Markers - Fatal编程技术网

Javascript Google Maps API-最近的标记函数更改为最近的n个标记

Javascript Google Maps API-最近的标记函数更改为最近的n个标记,javascript,google-maps-api-3,google-maps-markers,Javascript,Google Maps Api 3,Google Maps Markers,我使用中的公式查找地图上距离当前位置最近的标记。我想修改这个公式,以便它找到壁橱n位置数(最近的5个位置,最近的10个位置,等等),我不确定如何实现这一点 以下是我使用的修正公式: function rad(x) {return x*Math.PI/180;} function find_closest_marker(center, map) { var lat = center.lat(); var lng = center.lng(); var R = 6371; /

我使用中的公式查找地图上距离当前位置最近的标记。我想修改这个公式,以便它找到壁橱
n
位置数(最近的5个位置,最近的10个位置,等等),我不确定如何实现这一点

以下是我使用的修正公式:

function rad(x) {return x*Math.PI/180;}
function find_closest_marker(center, map) {
    var lat = center.lat();
    var lng = center.lng();
    var R = 6371; // radius of earth in km
    var distances = [];
    var closest = -1;
    for( i=0;i<markers.length; i++ ) {
        var mlat = markers[i].position.lat();
        var mlng = 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;
        }
    }

    //Log title of closest marker
    console.log(markers[closest].title);
}
函数rad(x){返回x*Math.PI/180;}
函数查找最近的标记(中心,地图){
var lat=center.lat();
var lng=center.lng();
var R=6371;//地球半径,单位为km
var距离=[];
var最近值=-1;
对于(i=0;i您可以使用(稍加修改的)
findClosestN
函数,从(将
gmarkers
更改为
markers
,将函数更改为返回
最近的
数组,限制为numberOfResults元素)


// Add markers to the map
function setMarkers(center, map) {
    var json = (function () { 
        var json = null; 
        $.ajax({ 
            'async': false, 
            'global': false, 
            'url': "js/data.json", 
            'dataType': "json", 
            'success': function (data) {
                 json = data; 
             }
        });
        return json;
    })();
    // Loop over each of the json elements
    for (var i = 0, length = json.length; i < length; i++) {
        var data = json[i],
        latLng = new google.maps.LatLng(data.lat, data.lon);
        // Create a marker and place it on the map
        var icon = 'assets/marker.png';
        var marker = new google.maps.Marker({
            position: latLng,
            map: map,
            icon: icon,
            title: data.loc
        });
        markers.push(marker);
        infoBox(map, marker, data);
    }
}
function findClosestN(pt, numberOfResults) {
    var closest = [];
    for (var i = 0; i < markers.length; i++) {
        markers[i].distance = google.maps.geometry.spherical.computeDistanceBetween(pt, markers[i].getPosition());
        markers[i].setMap(null);
        closest.push(markers[i]);
    }
    closest.sort(sortByDist);
    return closest.splice(0,numberOfResults);
}

function sortByDist(a, b) {
    return (a.distance - b.distance)
}