Не ругайтесь, я начинающий, я пока трудно вникаю во все это...
Интересно вот что.
Для сфероида смещение пикселя получается вычислять верно.
Мне было сказано:
Точно также как ты вычисляешь путь к картинке только зум считать на 8 больше.
Получишь координаты пиксела в огромной картинке.
Дальше уже пересчитывай эти координаты пиксела в экранные координаты. Ну и касательно тайла тоже...
Вот код чутка:
- Код: Выделить всё
NumTiles:=Power(2,Round(Rec.Zoom)+8-1);
BitmapSize:=NumTiles * 256;
BitmapOrigo:= BitmapSize / 2;
PixelsPerLonDegree := BitmapSize / 360;
PixelsPerLonRadian := BitmapSize / (2*PI);
X:=Floor(BitmapOrigo + Rec.Lon * PixelsPerLonDegree);
Z:=Sin(Rec.Lat*(pi/180));
Y:=Floor(BitmapOrigo - 0.5 * ln((1+z)/(1-z)) * PixelsPerLonRadian);
X:=Floor(X/256); //X на большой картинке
Y:=Floor(Y/256); //Y на большой картинке
X2:=Floor(X/256); //В каком блоке по X
Y2:=Floor(Y/256); //В каком блоке по Y
ShiftPixel.X:=X-X2*256; //Смещение X
ShiftPixel.Y:=Y-Y2*256; //Смещение Y
Но на эллипсоид это смещение не верно!
Подскажите, каким образом высчитывать смещение для эллипсоидной проекции?
Отмечу, что Y вычислял не так, а вот так:
- Код: Выделить всё
Z:=Sin(Rec.Lat*(pi/180));
Y:=Floor(BitmapOrigo - PixelsPerLonRadian*(Arctanh(Z)-Exct*Arctanh(Exct*Z)));
Т. е. заменял 2 строчки, но результат не верный. Помогите разобраться...