как узнать расстояние по координатам на карте
Как измерить расстояние на карте с помощью градусной сетки?
С помощью карты можно определять расстояние между точками на земной поверхности, но точность таких вычислений невысока.
Ситуация относительно проста, если точки лежат на одном меридиане. Все меридианы имеют одинаковую длину. Можно подсчитать, что одному градусу широты соответствует примерно 111,3 км реальной длины. Поэтому надо найти разницу в долготе между точками и умножить ее на 111,3 км. Например, если точка А находится на северной широте 50°, а Б располагается на северной широте 32°, и при этом у них совпадает долгота, то расстояние между ними составит.
111,3х(50° – 32°) = 111,3х16 = 1780,8 км
Ситуация меняется, когда одна точка имеет северную, а другая – южную широту. В этом случае широты уже надо складывать. Так, если бы точка Б из предыдущего примера располагалась бы на южной широте 32°, то расстояние от А до Б составило бы:
111,3х(50° + 32°) = 111,3х82 = 9126,6 км
Ситуация усложняется, когда точки находятся на разных меридианах, но на одной параллели. Если у обеих точек долгота западная (или, наоборот, восточная), то сначала надо найти разницу их долгот. Если же одна точка имеет восточную, а другая западную долготу, то их надо суммировать. Далее результат надо умножить на длину 1° параллели. Эта длина у параллелей различна и зависит от их широты. Можно воспользоваться таблицей ниже:
Широта параллели | Длина ее дуги величиной в 1° |
---|---|
0° | 111,3 |
5° | 110,9 |
10° | 109,6 |
15° | 107,6 |
20° | 104,6 |
25° | 102,1 |
30° | 96,5 |
35° | 91,3 |
40° | 85,4 |
45° | 78,8 |
50° | 71,7 |
55° | 64,0 |
60° | 55,8 |
65° | 47,2 |
70° | 38,2 |
75° | 28,9 |
80° | 19,4 |
85° | 9,7 |
90° | 0 |
Например, нужно найти расстояние между точками, имеющими координаты:
А – 60° с. ш, 39° з. д.
Б – 60° с. ш, 25° з. д.
Широты у них одинаковы, поэтому смотрим на долготу. Она у обеих точек западная, поэтому надо найти их разницу:
39° – 25° = 14°
Полученный результат надо умножить на длину 1° параллели, широта которой составляет 60°. По табличке определяем, что на широте 60° дуга в 1° имеет длину 55,8 км. Перемножаем два числа:
14°х 55,8 км = 781,2 км
Список использованных источников
Расчет расстояний между городами по их координатам
Расчет расстояний между точками по их координатам на плоскости элементарен, на поверхности Земли — немного посложнее: мы рассмотрим измерение расстояния и начального азимута между точками без проекционных преобразований.
Для начала разберемся в терминологии.
Введение
Длина дуги большого круга – кратчайшее расстояние между любыми двумя точками находящимися на поверхности сферы, измеренное вдоль линии соединяющей эти две точки (такая линия носит название ортодромии) и проходящей по поверхности сферы или другой поверхности вращения.
Сферическая геометрия отличается от обычной Эвклидовой и уравнения расстояния также принимают другую форму. В Эвклидовой геометрии, кратчайшее расстояние между двумя точками – прямая линия. На сфере, прямых линий не бывает. Эти линии на сфере являются частью больших кругов – окружностей, центры которых совпадают с центром сферы.
Начальный азимут — азимут, взяв который при начале движения из точки А, следуя по большому кругу на кратчайшее расстояние до точки B, конечной точкой будет точка B. При движении из точки A в точку B по линии большого круга азимут из текущего положения на конечную точку B постоянно меняется. Начальный азимут отличен от постоянного, следуя которому, азимут из текущей точки на конечную не меняется, но маршрут следования не является кратчайшим расстоянием между двумя точками.
Через любые две точки на поверхности сферы, если они не прямо противоположны друг другу (то есть не являются антиподами), можно провести уникальный большой круг. Две точки, разделяют большой круг на две дуги. Длина короткой дуги – кратчайшее расстояние между двумя точками. Между двумя точками-антиподами можно провести бесконечное количество больших кругов, но расстояние между ними будет одинаково на любом круге и равно половине окружности круга, или π*R, где R – радиус сферы.
На плоскости (в прямоугольной системе координат), большие круги и их фрагменты, как было упомянуто выше, представляют собой дуги во всех проекциях, кроме гномонической, где большие круги — прямые линии. На практике это означает, что самолеты и другой авиатранспорт всегда использует маршрут минимального расстояния между точками для экономии топлива, то есть полет осуществляется по расстоянию большого круга, на плоскости это выглядит как дуга.
Форма Земли может быть описана как сфера, поэтому уравнения для вычисления расстояний на большом круге важны для вычисления кратчайшего расстояния между точками на поверхности Земли и часто используются в навигации.
Вычисление расстояния этим методом более эффективно и во многих случаях более точно, чем вычисление его для спроектированных координат (в прямоугольных системах координат), поскольку, во-первых, для этого не надо переводить географические координаты в прямоугольную систему координат (осуществлять проекционные преобразования) и, во-вторых, многие проекции, если неправильно выбраны, могу привести к значительным искажениям длин в силу особенностей проекционных искажений.
Известно, что более точно описывает форму Земли не сфера, а эллипсоид, однако в данной статье рассматривается вычисление расстояний именно на сфере, для вычислений используется сфера радиусом 6372795 метров, что может привести к ошибке вычисления расстояний порядка 0.5%.
Формулы
Существует три способа расчета сферического расстояния большого круга.
1. Сферическая теорема косинусов
В случае маленьких расстояний и небольшой разрядности вычисления (количество знаков после запятой), использование формулы может приводить к значительным ошибкам связанным с округлением.
φ1, λ1; φ2, λ2 — широта и долгота двух точек в радианах
Δλ — разница координат по долготе
Δδ — угловая разница
Для перевода углового расстояния в метрическое, нужно угловую разницу умножить на радиус Земли (6372795 метров), единицы конечного расстояния будут равны единицам, в которых выражен радиус (в данном случае — метры).
2. Формула гаверсинусов
Используется, чтобы избежать проблем с небольшими расстояниями.
3. Модификация для антиподов
Предыдущая формула также подвержена проблеме точек-антиподов, чтобы ее решить используется следующая ее модификация.
Как вычислить расстояние между координатами gps
Содержание статьи
Что такое координаты GPS
С помощью координат определяют местоположение объекта на земном шаре. Координаты обозначаются в градусах по широте и долготе. Широты отсчитываются от линии экватора по обеим сторонам. В Северном полушарии широты положительные, в Южном полушарии – отрицательные. Долгота отсчитывается от начального меридиана либо на восток, либо на запад, соответственно получается либо восточная долгота, либо западная.
Согласно общепринятому положению, за начальный меридиан принят меридиан, который проходит через старую Гринвичскую обсерваторию в Гринвиче. Географические координаты местоположения можно получить с помощью GPS-навигатора. Этот прибор получает сигналы спутниковой системы позиционирования в системе координат WGS-84, единой для всего мира.
Модели навигаторов различаются по производителям, функционалу и интерфейсу. В настоящее время встроенные GPS-навигаторы имеются и в некоторых моделях сотовых телефонов. Но любая модель может записать и сохранить координаты точки.
Расстояние между координатами GPS
Для решения практических и теоретических задач в некоторых отраслях производства необходимо уметь определять расстояния между точками по их координатам. Для этого можно использовать несколько способов. Каноническая форма представления географических координат: градусы, минуты, секунды.
Следующий способ более трудоемкий, но и более наглядный. Необходимо воспользоваться любой доступной картографической или навигационной программой. К программам, в которых можно создать точки по координатам и измерить расстояния между ними, относятся следующие приложения: BaseCamp (современный аналог программы MapSource), «Google Планета Земля», «SAS.Планета».
Все вышеперечисленные программы доступны для любого пользователя сети. К примеру, для расчета расстояния между двумя координатами в программе «Google Планета Земля» необходимо создать две метки с указанием координат первой точки и второй точки. Затем при помощи инструмента «Линейка» нужно соединить линией первую и вторую метки, программа автоматически выдаст результат промера и покажет путь на спутниковом снимке Земли.
В случае с примером, приведенным выше, программа «Google Планета Земля» выдала результат – протяженность расстояния между точкой №1 и точкой №2 составляет 3 817 353 м.
Как самому подсчитать расстояние в километрах по координатам долготы и широты?
Приходит запрос с клиента с его данными gps(android,ios) и делаю запрос в mysql чтобы выбрать ближайший к нему необходимый мне объект(там хранится как раз объект долгота широта)
То есть от долготы объекта отнимаю по модулю долготу юзере и тоже самое с широтой
и так итераций для каждого из объектов
затем
usort($ArrReadyToSort, «cmp»);
сортирую и беру нулевой элемент, в данном случае по результату сортировки это ближайший, так вот
в итоге самый ближайший это ассоциативный массив с коэфициентом
этого действия
и два других элемента это точки пользователя и точки вот этого ближайшего объекта, нужно либо как то коэфициент перевести в километры( в идеале) либо curl в google api и получить расстояние отдав точки либо на клиент вернуть и с него сделать зарпос в api(что ваще не быстро)
поэтому вопрос в том как имея ближайший объект к пользователю, точки пользователя и объекта и коэфициент выше найти расстояние в км/м/хоть в чем то
SQL запрос для нахождения ближайших точек с отображением дистанции до каждой. Под MySQL.
PHPGeo — простая библиотека для измерения расстояния между двумя координатами с высокой точностью. Она использует формулу Гаверсинуса и Винсента для вычисления расстояния. Вы можете интегрировать ее с любым приложением, связанным с картами или местоположениями.
Доброго времени суток, уважаемые! )
У меня вот похожая задачка, но не могу сообразить как применить данную формулу в MySQL.
Мне нужно по списку координат вычислить общее пройденное расстояние желательно в км, или метрах за заданный отрезок времени..
Кто то может мне помочь сформировать MySQL запрос чтобы эта формула обработала координаты и выдала общее суммарное расстояние?
Далее вызываем эту функцию и делаем суммирование пройденного пути:
Вычисляем ближайшие объекты по координатам
Я разрабатывал один проект по недвижимости и появилась задача показывать объекты расположенные в радиусе 20 км с просматриваемым. Т.е. у нас есть объект, в нашем случае это поселок, и нужно отображать находящиеся рядом поселки из нашей базы данных в радиусе 20 км, при этом имея только координаты их расположения.
Исследование
Итак для решения задачи началось «гугление». И первое что было нагуглено это алгоритм расчета расстояний между двумя точками на шаре, статья уходила в Wikipedia. Статья конечно интересное, но как она поможет в моем деле!? Как выяснилось от нее будет толк, но не сразу. Смысл в том, что просчет расстояний по координатам хорош, но как делать выборку из базы и рассчитывать координаты «на ходу»!? Вероятно данным способом никак. Конечно, решение в лоб было каким то образом просчитать насколько можно сдвинуться от координаты чтобы получить нужное расстояние и запросить через какой-нибудь SQL BETWEEN.
Снова гуглим и нагугливаем ВОПРОС на Хабр Q&A. В лучшем ответе решение есть, но оно указывает, что у нас длина одного градуса в километрах равно 111 км, но это далеко не всегда так. Отсюда было понятно, что решение слишком не точное. Читаем дальше и там некий @alex40 предлагает решение как раз с between но выбирать по квадрату. Суть его решения заключается в том, чтобы взять диапазон координат по квадрату а не по окружности и запросить выборку как раз с оператором BETWEEN. И глядя на элегантность этого решения, я понял, что надо делать как то так, но оставался вопрос, что квадрат вносит слишком большую неточность.
Взять изначальную точку координат, и прибавить к ней число градусов соответствующее расстоянию, необходимому для выборки.
Если соединить эти точки, на которые мы прибавили изначальную координату получится квадрат (простите не ровно нарисовал).
Далее с помощью все той же википедии я открыл для себя несколько формул, и одна из них прямо то что нужно. Это формула вычисления длины градуса. Помните в начале я говорил, что 111 км. это слишком абстрактно из первого решения в вопросе. Так вот, эта формула позволяет вычислять длину градуса непосредственно на конкретной меридиане или параллели, нужно только знать радиус нашего шара. Там же на странице википедии есть предварительно рассчитанные данные, по которым можно будет проверить свою формулу
Расчеты
Приступаем к расчетам. Из открытых источников нам известно, что:
Средний радиус Земли R = 6371210 м.
Экваториальный радиус Земли RЭ = 6378,245 м.
Полярный радиус Земли RП = 6356,830 м.
Я для расчетов взял средний радиус. Естественно нужно помнить, что земля все-таки не идеальная сфера, поэтому погрешность есть и в этих расчетах, но для нашей задачи это допустимая погрешность.
Я написал небольшой код для проверки вычислений, и для того, чтобы я мог взять числа и проверить их на реальных данных.
В коде я сразу установил константу расстояния, радиуса земли и принял решение все считать в метрах, поскольку данные я нашел в метрах и лень было разделить их на 1000, да и в метрах казалось, что точность немного выше, чем в километрах с округлением.
Суть этого кода в следующем. Мы не забываем перевести градусы координат в радианы, поскольку формула из википедии рассчитана на радианы. Мы вычисляем дельту ширины и долготы одинаково по одной и той же формуле, поскольку мы условились что у нас идеальный шар и эта погрешность нам допустима. С помощью формулы мы узнаем сколько градусов у нас в одном километре, а дальше простая пропорция.
Если 1 градус, соответствует 63046.689652997775 метров (для широты вычисленной из координаты), то 20000 метров соответсвует X. Дальше, как в школе учили, наискосок умножаем на оставшееся делим. И так как там у нас получается умножение на 1, то это действие можно упустить и записать как `DISTANCE / deltaLat`. Тоже самое проделываем для координаты долготы.
На этих конкретных координатах получаются числа 0.31722522007226484 и 0.22583381380662185. По сути это и есть числа, готовые прибавляться к координатам, чтобы получить тот самый заветный квадрат.
Теперь мы можем добавить эти числа в SQL запрос, чтобы посмотреть, что за выборка у нас получится:
Ну и в моей выборке оказалось 7 объектов. Конечно я взял эту выборку и проверил координаты с помощью линейки на Яндекс Картах. В моем случае все попали в радиус обозначенных 20км. Но мы же помним, что взяли квадрат, а не окружность для вычисления?! Я там даже схему нарисовал в начале, что за квадрат. Итак, если сделать окружность, внутри этого квадрата, она как раз будет радиусом примерно те же 20 км.
Задача решена. Алгоритм придуман. Осталось упаковать это в «красивый» и «чистый» код, чтобы все было по феншую. Надеюсь статья была полезной, потому что когда я искал решения задачи, я наткнулся на множество формул, на множество идей, но не нашел места, где это было бы собрано вот так, как попытался собрать я в рамках данной статьи.
Ссылки
1. Изменил картинку с ошибочным радиусом и описание высоты квадрата