Как перевести координаты в метры
Переход между плоскими прямоугольными координатами Гаусса и географическими координатами и обратно
Страница содержит онлайн калькуляторы для перехода от географических координат к плоским прямоугольным координатам Гаусса и обратно (используются формулы для референц-эллипсоида Красовского).
Плоские прямоугольные координаты Гаусса х и у связаны с географическими координатами φ (широта) и λ (долгота) точек земной поверхности довольно сложными формулами (ключами перехода). Ниже представлены два калькулятора, которые осуществляют переход от одних координат к другим.
Данные калькуляторы используют ключи перехода, рассчитанные для референц-эллипсоида Красовского, или системы координат СК-42. Использование СК-42 допускается только до 1 января 2021 года, так что эти калькуляторы представляют, скорее, исторический интерес.
Переход от географических координат к плоским прямоугольным координатам Гаусса-Крюгера
Переход от плоских прямоугольных координат Гаусса-Крюгера к географическим координатам
Зональная система плоских прямоугольных координат Гаусса
В топографии и геодезии широко распространено использование прямоугольных координат. Просто потому, что километрами и метрами пользоваться проще чем градусами, минутами и секундами. В качестве системы плоских прямоугольных координат обычно используют систему плоских прямоугольных координат Гаусса, основанную на проекции Гаусса-Крюгера (в 1825-1830 годах Гаусс разработал поперечно-цилиндрическую конформную (равноугольную) проекцию эллипсоида на плоскость, а Крюгер в 1912 году вывел для нее рабочие формулы вычислений).
Как преобразовать широту или долготу в метры?
Если у меня есть чтение широты или долготы в стандартном формате NMEA, есть ли простой способ / формула для преобразования этого чтения в метры, которые я могу реализовать в Java (J9)?
изменить: ОК, кажется, то, что я хочу сделать, невозможно легко, однако, то, что я действительно хочу сделать, это:
скажем, у меня есть lat и long точки пути и lat и long пользователя есть простой способ сравнить их, чтобы решить, когда сказать пользователю, что они находятся в пределах достаточно близкое расстояние точки пути? Я понимаю, что разумный предмет, но это легко сделать или все еще слишком математически?
15 ответов
вот функция javascript:
формула гаверсинуса определяет большого круга расстояние между двумя точками на сфере с учетом их долгот и широт.
для аппроксимации коротких расстояний между двумя координатами я использовал формулы из http://en.wikipedia.org/wiki/Lat-lon:
в коде ниже я оставил исходные цифры, чтобы показать их отношение к формуле из Википедии.
в записи Википедии говорится, что расстояние calcs находится в пределах 0,6 м для 100 км в продольном направлении и 1 см для 100 км в широтном направлении, но я не проверил это, как нигде рядом с этим точность хороша для моего использования.
учитывая, что вы ищете простую формулу, это, вероятно, самый простой способ сделать это, предполагая, что Земля является сферой периметра 40075 км.
длина в метрах 1° широты = всегда 111,32 км
длина в метрах 1 ° долготы = 40075 км * cos (широта) / 360
широты и долготы указывают точки, а не расстояния, поэтому ваш вопрос несколько бессмыслен. Если вы спрашиваете о кратчайшем расстоянии между двумя (lat, lon) точками, см. эта статья в Википедии на расстояниях большого круга.
есть много инструментов, которые сделают это легко. См.monjardin это для получения более подробной информации о том, что участие.
однако сделать это не обязательно сложно. Похоже, вы используете Java, поэтому я бы рекомендовал посмотреть что-то вроде GDAL. Он предоставляет Java-оболочки для их подпрограмм, и у них есть все инструменты, необходимые для преобразования из Lat /Lon (географические координаты) в UTM (проекционная система координат) или некоторые другие разумная проекция карты.
UTM приятно, потому что это метры, так легко работать. Тем не менее, вам нужно будет получить соответствующий зона UTM для того, чтобы сделать хорошую работу. Есть несколько простых кодов, доступных через googling, чтобы найти подходящую зону для пары lat/long.
Земля является раздражающе неправильной поверхностью, поэтому нет простой формулы, чтобы сделать это точно. Вы должны жить с приблизительной моделью Земли и проецировать на нее свои координаты. Модель, которую я обычно вижу, используется для этого WGS 84. Это то, что GPS-устройства обычно используют для решения одной и той же проблемы.
NOAA имеет некоторое программное обеспечение, которое вы можете скачать, чтобы помочь с этим на сайте.
GIS-LAB
Географические информационные системы и дистанционное зондирование
Перевод долготы-широты в метры и подходы по работе в MapInfo
Описывается решение задачи перевода координат заданных в градусах в координаты в метрах. Приемы статьи могут быть использованы для пересчета координат между различными проекциями, если те могут быть заданы стандартными средствами ГИС MapInfo.
Содержание
[править] Вступление
Цель данной статьи:
Статья написана по мотивам обсуждения на форуме.
[править] Постановка задачи
Имеется набор данных, состоящих из координат точек в формате долгота/широта/высота + атрибуты. В рассматриваемом случае атрибуты — время создания точки и некоторые специфические параметры, связанные с работой технического средства. Данные даны в виде плоской таблицы или в виде приводимом к плоской таблице. В нашем случае в формате Excel. Требуется произвести вычисления расстояния между соседними точками и сохранить результат так, что бы его можно было использовать в Excel.
[править] Общее описание алгоритмов
Для решения задачи можно использовать:
[править] Почему MapInfo + Excel?
В этой статье будет рассмотрен набор манипуляций с данными с использованием ГИС MapInfo. С последующей обработкой результатов в Excel.
Причина выбора этого ПО:
[править] Основные приемы использованные в работе
[править] Порядок обработки данных
1. Открываем таблицу Excel. Приводим ее к виду набора однородных данных – заголовки должны быть у всех столбцов, имеющих данные, и располагаться в первой строке. Столбцы без данных должны быть удалены. 2. Сохраним файл с простым именем, например D20120503.xls. С вот таким заголовком:
| Время | Высота над УМ | Датчик скорости | Координата-1 | Координата-2 | Обороты двигателя | Конечная |
|---|---|---|---|---|---|---|
| 2012-05-03 07:31:40 | 521 | 18 | 51.822845 | 107.679138 | 1482 | мелькомбинат |
| 2012-05-03 07:32:27 | 525 | 22 | 51.81982 | 107.682434 | 1208.4 |
3. Загрузим данные в MapInfo (галочку – создать копию ставим обязательно):
Примечание: для обработки данных использована ГИС MapInfo версии 9.5, однако описанные алгоритмы работают в версиях от 7.8 (а должны и ранее). Исключения могут быть связаны только с форматом файла Excel, в котором созданы исходные данные, и который умеете читать «напрямую» программа Мапифно.
4. Используем заголовки для наименования столбцов:
5. Подтвердим выбранные самой MapInfo типы данных:
6. Откроем таблицу для просмотра в виде списка, т.к. пока у нас есть только атрибутика, но нет геометрии:
7. Выполним фильтрацию данных, т.к. в некоторых строках есть некорректные данные, т.е. точки с отрицательной высотой над уровнем моря, отрицательными координатами или отрицательной скоростью:
Такие данные не позволили бы нам произвести расчет в Excel даже если бы мы использовали функции для пересчета сферических координат, видимо полученных от устройства GPS, в плановые метровые. Для этого создадим и выполним SQL запрос:
8. Получим вот такой результат:
9. Удалим из таблицы все строки, содержащие некорректные данные, нажав Del. После этого сохраним таблицу и упакуем ее.
10. Теперь вычислим несколько параметров наших данных. Опять же через SQL запрос:
11. И сразу еще один запрос на данных предыдущего запроса:
12. В результат получим:
Все эти данные нам понадобятся, что бы создать геоинформацию к нашей Excel таблице.
На основании выполненных вычислений, мы получили пределы, в которые вписываются все координаты измерений. Используя явное указание границ (см. ниже) при задании системы координат (проекции) таблицы MapInfo, мы существенно повышаем точность измерения. Вычислив среднее значение «Координата_2», мы получили возможность выбрать центральный меридиан проекции «Поперечная Меркатора» (или проекция «Гаусса-Крюгера»). Это сделано для того, что бы уменьшить различие между спроецированными расстояниями (переведенными на плоскость спроецированной поверхности) и расстояниями, вычисленными с учетом кривизны Земли, т.к. в дальнейшем при переходе от координат в градусах к координатам в метрах, для вычисления расстояний между точками мы будем использовать обычную формулу Пифагора для 3-х мерного пространства.
13. Откроем окно «Управление параметрами и полями таблицы» в MapInfo добавим два поля для плановых (плоских, метровых ) координат – X,Y:
15. В окне MapBasic должны появиться две команды:
Alter Table «D20120503» ( add X Float,Y Float ) Interactive Create Map For D20120503 CoordSys Earth Projection 1, 104
16. Для нас важна вторая строка, которая и создает систему координат (СК) таблицы. Нас она не устраивает, т.к. создает СК, которая охватывает весь мир, что плохо для точности наших данных. Обсуждение проблемы смотрим вот здесь Изменим строку команды, что она приобрела вот такой вид – добавим ей границы координат, полученные в п.12, с некоторым запасом:
Create Map For D20120503 CoordSys Earth Projection 1, 104 Bounds (107.5, 51.7) (107.8, 52)
После этого вставим эту строку в окно MapBasic, встанем на ее конец (или выделим ее целиком) и нажмем «Ввод». Далее для любой строки команд, необходимость выделения вставленной команды и ее ввода будет подразумеваться.
17. Теперь создадим точки на месте координат:


19. В результате получим вот такую карту:
Смущают уходы в сторону, но это уже вопрос корректности данных. Будем надеяться, что там точки идут в обоих направлениях.
20. Пришло время пересчитать координаты точек. Но для этого надо установить прямоугольную систему координат. Сделаем это на примере проекции UTM. Причем опять с использованием шаблона из стандартных проекций, которые потом подправим «под себя». Для этого сделаем самое простое – установим проекцию окна карты:
21. Выберем самую первую – UTM-1N:
22. В окне карты получится ужас, но выставленные параметры нам нужны только как образец, который мы исправим под свои нужды.
23. В окне MapBasic’а будет выведена следующая команда, соответствующая установке для текущего окна карт выбранной нами проекции:
24. Заменим эту проекцию на нужную нам, взяв новый центральный меридиан из среднего значения координат таблицы (п.13):
Set Map XY Units «m» CoordSys Earth Projection 8, 104, «m», 107.63, 51, 1, 250000, 0 Bounds (0,0) (500000, 500000)
26. Обращаю внимание, что мы в параметрах проекции заменили их практически все – оставив только первые «8, 104, «m»,» (что означает проекция «поперечная Меркатора», на датуме WGS84, единица измерения координат «метры»):
27. Проверим, что наши параметры вернули карте нормальный вид, такой как она имела изначально – дадим команду показать все слои карты в нашем окне:
28. Откроем таблицу в виде списка, что бы видеть результаты вычислений.
Set CoordSys Earth Projection 8, 104, «m», 107.63, 51, 1, 250000, 0 Bounds (0, 0) (500000, 500000)
30. Пришло время вычислить координаты. Для этого используем команду:
Update D20120503 set col8=centroidx(obj),col9=centroidy(obj)
31. COL8 и COL9 – это псевдонимы для 8 и 9 колонки, соответственно. Вместо них обычно используют настоящие названия колонок, но так проще и короче.
32. Наша открытая списком таблица обновится и приобретет вот такой вид:
33. Обязательно сохраним ее.
34. Теперь нам надо вернуть данные в Excel. Проще всего это сделать, сохранив данные в тестовый формат, т.к. экспорта в Excel в MapInfo – нет. По крайней мере, в моей версии.
35. Выберем вот такие параметры экспорта:
36. Сознательно добавим букву «а» к имени, предложенному Mapinfo, т.к. ниже мы загрузим экспорт обратно, а если имя текстового файла совпадет с именем таблицы, MapInfo не даст нам ее открыть.
37. Откроем экспортированную таблицу:
38. Присвоим открытой таблице координатную систему для гео-объектов, используя полученные ранее команды как шаблон:
Create Map For D20120503a CoordSys Earth Projection 8, 104, «m», 107.63, 51, 1, 250000, 0 Bounds (0,0) (500000, 500000)
39. То, что это удалось можно увидеть, добавив новую таблицу в окно карты:
До момента создания пространственной привязки таблица не появляется в списке слоев.
40. Создадим точки и в этой таблице, только изменим их форму и цвет:
42. Максимально приблизим одну из точек, что бы стало заметно различие между старыми (фиолетовыми) и новыми (зелеными) точками:
Видим, что оно составило 4 мм. Это плата за пересчет и округление. На мой взгляд, в большей степени за округление, с которым Mapinfo вывел данные в текстовый файл – всего 2 символа после запятой (точки). Эту точность можно принудительно увеличивать с помощью функции Format$, но это в этом случае не играет большой роли.
43. Все. С MapInfo закончили. Надо возвращаться в Excel. Пункты с 37-го по 42-ой можно опустить. Они были необходимы только для проверки корректности выполненных нами манипуляций с координатными системами.
44. Открываем результат экспорта как текстовый файл в Excel.


45. Получим вот такую таблицу в Excel и добавим в нее две колонки «расстояние» (между соседними точками) и «путь» (сумму расстояний):
46. Заполним ячейки в новых колонках формулой:
e. Теперь «растянем» формулу из ячеек J3:K3 на все оставшееся заполненное пространство листа Excel. Существуют и более правильные способы задания формулы на столбцы, но они слегка длиннее и мудренее, чем просто «взять за угол и растянуть».
47. Мы получили искомый результат 🙂 Все строки содержат расстояние от точки до предшествующей ей, а так же пройденный путь.
48. Сохраним этот результат. Excel сообщит нам, что наш формат не поддерживает все возможности Excel, поэтому для последующее обработки надо сохранить данные в его формат.
49. Теперь, по уму, надо бы построить линию по этим точкам, что бы убедиться, что расстояние мы измерили без погрешности.
50. Для этого воспользуемся программой перевода последовательности точек в полилинию (или полигон):
Или с учетом кривизны Земли:
52. Тут надо помнить, что вычисления в MapInfo производятся только по двумерным координатам при геообъекте, высоту h она считать не умеет и для узлов не хранит. Результат вычислений в Exec = 226 781 m.
53. Если я ничего не перепутал то, то что казалось набором последовательных точек, оказалось набором вершин от разных проходов по одному пути, пройденных в разное время:
Ключевые слова: MapInfo, MapBasic команды, Select SQL, долгота/широта, преобразование координат, пользовательские проекции
Последнее обновление: 2014-05-14 22:08
Дата создания: 09.05.2012
Автор(ы): Борис Фельдман
Перевод долготы-широты в метры и подходы по работе в MapInfo
Описывается решение задачи перевода координат заданных в градусах в координаты в метрах. Приемы статьи могут быть использованы для пересчета координат между различными проекциями, если те могут быть заданы стандартными средствами ГИС MapInfo.
Содержание
Вступление
Цель данной статьи:
Статья написана по мотивам обсуждения на форуме.
Постановка задачи
Имеется набор данных, состоящих из координат точек в формате долгота/широта/высота + атрибуты. В рассматриваемом случае атрибуты — время создания точки и некоторые специфические параметры, связанные с работой технического средства. Данные даны в виде плоской таблицы или в виде приводимом к плоской таблице. В нашем случае в формате Excel. Требуется произвести вычисления расстояния между соседними точками и сохранить результат так, что бы его можно было использовать в Excel.
Общее описание алгоритмов
Для решения задачи можно использовать:
Почему MapInfo + Excel?
В этой статье будет рассмотрен набор манипуляций с данными с использованием ГИС MapInfo. С последующей обработкой результатов в Excel.
Причина выбора этого ПО:
Основные приемы использованные в работе
Порядок обработки данных
1. Открываем таблицу Excel. Приводим ее к виду набора однородных данных – заголовки должны быть у всех столбцов, имеющих данные, и располагаться в первой строке. Столбцы без данных должны быть удалены. 2. Сохраним файл с простым именем, например D20120503.xls. С вот таким заголовком:
| Время | Высота над УМ | Датчик скорости | Координата-1 | Координата-2 | Обороты двигателя | Конечная |
|---|---|---|---|---|---|---|
| 2012-05-03 07:31:40 | 521 | 18 | 51.822845 | 107.679138 | 1482 | мелькомбинат |
| 2012-05-03 07:32:27 | 525 | 22 | 51.81982 | 107.682434 | 1208.4 |
3. Загрузим данные в MapInfo (галочку – создать копию ставим обязательно):
Примечание: для обработки данных использована ГИС MapInfo версии 9.5, однако описанные алгоритмы работают в версиях от 7.8 (а должны и ранее). Исключения могут быть связаны только с форматом файла Excel, в котором созданы исходные данные, и который умеете читать «напрямую» программа Мапифно.
4. Используем заголовки для наименования столбцов:
5. Подтвердим выбранные самой MapInfo типы данных:
6. Откроем таблицу для просмотра в виде списка, т.к. пока у нас есть только атрибутика, но нет геометрии:
7. Выполним фильтрацию данных, т.к. в некоторых строках есть некорректные данные, т.е. точки с отрицательной высотой над уровнем моря, отрицательными координатами или отрицательной скоростью:
Такие данные не позволили бы нам произвести расчет в Excel даже если бы мы использовали функции для пересчета сферических координат, видимо полученных от устройства GPS, в плановые метровые. Для этого создадим и выполним SQL запрос:
8. Получим вот такой результат:
9. Удалим из таблицы все строки, содержащие некорректные данные, нажав Del. После этого сохраним таблицу и упакуем ее.
10. Теперь вычислим несколько параметров наших данных. Опять же через SQL запрос:
11. И сразу еще один запрос на данных предыдущего запроса:
12. В результат получим:
Все эти данные нам понадобятся, что бы создать геоинформацию к нашей Excel таблице.
На основании выполненных вычислений, мы получили пределы, в которые вписываются все координаты измерений. Используя явное указание границ (см. ниже) при задании системы координат (проекции) таблицы MapInfo, мы существенно повышаем точность измерения. Вычислив среднее значение «Координата_2», мы получили возможность выбрать центральный меридиан проекции «Поперечная Меркатора» (или проекция «Гаусса-Крюгера»). Это сделано для того, что бы уменьшить различие между спроецированными расстояниями (переведенными на плоскость спроецированной поверхности) и расстояниями, вычисленными с учетом кривизны Земли, т.к. в дальнейшем при переходе от координат в градусах к координатам в метрах, для вычисления расстояний между точками мы будем использовать обычную формулу Пифагора для 3-х мерного пространства.
13. Откроем окно «Управление параметрами и полями таблицы» в MapInfo добавим два поля для плановых (плоских, метровых ) координат – X,Y:
15. В окне MapBasic должны появиться две команды:
Alter Table «D20120503» ( add X Float,Y Float ) Interactive Create Map For D20120503 CoordSys Earth Projection 1, 104
16. Для нас важна вторая строка, которая и создает систему координат (СК) таблицы. Нас она не устраивает, т.к. создает СК, которая охватывает весь мир, что плохо для точности наших данных. Обсуждение проблемы смотрим вот здесь Изменим строку команды, что она приобрела вот такой вид – добавим ей границы координат, полученные в п.12, с некоторым запасом:
Create Map For D20120503 CoordSys Earth Projection 1, 104 Bounds (107.5, 51.7) (107.8, 52)
После этого вставим эту строку в окно MapBasic, встанем на ее конец (или выделим ее целиком) и нажмем «Ввод». Далее для любой строки команд, необходимость выделения вставленной команды и ее ввода будет подразумеваться.
17. Теперь создадим точки на месте координат:


19. В результате получим вот такую карту:
Смущают уходы в сторону, но это уже вопрос корректности данных. Будем надеяться, что там точки идут в обоих направлениях.
20. Пришло время пересчитать координаты точек. Но для этого надо установить прямоугольную систему координат. Сделаем это на примере проекции UTM. Причем опять с использованием шаблона из стандартных проекций, которые потом подправим «под себя». Для этого сделаем самое простое – установим проекцию окна карты:
21. Выберем самую первую – UTM-1N:
22. В окне карты получится ужас, но выставленные параметры нам нужны только как образец, который мы исправим под свои нужды.
23. В окне MapBasic’а будет выведена следующая команда, соответствующая установке для текущего окна карт выбранной нами проекции:
24. Заменим эту проекцию на нужную нам, взяв новый центральный меридиан из среднего значения координат таблицы (п.13):
Set Map XY Units «m» CoordSys Earth Projection 8, 104, «m», 107.63, 51, 1, 250000, 0 Bounds (0,0) (500000, 500000)
26. Обращаю внимание, что мы в параметрах проекции заменили их практически все – оставив только первые «8, 104, «m»,» (что означает проекция «поперечная Меркатора», на датуме WGS84, единица измерения координат «метры»):
27. Проверим, что наши параметры вернули карте нормальный вид, такой как она имела изначально – дадим команду показать все слои карты в нашем окне:
28. Откроем таблицу в виде списка, что бы видеть результаты вычислений.
Set CoordSys Earth Projection 8, 104, «m», 107.63, 51, 1, 250000, 0 Bounds (0, 0) (500000, 500000)
30. Пришло время вычислить координаты. Для этого используем команду:
Update D20120503 set col8=centroidx(obj),col9=centroidy(obj)
31. COL8 и COL9 – это псевдонимы для 8 и 9 колонки, соответственно. Вместо них обычно используют настоящие названия колонок, но так проще и короче.
32. Наша открытая списком таблица обновится и приобретет вот такой вид:
33. Обязательно сохраним ее.
34. Теперь нам надо вернуть данные в Excel. Проще всего это сделать, сохранив данные в тестовый формат, т.к. экспорта в Excel в MapInfo – нет. По крайней мере, в моей версии.
35. Выберем вот такие параметры экспорта:
36. Сознательно добавим букву «а» к имени, предложенному Mapinfo, т.к. ниже мы загрузим экспорт обратно, а если имя текстового файла совпадет с именем таблицы, MapInfo не даст нам ее открыть.
37. Откроем экспортированную таблицу:
38. Присвоим открытой таблице координатную систему для гео-объектов, используя полученные ранее команды как шаблон:
Create Map For D20120503a CoordSys Earth Projection 8, 104, «m», 107.63, 51, 1, 250000, 0 Bounds (0,0) (500000, 500000)
39. То, что это удалось можно увидеть, добавив новую таблицу в окно карты:
До момента создания пространственной привязки таблица не появляется в списке слоев.
40. Создадим точки и в этой таблице, только изменим их форму и цвет:
42. Максимально приблизим одну из точек, что бы стало заметно различие между старыми (фиолетовыми) и новыми (зелеными) точками:
Видим, что оно составило 4 мм. Это плата за пересчет и округление. На мой взгляд, в большей степени за округление, с которым Mapinfo вывел данные в текстовый файл – всего 2 символа после запятой (точки). Эту точность можно принудительно увеличивать с помощью функции Format$, но это в этом случае не играет большой роли.
43. Все. С MapInfo закончили. Надо возвращаться в Excel. Пункты с 37-го по 42-ой можно опустить. Они были необходимы только для проверки корректности выполненных нами манипуляций с координатными системами.
44. Открываем результат экспорта как текстовый файл в Excel.


45. Получим вот такую таблицу в Excel и добавим в нее две колонки «расстояние» (между соседними точками) и «путь» (сумму расстояний):
46. Заполним ячейки в новых колонках формулой:
e. Теперь «растянем» формулу из ячеек J3:K3 на все оставшееся заполненное пространство листа Excel. Существуют и более правильные способы задания формулы на столбцы, но они слегка длиннее и мудренее, чем просто «взять за угол и растянуть».
47. Мы получили искомый результат 🙂 Все строки содержат расстояние от точки до предшествующей ей, а так же пройденный путь.
48. Сохраним этот результат. Excel сообщит нам, что наш формат не поддерживает все возможности Excel, поэтому для последующее обработки надо сохранить данные в его формат.
49. Теперь, по уму, надо бы построить линию по этим точкам, что бы убедиться, что расстояние мы измерили без погрешности.
50. Для этого воспользуемся программой перевода последовательности точек в полилинию (или полигон):
Или с учетом кривизны Земли:
52. Тут надо помнить, что вычисления в MapInfo производятся только по двумерным координатам при геообъекте, высоту h она считать не умеет и для узлов не хранит. Результат вычислений в Exec = 226 781 m.
53. Если я ничего не перепутал то, то что казалось набором последовательных точек, оказалось набором вершин от разных проходов по одному пути, пройденных в разное время:
Ключевые слова: MapInfo, MapBasic команды, Select SQL, долгота/широта, преобразование координат, пользовательские проекции






























