Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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 寻找地图的中心_Javascript_Arrays_Json_Loops - Fatal编程技术网

Javascript 寻找地图的中心

Javascript 寻找地图的中心,javascript,arrays,json,loops,Javascript,Arrays,Json,Loops,在本部分之前,我制作了一个包含纬度、经度和类型的主数组,形成了一个公共JSON API() 我所说的主阵列的意思如下 [["latitude","longitude","type"]...] // "..." represent more of //those single list containing latitude, longitude and type. 要找到中心点,我需要在主阵列中找到最大和最小的纬度和经度。中心点将是最大值和最小值的平均值 我做了以下几点,但我相信有更好的

在本部分之前,我制作了一个包含纬度、经度和类型的主数组,形成了一个公共JSON API()

我所说的主阵列的意思如下

[["latitude","longitude","type"]...] // "..." represent more of 
//those single list containing latitude, longitude and type.  
要找到中心点,我需要在主阵列中找到最大和最小的纬度和经度。中心点将是最大值和最小值的平均值

我做了以下几点,但我相信有更好的方法

function findMapCenter(master){
  for (var key in Object.keys(master)){
    var lat = master([key]["latitude"]);  // [key] since it's a 
//array inside a array then finding the key string [latitude]
    var lon = master([key]["longitude"]); 
    var lat_max = Math.max(lat); 
    var lat_min = Math.min(lat);
    var lon_max = Math.max(lon);
    var lon_min = Math.min(lon);
    var total_max = (lat_max + lon_min);
    var total_min = (lon_max + lon_min);
    var average = (total_max / total_min);
  }
  return average; 
}

获取经度和纬度的平均值。

使用
map
将经度和纬度值分别放入不同的数组中,然后将其应用于最小值和最大值,最后求平均值:

function findMapCenter(master) {
    var minLat = Math.min(...Object.values(master).map(({ latitude }) => latitude));
    var maxLat = Math.max(...Object.values(master).map(({ latitude }) => latitude));
    var minLon = Math.min(...Object.values(master).map(({ longitude }) => longitude));
    var maxLon = Math.max(...Object.values(master).map(({ latitude }) => latitude));
    return (maxLat + minLat) / (maxLon + minLon);
}

使用
map
将纬度和经度值放入单独的数组中,然后将其应用于最小值和最大值,最后求平均值:

function findMapCenter(master) {
    var minLat = Math.min(...Object.values(master).map(({ latitude }) => latitude));
    var maxLat = Math.max(...Object.values(master).map(({ latitude }) => latitude));
    var minLon = Math.min(...Object.values(master).map(({ longitude }) => longitude));
    var maxLon = Math.max(...Object.values(master).map(({ latitude }) => latitude));
    return (maxLat + minLat) / (maxLon + minLon);
}
您还可以使用只在数组上迭代一次,这应该快一点(如果您从未有过大的输入,则不相关)。我正在根据从您提到的服务器收到的输出编写代码:

//示例json
const json=[{“纬度”:“-11”,“经度”:“-3”},{“纬度”:“-10”,“经度”:“-30”},{“纬度”:“1”,“经度”:“3”},{“纬度”:“2”,“经度”:“-2”};
函数findCenter(json){
让[minLat,minLon,maxLat,maxLon]=json.reduce((a,b)=>
[+b.纬度a[2]?+b。纬度:a[2],
+b、 经度>a[3]?+b。经度:a[3]]
,[Number.MAX\u SAFE\u INTEGER,Number.MAX\u SAFE\u INTEGER,Number.MIN\u SAFE\u INTEGER,Number.MIN\u SAFE\u INTEGER];
返回(maxLat+minLat)/(maxLon+minLon);
}
log(findCenter(json))您还可以使用只在数组上迭代一次,这应该快一点(如果您从未有过大的输入,则不相关)。我正在根据从您提到的服务器收到的输出编写代码:

//示例json
const json=[{“纬度”:“-11”,“经度”:“-3”},{“纬度”:“-10”,“经度”:“-30”},{“纬度”:“1”,“经度”:“3”},{“纬度”:“2”,“经度”:“-2”};
函数findCenter(json){
让[minLat,minLon,maxLat,maxLon]=json.reduce((a,b)=>
[+b.纬度a[2]?+b。纬度:a[2],
+b、 经度>a[3]?+b。经度:a[3]]
,[Number.MAX\u SAFE\u INTEGER,Number.MAX\u SAFE\u INTEGER,Number.MIN\u SAFE\u INTEGER,Number.MIN\u SAFE\u INTEGER];
返回(maxLat+minLat)/(maxLon+minLon);
}

log(findCenter(json))您当前的函数是否给出了您想要的结果?请注意,多行上的注释需要在每行之前添加
/*
/
*/
,或
/
返回average
似乎很奇怪,因为
average
只会是最后一个计算的值。将单个值传递到
max
不会产生有用的结果。如果你传入一个数组,你会得到
NaN
,除非你使用
apply
。我编辑了注释。我不熟悉apply。你当前的函数是否给出了你想要的结果?请注意,多行上的注释需要在每行之前添加
/*
/
*/
,或
/
返回average
似乎很奇怪,因为
average
只会是最后一个计算的值。将单个值传递到
max
不会产生有用的结果。如果你传入一个数组,你会得到
NaN
,除非你使用
apply
。我编辑了注释。我不熟悉apply。谢谢,我会试试这个。什么是
=>
做的?它是
函数(项){return item.latitude}
的缩写。谢谢,我会试试这个。什么是
=>
做的?它是
函数(项){return item.latitude}
的缩写。