В этом учебном материале по Excel мы рассмотрим примеры того, как рассчитать расстояние между двумя точками на координатной плоскости.
Основная формула
=КОРЕНЬ((x2—x1)^2+(y2—y1)^2) |
Описание
Чтобы вычислить длину отрезка по координатам двух точек на линии, вы можете использовать формулу расстояния, адаптированную для синтаксиса формул Excel. В показанном примере формула в G5, имеет следующий вид:
=КОРЕНЬ((D5—B5)^2+(E5—C5)^2) |
где координаты двух точек указаны в столбцах с B по E.
Пояснение
Длину линии можно рассчитать по формуле расстояния, которая выглядит так:
Расстояние — это квадратный корень из изменения x
в квадрате плюс изменение y
в квадрате, где две точки даны в форме (x1, y1) и (x2, y2).
Формула расстояния — это пример примененной теоремы Пифагора, где изменение x
и изменение y
соответствуют двум сторонам прямоугольного треугольника, а гипотенуза — вычисляемому расстоянию.
В Excel формулу расстояния можно записать с помощью оператора экспоненты ^
и функции КОРЕНЬ следующим образом:
=КОРЕНЬ((D5—B5)^2+(E5—C5)^2) |
В соответствии с порядком операций Excel, изменение x
и изменение y
вычисляется, затем возводится в квадрат, и два результата складываются вместе и передаются в функцию КОРЕНЬ, которая возвращает квадратный корень из суммы в качестве окончательного результата:
=КОРЕНЬ((D5—B5)^2+(E5—C5)^2) =КОРЕНЬ((6)^2+(8)^2) =КОРЕНЬ(36+64) =КОРЕНЬ(100) =10 |
Функцию СТЕПЕНЬ также можно использовать вместо оператора экспоненты ^
следующим образом:
=КОРЕНЬ(СТЕПЕНЬ(D5—B5;2)+СТЕПЕНЬ(E5—C5;2)) |
с тем же результатом.
I’m currently drawing up a mock database schema with two tables: Booking
and Waypoint
.
- Booking stores the taxi booking information.
- 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.
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 |
Здравствуйте. Подскажите, пожалуйста, как рассчитать МИНИМАЛЬНОЕ расстояние между точками если на вход ей подаются координаты точек,
…. Изменено: mk2gt — 22.03.2016 18:24:26 |
|||||||||||||||||||||||||||||||||
Udik Пользователь Сообщений: 372 excel 2016х64 Контакты в профиле |
Количество точек в каких пределах, точки на плоскости? Арфы — нет, возьмите бубен. |
mk2gt Пользователь Сообщений: 7 |
нет координаты заданы в числовом формате:
нужно найти минимальное расстояние между объектами от 1 до 10 …N =2-3тыс, точки на земле двумяточками и вот еще Изменено: mk2gt — 22.03.2016 18:43:16 |
||||||||||||||||||||||||||||||||||||||||||||
Udik Пользователь Сообщений: 372 excel 2016х64 Контакты в профиле |
Ну если точек в пределах пары тысяч, можно тупо в лоб, для каждой точки вычисляем расстояние до всех других, находим минимальное заносим в массив. Потом ищем минимум в массиве. А потом можно алгоритм всяко оптимизировать, например берем квадрат 10 на 10 и вычисляем расстояния до всех точек, Арфы — нет, возьмите бубен. |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
Доброе время суток |
MCH Пользователь Сообщений: 3875 |
Какова конечная цель? http://www.excelworld.ru/forum/3-12090-1 или поиск кратчайшего пути от одной точки до другой алгоритмом Дейкстры: http://www.excelworld.ru/forum/3-6656-1 |
mk2gt Пользователь Сообщений: 7 |
#7 23.03.2016 10:57:19
нужно получить массив данных для каждой точки А ближайшую точку В, имея списки координат точек А и В для которых выполняется условие расстояние от А и В менне Х метров
спасибо, хочется получить такое для всех, не для пары ближайших точек, например в 2х колонках: номер точки и расстояние)
как-то совсем не хочется, можно по карте с линейкой тоже сделать)) Изменено: mk2gt — 23.03.2016 13:11:06 |
||||||
Михаил Пользователь Сообщений: 7 |
поменял, по задачке есть еще желающие помочь |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
#9 23.03.2016 13:08:20
Это утверждение? ) |
||
MCH Пользователь Сообщений: 3875 |
#10 23.03.2016 13:38:59
Можно предложить следующее решение |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#11 23.03.2016 18:59:46
А вы бы примерчик то привели бы что есть — как должно, а то только требовать — догадайтесь как надо Прикрепленные файлы
Изменено: Андрей VG — 23.03.2016 19:18:56 |
||
Михаил Пользователь Сообщений: 7 |
нашел решение , но результат не похож на правду |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
Михаил, а чем предложенный мной вариант не подошёл? |
Михаил Пользователь Сообщений: 7 |
#14 19.04.2016 14:49:08
Изменено: Михаил — 19.04.2016 16:10:17 |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#15 19.04.2016 16:27:31 Доброе время суток
То есть вы задумались об алгоритме на VBA? Тут ничего особо сложного. Разбиваете пространство между минимумом и максимом координат на равные прямоугольные области (собственно — двумерный массив). При разбиении желательно чтобы каждая точка была в своём прямоугольнике — мало достижимый вариант, но можно разбить и по статистике координат. |
||
MCH Пользователь Сообщений: 3875 |
#16 19.04.2016 18:44:12 Даже для 3000 точек попарное сравнение и вычисление расстояний занимает менее минуты (у меня считается 8 секунд):
а если сегментировать координатную плоскость, как предложил Андрей VG, тем самым ограничив количество сравниваемых друг с другом точек, то вычисления займут еще меньше времени (правда кода будет больше). Для решения нужно понять конечную цель задачи, что в итоге то нужно от сравнения координат? Изменено: MCH — 20.04.2016 07:16:21 |
||
atomska Пользователь Сообщений: 1 |
Здравствуйте! Подскажите реальная ли задача? Нужно посчитать среднее расстояние от одного банкомата до другого. Вводные: Площадь Страны 17 125 191 км2 Плотность банкоматов на 10 км2 = 1,9 Плотность населения на 1 км2 = 8,56 Заранее спасибо! Может какие еще данные нужны, или вообще другие |
Мартын Пользователь Сообщений: 282 |
#18 17.08.2018 10:31:39
Извините, но это есть бред. Среднее расстояние от одного объекта до другого равно самому этому расстоянию. |
||
Мартын Пользователь Сообщений: 282 |
Вам нужен либо минимальный радиус окружности, в которой находится один банкомат, либо среднее (а лучше медианное) значение таких радиусов, либо что-то вроде этого. |
StoTisteg Пользователь Сообщений: 441 |
Мартын, даже если не придираться к словам, непонятно, при чём тут Эксель. Это обычная школьная задача по арифметике. |
IKor Пользователь Сообщений: 1167 |
2 atomska Если указанная величина плотности размещения банкоматов одинакова для всей страны, то на площади 2,0/1,9 = 10,53 км2 «в среднем» находится два банкомата. Данные по плотности населения и размере страны, видимо, не оказывают влияния на решение этой задачи. |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#22 17.08.2018 10:53:23
У меня получилось 2,294157339 км. Правда, не понял, причём тут плотность населения. Прикрепленные файлы
|
||
Мартын Пользователь Сообщений: 282 |
#23 17.08.2018 11:26:37
Это для геометрически квадратной страны с банкоматами в узлах сетки (значит куча «шайтан-машинок» стоит на границе страны ). |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#24 17.08.2018 12:03:14
То есть площади банкоматов пересекаются? Тогда плотность будет больше. |
||
Мартын Пользователь Сообщений: 282 |
#25 17.08.2018 12:36:24
Никоим образом! Банкомат равномерно размазан по всей площади присутствия. По умолчанию плотность вероятности нахождения банкомата в определённой точке есть константа. |
||
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#26 17.08.2018 12:51:27
С таким же успехом, может быть и сконцентрирован в одной точке. 19 банкоматов стоят в одном месте впритык. на 100 кв. км. будет 19 / 10 = 1,9 банкомата на 10 кв. км. Смотря от чего считать эту вероятность. |
||
Мартын Пользователь Сообщений: 282 |
#27 17.08.2018 13:05:07
Несколько сообщений выше я уже указал, что задание есть бред в данной постановке, поскольку не даны определения некоторых величин. В конечном итоге, если между двумя банкоматами по прямой всего 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.
В настоящее время я составляю фиктивную схему базы данных с двумя таблицами: Booking
и Waypoint
.
- Booking хранит информацию о бронировании такси.
- В путевой точке хранятся точки посадки и высадки во время поездки, а также координаты широты. Каждая последовательность — это остановка в пути.
Как мне рассчитать расстояние между разными остановками в каждой поездке (используя данные широты и долготы) в 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