Рельеф Земли - отклонения геоида: различия между версиями
Строка 3: | Строка 3: | ||
Нарисуем форму Земли математически точно. | Нарисуем форму Земли математически точно. | ||
− | Известно, что Земля - это эллипсоид с искажениями. Искажения называются "отклонениями | + | Известно, что Земля - это эллипсоид с искажениями. Искажения называются "отклонениями геоида" (по английски "geoid undulations"). |
− | + | Беру формулу [[wikiru:Эллипс#В полярных координатах|эллипса в полярных координатах из википедии]] - [[file:EllipsFormulaWiki.png]]. Подставляю в данные [[lw:Earth2014|Earth2014]] - и тут меня ожидало разочарование: диапазон отклонений геоида оказался на 50 метров больше ожидаемого. Вместо 192м я получил 250м отклонений. | |
− | Ожидаемые отклонения | + | Ожидаемые отклонения геоида беру из [https://it.wikipedia.org/wiki/Geoide#/media/File:Geoid_height_red_blue.png английской] https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Geoid_height_red_blue_averagebw.png/330px-Geoid_height_red_blue_averagebw.png и |
+ | [https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%B3%D1%83%D1%80%D0%B0_%D0%97%D0%B5%D0%BC%D0%BB%D0%B8#%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F русской] википедии от -107 м до +85,4 м; диапазон 192,4 м. | ||
+ | |||
+ | Проверил параметры эллипсоида: [[lw:Earth2014|Earth2014]] использует GRS80, википедия - WGS84, но радиусы у них идентичны ([[wikiru:GRS80|радиус оси экватора a = 6 378 137,0 м; радиус полярной оси b = 6 356 752,3141 м]]). | ||
− | |||
Оказалось, что не ту формулу эллипса я взял. Нужно брать формулу от автора данных [[lw:Earth2014|Earth2014]] - [[Christian Hirt|Кристиана Херта]]. | Оказалось, что не ту формулу эллипса я взял. Нужно брать формулу от автора данных [[lw:Earth2014|Earth2014]] - [[Christian Hirt|Кристиана Херта]]. | ||
− | + | Находится она http://logy.gq/images/3/3a/EllipsFormula.png в файле [http://ddfe.curtin.edu.au/models/Earth2014/Hirt_Rexer2015_Earth2014.pdf Hirt_Rexer2015_Earth2014.pdf]. | |
+ | |||
+ | = Использование GIS = | ||
+ | Пытался нарисовать карту в [[wikiru:Геоинформационная система|геоинформационной системе]] (называю в дальнейшем GIS). | ||
+ | Использовал бесплатную GIS [[aw:GRASS|GRASS]]. Наткнулся на ограничение: медленное преобразование карт при изменениях [[wikiru:Датум|датума]]. GIS вроде как и поддерживают расчет наклона оси вращения оси, но в GRASS этих настроек не нашел. Также выяснилось, что при интенсивном изменении датума скорость GIS существенно падает. А моделировать изменение скорости и угла вращения Земли нужно обязательно. | ||
+ | |||
+ | Поэтому рисую карты самодельными алгоритмами. | ||
+ | |||
+ | Нарисовал Землю [[file:Earth.gif]] | ||
+ | |||
+ | Мерцания на береговых линиях показывает погрешности преобразования из HEALPix в [[wikiru:Равнопромежуточная проекция|равнопромежуточную проекцию]]. | ||
+ | Палитры цветов получены из [[aw:Heights coloring#GRASS colors|GRASS]]: https://grass.osgeo.org/grass77/manuals/colortables/water.png water и модифицированный https://grass.osgeo.org/grass77/manuals/colortables/gyr.png gyr. | ||
+ | = Алгоритм = | ||
+ | Алгоритм расчета отклонений геоида выглядит так: | ||
+ | <source lang=CSharp> | ||
+ | protected override double GetAltitude(HealCoor pixel) | ||
+ | { | ||
+ | var a = 6378137d; // big axis, angle is measured from here | ||
+ | var b = 6356752.3141; | ||
+ | var e_2 = 1 - (b * b) / (a * a); | ||
+ | |||
+ | var altitude = Relief.GetAltitude(pixel); | ||
+ | var altitudeShape = ReliefBed.GetAltitude(pixel) + 6371000; | ||
+ | |||
+ | var angle = Math.PI / 2 - pixel.Theta.Value; | ||
+ | var sin_2 = Math.Sin(angle) * Math.Sin(angle); | ||
+ | var ellipsoid = a * Math.Sqrt((1 - e_2 * (2 - e_2) * sin_2) / (1 - e_2 * sin_2)); | ||
+ | var undulation = altitudeShape - ellipsoid - altitude; | ||
+ | return undulation; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | При его выполнении нашел закладку от [[Christian Hirt|Кристиана Херта]]. Я почти отправил ему письмо про как бы ошибку, но подумав, уразумел, что это просто "защита от дурака". | ||
+ | |||
+ | Смысл в том, представляя данные [[lw:Earth2014|Earth2014]] в двух вариантах точности: в точности [http://ddfe.curtin.edu.au/models/Earth2014/data_1min/shape_grids 1 минута дуги] и [[http://ddfe.curtin.edu.au/models/Earth2014/data_5min/shape_grids 5 минут дуги], [[Christian Hirt]] публикует файлы в [[wikiru:Равнопромежуточная проекция|равнопромежуточной проекции]]. А известно, что отклонения геоида версии EGM96 сделаны в [[wikiru:Сферические функции|сферических функциях]]. Преобразования между ними нетривиальные, поэтому предполагаю, что для неподготовленной публики он преобразовал EGM96 в равнопромежуточную проекцию красиво http://logy.gq/images/thumb/e/ed/Earth2014_5.jpg/400px-Earth2014_5.jpg | ||
+ | Но реально полезные данные из такого изображения в проекции HEALPix будут искажены http://logy.gq/images/thumb/b/b2/Earth2014_5_shapeError.jpg/400px-Earth2014_5_shapeError.jpg | ||
+ | |||
+ | |||
+ | Я уже начал сомневаться в выборе проекции HEALPix для расчетов. | ||
+ | |||
+ | Но потом глянул данные [[lw:Earth2014|Earth2014]] в точности [http://ddfe.curtin.edu.au/models/Earth2014/data_1min/shape_grids 1 минута дуги]. | ||
+ | |||
+ | Оказалось, что там EGM96 преобразована правильно для расчетов: в равнопромежуточной проекции отклонения геоида визуально искажены http://logy.gq/images/thumb/4/47/Earth2014_1_shapeError.jpg/400px-Earth2014_1_shapeError.jpg, а в проекции HEALPix наоборот красивы для расчетов http://logy.gq/images/thumb/5/5b/Earth2014_1.jpg/400px-Earth2014_1.jpg |
Версия 14:25, 27 декабря 2018
комментарии в LiveJournal Нарисуем форму Земли математически точно.
Известно, что Земля - это эллипсоид с искажениями. Искажения называются "отклонениями геоида" (по английски "geoid undulations").
Беру формулу эллипса в полярных координатах из википедии - . Подставляю в данные Earth2014 - и тут меня ожидало разочарование: диапазон отклонений геоида оказался на 50 метров больше ожидаемого. Вместо 192м я получил 250м отклонений.
Ожидаемые отклонения геоида беру из английской и русской википедии от -107 м до +85,4 м; диапазон 192,4 м.
Проверил параметры эллипсоида: Earth2014 использует GRS80, википедия - WGS84, но радиусы у них идентичны (радиус оси экватора a = 6 378 137,0 м; радиус полярной оси b = 6 356 752,3141 м).
Оказалось, что не ту формулу эллипса я взял. Нужно брать формулу от автора данных Earth2014 - Кристиана Херта.
Находится она в файле Hirt_Rexer2015_Earth2014.pdf.
Использование GIS[править]
Пытался нарисовать карту в геоинформационной системе (называю в дальнейшем GIS). Использовал бесплатную GIS GRASS. Наткнулся на ограничение: медленное преобразование карт при изменениях датума. GIS вроде как и поддерживают расчет наклона оси вращения оси, но в GRASS этих настроек не нашел. Также выяснилось, что при интенсивном изменении датума скорость GIS существенно падает. А моделировать изменение скорости и угла вращения Земли нужно обязательно.
Поэтому рисую карты самодельными алгоритмами.
Нарисовал Землю Файл:Earth.gif
Мерцания на береговых линиях показывает погрешности преобразования из HEALPix в равнопромежуточную проекцию. Палитры цветов получены из GRASS: water и модифицированный gyr.
Алгоритм[править]
Алгоритм расчета отклонений геоида выглядит так:
protected override double GetAltitude(HealCoor pixel)
{
var a = 6378137d; // big axis, angle is measured from here
var b = 6356752.3141;
var e_2 = 1 - (b * b) / (a * a);
var altitude = Relief.GetAltitude(pixel);
var altitudeShape = ReliefBed.GetAltitude(pixel) + 6371000;
var angle = Math.PI / 2 - pixel.Theta.Value;
var sin_2 = Math.Sin(angle) * Math.Sin(angle);
var ellipsoid = a * Math.Sqrt((1 - e_2 * (2 - e_2) * sin_2) / (1 - e_2 * sin_2));
var undulation = altitudeShape - ellipsoid - altitude;
return undulation;
}
При его выполнении нашел закладку от Кристиана Херта. Я почти отправил ему письмо про как бы ошибку, но подумав, уразумел, что это просто "защита от дурака".
Смысл в том, представляя данные Earth2014 в двух вариантах точности: в точности 1 минута дуги и [5 минут дуги, Christian Hirt публикует файлы в равнопромежуточной проекции. А известно, что отклонения геоида версии EGM96 сделаны в сферических функциях. Преобразования между ними нетривиальные, поэтому предполагаю, что для неподготовленной публики он преобразовал EGM96 в равнопромежуточную проекцию красиво Но реально полезные данные из такого изображения в проекции HEALPix будут искажены
Я уже начал сомневаться в выборе проекции HEALPix для расчетов.
Но потом глянул данные Earth2014 в точности 1 минута дуги.
Оказалось, что там EGM96 преобразована правильно для расчетов: в равнопромежуточной проекции отклонения геоида визуально искажены , а в проекции HEALPix наоборот красивы для расчетов