如何根据纬度和经度获取两个位置之间的距离?

2024-03-21

我正在尝试根据用户到每个位置的距离显示一个列表。这些位置以 JSON 形式从 Firebase 接收。

为了获取用户位置,我正在使用:

    navigator.geolocation.getCurrentPosition(function(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;

您知道一种按距离对 JSON 进行排序并列出它的方法(具有多个子节点)吗?

Thanks.


有两种方法可以获取某个纬度/经度与其他纬度/经度之间的距离:

- 使用谷歌API

    function getDistanceOneToOne(lat1, lng1, lat2, lng2)
    {
       const Location1Str = lat1 + "," + lng1;
       const Location2Str = lat2 + "," + lng2;

       let ApiURL = "https://maps.googleapis.com/maps/api/distancematrix/json?";

       let params = `origins=${Location1Str}&destinations=${Location2Str}&key=${GOOGLE_API_KEY}`; // you need to get a key
       let finalApiURL = `${ApiURL}${encodeURI(params)}`;

       let fetchResult =  await fetch(finalApiURL); // call API
       let Result =  await fetchResult.json(); // extract json

       return Result.rows[0].elements[0].distance;
    }

这需要手机有网络连接,但它提供了行车距离(与行车导航器完全相同)PLUS更多信息(例如,到达的持续时间),与提供直线距离的第二种方法不同。

对于上述内容,您需要获取 Google Api 密钥 https://developers.google.com/maps/documentation/distance-matrix/get-api-key。更多信息请点击这里:谷歌地图 API https://developers.google.com/maps/documentation/distance-matrix/intro

- 使用纯数学

这发生在设备本地,它提供两个纬度/经度之间的直线距离。

function distance(lat1, lon1, lat2, lon2, unit) {
    var radlat1 = Math.PI * lat1/180
    var radlat2 = Math.PI * lat2/180
    var theta = lon1-lon2
    var radtheta = Math.PI * theta/180
    var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist)
    dist = dist * 180/Math.PI
    dist = dist * 60 * 1.1515
    if (unit=="K") { dist = dist * 1.609344 }
    if (unit=="M") { dist = dist * 0.8684 }
    return dist
}

对每个项目运行上述操作之一,您将获得每个项目的距离。希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据纬度和经度获取两个位置之间的距离? 的相关文章

  • 运行 npm install 时出错 Error: 404 Not Found: 7zip-bin@~4.1.0

    当我运行 npm install 时 我看到此错误 3 verbose stack Error 404 Not Found 7zip bin 4 1 0 2293 verbose stack at fetch then res C cygw
  • 如何使用 JqGrid 子网格进行内联编辑?

    我知道如何使用主网格进行内联编辑 但是有没有办法对子网格进行内联编辑 这是我的 JS 文件 function var lastsel list jqGrid url example php postData q 1 datatype jso
  • Atom“自动完成”不起作用

    因此 当您安装 Atom 时 autocomplete 会随其一起提供 并且默认情况下处于启用状态 当我编写代码时 什么也没有显示 为什么 是否需要配置任何文件才能正常工作 In autocomplete plus settings pag
  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • Jmeter动态生成请求的json负载

    我有一个 Jmeter 测试计划 我希望 HttpSampler 发送发布请求 请求正文应包含 Json 如下所示 productIds p1 p2 我设置了一个随机变量生成器 每次调用都会返回格式正确的 ProductId 我想做的是通过
  • Backbone-relational 无法实例化两个 RelationalModel 对象

    我正在尝试实现 BackboneRelational 并不断获得 无法实例化多个 Backbone RelationalModel 每种类型都有相同的 ID class App Models User extends Backbone Re
  • 将服务连接到现有的流星帐户

    我正在设置一个流星应用程序 其中涉及使用用户名和密码进行注册 然后希望将该帐户与 Facebook 和 Twitter 连接起来 我只需使用帐户包即可轻松启动并运行第一部分 但是当我有一个登录用户调用 Meteor loginWithFac
  • 在 Chrome 中检索浏览器语言

    我一直在尝试让 momentjs 正确检测浏览器语言并本地化时间显示 按照使用 Moment js 进行区域设置检测 https stackoverflow com questions 25725882 locale detection w
  • 获取键盘事件中的鼠标位置

    我试图在用户按住 Shift 键时出现选择轮 滚轮应以鼠标位置为中心 然而当我测试这个时 pageX and clientX两者在事件对象上都未定义 是否可以通过键盘事件获取鼠标坐标 不 只需跟踪mousemove事件并持续保存当前位置 以
  • Typeahead.js 干扰 Bootstrap 输入组

    如何防止 Typeahead js 拆分我的 Twitter Bootstrap 3 输入组 每当我将 Typeahead javascript 指向属于输入组一部分的文本区域时 连接的文本区域和提交按钮就会停止连接 这只是 Typeahe
  • 替换 Javascript 中的引号?

    对于我正在制作的网络应用程序 我将收到文本字符串 其中偶尔包含引号 因为我接下来要 document writing 字符串 所以需要将它们更改为撇号或转义 我该怎么做 因为当我尝试时它似乎不起作用 特别是我认为因为字符串的引号阻止了脚本的
  • 如何使用 Expo 播放 Youtube 视频

    我正在尝试使用反应本机 YouTube 组件 https github com inProgress team react native youtube在我的世博项目中 但是 我无法让它发挥作用 到目前为止 我所拥有的只是带有红色边框的黑屏
  • 如何在流程图中间隔刻度线?

    我下面有一个流程图 您将看到标签被压缩 我想使刻度之间的宽度确保显示所有标签 标记如下 div div class graph info a href span span a a href class active span span a
  • 如何获取 svgElement 的比例?

    我正在研究 svg div style width 300 height 300 div
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • JavaScript - 这个这个

    String prototype foo String prototype foo bar function How can you reference the grandparent string console log this par
  • Scala 2.10,它对 JSON 库和案例类验证/创建的影响

    显然 在 Scala 2 10 中我们得到了改进的反射 这将如何影响 lift json jerkson sjson 和朋友 此外 我们能否期望在不久的将来 Scala 中会出现内置的 JSON 语言功能 如 Groovy 的出色 GSON
  • 将 javascript 变量发送到服务器端 ASP .NET

    我需要在回发时将 JavaScript 数据传递到服务器端 Exvar jsVariableToPass new Object jsVariableToPass key1 value1 jsVariableToPass key2 value
  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w
  • Javascript:修改原型不会影响现有实例[重复]

    这个问题在这里已经有答案了 我创建了原型的 2 个实例 更改了原型中的函数 更改反映在两个实例中 很棒 但是 当我通过删除该函数来修改原型时 该函数对于现有实例仍然存在 function A this name cool A prototy

随机推荐

  • 如何同时运行不同版本的node.js?

    我已经为我的 cloud9 应用程序安装了节点 v0 8 25 并且我想在节点 v0 11 2 上进行开发 那么我可以在 v0 8 上运行 cloud9 并在 Ubuntu 上的 v0 11 2 上运行我的程序吗 我用的是nvm Thank
  • 带有 Google Apps 脚本的 jQuery UI

    是否可以将 jQuery UI 小部件与 google apps 脚本应用程序一起使用 我有一个文本框 我想在上面使用日期选择器 是的 您可以将 JQueryUI 与 Google Apps 脚本一起使用 我建议您查看示例代码 您无需执行任
  • TypeScript 中未检查“void”返回类型 – 防止浮动承诺?

    在 TypeScript 3 9 7 中运行 这与编译器无关 const someFn gt void gt 123 我发现这个答案 https stackoverflow com a 12763878 2072165 这说明这是设计使然
  • org.eclipse.debug.core.DebugException:com.sun.jdi.ClassNotLoadedException:检索数组的组件类型时发生类型未加载

    我正在开发AuthSample示例使用chase paymentech Java SDK命名为 PaymentechSDK jar version 7 4 0 当我尝试执行示例代码时 遇到以下错误 我不明白有什么问题 有人可以指导我吗 FY
  • 为什么空数组在 bash 中被视为未设置?

    最近 我设置了微软的Linux 的 Windows 子系统 https en wikipedia org wiki Windows Subsystem for Linux在我的电脑上 它只是模拟 Linux 环境等 基本上 它是 Cygwi
  • Twig 无法调用字符串变量上的方法

    更新后 twig twig to v2 4 4 调用宏函数时出错 Impossible to invoke a method widget prototype on a string variable ERP timesheets form
  • 以“is”为前缀的布尔属性名称仍然是有效的 Java Bean 吗?

    我刚刚注意到一些我不知道的事情 private boolean isCertified public boolean isCertified return isCertified public void setCertified boole
  • 如何最好地避免 C++/CLI 本机类型中的双重转换

    传统上 我一直使用 MFC 扩展 dll 并使用 dllimport dllexport 导入 导出 但是 当 dll 更改为使用 clr 时 此方法的成本会变得很高 因为调用可能会导致双重转换 我现在的性能受到了巨大的打击 需要停止双重重
  • 使用 DOMXml 和 Xpath 更新 XML 条目

    您好 我知道这里有很多关于这三个主题组合在一起更新 XML 条目的问题 但似乎每个人都针对给定的问题 我花了一些时间试图理解 XPath 及其方式 但我仍然无法得到我需要做的事情 开始了 我有这个 XML 文件
  • 如何从 ExtJS 数据存储中获取脏记录?

    除了迭代存储中的记录并检查脏标志之外 还有更干净的方法吗 EDIT 顺便说一句 我正在使用 ExtJS4 这是返回的数据的片段 注意有一个dirty true与modified对象集 实际上是旧数据和data对象包含新数据 data Ext
  • 将工具提示设置为相同的内容

    我试图将数据网格单元格工具提示设置为等于该单元格中 TextBlock 内部的文本 到目前为止我所拥有的是这样的
  • 为什么 Java 支持秒精度的时区偏移?

    在维基百科上 https en wikipedia org wiki ISO 8601 Time offsets from UTC时区偏移被解释为与标准 UTC 时间之间的小时和分钟差异 然而 日期时间格式化程序 https docs or
  • Xcode 4 配置为使用更少的 RAM?

    我一直在尝试在我的 1GB Mac Mini 上使用 Xcode 4 这不是一个令人高兴的情况 它经常变慢 可能是由于内存不足 是否有任何我可以更改的设置 这样它就不会如此占用内存 另一个帖子here https stackoverflow
  • C++ 继承和成员函数指针

    在C 中 成员函数指针可以用来指向派生 甚至基 类成员吗 编辑 也许一个例子会有所帮助 假设我们有一个由三个类组成的层次结构X Y Z按照继承顺序 Y因此有一个基类X和一个派生类Z 现在我们可以定义一个成员函数指针p上课Y 写成 void
  • 空闲后 JVM JIT 去优化

    我使用Java主要是为了编写宠物项目 这些项目大部分时间都是闲置的 闲置数小时 天后 响应时间增加到秒 最多 10 秒 然后慢慢减少到 200 300 毫秒 据我了解 发生这种情况是因为 JIT去优化 https www safariboo
  • typescript - 在路径中包含类型,但不编译它们

    我在打字稿中遇到了问题 我有以下层次结构 types declaration1 ts declaration2 ts common utils1 ts utils2 ts tests utils1 test ts utils2 test t
  • 对方案中的列表进行排序

    如何编写一个排序算法 以升序返回列表 ex 1 3 5 2 9 回报 1 2 3 5 9 大多数Scheme 实现都附带一个对列表进行排序的过程 如果您的实现没有提供这一功能 那么为您提供一个并不困难 下面是快速排序算法的实现 gt def
  • vmap 遍历 jax 中的列表

    使用 jax 我尝试计算每个样本的梯度 处理它们 然后将它们转化为正常形式以计算正常参数更新 我的工作代码看起来像 differentiate per sample jit vmap grad loss in axes None 0 0 g
  • 在编辑模式下使用自定义 UILabels 分组 UITableView

    我有一个分组UITableView用户可以在其中进入编辑模式并从表中删除行 表格的每个单元格有两个UILabels 当表格进入编辑模式时 自定义UILabels向右推并超出单元格的右边界 如果我使用标准cell textLabel 标签调整
  • 如何根据纬度和经度获取两个位置之间的距离?

    我正在尝试根据用户到每个位置的距离显示一个列表 这些位置以 JSON 形式从 Firebase 接收 为了获取用户位置 我正在使用 navigator geolocation getCurrentPosition function posi