Клуб API Карт

геокоординаты объекта в пиксельные координаторы тайла

a-bermud
8 декабря 2015, 17:04

Задача нарезать тайлы shell-скриптом, отрисовать объекты по их кординатам в нужные тайлы

В руководствах пишут - выбрать за начала координат верхни левый угол, прикинул это (90°,-180°)

исходя из того что тайл №0 имеет размер 256 Х 256 получился следующий скрипт, который очень условно рисует

объект с большой погрешностью, а на тайле №0 вообще не в том полушарии (( есть источник где можно подчерпнуть как можно совместить свои тайлы и яндекс карты?

x = 0 # координаты внутри
y = 0 # тайла
def __init__(self, z):
    if z < 0 or z > 16: raise Exception('error', 'z not in range[0..16]')
    self.pixelsDimention = 2 ** (z+8)

def pixelsCoordsByGeoPoint(self,lat,lon):
    #определяем лево-верх как (0,0)
return int(self.pixelsDimention * (lat + 180) / 360), int(self.pixelsDimention * (lon - 90)*(-1) / 180)

def tileIndexByGeoPoint(self,lat,lon):
    x,y = self.pixelsCoordsByGeoPoint(lat,lon)
    indexX = int(math.modf(x/256)[1]) # номер тайла по оси х
    indexY = int(math.modf(y/256)[1]) # номер тайла по оси y
self.x = x - (256*indexX)
    self.y = y - (256*indexY)
    return indexX, indexY

 

1 комментарий
Подписаться на комментарии к посту
Так работать, конечно же, не будет, поскольку не учитывает проекцию.

Вот теоретические основы:
https://tech.yandex.ru/maps/doc/theory/concepts/coordinates-docpage/
Вот референсный код:
https://github.com/dimik/geohosting-server/blob/master/lib/projection/geo-to-global-pixels.js (js)
https://github.com/twirl/hsTiler/blob/master/include/Point.class.php (php)