Вопрос от новичка

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модератор: Tolik

verywell
Новичок
Сообщения: 6
Зарегистрирован: 19 фев 2009, 23:04

Вопрос от новичка

Сообщение verywell »

Ну во-первых спасибо авторам за программу, оч полезно.
Для меня это дело новое, поэтому вопрос может показаться "детским"-
- как (алгоритм) по физ.координатам точки и зуму определить путь и имя тайла в кэше, ну и в продолжение - положение точки внутри самого тайла?
Может плохо искал, но ФАКа я тут не нашел.
Аватара пользователя
feya
Гуру
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз
Поблагодарили: 56 раз

Re: Вопрос от новичка

Сообщение feya »

Посмотрите в исходниках, см. соответствующую ветку.
http://sasgis.org | SAS.Планета | SASPlanet
verywell
Новичок
Сообщения: 6
Зарегистрирован: 19 фев 2009, 23:04

Re: Вопрос от новичка

Сообщение verywell »

Извиняюсь, исходники это где ?
Аватара пользователя
Vasya
Советчик
Сообщения: 266
Зарегистрирован: 14 июл 2008, 13:06
Откуда: Одесса
Поблагодарили: 3 раза
Контактная информация:

Re: Вопрос от новичка

Сообщение Vasya »

Ну дожились...
Тем не так много, а найти нельзя.
Держи - http://sasgis.org/src.exe
verywell
Новичок
Сообщения: 6
Зарегистрирован: 19 фев 2009, 23:04

Re: Вопрос от новичка

Сообщение verywell »

В Делфях не очень, потому из найденого на форуме:

result:=path+'\z'+zoom+'\'+(x div 1024)+'\x'+x+'\'+(y div 1024)+'\y'+y+ext;
где
path - путь к папке кэша
zoom – уровень масштаба
x,y – позиция тайла относительно левого верхнего угла карты.

в свою очередь X и Y определяются как

NumTiles[Level] = 2 ^ (Level-1) {- Count of tiles along one of sides of bitmap}
BitmapSize[Level] = NumTiles[Level] * 256
BitmapOrigo[Level] = BitmapSize[Level] / 2 {- position (pixel) of center of tile.}

PixelsPerLonDegree[Level] = BitmapSize[Level] / 360
PixelsPerLonRadian[Level] = BitmapSize[Level] / (2*PI)


X = floor(BitmapOrigo[Level] + Lon * PixelsPerLonDegree[Level]);
Y = floor(BitmapOrigo[Level] - 0.5 * ln((1+z)/(1-z)) * PixelsPerLonRadian[Level]),
where z = sin(Lat).

где Lon и Lat физические координаты точки.

Но что-то не получается, где я не прав?
Аватара пользователя
feya
Гуру
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз
Поблагодарили: 56 раз

Re: Вопрос от новичка

Сообщение feya »

verywell

z:=sin(lat*(2*PI));
c:=(BitmapSize[Azoom]/(2*Pi));
Y:=round(BitmapSize[Azoom]/2-0.5*ln((1+z)/(1-z))*c);

Это для меркатора на сфере.
http://sasgis.org | SAS.Планета | SASPlanet
verywell
Новичок
Сообщения: 6
Зарегистрирован: 19 фев 2009, 23:04

Re: Вопрос от новичка

Сообщение verywell »

Что-то странно, Х определяется верно, Y - совсем "не туда".
Вот такой алгоритм вроде "ближе" к правде дает, но все равно мимо (это не совсем Делфи, но думаю понятно)

xLevel = 17
xNumTiles = 2^(xLevel-1)
BitmapSize = xNumTiles*256
BitmapOrigo = BitmapSize / 2
Xpix = floor(BitmapOrigo * (1+Lon/180))
X=INT(Xpix/256)

Z=SIN(xLat)
Ypix=FLOOR(BitmapOrigo * (1 - 0.5 * LOG( (1+Z)/(1-Z) ))/PI())
Y = INT(Ypix/256)
verywell
Новичок
Сообщения: 6
Зарегистрирован: 19 фев 2009, 23:04

Re: Вопрос от новичка

Сообщение verywell »

Если не трудно, какой путь к тайлу для
xLat = 42.886328125
xLon = 71.3614339192
zoom=17

мож я совсем туплю и неверно считаю?
Аватара пользователя
feya
Гуру
Сообщения: 2034
Зарегистрирован: 13 июл 2008, 10:45
Благодарил (а): 5 раз
Поблагодарили: 56 раз

Re: Вопрос от новичка

Сообщение feya »

verywell
Вам для какой карты надо? Я вам дал для меркатора на сфере (гугл, dg и тп)
http://sasgis.org | SAS.Планета | SASPlanet
verywell
Новичок
Сообщения: 6
Зарегистрирован: 19 фев 2009, 23:04

Re: Вопрос от новичка

Сообщение verywell »

feya писал(а): verywell
Вам для какой карты надо? Я вам дал для меркатора на сфере (гугл, dg и тп)


для гугла-сат, надо использовать ваш кэш для своих нужд. Т.е. стандартная задача - для точки с Lat/Lon определить путь и имя тайла из кэша, соответсвенно знать и окружающие тайлы, по вашим формулам X определяется правильно, Y нет. Если не сложно, то прямо по пунктам как это сделать?
Ответить

Вернуться в «SAS.Планета»