Формула для excel для расчета расстояний по координатам

В этом учебном материале по Excel мы рассмотрим примеры того, как рассчитать расстояние между двумя точками на координатной плоскости.

Как в Excel рассчитать расстояние между двумя точками

Основная формула

=КОРЕНЬ((x2x1)^2+(y2y1)^2)

Описание

Чтобы вычислить длину отрезка по координатам двух точек на линии, вы можете использовать формулу расстояния, адаптированную для синтаксиса формул Excel. В показанном примере формула в G5, имеет следующий вид:

=КОРЕНЬ((D5B5)^2+(E5C5)^2)

где координаты двух точек указаны в столбцах с B по E.

Пояснение

Длину линии можно рассчитать по формуле расстояния, которая выглядит так:

Расстояние — это квадратный корень из изменения x в квадрате плюс изменение y в квадрате, где две точки даны в форме (x1, y1) и (x2, y2).
Формула расстояния — это пример примененной теоремы Пифагора, где изменение x и изменение y соответствуют двум сторонам прямоугольного треугольника, а гипотенуза — вычисляемому расстоянию.
В Excel формулу расстояния можно записать с помощью оператора экспоненты ^ и функции КОРЕНЬ следующим образом:

=КОРЕНЬ((D5B5)^2+(E5C5)^2)

В соответствии с порядком операций Excel, изменение x и изменение y вычисляется, затем возводится в квадрат, и два результата складываются вместе и передаются в функцию КОРЕНЬ, которая возвращает квадратный корень из суммы в качестве окончательного результата:

=КОРЕНЬ((D5B5)^2+(E5C5)^2)

=КОРЕНЬ((6)^2+(8)^2)

=КОРЕНЬ(36+64)

=КОРЕНЬ(100)

=10

Функцию СТЕПЕНЬ также можно использовать вместо оператора экспоненты ^ следующим образом:

=КОРЕНЬ(СТЕПЕНЬ(D5B5;2)+СТЕПЕНЬ(E5C5;2))

с тем же результатом.

I’m currently drawing up a mock database schema with two tables: Booking and Waypoint.

  • Booking stores the taxi booking information.

enter image description here

  • Waypoint stores the pickup and drop off points during the journey, along with the lat lon position. Each sequence is a stop in the journey.

enter image description here

How would I calculate the distance between the different stops in each journey (using the lat/lon data) in Excel?

Is there a way to programmatically define this in Excel, i.e. so that a formula can be placed into the mileage column (Booking table), lookup the matching sequence (via bookingId) for that journey in the Waypoint table and return a result?

Example 1:

A journey with 2 stops:

1   1   1   MK4 4FL, 2, Levens Hall Drive, Westcroft, Milton Keynes 52.002529   -0.797623
2   1   2   MK2 2RD, 55, Westfield Road, Bletchley, Milton Keynes   51.992571   -0.72753

4.1 miles according to Google, entry made in mileage column in Booking table where id = 1

Example 2:

A journey with 3 stops:

6   3   1   MK7 7DT, 2, Spearmint Close, Walnut Tree, Milton Keynes 52.017486   -0.690113
7   3   2   MK18 1JL, H S B C, Market Hill, Buckingham              52.000674   -0.987062
8   3   1   MK17 0FE, 1, Maids Close, Mursley, Milton Keynes        52.040622   -0.759417

27.7 miles according to Google, entry made in mileage column in Booking table where id = 3

 

mk2gt

Пользователь

Сообщений: 7
Регистрация: 01.01.1970

Здравствуйте. Подскажите, пожалуйста, как рассчитать МИНИМАЛЬНОЕ расстояние между точками если на вход ей подаются координаты точек,
пример данных:

долгота широта
1 30,12427 49,79565
2 30,12854 49,77113
3 30,11481 49,79782
4 30,10755 49,81034
5 30,06843 49,82044
6 30,09113 49,81076
7 30,15859 49,78464
8 30,1495 49,78669
9 30,10953 49,79551
10 30,10795 49,811

….
N

Изменено: mk2gt22.03.2016 18:24:26

 

Udik

Пользователь

Сообщений: 372
Регистрация: 07.03.2016

excel 2016х64 Контакты в профиле

Количество точек в каких пределах, точки на плоскости?

Арфы — нет, возьмите бубен.

 

mk2gt

Пользователь

Сообщений: 7
Регистрация: 01.01.1970

нет координаты заданы в числовом формате:

долгота широта
1 30,12427 49,79565
2 30,12854 49,77113
3 30,11481 49,79782
4 30,10755 49,81034
5 30,06843 49,82044
6 30,09113 49,81076
7 30,15859 49,78464
8 30,1495 49,78669
9 30,10953 49,79551
10 30,10795 49,811

нужно найти минимальное расстояние между объектами от 1 до 10 …N =2-3тыс, точки на земле
вот архивная тема расстояние между

двумяточками

и вот

еще  

Изменено: mk2gt22.03.2016 18:43:16

 

Udik

Пользователь

Сообщений: 372
Регистрация: 07.03.2016

excel 2016х64 Контакты в профиле

Ну если точек в пределах пары тысяч, можно тупо в лоб, для каждой точки вычисляем расстояние до всех других, находим минимальное заносим в массив. Потом ищем минимум в массиве. А потом можно алгоритм всяко оптимизировать, например берем квадрат 10 на 10 и вычисляем расстояния до всех точек,
попадающих туда, потом переходим к другой точке и т.д.

Арфы — нет, возьмите бубен.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

Доброе время суток
Вариант на SQL. Файл сохранить в папку c:path. На листе «Отчёт» в таблице ПКМ — Обновить
Успехов.

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

Какова конечная цель?
Нужно решить «задачу коммивояжера»:

http://www.excelworld.ru/forum/3-12090-1

или поиск кратчайшего пути от одной точки до другой алгоритмом Дейкстры:

http://www.excelworld.ru/forum/3-6656-1

 

mk2gt

Пользователь

Сообщений: 7
Регистрация: 01.01.1970

#7

23.03.2016 10:57:19

Цитата
MCH написал: Какова конечная цель?

нужно получить массив данных для каждой точки А ближайшую точку В, имея списки координат точек А и В для которых выполняется условие расстояние от А и В менне Х метров

Цитата
Андрей VG написал: Андрей VG

спасибо, хочется получить такое для всех, не для пары ближайших точек, например в 2х колонках: номер точки и расстояние)

Цитата
Udik написал: можно тупо в лоб,

как-то совсем не хочется, можно по карте с линейкой тоже сделать))

Изменено: mk2gt23.03.2016 13:11:06

 

Михаил

Пользователь

Сообщений: 7
Регистрация: 01.01.1970

поменял, по задачке есть еще желающие помочь :)

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

#9

23.03.2016 13:08:20

Цитата
Михаил написал: есть еще желающие помочь

Это утверждение? )

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

#10

23.03.2016 13:38:59

Цитата
mk2gt написал:
нужно получить массив данных для каждой точки А ближайшую точку В, имея списки координат точек А и В для которых выполняется условие расстояние от А и В менне Х метров

Можно предложить следующее решение
Для каждой пары точек вычисляем расстояние по координатам (формулу для вычисления расстояний можно взять из задачи коммивояжера, ссылку на которую давал ранее).
Затем проверяем расстояние на условие «менее Х метров» и сохраняем результат.
для 2000 точек получается не так уж и много сравнений N*(N-1) (примерно 4 млн), что для VBA легко выполнимая задача.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#11

23.03.2016 18:59:46

Цитата
mk2gt написал: хочется получить такое для всех

А вы бы примерчик то привели бы что есть — как должно, а то только требовать — догадайтесь как надо ;)
Вариант для всех точек всё на том же SQL. С паразитным выводом 4-10 и 10-4, 3-9 и 9-3 уже поборитесь самостоятельно. Нужно же и свои усилия прикладывать, не правда ли?
Успехов.
P. S. Хотя уже при 3000 тысячах точек стоит подумать о другом алгоритме (у этого сложность N^2) и писать код в VBA.

Прикрепленные файлы

  • Расстояния.xlsx (11.48 КБ)

Изменено: Андрей VG23.03.2016 19:18:56
(Не дописал P. S.)

 

Михаил

Пользователь

Сообщений: 7
Регистрация: 01.01.1970

нашел

решение

, но результат не похож на правду

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

Михаил, а чем предложенный мной вариант не подошёл?

 

Михаил

Пользователь

Сообщений: 7
Регистрация: 01.01.1970

#14

19.04.2016 14:49:08

Цитата
Андрей VG написал: уже при 3000 тысячах точек стоит подумать о другом алгоритме

Изменено: Михаил19.04.2016 16:10:17

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#15

19.04.2016 16:27:31

Доброе время суток

Цитата
Михаил написал:
стоит подумать о другом алгоритме

То есть вы задумались об алгоритме на VBA? Тут ничего особо сложного. Разбиваете пространство между минимумом и максимом координат на равные прямоугольные области (собственно — двумерный массив). При разбиении желательно чтобы каждая точка была в своём прямоугольнике — мало достижимый вариант, но можно разбить и по статистике координат.
Далее для всех точек текущего прямоугольника берём обрамляющие 8 прямоугольников и уже перебором определяем минимальное расстояние до текущей точки текущего прямоугольника (то же самое). Для идеального случая — каждая точка в своём прямоугольнике — задача становиться линейной.
Как то так, если коротенько.
Успехов.

 

MCH

Пользователь

Сообщений: 3875
Регистрация: 22.12.2012

#16

19.04.2016 18:44:12

Даже для 3000 точек попарное сравнение и вычисление расстояний занимает менее минуты (у меня считается 8 секунд):

Код
Private Const pi# = 3.14159265358979

Function dln#(x1#, y1#, x2#, y2#)
    dln = 6371 * ArcCos(Sin(x1 / 180 * pi) * Sin(x2 / 180 * pi) + Cos(x1 / 180 * pi) * Cos(x2 / 180 * pi) * Cos((y1 - y2) / 180 * pi))
End Function

Function ArcCos#(a#)
    If a = 1 Then
        ArcCos = 0
    ElseIf a = -1 Then
        ArcCos = pi
    Else
        ArcCos = Atn(-a / Sqr(1 - a * a)) + pi / 2
    End If
End Function

Sub www()
    Const n& = 3000
    Dim i&, j&, t!, d#
    ReDim x#(1 To n), y#(1 To n)
    Randomize
    
    For i = 1 To n
        x(i) = Rnd * 100 + 30
        y(i) = Rnd * 15 + 45
    Next i
    
    t = Timer
    For i = 1 To n
        For j = 1 To n
            If i <> j Then
                d = dln(x(i), y(i), x(j), y(j))
            End If
    Next j, i
    
    Debug.Print Timer - t
End Sub

а если сегментировать координатную плоскость, как предложил Андрей VG, тем самым ограничив количество сравниваемых друг с другом точек, то вычисления займут еще меньше времени (правда кода будет больше).

Для решения нужно понять конечную цель задачи, что в итоге то нужно от сравнения координат?

Изменено: MCH20.04.2016 07:16:21

 

atomska

Пользователь

Сообщений: 1
Регистрация: 17.08.2018

Здравствуйте! Подскажите реальная ли задача? Нужно посчитать среднее расстояние от одного банкомата до другого.

Вводные:

Площадь Страны 17 125 191 км2

Плотность банкоматов на 10 км2 = 1,9

Плотность населения на 1 км2 = 8,56

Заранее спасибо! Может какие еще данные нужны, или вообще другие

 

Мартын

Пользователь

Сообщений: 282
Регистрация: 22.12.2016

#18

17.08.2018 10:31:39

Цитата
atomska написал:
среднее расстояние от одного банкомата до другого

Извините, но это есть бред. Среднее расстояние от одного объекта до другого равно самому этому расстоянию.

 

Мартын

Пользователь

Сообщений: 282
Регистрация: 22.12.2016

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

 

StoTisteg

Пользователь

Сообщений: 441
Регистрация: 07.05.2018

Мартын, даже если не придираться к словам, непонятно, при чём тут Эксель. Это обычная школьная задача по арифметике.

 

IKor

Пользователь

Сообщений: 1167
Регистрация: 27.09.2017

2 atomska

Если указанная величина плотности размещения банкоматов одинакова для всей страны, то на площади 2,0/1,9 = 10,53 км2 «в среднем» находится два банкомата.
Если разместить один из них в центре круга радиусом 1,84 км, то другие банкоматы «в среднем» окажутся за пределами этого круга…
Существуют и другие модели, приводящие к другим ответам :)

Данные по плотности населения и размере страны, видимо, не оказывают влияния на решение этой задачи.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#22

17.08.2018 10:53:23

Цитата
atomska написал:
Нужно посчитать среднее расстояние от одного банкомата до другого.

У меня получилось 2,294157339 км. Правда, не понял, причём тут плотность населения.

Прикрепленные файлы

  • Расстояние между банкоматами.xlsx (9.36 КБ)

 

Мартын

Пользователь

Сообщений: 282
Регистрация: 22.12.2016

#23

17.08.2018 11:26:37

Цитата
Андрей VG написал:
У меня получилось 2,294157339 км

Это для геометрически квадратной страны с банкоматами в узлах сетки (значит куча «шайтан-машинок» стоит на границе страны :) ).
Вообще-то тут и площадь страны лишняя :) По определению плотности получаем, что в круге, площадью 10 км^2  находится 1,9 банкоматов, значит один банкомат «занимает» площадь 5,263 км^2 (круг, радиусом 1,294 км), значит можно сказать, что среднее растояние между банкоматами (при равномерном распределении)  примерно 1,3 км.
Вроде так как-то.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#24

17.08.2018 12:03:14

Цитата
Мартын написал:
(круг, радиусом 1,294 км), значит можно сказать, что среднее растояние между банкоматами (при равномерном распределении)  примерно 1,3 км.

То есть площади банкоматов пересекаются? Тогда плотность будет больше.

 

Мартын

Пользователь

Сообщений: 282
Регистрация: 22.12.2016

#25

17.08.2018 12:36:24

Цитата
Андрей VG написал:
То есть площади банкоматов пересекаются?

Никоим образом! Банкомат равномерно размазан по всей площади присутствия. По умолчанию плотность вероятности нахождения банкомата в определённой точке есть константа. :)

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#26

17.08.2018 12:51:27

Цитата
Мартын написал:
Банкомат равномерно размазан по всей площади присутствия

С таким же успехом, может быть и сконцентрирован в одной точке. 19 банкоматов стоят в одном месте впритык. на 100 кв. км. будет 19 / 10 = 1,9 банкомата на 10 кв. км. Смотря от чего считать эту вероятность.

 

Мартын

Пользователь

Сообщений: 282
Регистрация: 22.12.2016

#27

17.08.2018 13:05:07

Цитата
Андрей VG написал:
Смотря от чего считать эту вероятность.

Несколько сообщений выше я уже указал, что задание есть бред в данной постановке, поскольку не даны определения некоторых величин. В конечном итоге, если между  двумя банкоматами по прямой всего 1 км, а до любого другого 100 км, то не факт, что это ближайший. Ведь на этом километре может быть непролазное болото, море, гора или враждебное государство :), тогда окажется, что 100 км гораздо «ближе», чем один.

Given a list of geographic coordinate pairs, you can implement the Haversine formula directly in Excel.


The simplest way to use this (or a more accurate, but I think it’s not your case) formula consists into press Alt+F11 to open the VBA Editor, click Insert --> Module and then (copy and) paste e.g. the code kindly suggested by blah238.

Public Function getDistance(latitude1, longitude1, latitude2, longitude2)  
earth_radius = 6371  
Pi = 3.14159265  
deg2rad = Pi / 180  

dLat = deg2rad * (latitude2 - latitude1)  
dLon = deg2rad * (longitude2 - longitude1)  

a = Sin(dLat / 2) * Sin(dLat / 2) + Cos(deg2rad * latitude1) * Cos(deg2rad * latitude2) * Sin(dLon / 2) * Sin(dLon / 2)  
c = 2 * WorksheetFunction.Asin(Sqr(a))  

d = earth_radius * c  

getDistance = d  

End Function

There will be a new custom getDistance function (unit = kilometer) available in your spreadsheet which accepts four parameters, i.e. the two pairs of coordinates, as follow:

getDistance(latitude1, longitude1, latitude2, longitude2)

where latitude1, longitude1, latitude2, longitude2 should be replaced by their relative cell references.

enter image description here

В настоящее время я составляю фиктивную схему базы данных с двумя таблицами: Booking и Waypoint.

  • Booking хранит информацию о бронировании такси.

enter image description here

  • В путевой точке хранятся точки посадки и высадки во время поездки, а также координаты широты. Каждая последовательность — это остановка в пути.

enter image description here

Как мне рассчитать расстояние между разными остановками в каждой поездке (используя данные широты и долготы) в Excel?

Есть ли способ программно определить это в Excel, т.е. чтобы формулу можно было поместить в столбец mileage (таблица Booking), найдите соответствующую последовательность (через bookingId) для этого путешествовать по таблице Waypoint и вернуть результат?

Пример 1:

Путешествие с 2 остановками:

1   1   1   MK4 4FL, 2, Levens Hall Drive, Westcroft, Milton Keynes 52.002529   -0.797623
2   1   2   MK2 2RD, 55, Westfield Road, Bletchley, Milton Keynes   51.992571   -0.72753

4,1 мили согласно Google, запись сделана в столбце mileage в таблице Booking, где id = 1

Пример 2:

Путешествие с 3 остановками:

6   3   1   MK7 7DT, 2, Spearmint Close, Walnut Tree, Milton Keynes 52.017486   -0.690113
7   3   2   MK18 1JL, H S B C, Market Hill, Buckingham              52.000674   -0.987062
8   3   1   MK17 0FE, 1, Maids Close, Mursley, Milton Keynes        52.040622   -0.759417

27,7 миль согласно Google, запись сделана в столбце mileage в таблице Booking, где id = 3

4 ответа

Лучший ответ

До недавнего времени точные карты строились с помощью триангуляции, которая, по сути, является применением теоремы Пифагора. Для расстояния между любой парой координат возьмите квадратный корень из суммы квадрата разницы в координатах x и квадрата разницы в координатах y. Однако координаты x и y должны быть в одних и тех же единицах измерения (например, в милях), что требует факторизации значений широты и долготы. Это может быть сложно, потому что множитель для долготы зависит от широты (прогулка вокруг Северного полюса меньше, чем прогулка вокруг экватора), но в вашем случае фактор 52 o Север должен служить. Исходя из этого, результаты (которые можно проверить здесь) примерно на 20% отличаются от примеров. вы даете (во втором случае с идентификаторами пары 6 и 7 и добавлением этого результата к результату сопряжения идентификаторов 7 и 8).


1

pnuts
28 Авг 2014 в 00:37

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

Точка A: LAT1, LONG1 Точка B: LAT2, LONG2

ACOS (COS (РАДИАНЫ (90-Lat1)) * COS (РАДИАНЫ (90-Lat2)) + SIN (РАДИАНЫ (90-Lat1)) * SIN (РАДИАНЫ (90-lat2)) * COS (РАДИАНЫ (long1-long2) )) * 6371

Отношении


6

JMX
13 Авг 2015 в 03:20

Поскольку вы говорите, что точность не важна, и предполагая, что расстояния небольшие (скажем, менее 1000 миль), вы можете использовать локсодромное расстояние.

Для этого вычислите разницу широты (dlat) и разницу долготы (dlon). Если была вероятность (маловероятная), что вы пересекаете меридиан 180 °, возьмите модуль 360 °, чтобы убедиться, что разница долгот составляет от -180 ° до 180 °. Также вычислите среднюю широту (alat).

Затем вычислите:

distance= 60*sqrt(dlat^2 + (dlon*cos(alat))^2)

Это расстояние выражается в морских милях. Примените преобразования по мере необходимости.

ОБЪЯСНЕНИЕ: здесь используется тот факт, что одна морская миля по определению всегда равна одной угловой минуте широты. Косинус соответствует тому факту, что меридианы становятся ближе друг к другу по мере приближения к полюсам. Остальное — всего лишь применение теоремы Пифагора, которая требует, чтобы соответствующая часть земного шара была плоской, что, конечно, является лишь хорошим приближением для малых расстояний.


1

jsalvata
1 Сен 2014 в 14:01

Все зависит от того, какое расстояние и какая точность вам требуется. Расчеты, основанные на модели «Земля локально плоская», не дадут хороших результатов для больших расстояний, но для коротких расстояний они могут быть приемлемыми. Модели, предполагающие, что Земля является идеальной сферой (например, формула Хаверсина), дают более высокую точность, но они по-прежнему не дают результатов геодезической степени. Дополнительные сведения см. в разделе Геодезические на эллипсоиде. Одно из решений с высокой точностью (доли миллиметра) известно как формулы Винсенти. Для моей реализации Excel VBA посмотрите здесь https://github.com/tdjastrzebski/Vincenty-Excel


1

T. Jastrzębski
8 Окт 2021 в 12:09

Понравилась статья? Поделить с друзьями:
  • Формула для excel для прайс листа
  • Формула для word 2010
  • Формула для word 2007
  • Формула для word 2003
  • Формула для microsoft word