寻找两个位置的交集

7
我想在安卓中找到两个位置的交点。

我不想考虑图中圆不相交、包含或完全重叠的情况。

我的问题是,位置以度为单位给出,半径(精度)以米为单位给出。我不知道如何混合这些单位。

在我的情况下,环境是Android,但问题并非特定于Android。

Locations with Radiuses in m


我认为你在寻找三点定位算法,这里有一个用java实现的函数 - hrskrs
1个回答

4
你需要将纬度、经度转换为笛卡尔坐标系,单位为米。 这可以使用圆柱等距投影来完成,其中中心纬度为 (latitudeCircle1 + latCircle2) / 2.0。 (中心经度同理)

(http://mathworld.wolfram.com/CylindricalEquidistantProjection.html)

在上面的链接中,如果要获得基于米的系统,则需要乘以常量"meterPerDegreeAtEquator",该常量为40000000 / 360.0。

现在您有了像在学校里一样的坐标x,y。

然后,您可以按照在学校学到的方法或在网络上找到的方法计算圆的交点。例如这里:https://math.stackexchange.com/questions/256100/how-can-i-find-the-points-at-which-two-circles-intersect

然后,您可以使用反演投影将笛卡尔交点转换回纬度和经度。

这适用于两个圆之间的距离不超过10-100公里的情况。

注意:以下是常见错误,我在与您的示例代码讨论中看到: 请注意,x与经度相关,而y与纬度相关。 尽管我们说纬度/经度。在这种转换公式中,应该在参数名称等中使用long,lat顺序。 另请参阅Lat Long or Long Lat


参考链接:http://math.stackexchange.com/questions/256100/how-can-i-find-the-points-at-which-two-circles-intersect 和 http://www.analyzemath.com/CircleEq/circle_intersection.html - tyczj
听起来很不错,你会推荐哪个phi(根据WolframAlpha上的公式)? - Nick Russler
lambda_0 = (longitude1 + longitide2) / 2.0; 这是中心点的经度。 - AlexWien
请确保:公式(cos()使用弧度),而GPS中的纬度和经度是以度为单位的,您必须在实际代码中进行转换。 - AlexWien
让我们在聊天中继续这个讨论 - Nick Russler
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接