如何从 lat/lng 的大 json 数组中找到最近的 latitude/longitude
How to find nearest latitude/longitude from big json array of lat/lng
我正在建立一个网站来定位您的设备并向您显示 4 个最近的停车计时器。
对于停车计时器,我使用 API 检索纬度和经度,并使用 Google 方向 API 设置起点和终点坐标并生成路线。所有停车收费表的半径约为 2.5 公里。
现在要找到最近的 4 个停车计时器,我正在考虑 运行 一个公式并遍历 API 的每条记录以找到最近的 4 个。但是(我认为)这需要加载到网站的处理时间太多,因此使其变慢。 API.
中有近1200条记录
要通过 lat/lng 坐标计算路线,我使用以下代码:
fetch('https://data.stad.gent/api/records/1.0/search/?dataset=locaties-parkeerautomaten-gent&q=&rows=\
1200&facet=parkeertariefzone&facet=bewonerszone&facet=betaalmodus&facet=status&facet=categorie')
.then(response => response.json())
.then(json => {
let start = new google.maps.LatLng(51.053788, 3.730767);
let end1 = new google.maps.LatLng(json.records[0].geometry.coordinates[1], json.records[0].geometry.coordinates[0]);
let request = {
origin: start,
destination: end1,
travelMode: 'WALKING'
};
let display = new google.maps.DirectionsRenderer();
let services = new google.maps.DirectionsService();
services.route(request, function (result, status) {
if (status == 'OK') {
display.setDirections(result);
}
})
let map1 = new google.maps.Map(document.getElementById("map1"));
display.setMap(map1);
});
问题:在您看来,计算和 return 4 个最近的 lat/lng 点的最佳方法是 API,其中有近 1200 条记录,长度约为 2.5 公里半径使用 JavaScript?
我不太确定如何应对这一挑战,如有任何答案,我们将不胜感激。
注意:它 是 我的第一个 question/post 所以如果我错过了什么或做了什么蠢事,请让我知道,提前致谢 :)
如果有人来这里寻找解决方案,我是如何通过以下代码解决它的:
for (let i = 0; i < json.length; i++) {
if ((Math.abs(json[i].coordinates[1] - start.lat)) + ((Math.abs(json.[i].coordinates[0] - start.lng))) < sumLatLng) {
closest = json[i];
sumLatLng = (Math.abs(json.[i].coordinates[1] - start.lat)) + ((Math.abs(json.[i].coordinates[0] - start.lng)))
} else {
console.log("error");
}
}
基本上我所做的是取起始纬度和经度的总和,从 API 中减去每条记录的纬度和经度,然后取结果的绝对值。如果结果比之前的结果小,那就意味着它更接近。
我正在建立一个网站来定位您的设备并向您显示 4 个最近的停车计时器。
对于停车计时器,我使用 API 检索纬度和经度,并使用 Google 方向 API 设置起点和终点坐标并生成路线。所有停车收费表的半径约为 2.5 公里。
现在要找到最近的 4 个停车计时器,我正在考虑 运行 一个公式并遍历 API 的每条记录以找到最近的 4 个。但是(我认为)这需要加载到网站的处理时间太多,因此使其变慢。 API.
中有近1200条记录要通过 lat/lng 坐标计算路线,我使用以下代码:
fetch('https://data.stad.gent/api/records/1.0/search/?dataset=locaties-parkeerautomaten-gent&q=&rows=\
1200&facet=parkeertariefzone&facet=bewonerszone&facet=betaalmodus&facet=status&facet=categorie')
.then(response => response.json())
.then(json => {
let start = new google.maps.LatLng(51.053788, 3.730767);
let end1 = new google.maps.LatLng(json.records[0].geometry.coordinates[1], json.records[0].geometry.coordinates[0]);
let request = {
origin: start,
destination: end1,
travelMode: 'WALKING'
};
let display = new google.maps.DirectionsRenderer();
let services = new google.maps.DirectionsService();
services.route(request, function (result, status) {
if (status == 'OK') {
display.setDirections(result);
}
})
let map1 = new google.maps.Map(document.getElementById("map1"));
display.setMap(map1);
});
问题:在您看来,计算和 return 4 个最近的 lat/lng 点的最佳方法是 API,其中有近 1200 条记录,长度约为 2.5 公里半径使用 JavaScript?
我不太确定如何应对这一挑战,如有任何答案,我们将不胜感激。
注意:它 是 我的第一个 question/post 所以如果我错过了什么或做了什么蠢事,请让我知道,提前致谢 :)
如果有人来这里寻找解决方案,我是如何通过以下代码解决它的:
for (let i = 0; i < json.length; i++) {
if ((Math.abs(json[i].coordinates[1] - start.lat)) + ((Math.abs(json.[i].coordinates[0] - start.lng))) < sumLatLng) {
closest = json[i];
sumLatLng = (Math.abs(json.[i].coordinates[1] - start.lat)) + ((Math.abs(json.[i].coordinates[0] - start.lng)))
} else {
console.log("error");
}
}
基本上我所做的是取起始纬度和经度的总和,从 API 中减去每条记录的纬度和经度,然后取结果的绝对值。如果结果比之前的结果小,那就意味着它更接近。