如何使用python比较两个球点的大圆距离和欧氏距离?

2024-01-10

我试图检查当您使用欧几里德距离而不是使用大圆距离(gcd)计算地球上两点的距离时引入的错误。我有两个由纬度和经度定义的点。 我使用了 python geopy 框架大圆距离 https://github.com/geopy/geopy/blob/master/geopy/distance.py。这里是gcd的代码:

def measure(self, a, b):
        a, b = Point(a), Point(b)

        lat1, lng1 = radians(degrees=a.latitude), radians(degrees=a.longitude)
        lat2, lng2 = radians(degrees=b.latitude), radians(degrees=b.longitude)

        sin_lat1, cos_lat1 = sin(lat1), cos(lat1)
        sin_lat2, cos_lat2 = sin(lat2), cos(lat2)

        delta_lng = lng2 - lng1
        cos_delta_lng, sin_delta_lng = cos(delta_lng), sin(delta_lng)

        d = atan2(sqrt((cos_lat2 * sin_delta_lng) ** 2 +
                       (cos_lat1 * sin_lat2 -
                        sin_lat1 * cos_lat2 * cos_delta_lng) ** 2),
                  sin_lat1 * sin_lat2 + cos_lat1 * cos_lat2 * cos_delta_lng)

        return self.RADIUS * d

所以还是两点:

p1=[39.8616,-75.0748], p2=[-7.30933,112.76]

the

gcd = 78.8433004543197 klm

使用great_circle(p1,p2).kilometersgeopy 的函数

然后我使用以下公式将这两点转换为笛卡尔坐标:

  def spherical_to_cartesian(r,la,lo):
       x=r*np.sin(90-la)*np.cos(lo)
       y=r*np.sin(90-la)*np.sin(lo)
       z=r*np.cos(90-la)
       return (x,y,z)

where r=6372.795,这会产生以下笛卡尔坐标

p1=[ -765.81579368,  -256.69640558,  6321.40405587], 
p2=[480.8302149,-168.64726394,-6352.39140142]

然后输入:np.linalg.norm(p2-p1)我正进入(状态1103.4963114787836作为他们的欧几里得规范,与 gcd 的约 78klm 相比,这似乎不合理。我是不是推断错了?


Python 在 math 包中包含两个函数;弧度将度数转换为弧度,度数将弧度转换为度数。

sin() 方法返回 x 的正弦值(以弧度表示)。

import math
def spherical_to_cartesian(r,la,lo):
   rlo = math.radians(lo)
   rla = math.radians(90-la)
   x=r*np.sin(rla)*np.cos(rlo)
   y=r*np.sin(rla)*np.sin(rlo)
   z=r*np.cos(rla)
   return (x,y,z)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用python比较两个球点的大圆距离和欧氏距离? 的相关文章

随机推荐

  • Django数据库:按相关数据库中最新对象的字段排序

    我在 django 中有两个数据库表 Device 表用于存储实际设备 DeviceTest 表用于存储每个设备的测试检查 对一个设备进行多次测试 class Device models Model created at models Da
  • 在 .net4 上升级到 EF6 - System.Data.MetadataException:指定的架构无效

    我有一个在 net v4 下运行的 asp net 网站 我已从 Entity Framework v5 升级到 v6 02 并且使用 nuget 提供的 EntityFramework v4 dll 在 IIS Express 和 net
  • Java中如何正确获取线程名称?

    我有这个类用于在 Java 中创建线程 package org vdzundza forms import java awt Graphics import java awt Graphics2D public class DrawThre
  • CSS如何使div水平居中

    我正在努力使 div 水平居中 我有以下代码将我的 div 垂直和水平地居中在 body 标记中 但似乎只有垂直部分有效 我怎样才能让水平部分也能工作 提前致谢 body background color 081418 font size
  • 定义一个不可见的类方法是“public”的简写吗?

    我经常看到没有可见性关键字定义的函数代码 例如 class Foo function bar 是不是的简写public功能 省略它是一个好习惯吗 class Foo public function bar 是的你是对的 当您省略可见性修饰符
  • vue.js 应用程序中静态资源的路径

    我正在开发一个基于 vue cli webpack 模板的单页面应用程序 由于我们也必须使用静态资源 因此我们需要在样式表中引用它们 官方文档建议使用绝对路径 如下所示 background image url assets images
  • 观察其他观察者未看到的值

    我有一个可观察的值 它发出独特的值 例如 var source Observable Range 1 100 Publish source Connect 我想观察它的价值 例如两个观察者 但每个观察者仅收到其他观察者未看到的值的通知 因此
  • opencv中有没有相当于matlab conv2的函数

    matlab函数conv2有直接的opencv函数吗 我尝试使用 cvFilter2D 但它似乎给出了与 conv2 不同的结果 例如 CvMat Aa cvCreateMat 2 2 CV 32FC1 CvMat Bb cvCreateM
  • 如何在R中按两列进行分组

    我有一个数据框 我试图对其进行分组 然后根据两列求和 两列是字符 其中一列是月份 另一列是变量 以下是数据框架和结构的示例 row names month variable amount 1 1 Jan x 1000 2 1 Jan x 3
  • 在R中将两列合并为一列[重复]

    这个问题在这里已经有答案了 我有以下数据框 并尝试将两列合并为一列 同时替换NA与数值 ID A B 1 3 NA 2 NA 2 3 NA 4 4 1 NA 我想要的结果是 ID New 1 3 2 2 3 4 4 1 提前致谢 在编写答案
  • 在 pyspark databricks 中并行执行多个笔记本

    问题很简单 master dim py calls dim 1 py and dim 2 py并行执行 这在 databricks pyspark 中可能吗 下图解释了我想要做什么 由于某种原因它出错了 我在这里遗漏了什么吗 仅供其他人使用
  • npm install:使用全局包(如果存在),而不是安装两次

    使用时npm install with a package json文件 如何让它使用符合条件的全局安装的软件包 而不是再次在本地下载并安装该软件包 我知道关于link https docs npmjs com cli link 但是有办法
  • java除法运算中Nan和Infinity是由什么决定的

    下面代码的输出让我感到困惑 为什么NaN有时是无穷大 有时是无穷大 public static void main String args double a 0 0 double b 1 0 int c 0 System out print
  • MySQL 存储过程通过 MS Access (VBA) 中的 ADODB 的输出参数在一台计算机上正确,在另一台计算机上随机

    我已经尝试了 几乎 一切方法来隔离问题 但我迷失了 我有一个 MS Access 应用程序 它使用 ADODB 连接到本地 MySQL 数据库 我将其复制到一台新计算机 但现在存储过程的输出参数每次都包含一个随机值 如果通过 ADODB 完
  • 你能用C#制作一个alpha透明的PNG吗?

    我有一个显示垂直文本的多浏览器页面 作为让文本在所有浏览器中垂直呈现的丑陋黑客 我创建了一个自定义页面处理程序 它返回一个带有垂直绘制文本的 PNG 这是我的基本代码 C 3 但对任何其他版本进行了小幅更改 直至 1 Font f GetS
  • 流星: 发送电子邮件 | AuthError:登录无效 - 535-5.7.8

    我已经安装了电子邮件包并尝试发送测试邮件 但它向我显示以下错误 AuthError 无效登录 535 5 7 8 用户名和密码不被接受 我确信凭据是正确的 并且代码与以下内容相同 https github com ideaq meteor
  • 滚动捕捉会跳过较小屏幕上的部分 - Chrome

    我正在尝试在页面上实现滚动捕捉 我已将scroll snap type 添加到容器元素 并将scroll snap align 添加到子部分 它在大屏幕上的 Chrome 上运行良好 在所有屏幕尺寸的 Firefox 上运行良好 然而 它似
  • 如何从 JTable 中删除一行? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想从 JTable 中删除一些行
  • 利用浏览器缓存外部文件

    我试图让我的谷歌页面速度洞察评级达到不错的水平 但是我也想缓存一些外部文件 有人知道处理这个问题的最佳方法是什么吗 https s swiftypecdn com cc js 5 minutes https pagead2 googlesy
  • 如何使用python比较两个球点的大圆距离和欧氏距离?

    我试图检查当您使用欧几里德距离而不是使用大圆距离 gcd 计算地球上两点的距离时引入的错误 我有两个由纬度和经度定义的点 我使用了 python geopy 框架大圆距离 https github com geopy geopy blob