javascript - 如何过滤和计算距原点 10 公里的 JSON 对象纬度和经度?
问题描述
我正在尝试过滤和计算给定原点 10 公里内的 api 端点的对象。我一直纠结于如何过滤 api 结果并计算匹配项的数量。
我能够通过一对一的比较来过滤数据并计算有多少项目具有“香港”城市,但距离计算是过滤数据的另一个复杂层。
coords = [
[
City: "Hong Kong",
Lat: “22.667790”,
Long: “-111.909905”
],
[
City: "Atlanta",
Lat: “22.958769”,
Long: “-111.948939”
],
[
City: "Paris",
Lat: “23.989803”,
Long: “-112.989850”
],
[
City: "Sydney",
Lat: “22.001118”,
Long:”-111.939433”
],
[
City: "Hong Kong",
Lat: “22.667790”,
Long: “-111.909905”
],
];
origin = [
lat:"22.111009",
long: "-113.667870"
];
function getDistance(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2 - lat1); // deg2rad below
var dLon = deg2rad(lon2 - lon1);
var a =
Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI / 180);
}
coords.forEach(function(coord){
distance = getDistance(coord.lat, coord.long, origin.lat, origin.long);
if (distance < 10){
return distance;
}
});
到目前为止,我还没有能够返回任何有意义的东西,只能返回原点和每个对象之间的距离列表。它应该显示在原点 10 公里内有多少个城市。
解决方案
你需要使用filter
方法:
const filtered = coords.filter(coord => {
distance = getDistance(coord.lat, coord.long, origin.lat, origin.long);
return distance < 10
});
现在您已经过滤了存储在名为的数组中的结果filtered
推荐阅读
- node.js - 如何在输入 node.js 时使用 postgresql 数据库中的值自动填充文本框
- d3.js - d3js:没有唯一标签的序数比例
- capybara - Appium_capybara 驱动 + Applitools 集成
- vue.js - 后退按钮导航无需重新加载vue js中的上一页
- javascript - 带有 js 共享模块的 kotlin 项目示例
- forms - Ionic 3 表单仍然警告我:“表单中不包含密码字段”
- android - Runnable 无明显原因运行两次(在 DialogFragment 内)
- c# - 一对一关系实体框架出错
- oracle - 执行完成时,Oracle sql 不会从 temp 释放空间
- amazon-web-services - 无法将图像从 AWS ECR 拉到我在 AWS 上的 kubernetes 集群