当前位置:  开发笔记 > 编程语言 > 正文

用于确定2个地理点(纬度,经度)的线形是否与地理区域(圆)相交的公式?

如何解决《用于确定2个地理点(纬度,经度)的线形是否与地理区域(圆)相交的公式?》经验,为你挑选了1个好方法。

它不需要非常准确.有谁知道这样做的好方法?

任何帮助深表感谢.



1> Gareth Rees..:

当你说"它不需要非常准确"时,你并没有说出你准备接受的解决方案有多么不准确.此外,您没有说出所考虑的地理区域可能有多大.这两个标准对需要采取的方法有很大的不同.

对于一个较小的区域(比如几公里),平面近似可能已经足够好了(例如,墨卡托投影),其他一些响应会告诉你如何做到这一点.对于较大的区域,您必须考虑地球的球形度.如果你想要不准确度不到百分之一左右,你需要考虑地球的偏心率.

我将假设为了这个答案的目的,球面近似是足够好的,并且你的点在足够相似的高度,我们不需要担心它们的高度.

您可以使用变换将地理点(ψ,λ)转换为笛卡尔地球中心坐标

(ψ,λ)→(cos(ψ)cos(λ),cos(ψ)sin(λ),sin(ψ))

其中a是地球的平均半径(6,371 km).所以我们假设你的线的两个点是p 0和p 1; 那么通过p 0和p 1的最短线是一个大圆,它定义了一个将地球切成两半的平面,正常n = p 0×p 1.

现在我们需要找到圆形区域的边界.假设该区域的中心位于c并且该区域的表面半径为s.然后该区域的直线半径是r = sin(s/a).我们还需要圆形区域的真正中心,c'= c cos(s/a).(这一点埋在地下深处!)

我们想要将两个圆相交并求解交点.不幸的是,由于数值不精确,很可能这个程序永远找不到任何解决方案,因为不精确的圆圈会在3个维度上相互错过.所以我建议采用以下步骤:将两个圆的平面相交,得到如下所示的虚线(除非c'×n = 0,在这种情况下,两个圆是平行的,c'= o,在这种情况下它们是重合的,否则他们不相交).然后将线与圆形区域相交.

这个两步过程将问题简化为二维,并保证即使数值不精确使得两个圆在三维中错过也能找到解.

如果您需要更高的精度,那么您可能需要在参考椭球上使用大地坐标,例如WGS 1984.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有