У меня есть несколько ориентированных на Землю координатных точек, заданных как широта и долгота ( WGS-84 ).
Как я могу преобразовать их в декартовы координаты (x, y, z) с началом в центре Земли?
mapping
geometry
geospatial
Дафшез
источник
источник
Ответы:
Недавно я проделал нечто подобное, используя «Формулу Гаверсина» для данных WGS-84, которая является производной от «Закона Гаверсинов» с очень удовлетворительными результатами.
Да, WGS-84 предполагает, что Земля является эллипсоидом, но я считаю, что вы получите только около 0,5% средней ошибки, используя такой подход, как «Формула Хаверсина», что может быть приемлемым количеством ошибок в вашем случае. Вы всегда будете иметь некоторую ошибку, если только вы не говорите о расстоянии в несколько футов, и даже тогда теоретически существует кривизна Земли ... Если вам требуется более жесткий подход, совместимый с WGS-84, проверьте "Формулу Винсенти".
Я понимаю, откуда взялся starblue , но хорошая разработка программного обеспечения часто сводится к компромиссам, поэтому все зависит от точности, которая вам нужна для того, что вы делаете. Например, результат, рассчитанный по «Манхэттенской формуле расстояния» по сравнению с результатом «Формулы расстояния», может быть лучше для определенных ситуаций, поскольку требует меньших вычислительных затрат. Подумайте, "какая точка ближайшая?" сценарии, в которых точное измерение расстояния не требуется.
Что касается «формулы Хаверсинуса», ее легко реализовать, и она хороша тем, что в ней используется «сферическая тригонометрия» вместо подхода, основанного на «законе косинусов», который основан на двумерной тригонометрии, поэтому вы получаете хороший баланс точности по сложности.
У господина по имени Крис Венесс есть отличный веб-сайт http://www.movable-type.co.uk/scripts/latlong.html, который объясняет некоторые интересующие вас концепции и демонстрирует различные программные реализации; это также должно ответить на ваш вопрос о преобразовании x / y.
источник
Вот ответ, который я нашел:
Чтобы сделать определение полным, в декартовой системе координат:
Преобразование:
Где R - приблизительный радиус Земли (например, 6371 км).
Если ваши тригонометрические функции ожидают радианы (что, вероятно, так и есть), вам сначала нужно будет преобразовать долготу и широту в радианы. Очевидно, вам нужно десятичное представление, а не градусы \ минуты \ секунды (см., Например, здесь о преобразовании).
Формула обратного преобразования:
asin - это, конечно, арксинус. почитайте про atan2 в википедии . Не забудьте преобразовать радианы обратно в градусы.
На этой странице приведен код C # для этого (обратите внимание, что он сильно отличается от формул), а также некоторые объяснения и красивую диаграмму того, почему это правильно,
источник
Теория преобразования
GPS(WGS84)
в декартовы координаты https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinatesЯ использую следующее:
Я приложил код VB, который написал:
Обратите внимание, что
h
это высота надWGS 84 ellipsoid
.Обычно
GPS
дает нам высотуH
вышеMSL
.MSL
Высота должна быть преобразована в высотуh
вышеWGS 84 ellipsoid
с помощью геопотенциальной моделиEGM96
( Lemoine и соавт, 1998 ).Это делается путем интерполяции сетки файла высот геоида с пространственным разрешением 15 угловых минут.
Или, если у вас есть профессионал определенного уровня,
GPS
имеет высотуH
( msl, высота над средним уровнем моря ) иUNDULATION
соотношение междуgeoid
иellipsoid (m)
выбранной датумом, выводимым из внутренней таблицы. ты можешь получитьh = H(msl) + undulation
В XYZ по декартовым координатам:
источник
В python3.x это можно сделать, используя:
источник
Программное обеспечение proj.4 предоставляет программу командной строки, которая может выполнять преобразование, например
Он также предоставляет C API . В частности, функция
pj_geodetic_to_geocentric
выполнит преобразование без предварительной настройки объекта проекции.источник
Если вам нужно получить координаты на основе эллипсоида, а не сферы, взгляните на http://en.wikipedia.org/wiki/Geodetic_system#From_geodetic_to_ECEF - он дает формулы, а также константы WGS84, необходимые для преобразования. .
Формулы, которые также учитывают высоту относительно опорной поверхности эллипсоида (полезно, если вы получаете данные высоты от устройства GPS).
источник
Зачем внедрять то, что уже реализовано и проверено испытаниями?
В C #, например, есть NetTopologySuite, который является портом .NET для JTS Topology Suite.
В частности, у вас есть серьезная ошибка в расчетах. Земля не является идеальной сферой, и приближение радиуса Земли может не подрезать ее для точных измерений.
Если в некоторых случаях можно использовать домашние функции, ГИС является хорошим примером области, в которой гораздо предпочтительнее использовать надежную, проверенную тестами библиотеку.
источник
источник
java.lang.IllegalArgumentException: dimension must be <= 3
Вы можете сделать это на Java.
источник