Можно было и так:
result.y:=round(zoom[Azoom]/2-ll.y*((zoom[Azoom]/2)/180));
Меркатор на сфероид и на эллипсоид
Модератор: Tolik
-
Dimashik78
- Новичок
- Сообщения: 14
- Зарегистрирован: 01 фев 2009, 19:18
Re: Меркатор на сфероид и на эллипсоид
У Google Планета Земля проекция -180 +180 во все стороны.
- Вложения
-
- Тоже самое, уже на меркатор
- level1.jpg (20.62 КБ) 8340 просмотров
-
- 1 уровень
- t.jpg (7.21 КБ) 8341 просмотр
Re: Меркатор на сфероид и на эллипсоид
Dimashik78 писал(а):У Google Планета Земля проекция -180 +180 во все стороны.
Тогда ничего не будем менять - вдруг попадется карта, где есть координата более 90 градусов.
- feya
- Гуру
- Сообщения: 2034
- Зарегистрирован: 13 июл 2008, 10:45
- Благодарил (а): 5 раз
- Поблагодарили: 56 раз
Re: Меркатор на сфероид и на эллипсоид
+180 -180 во все стороны не может быть по законам физики)
http://sasgis.org | SAS.Планета | SASPlanet
-
Dimashik78
- Новичок
- Сообщения: 14
- Зарегистрирован: 01 фев 2009, 19:18
Re: Меркатор на сфероид и на эллипсоид
Ну ясно, что нет. На картинке за +90 -90 и нет ничего. чисто математичеки так. Вроде цилинрическая проекция называется.
GE_JPG_extractor из кеша Google Планета Земля тянет, там не меркатор, там +180 -180. Я сам юзал эти карты. С ними не удобно работать, надо растягивать на васоких широтах.
http://xitrostige.narod.ru/projection.html
GE_JPG_extractor из кеша Google Планета Земля тянет, там не меркатор, там +180 -180. Я сам юзал эти карты. С ними не удобно работать, надо растягивать на васоких широтах.
http://xitrostige.narod.ru/projection.html
-
kalinovsky
- Новичок
- Сообщения: 6
- Зарегистрирован: 14 авг 2009, 17:09
- Откуда: Смоленск
- Контактная информация:
Re: Меркатор на сфероид и на эллипсоид
если актуально, то вот:
e2P = 0.081819790992
для южного полушария сами подправите, если надо
Код: Выделить всё
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: Меркатор на сфероид и на эллипсоид
e2P = 0.081819790992
для южного полушария сами подправите, если надо
А что нужно поправить? Величину e2P?
Re: Меркатор на сфероид и на эллипсоид
feya писал(а):Есть исходники SASPlanet с соответствующими функциями (юнит Ugeofun.pas)
А где исходники можно взять? Тоже интересует пересчет.
Re: Меркатор на сфероид и на эллипсоид
ObiVan писал(а):feya писал(а):Есть исходники SASPlanet с соответствующими функциями (юнит Ugeofun.pas)
А где исходники можно взять? Тоже интересует пересчет.
Так можно ли получить исходники?
- feya
- Гуру
- Сообщения: 2034
- Зарегистрирован: 13 июл 2008, 10:45
- Благодарил (а): 5 раз
- Поблагодарили: 56 раз
Re: Меркатор на сфероид и на эллипсоид
исходники получить нельзя.
http://sasgis.org | SAS.Планета | SASPlanet