Средняя точка Geokit LatLng между двумя точками

Привет, я использую рубиновый класс Geokit::LatLng для хранения широты и долготы и пытаюсь найти среднюю точку между несколькими точками. я заметил проблему с этим драгоценным камнем или, возможно, я неправильно понял концепции.

          a = Geokit::LatLng.new(13.0627081,80.274658)
          b = Geokit::LatLng.new(12.8550615,80.2264393)

Когда я рассчитал метод "midpoint_to" для вычисления средней точки между этими точками, я заметил, что они дают разные результаты.

          a.midpoint_to(b) 
<Geokit::LatLng:0x0000000292f368 @lat=12.95888590853612, @lng=80.25053859693796> 

          b.midpoint_to(a)
<Geokit::LatLng:0x00000002933f80 @lat=12.958885908536992, @lng=80.250538596>

Может кто-нибудь объяснить мне, что здесь происходит. средняя точка между a и b должна совпадать с точкой от b до a или отличается по широте и долготе


person Amerrnath    schedule 21.09.2013    source источник


Ответы (2)


В вашем примере две точки совпадают в очень близком приближении. Стоит обозначить разницу — т.е. почему у вас не получается один и тот же объект:

a.midpoint_to(b) 
<Geokit::LatLng:0x0000000292f368 @lat=12.95888590853612, @lng=80.25053859693796> 

b.midpoint_to(a)
<Geokit::LatLng:0x00000002933f80 @lat=12.958885908536992, @lng=80.250538596>
  • Первые числа, 0x0000000292f368 и 0x00000002933f80, являются идентификаторами объектов (неясно, знали ли вы об этом ранее). Они всегда будут разными в любом новом экземпляре объекта и не измеряют ничего, связанного с расстояниями или местоположениями. Есть несколько других классов, где это число не отображается или остается одинаковым при одинаковых ответах.

  • Разница в @lat и @lng связана с ограничениями точности с плавающей запятой. Результаты не совпадают, потому что при вычислении средней точки два набора входных чисел не используются абсолютно эквивалентными способами. На самом деле, даже при очень простой математике с плавающей запятой a + (b - c) может не совпадать с (a + b) - c. Когда вы посмотрите на разницу в долготе между двумя вычисленными средними точками, она составит 9.379590437674779e-10 градусов. На поверхности Земли это расстояние составляет примерно 0,0001 метра (0,1 миллиметра), в то время как ваши точки ввода находятся на расстоянии примерно 14,7 километра друг от друга.

Если вы измерите расстояние с помощью геокита, вы получите обнадеживающее значение 0,0, которое вы, вероятно, могли бы использовать, чтобы подтвердить, что два вычисления достаточно близки, чтобы считаться одной и той же точкой:

a = Geokit::LatLng.new(13.0627081,80.274658)
b = Geokit::LatLng.new(12.8550615,80.2264393)
m1 = a.midpoint_to(b)
m2 = b.midpoint_to(a)
if m1.distance_to( m2 ) > 0
  puts "Mid-points are separate"
else
  puts "Mid-points are the same location"
end

Выход:

Mid-points are the same location

Если вы выполняли более сложные расчеты, вы можете предпочесть использовать число немного больше 0,0, например, 1e-5 (с точностью до ближайшего сантиметра).

person Neil Slater    schedule 22.09.2013

Середина между a и b и наоборот будет одинаковой.

средняя точка не может располагаться посередине между широтой и долготой;

указать

Широта Долгота 22,57265 88,36389

пункт б

Широта Долгота 27,66483 -81,51575

a.midpoint_to(b) 
=> #<Geokit::LatLng:0xb9219f44 @lat=79.06104152033897, @lng=16.672528167825877

На этой странице показано, как рассчитать среднюю географическую точку.

Этот пост может быть полезен для понимания формулы

person suvankar    schedule 21.09.2013