Страница 1 из 1

На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 11:10
evgen_sobolev
Здравствуйте!
Пытаюсь разобраться с проекцией Миллера, а конкретно на чем она может быть построена, на эллипсоидах или только на сферах?
Просто смотрю в Бугаевском-1998-Математическая картография, там так же как на вики:

https://ru.wikipedia.org/w/index.php?ti ... 1%80%D0%B0

При пересчете используется только радиус, а не большая и малая полуоси, что наводит на мысль что проекция может быть построена только на сфере.

Так же для макроязыка EASI(http://gis-lab.info/qa/easi3.html), проекция Миллера поддерживается только для сферы.

Объясните пожалуйста я прав или заблуждаюсь?

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 11:19
trir
А зачем тогда здесь
SPHEROID["WGS_1984",6378137,298.257223563]

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 11:23
evgen_sobolev
Да, тоже видел, но тогда я не понимаю какой радиус стоит в формуле из книги Бугаевского?

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 11:28
SergeyRyzhkov
Miller Cylindrical только на сфере.

Приведенное описание http://spatialreference.org/ref/esri/54003/html/ тут ни причем, это просто принятое в WKT описание датума (вернее элипсоида в нем)

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 11:31
evgen_sobolev
А можно источник где прочитать, мол, Цилиндрическая Миллера строится только на сфере?

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 11:49
SergeyRyzhkov
evgen_sobolev писал(а):А можно источник где прочитать, мол, Цилиндрическая Миллера строится только на сфере?
Честно говоря тут строго не подскажу. Я сужу по формулам
https://ru.wikipedia.org/wiki/%D0%A6%D0 ... ite_note-1

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 11:53
evgen_sobolev
Я поправил формулу исходя из книги Бугаевского, до этого там не стояли радиусы вообще)

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 12:00
SergeyRyzhkov
:)
В proj4
код такой:

Код: Выделить всё

#define PJ_LIB__
# include	<projects.h>
PROJ_HEAD(mill, "Miller Cylindrical") "\n\tCyl, Sph";
FORWARD(s_forward); /* spheroid */
	xy.x = lp.lam;
	xy.y = log(tan(FORTPI + lp.phi * .4)) * 1.25;
	return (xy);
}
INVERSE(s_inverse); /* spheroid */
	lp.lam = xy.x;
	lp.phi = 2.5 * (atan(exp(.8 * xy.y)) - FORTPI);
	return (lp);
}
FREEUP; if (P) pj_dalloc(P); }
ENTRY0(mill) P->[b]es = 0[/b].; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P)
Код proj4net

Код: Выделить всё

 xy.X = lplam;
 xy.Y = Math.Log(Math.Tan(ProjectionMath.PiFourth + lpphi * .4)) * 1.25;
 return xy;
Код в proj4js

Код: Выделить всё

exports.forward = function(p) {
  var lon = p.x;
  var lat = p.y;
  /* Forward equations
      -----------------*/
  var dlon = adjust_lon(lon - this.long0);
  var x = this.x0 + this.a * dlon;
  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;

  p.x = x;
  p.y = y;
  return p;
};
Код в MapExpress:

Код: Выделить всё

public override ICoordinate Project (GeographicCoordinate geographCoordinate)
        {
            var latRad = MathUtil.DegToRad (geographCoordinate.Lat);
            var lonRad = MathUtil.DegToRad (geographCoordinate.Lon);
            var dlon = AdjustLon (lonRad - MathUtil.DegToRad (Parameters.CentralMeridian));
            var x = Parameters.FalseEasting + Parameters.SemiMajor * dlon;
            var y = Parameters.FalseNorthing + Parameters.SemiMajor * Math.Log (Math.Tan ((Math.PI / 4) + (latRad / 2.5))) * 1.25;

            return new Coordinate (x, y);
        }

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 12:09
evgen_sobolev
Ну и еще в книге: Snyder - 1987 - Map projections--a working manual
говорится что нет эквивалента для эллипсоида

Re: На чем может быть построена проекция Миллера?

Добавлено: 22 окт 2014, 12:34
SergeyRyzhkov
Кстати Ваш вопрос, косвенно подтверждает, что нельзя "тупо" верить никому :) , кроме первоисточников. :)
В англ.версии википедии нет радиуса,
в proj4 как бы вы не старались, а на другом эллипсоиде не получится применить проекцию (так как в коде не используется радиус и используется по умолчанию WGS84), а в некоторых проекциях в proj4 в коде явно прошиты параметры эллипсоидов и никакие изменения параметров не повлияют на расчеты ...