如何计算地图上的线段的交点(How to compute line segment intersec

2019-07-30 14:58发布

我与纬度的工作/经度坐标在谷歌地图。

我有两条线路:

  • A线:48.31508162629726,-2.591741396838972到48.40216156645915,-2.2218462112093404
  • B线:48.383816077371215,-2.274292940053768到48.66103546935337,-1.7066197241571377

然后我用下面的公式来找出它们的交叉点。

var XAsum = A.LngStart - A.LngEnd;
var XBsum = B.LngStart - B.LngEnd;
var YAsum = A.LatStart - A.LatEnd;
var YBsum = B.LatStart - B.LatEnd;

var LineDenominator = XAsum * YBsum - YAsum * XBsum;
if(LineDenominator == 0.0)
    return false;

var a = A.LngStart * A.LatEnd - A.LatStart * A.LngEnd;
var b = B.LngStart * B.LatEnd - B.LatStart * B.LngEnd;

var x = (a * XBsum - b * XAsum) / LineDenominator;
var y = (a * YBsum - b * YAsum) / LineDenominator;

这告诉我,该行确实做交叉并返回x和y的值。

然而,当我绘制返回的点,它是从实景路口偏移(不要太多)。

有没有更好的,只是作为快速算法,我可以使用,这将返回我正确的交叉点?

它需要快速,因为我遍历了大量的行(〜1000)。

编辑:注意这是给我一个错误的周围7.5米偏移

Answer 1:

我假设你正在使用的算法是一个直角坐标系上发现的直线相交处(即平面)。 不幸的是,地球并不是那么使用该算法将引入误差平面(甚至是球)。 谷歌地图使用椭圆形(特别是WGS84)到地球表面接近,所以你需要一个算法寻找上的椭圆弧的交叉点。

此页面可能包含一些有用的信息: http://mathhelpforum.com/calculus/90196-point-intersection-two-lines.html



文章来源: How to compute line segment intersections on a map