Страница 2 из 3

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 02 фев 2009, 11:42
feya
Можно было и так:
result.y:=round(zoom[Azoom]/2-ll.y*((zoom[Azoom]/2)/180));

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 02 фев 2009, 13:00
Dimashik78
У Google Планета Земля проекция -180 +180 во все стороны.

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 02 фев 2009, 13:26
Cowa
Dimashik78 писал(а):У Google Планета Земля проекция -180 +180 во все стороны.

Тогда ничего не будем менять - вдруг попадется карта, где есть координата более 90 градусов. :)

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 02 фев 2009, 13:27
feya
+180 -180 во все стороны не может быть по законам физики)

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 02 фев 2009, 14:16
Dimashik78
Ну ясно, что нет. На картинке за +90 -90 и нет ничего. чисто математичеки так. Вроде цилинрическая проекция называется.
GE_JPG_extractor из кеша Google Планета Земля тянет, там не меркатор, там +180 -180. Я сам юзал эти карты. С ними не удобно работать, надо растягивать на васоких широтах.
http://xitrostige.narod.ru/projection.html

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 14 авг 2009, 17:13
kalinovsky
если актуально, то вот:
Код: Выделить всё
public static double GetTileX(double lon, int zoom)
        {
            return Math.Pow(2, (double)(zoom - 2)) * (1 + lon / 180.0);
        }

        public static double GetTileY(double lat, int zoom)
        {
            return Math.Pow(2, (double)(zoom - 2)) * (1 - ((Math.Log((1 + Math.Sin(lat * Pi / 180.0)) / (1 - Math.Sin(lat * Pi / 180.0)))) / 2.0 - e2P * (Math.Log((1 + e2P * Math.Sin(lat * Pi / 180.0)) / (1 - e2P * Math.Sin(lat * Pi / 180.0)))) / 2.0) / Pi);
        }

        public static double GetLon(double tileX, int zoom)
        {
            return (tileX / Math.Pow(2.0, (double)(zoom - 2)) - 1) * 180.0;
        }

        public static double GetLat(double tileY, int zoom)
        {
            double y1 = (1.0 - (tileY / Math.Pow(2.0, (double)(zoom - 2)))) * Math.PI;
            double teta0 = 2.0 * Math.Atan(Math.Pow(Math.E, y1)) - Pi / 2.0;
            double teta = CalcTeta(teta0, y1);
            while (Math.Abs(teta - teta0) > 0.000000001)
            {
                teta0 = teta;
                teta = CalcTeta(teta, y1);
            }
            return teta * 180.0 / Math.PI;
        }

        private static double CalcTeta(double teta0, double y1)
        {
            return Math.Asin(1.0 - (1.0 + Math.Sin(teta0)) * Math.Pow(1.0 - e2P * Math.Sin(teta0), e2P) / (Math.Pow(Math.E, 2.0 * y1) * Math.Pow(1 + e2P * Math.Sin(teta0), e2P)));
        }

e2P = 0.081819790992
для южного полушария сами подправите, если надо

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 25 сен 2009, 16:05
ObiVan
e2P = 0.081819790992
для южного полушария сами подправите, если надо


А что нужно поправить? Величину e2P?

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 25 сен 2009, 23:56
ObiVan
feya писал(а):Есть исходники SASPlanet с соответствующими функциями (юнит Ugeofun.pas)

А где исходники можно взять? Тоже интересует пересчет.

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 21 ноя 2009, 22:55
voleg
ObiVan писал(а):
feya писал(а):Есть исходники SASPlanet с соответствующими функциями (юнит Ugeofun.pas)

А где исходники можно взять? Тоже интересует пересчет.


Так можно ли получить исходники?

Re: Меркатор на сфероид и на эллипсоид

СообщениеДобавлено: 22 ноя 2009, 01:07
feya
исходники получить нельзя.