Рельеф Земли - отклонения геоида: различия между версиями

Материал из Common History development
Перейти к навигации Перейти к поиску
(Формула эллипсоида)
 
(не показано 45 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
[[Category:Модель рельефа Земли]]
 
[[Category:Модель рельефа Земли]]
{{live|}}
+
{{live|16882}}
 
Нарисуем форму Земли математически точно.  
 
Нарисуем форму Земли математически точно.  
  
Строка 8: Строка 8:
 
[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 русской] википедий находятся в диапазоне 192,4 м от -107 м до +85,4 м.
 
[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 русской] википедий находятся в диапазоне 192,4 м от -107 м до +85,4 м.
  
{{error|1|м|чем=выбором модели отклонений геоида|от=lw:Earth2014#geoid}}.
+
{{error|1|м|чем=выбором модели отклонений геоида|от=Earth2014#geoid}}.
  
 
= Использование GIS =
 
= Использование GIS =
 
Пытался нарисовать карту в [[wikiru:Геоинформационная система|геоинформационной системе]] (называю в дальнейшем GIS).  
 
Пытался нарисовать карту в [[wikiru:Геоинформационная система|геоинформационной системе]] (называю в дальнейшем GIS).  
Использовал бесплатную GIS [[aw:GRASS|GRASS]]. Наткнулся на ограничение: медленное преобразование карт при изменениях [[wikiru:Датум|датума]]. GIS вроде как и поддерживают расчет наклона оси вращения оси, но в GRASS этих настроек не нашел. Также выяснилось, что при интенсивном изменении датума скорость GIS существенно падает. А моделировать изменение скорости и угла вращения Земли нужно обязательно.  
+
Использовал бесплатную GIS [[aw:GRASS|GRASS]]. Наткнулся на ограничение - медленное преобразование карт при изменениях [[датум]]а. GIS вроде как и поддерживают расчет наклона оси вращения оси, но в GRASS этих настроек не нашел. Также выяснилось, что при интенсивном изменении датума скорость GIS существенно падает. А моделировать изменение скорости и угла вращения Земли нужно обязательно.  
  
 
Поэтому рисую карты самодельными алгоритмами.  
 
Поэтому рисую карты самодельными алгоритмами.  
  
Земля [[file:Earth.gif]]
+
Земля - {{githubraw|Wos/mockup/earth.gif|reconstruction}}
  
Мерцания на береговых линиях показывает погрешности [[преобразования между равнопромежуточной и HEALPix проекциями]].
+
Мерцания на береговых линиях вызваны низким разрешением {{sym|letter=k_7|строка=скобки}}.
Палитры цветов получены из [[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.
+
Палитры цветов получены из [[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.
  
 
= Алгоритм =
 
= Алгоритм =
== Формула эллипсоида ==
+
== [[Формула эллипсоида]] ==
Беру формулу [[wikiru:Эллипс#В полярных координатах|эллипса в полярных координатах из википедии]] - [[file:EllipsFormulaWiki.png]]. Подставляю в данные [[lw:Earth2014|Earth2014]] - и тут меня ожидало разочарование: диапазон отклонений геоида оказался на 50 метров больше ожидаемого. Вместо 192м я получил 250м.
+
Беру формулу [https://ru.wikipedia.org/wiki/Эллипс#В_полярных_координатах эллипса в [[Полярная cистема координат|полярных координатах]] из википедии] - [[file:EllipsFormulaWiki.png]]. Подставляю в данные [[Earth2014|Earth2014]] - и тут меня ожидало разочарование: диапазон отклонений геоида оказался на 50 метров больше ожидаемого. Вместо 192м я получил 250м.
  
Проверил параметры эллипсоида: [[lw:Earth2014|Earth2014]] использует GRS80, википедия - WGS84, но радиусы у них идентичны ([[wikiru:GRS80|радиус оси экватора a = 6 378 137,0 м; радиус полярной оси b = 6 356 752,3141 м]]).
+
Проверил параметры эллипсоида: [[Earth2014|Earth2014]] использует GRS80, википедия - [[Эллипсоид#WGS 84|WGS 84]], и радиусы у них идентичны ([[wikiru:GRS80|радиус оси экватора a = 6 378 137,0 м; радиус полярной оси b = 6 356 752,3141 м]]).
  
Оказалось, что не ту формулу эллипса я взял. Нужно брать формулу http://logy.gq/images/3/3a/EllipsFormula.png (файл [http://ddfe.curtin.edu.au/models/Earth2014/Hirt_Rexer2015_Earth2014.pdf Hirt_Rexer2015_Earth2014.pdf]) от автора данных [[lw:Earth2014|Earth2014]] - [[Christian Hirt|Кристиана Херта]].
+
Оказывается, что формула эллипса формуле эллипса рознь. Нужно брать http://logy.gq/images/3/3a/EllipsFormula.png из [[Hirt, C. and M. Rexer (2015), Earth2014]].
  
 +
== Код ==
 
Алгоритм расчета отклонений геоида выглядит так:
 
Алгоритм расчета отклонений геоида выглядит так:
 
<source lang=CSharp>
 
<source lang=CSharp>
    protected override double GetAltitude(HealCoor pixel)
+
        public override double? GetAltitude(HealCoor basin)
    {
+
        {
        var a = 6378137d; // big axis, angle is measured from here
+
            var altitude = Relief.GetAltitude(basin);
        var b = 6356752.3141;
+
            var altitudeShape = ReliefBed.GetAltitude(basin) + 6371000;
        var e_2 = 1 - (b * b) / (a * a);
 
  
        var altitude = Relief.GetAltitude(pixel);
+
            var thetaTan = Ellipsoid.CalcThetaTan(basin.Beta.Value);
        var altitudeShape = ReliefBed.GetAltitude(pixel) + 6371000;
+
            var undulation = altitudeShape - altitude
 
+
                - Ellipsoid.Radius(Ellipsoid.FromSpheric(thetaTan));
        var angle = Math.PI / 2 - pixel.Theta.Value;
+
            return undulation;
        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>
 
</source>
  
При его выполнении нашел закладку. Я почти отправил [[Christian Hirt|Кристиану Херту]] письмо про как бы ошибку, но подумав, уразумел, что это просто "защита от дурака".
+
== Закладка ==
 +
При выполнении алгоритма нашел закладку. Я почти отправил [[Christian Hirt|Кристиану Херту]] письмо про как бы ошибку, но подумав, уразумел, что это просто "защита от дурака".
  
Смысл в том, что представляя данные двумя вариантами: в точности [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, надеясь, что полезные данные в такой точности не будут использоваться из-за испорченностей http://logy.gq/images/thumb/b/b2/Earth2014_5_shapeError.jpg/400px-Earth2014_5_shapeError.jpg
+
Смысл в том, что представляя данные двумя вариантами: в точности [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, надеясь, что полезные данные в такой точности не будут использоваться из-за искажений 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 минута дуги].
+
Я уже начал сомневаться в выборе проекции HEALPix, но потом глянул данные [[Earth2014|Earth2014]] в точности [http://ddfe.curtin.edu.au/models/Earth2014/data_1min/shape_grids 1 минута дуги].
Оказалось, что там EGM96 преобразована для расчетов правильно http://logy.gq/images/thumb/5/5b/Earth2014_1.jpg/400px-Earth2014_1.jpg, а в равнопромежуточной проекции визуально испорчена http://logy.gq/images/thumb/4/47/Earth2014_1_shapeError.jpg/400px-Earth2014_1_shapeError.jpg
+
Оказалось, что там EGM96 преобразована для расчетов правильно http://logy.gq/images/thumb/5/5b/Earth2014_1.jpg/400px-Earth2014_1.jpg, а в равнопромежуточной проекции визуально искажена http://logy.gq/images/thumb/4/47/Earth2014_1_shapeError.jpg/400px-Earth2014_1_shapeError.jpg
  
 
Мне не нужна равнопромежуточная проекция для расчетов, поэтому использую проекцию HEALPix и данные точностью [http://ddfe.curtin.edu.au/models/Earth2014/data_1min/shape_grids 1 минута дуги], как и планировалось.
 
Мне не нужна равнопромежуточная проекция для расчетов, поэтому использую проекцию HEALPix и данные точностью [http://ddfe.curtin.edu.au/models/Earth2014/data_1min/shape_grids 1 минута дуги], как и планировалось.
  
 
== Результат ==
 
== Результат ==
В точности [[lw:HEALPix|HEALPix]] k=10 (12,6 миллионов тазиков) диапазон отклонений геоида [[lw:file:Earth2014 1min lines2048.jpg|равен 195,]] от -107.4м до +88.1м
+
Для {{sym|HEALPix#13_миллионов|строка=скобки}} диапазон отклонений геоида [[lw:file:Earth2014 1min lines2048.jpg|равен 193,]] от -108.1 м to +85 м
  
Отличие в 3,1 метра от [[#Модель геоида|ожидаемых отклонений]] объясняю погрешностью [[преобразования между равнопромежуточной и HEALPix проекциями]] до 3 метров и погрешностью данных проекта [[lw:Earth2014|Earth2014]] до 1 метра. {{error|3|метра|чем=преобразованиями между проекциями|от=преобразования между равнопромежуточной и HEALPix проекциями}}. Погрешность в 1 м, вызванная выбором [[#Модель геоида|модели геоида]], не влияет на данный результат.
+
Отличие в 0,8 метр от [[#Модель геоида|ожидаемых отклонений]] объясняю погрешностью [[преобразования между равнопромежуточной и HEALPix проекциями]], которую можно уменьшить, обрабатывая [[Earth2014#spectral modelling|данные Earth2014 в сферических функциях]] без преобразования проекций, но пока что {{error|0,8|м|чем=преобразованиями между проекциями|от=преобразования между равнопромежуточной и HEALPix проекциями|case=lc}}. Погрешность в 1 м, вызванная выбором [[#Модель геоида|модели геоида]], не влияет на [[#Результат|результат]].
  
 
= Анимация =
 
= Анимация =
Представляю Землю, деформированную пропорционально отклонениям геоида. Для наглядности деформации преувеличены в десятки тысяч раз.
+
Представляю [[Земля, деформированная пропорционально отклонениям геоида|Землю, деформированную пропорционально отклонениям геоида]]. Для наглядности деформации преувеличены в десятки тысяч раз.
  
 
Использовалась программа [[aw:PlanetMaker|PlanetMaker]]. Вмятости bumpmap - это отклонения геоида в серых оттенках. Нормали normalmap создал с помощью http://cpetry.github.io/NormalMap-Online на основании bumpmap.
 
Использовалась программа [[aw:PlanetMaker|PlanetMaker]]. Вмятости bumpmap - это отклонения геоида в серых оттенках. Нормали normalmap создал с помощью http://cpetry.github.io/NormalMap-Online на основании bumpmap.
Строка 69: Строка 66:
 
Для наглядности материки и острова появляются в виде белых контуров с заливкой или без. (nightlightsonly).
 
Для наглядности материки и острова появляются в виде белых контуров с заливкой или без. (nightlightsonly).
  
[[file:Geoid.gif]]
+
<img src=https://github.com/it4history/reconstruction/blob/master/Wos/mockup/geoid1_part.gif?raw=true >
 +
 
 +
{{#widget:YouTube|id=2tMwfFj1Mq0}} {{#widget:YouTube|id=qEP2uPQcc4c}}
  
{{#widget:YouTube|id=2tMwfFj1Mq0}}
+
tags: Earth, planet, geoid, undulations, Земля, форма Земли, планета, геоид, геиод
{{#widget:YouTube|id=qEP2uPQcc4c}}
 

Текущая версия на 20:03, 22 апреля 2020

комментарии в LiveJournal Нарисуем форму Земли математически точно.

Известно, что Земля - это эллипсоид с искажениями. Искажения называются "отклонениями геоида" (по английски "geoid undulations").

Модель геоида[править]

Ожидаемые отклонения геоида 375px-Geoid_EGM96.gif согласно английской и русской википедий находятся в диапазоне 192,4 м от -107 м до +85,4 м.


Погрешностью высоты в 1 м, вызванной выбором модели отклонений геоида, пренебрегаю.

Использование GIS[править]

Пытался нарисовать карту в геоинформационной системе (называю в дальнейшем GIS). Использовал бесплатную GIS GRASS. Наткнулся на ограничение - медленное преобразование карт при изменениях датума. GIS вроде как и поддерживают расчет наклона оси вращения оси, но в GRASS этих настроек не нашел. Также выяснилось, что при интенсивном изменении датума скорость GIS существенно падает. А моделировать изменение скорости и угла вращения Земли нужно обязательно.

Поэтому рисую карты самодельными алгоритмами.

Земля - earth.gif

Мерцания на береговых линиях вызваны низким разрешением [math]k_7[/math] (HEALPix 200 тысяч). Палитры цветов получены из GRASS: water.png water и модифицированная gyr.png gyr.

Алгоритм[править]

Формула эллипсоида[править]

Беру формулу эллипса в полярных координатах из википедии - EllipsFormulaWiki.png. Подставляю в данные Earth2014 - и тут меня ожидало разочарование: диапазон отклонений геоида оказался на 50 метров больше ожидаемого. Вместо 192м я получил 250м.

Проверил параметры эллипсоида: Earth2014 использует GRS80, википедия - WGS 84, и радиусы у них идентичны (радиус оси экватора a = 6 378 137,0 м; радиус полярной оси b = 6 356 752,3141 м).

Оказывается, что формула эллипса формуле эллипса рознь. Нужно брать EllipsFormula.png из Hirt, C. and M. Rexer (2015), Earth2014.

Код[править]

Алгоритм расчета отклонений геоида выглядит так:

        public override double? GetAltitude(HealCoor basin)
        {
            var altitude = Relief.GetAltitude(basin);
            var altitudeShape = ReliefBed.GetAltitude(basin) + 6371000;

            var thetaTan = Ellipsoid.CalcThetaTan(basin.Beta.Value);
            var undulation = altitudeShape - altitude 
                - Ellipsoid.Radius(Ellipsoid.FromSpheric(thetaTan));
            return undulation;
        }

Закладка[править]

При выполнении алгоритма нашел закладку. Я почти отправил Кристиану Херту письмо про как бы ошибку, но подумав, уразумел, что это просто "защита от дурака".

Смысл в том, что представляя данные двумя вариантами: в точности 1 минута дуги и 5 минут дуги, Christian Hirt публикует файлы в равнопромежуточной проекции. А известно, что отклонения геоида версии EGM96 сделаны в сферических функциях. Преобразования между ними нетривиальные, поэтому предполагаю, что для неподготовленной публики он преобразовал EGM96 в равнопромежуточную проекцию красиво 400px-Earth2014_5.jpg, надеясь, что полезные данные в такой точности не будут использоваться из-за искажений 400px-Earth2014_5_shapeError.jpg

Я уже начал сомневаться в выборе проекции HEALPix, но потом глянул данные Earth2014 в точности 1 минута дуги. Оказалось, что там EGM96 преобразована для расчетов правильно 400px-Earth2014_1.jpg, а в равнопромежуточной проекции визуально искажена 400px-Earth2014_1_shapeError.jpg

Мне не нужна равнопромежуточная проекция для расчетов, поэтому использую проекцию HEALPix и данные точностью 1 минута дуги, как и планировалось.

Результат[править]

Для [math]k_{10}[/math] (HEALPix 13 миллионов) диапазон отклонений геоида равен 193,1м от -108.1 м to +85 м

Отличие в 0,8 метр от ожидаемых отклонений объясняю погрешностью преобразования между равнопромежуточной и HEALPix проекциями, которую можно уменьшить, обрабатывая данные Earth2014 в сферических функциях без преобразования проекций, но пока что погрешностью высоты в 0,8 м, вызванной преобразованиями между проекциями, пренебрегаю. Погрешность в 1 м, вызванная выбором модели геоида, не влияет на результат.

Анимация[править]

Представляю Землю, деформированную пропорционально отклонениям геоида. Для наглядности деформации преувеличены в десятки тысяч раз.

Использовалась программа PlanetMaker. Вмятости bumpmap - это отклонения геоида в серых оттенках. Нормали normalmap создал с помощью http://cpetry.github.io/NormalMap-Online на основании bumpmap.

Для наглядности материки и острова появляются в виде белых контуров с заливкой или без. (nightlightsonly).

tags: Earth, planet, geoid, undulations, Земля, форма Земли, планета, геоид, геиод