Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 如何传递2个参数并返回最近对象的第三个参数_Javascript - Fatal编程技术网

Javascript 如何传递2个参数并返回最近对象的第三个参数

Javascript 如何传递2个参数并返回最近对象的第三个参数,javascript,Javascript,我无法创建一个采用2个参数(纬度和经度)并返回与输入值最接近的城市的方法。 我做了一个方法来找到经度上最近的(FindNearestLongtudeTicty),我做了一个方法来找到纬度上最近的(FindNearestLatitudeTicty)。但是,创建一个返回与两个输入值最接近的一个城市的方法是行不通的​​经纬度。(findNearestCity方法不起作用,它总是返回亚特兰大)。 请帮我做那个方法。如果你需要所有的条件,你可以在代码后面看到它们 function CityMap(str)

我无法创建一个采用2个参数(纬度和经度)并返回与输入值最接近的城市的方法。 我做了一个方法来找到经度上最近的(FindNearestLongtudeTicty),我做了一个方法来找到纬度上最近的(FindNearestLatitudeTicty)。但是,创建一个返回与两个输入值最接近的一个城市的方法是行不通的​​经纬度。(findNearestCity方法不起作用,它总是返回亚特兰大)。 请帮我做那个方法。如果你需要所有的条件,你可以在代码后面看到它们

function CityMap(str) {
    function CityMapRecording(str) {
        [this.city, this.latitude, this.longitude] = str.split(" ,");
    }
    this.list = [];
    str.split(";").forEach(row => {
        this.list.push(new CityMapRecording(row));
    });
}

CityMap.prototype.findNearestLatitudeCity = function (i) {
    return this.list.filter(function (x) {
        return x.latitude >= i || x.latitude <= i;
    }).sort(function (x, y) {
        return Math.abs(x.latitude - i) - Math.abs(y.latitude - i);
    })[0];
}
CityMap.prototype.findNearestLongitudeCity = function (j) {
    return this.list.filter(function (k) {
        return k.longitude >= j || k.longitude <= j;
    }).sort(function (k, l) {
        return Math.abs(k.longitude - j) - Math.abs(l.longitude - j);
    })[0];
}
CityMap.prototype.findNearestCity = function (j, x) {
    return this.list.filter(function (k) {
        return k.longitude >= j || k.longitude <= j && k.latitude >=x || k.latitude <=x;
    }).sort(function (k, l) {
        return Math.abs(k.longitude - j) - Math.abs(l.longitude - j) && Math.abs(k.latitude - x) - Math.abs(l.latitude - x);
    })[0];
}
var objCityMap = new CityMap("Nashville, TN ,36.17 ,-86.78;New York, NY ,40.71 ,-74.00;Atlanta, GA ,33.75 ,-84.39;Denver, CO ,39.74 ,-104.98;Seattle, WA ,47.61 ,-122.33;Los Angeles, CA ,34.05 ,-118.24;Memphis, TN , 35.15 ,-90.05");
console.log(objCityMap.list);
console.log(objCityMap.findNearestLatitudeCity(35.15).city)
console.log(objCityMap.findNearestLongitudeCity(-86).city)
console.log(objCityMap.findNearestCity(42, -122).city)
功能城市地图(str){
功能城市预编码(str){
[this.city,this.latitude,this.longitude]=str.split(“,”);
}
this.list=[];
str.split(“;”).forEach(行=>{
this.list.push(新城市预编码(行));
});
}
CityMap.prototype.FindNearestlationDecity=函数(i){
返回此.list.filter(函数(x){

返回x.latitude>=i | | x.latitude=j | | k.longitude=j | | k.longitude=x | | k.latitude事实是,纬度和经度差不能仅仅通过简单的减法得到距离

有一个众所周知的公式来计算两个坐标之间的距离,我从中复制了这个公式

您可以使用此公式在第一次操作中使用
map
在列表中添加
distance
字段,然后在第二次操作中使用
distance
对列表进行排序,然后获取第一个元素,该元素将是离给定坐标最近的城市

像这样,

CityMap.prototype.findNearestCity = function (lat, lan) {
    return this.list.map(function (k) {
        k.distance = distance(k.latitude,k.longitude,lat,lan);
        return k;
    }).sort(function (k, l) {
        return k.distance < l.distance ? -1 : 1;
    })[0];
}
CityMap.prototype.findNearestCity=函数(lat、lan){
返回此.list.map(函数(k){
k、 距离=距离(k纬度、k经度、纬度、局域网);
返回k;
}).sort(函数(k,l){
返回k距离
->“javascript最近位置经纬度”
CityMap.prototype.findNearestCity = function (lat, lan) {
    return this.list.map(function (k) {
        k.distance = distance(k.latitude,k.longitude,lat,lan);
        return k;
    }).sort(function (k, l) {
        return k.distance < l.distance ? -1 : 1;
    })[0];
}