Javascript 寻找地图的中心
在本部分之前,我制作了一个包含纬度、经度和类型的主数组,形成了一个公共JSON API() 我所说的主阵列的意思如下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. 要找到中心点,我需要在主阵列中找到最大和最小的纬度和经度。中心点将是最大值和最小值的平均值 我做了以下几点,但我相信有更好的
[["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}
的缩写。