Ну во-первых спасибо авторам за программу, оч полезно.
Для меня это дело новое, поэтому вопрос может показаться "детским"-
- как (алгоритм) по физ.координатам точки и зуму определить путь и имя тайла в кэше, ну и в продолжение - положение точки внутри самого тайла?
Может плохо искал, но ФАКа я тут не нашел.
Вопрос от новичка
Модератор: Tolik
- feya
- Гуру
- Сообщения: 2034
- Зарегистрирован: 13 июл 2008, 10:45
- Благодарил (а): 5 раз
- Поблагодарили: 56 раз
Re: Вопрос от новичка
Посмотрите в исходниках, см. соответствующую ветку.
http://sasgis.org | SAS.Планета | SASPlanet
Re: Вопрос от новичка
В Делфях не очень, потому из найденого на форуме:
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 физические координаты точки.
Но что-то не получается, где я не прав?
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: Вопрос от новичка
verywell
z:=sin(lat*(2*PI));
c:=(BitmapSize[Azoom]/(2*Pi));
Y:=round(BitmapSize[Azoom]/2-0.5*ln((1+z)/(1-z))*c);
Это для меркатора на сфере.
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
Re: Вопрос от новичка
Что-то странно, Х определяется верно, 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)
Вот такой алгоритм вроде "ближе" к правде дает, но все равно мимо (это не совсем Делфи, но думаю понятно)
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)
Re: Вопрос от новичка
Если не трудно, какой путь к тайлу для
xLat = 42.886328125
xLon = 71.3614339192
zoom=17
мож я совсем туплю и неверно считаю?
xLat = 42.886328125
xLon = 71.3614339192
zoom=17
мож я совсем туплю и неверно считаю?
- feya
- Гуру
- Сообщения: 2034
- Зарегистрирован: 13 июл 2008, 10:45
- Благодарил (а): 5 раз
- Поблагодарили: 56 раз
Re: Вопрос от новичка
verywell
Вам для какой карты надо? Я вам дал для меркатора на сфере (гугл, dg и тп)
Вам для какой карты надо? Я вам дал для меркатора на сфере (гугл, dg и тп)
http://sasgis.org | SAS.Планета | SASPlanet
Re: Вопрос от новичка
feya писал(а): verywell
Вам для какой карты надо? Я вам дал для меркатора на сфере (гугл, dg и тп)
для гугла-сат, надо использовать ваш кэш для своих нужд. Т.е. стандартная задача - для точки с Lat/Lon определить путь и имя тайла из кэша, соответсвенно знать и окружающие тайлы, по вашим формулам X определяется правильно, Y нет. Если не сложно, то прямо по пунктам как это сделать?