четверг, 22 мая 2008 г.

Кодировка тайлов в Google Maps (Google Maps tiles encoding)

Для перевода координат вида trtqrstsstqt
http://kh0.google.com/kh?n=404&v=17&t=trtqrstsstqt

в координаты вида x=1240, y=637, z=6
http://mt2.google.com/mt?n=404&v=w2.74&hl=en&x=1240&y=637&zoom=6&s=Ga

надо делать так:

s='trtqrstssttqqts';
m='';
x=0; y=0;
for(i=1;i<s.length;i++) {
switch(s[i]) {
case 'q': x=x*2+0; y=y*2+0; break;
case 'r': x=x*2+1; y=y*2+0; break;
case 's': x=x*2+1; y=y*2+1; break;
case 't': x=x*2+0; y=y*2+1; break;
} }
url='http://mt2.google.com/mt?n=404&v=w2.74&hl=ru&zoom='+(18-i)+'&x='+x+'&y='+y;

Обратное преобразование можно осуществить путем побитового совмещения координат x и y. При этом (0;0) дает q, (1;0) — r, (1;1) — s, (0;1) — t. Например:

x=1238; y=639; zoom=6;
ts=""; tc="qtrs";
for(i=0;i<17-zoom;i++) ts="tc[2*((x">>i)&1)+((y>>i)&1)]+ts;
}
ts="t"+ts;

Комментариев нет: