Расчет расстояний между координатами 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))

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

 

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

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

В Excel это выглядит немного не так: обычно диапазон таблицы и ссылки на таблицу совпадают :)

Задачу можно решить одной формулой. Для этого нужно задать диапазоны и объяснить табличному процессору, что делать с данными.

В Excel, кроме обычных формул, есть понятие «формула массива» — формула, ввод которой должен быть обязательно завершен нажатием Ctrl+Shift+Enter.
Формулы массива не следует сравнивать со всеми формулами, обрабатывающими массивы данных. Это разные понятия.

Формула массива для строки 2 (получить минимальное расстояние):

=МИН(ACOS(SIN(C2)*SIN($F$2:$F$3)+COS(C2)*COS($F$2:$F$3)*COS(B2-$E$2:$E$3))*6371210)

Находясь в строке формул, нажать «комбинацию из трех пальцев», указанную ранее. Формула должна заключаться в фигурные скобки — {}. Все. Готово.

После ввода формулы ячейку можно копировать по строкам (протянуть вниз).

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

Получить имя остановки:

=ИНДЕКС($D$2:$D$3;ПОИСКПОЗ(МИН(ACOS(SIN(C2)*SIN($F$2:$F$3)+COS(C2)*COS($F$2:$F$3)*COS(B2-$E$2:$E$3))*6371210);ACOS(SIN(C2)*SIN($F$2:$F$3)+COS(C2)*COS($F$2:$F$3)*COS(B2-$E$2:$E$3))*6371210;))

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

Формулы массива можно облегчить: добавить дополнительные столбцы (строки) с формулами, в которых будет производиться часть вычислений. Это намного упрощает вычисления.


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

В статье

Поиск решения MS EXCEL (6.3). Задача коммивояжера (полный граф, линейная модель)

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

Задача

Имеется 11 городов, координаты которых известны. Маршруты проложены только между некоторыми городами (неполный граф). Найти кратчайший путь между 2-мя заданными городами. Построить Линейную модель.

Создание модели

Так как даны координаты городов, то сначала найдем расстояния между ними (см.

файл примера

).

Расстояния рассчитаем с помощью формулы: =

КОРЕНЬ((ИНДЕКС($C$7:$D$17;ПОИСКПОЗ($A30;$A$7:$A$17;0);1)-ИНДЕКС($C$7:$D$17;ПОИСКПОЗ(B$29;$A$7:$A$17;0);1))^2 +(ИНДЕКС($C$7:$D$17;ПОИСКПОЗ($A30;$A$7:$A$17;0);2)-ИНДЕКС($C$7:$D$17;ПОИСКПОЗ(B$29;$A$7:$A$17;0);2))^2)

Теперь создадим линейную модель для решения задачи с помощью

Поиска решения

.


Совет

: Вводная статья про

Поиск решения

в MS EXCEL 2010

находится здесь

.

Обратите внимание, что не все города соединены сообщением (столбцы J:M), например нет прямого маршрута между Москвой и Парижем. Также для модели принципиально направление маршрута: Москва — Лондон, это не тоже самое, что Лондон-Москва (при необходимости список маршрутов можно расширить).


Переменные (выделено зеленым)

. В качестве переменных модели следует взять номера маршрутов между городами: если маршрут включен в кратчайший путь, то переменная =1, если нет, то =0.

Ограничения (выделено синим)

. Необходимо, чтобы из каждого города, в котором побывал путешественник, был входящий и выходящий маршрут. Так как входящий маршрут обозначается 1, а исходящий -1, то их сумма, равная 0, будет означать, что в город вошли и вышли (включен в кратчайший путь). Исключение составляют город – начальная точка путешествия (сумма =-1) и город – конечная точка (сумма =1). Изменяя ограничение в синем столбце, можно задавать начальные и конечные пункты путешествия.

Целевая функция (выделено красным)

.

Длина маршрута должна быть минимальной.


Примечание

: для удобства настройки

Поиска решения

используются

именованные диапазоны

.

Выберите Линейный метод поиска решения, т.к. созданная модель является линейной.


Найденное

Решение


Поиск решения

гарантировано найдет самый короткий маршрут, т.к. модель линейная.

Изменив начальный и конечный пункт путешествия, и перезапустив

Поиск решения

, получим другой маршрут.

Будьте внимательны, не все пары конечных и начальных пунктов допустимы. Например, задав путешествие из Москвы в Копенгаген,

Поиск решения

не найдет маршрут, т.к. для этого потребуется «двигаться назад», а в маршрутах между городами обратные пути не прописаны (маршруты, конечно, можно добавить в столбцы J:M, но не забудьте изменить и другие формулы).

Like this post? Please share to your friends:
  • Расчет процентов по кредиту в excel формулы
  • Расчет разности в excel
  • Расчет процентов по кредиту excel таблица скачать
  • Расчет разницы дат в excel
  • Расчет процентов по ипотеке формула в excel