如何从 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 中减去每条记录的纬度和经度,然后取结果的绝对值。如果结果比之前的结果小,那就意味着它更接近。