Как вычислить пересечения отрезков на карте

Я работаю с координатами широты/долготы на карте Google.

У меня есть две строки:

  • Линия А :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 метров

8
задан Simon 25 July 2012 в 16:35
поделиться