Вычисление расстояния между двумя точками с использованием теоремы Пифагора [закрыто]

Я хочу создать функцию, которая вычисляет расстояние между двумя парами широта/долгота, используя теорему pythag вместо гаверсинус большого круга формула. Поскольку это будет на относительных коротких расстояниях (3 км), я думаю, что эта версия, предполагающая плоскую Землю, должна быть в порядке. Как я могу это сделать? Я спросил в интернете и не придумал ничего полезного. :)

спасибо.

изменить:

вот что я придумал (кажется, работает):

def get_dist(lat0, lng0, lat1, lng1)
  begin
    d_ew = (lng1.to_f - lng0.to_f) * Math.cos(lat0.to_f)
    d_ns = (lat1.to_f - lat0.to_f)
    d_lu = Math.sqrt(d_ew.to_f * d_ew.to_f + d_ns.to_f * d_ns.to_f)
    d_mi = ((2*Math::PI*3961.3)/360)*d_lu
    return d_mi
  rescue Exception => ex
    logger.debug "[get_dist] An exception occurred: #{ex.message}"
    return -1
  end
end

3 ответов


вы можете использовать простой треугольник Пифагора, если вы ожидаете, что расстояния будут небольшими по сравнению с размером Земли.

Предположим, вы находитесь в (lat0, long0), и вы хотите знать расстояние до точки (lat1, long1) в "единицах широты".

горизонтальное (EW) расстояние примерно

d_ew = (long1 - long0) * cos(lat0)

это умножается на cos (lat0), чтобы учесть, что линии долготы становятся ближе друг к другу на высокой широте.

расстояние вертикали (НС) легче

d_ns = (lat1 - lat0)

таким образом, расстояние между двумя точками

d = sqrt(d_ew * d_ew + d_ns * d_ns)

вы можете уточнить этот метод для более сложных задач, но это должно быть достаточно хорошо для сравнения расстояний.

на самом деле, для сравнения расстояний, будет хорошо сравнить D в квадрате, что означает, что вы можете опустить операцию sqrt.


Ну, так как ваши точки находятся рядом друг с другом, поверхность сферы почти плоская, поэтому просто найдите координаты точек в 3D-пространстве, поэтому найдите (x,y,z) для каждой из точек, где

x = r*sin(lat)*cos(long)
y = r*sin(lat)*sin(long)
z = r*cos(lat)

здесь r - радиус сферы. или что-то в этом роде, в зависимости от того, как вы определяете lat/long. Как только у вас есть две координаты xyz, просто используйте sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2). Вы действительно не можете просто использовать 2D-теоретик Пифагора, так как вам нужно будет получить разумные 2D-координаты, которые очень сложный.


вы обычно видите эту нотацию "dy, dx", которая означает разницу y и разницу x. Вы просто вычисляете различия на обеих осях, получая квадратный корень из обоих различий в квадрате согласно теоруму.(сумма шумихи равна квадрату двух других сторон).

var dx:Number = x1-x2;
var dy:Number = y1-y2;
var distance:Number = Math.sqrt(dx*dx + dy*dy);

надеюсь, это достаточно ясно