http://www.garniak.pl/viewtopic.php?t=2224&highlight=
http://www.garniak.pl/viewtopic.php?t=783&highlight=
Sorki za kompletnie rozwalone formatowanie.
Procedura na przykładzie map z e-góry.pl, podobnie jest na mapyonline.pl gdzie ze względu na brak zabezpieczeń jest łatwiej, w podobny sposób można sobie radzić z mapa.targeo.pl, zumi.pl etc. Jak na razie nie udało mi się wyczaić jak działa viamichelin.com
1. Wyczajenie adresacji
1.1. Stawiamy sobie prozy - może być na naszym lokalnym komputerze (np.: FreeProxy 3.x http://www.handcraftedsoftware.org/)
1.1.1. Ustawiamy logowanie adresów do pliku txt (np.: c:\log\access.txt)
1.1.2. Uruchamiamy podgląd logów (np.: tail –f c:\log\access.txt )
1.2. Odpalamy przeglądarkę i ustawiamy żeby wszystkie połączenia wykonywała przez nasz lokalny proxy.
1.3. W pliku access.txt widzimy pobierane pliki.
1.4. Wchodzimy na stronkę z mapami.
1.4.1. W międzyczasie ładowania przeglądarki mapy powinien się załadować plik „ImageProperties.xml” <IMAGE_PROPERTIES WIDTH="11571" HEIGHT="7996" NUMTILES="1969" NUMIMAGES="1" VERSION="1.8" TILESIZE="256" />
W pliku tym mamy rozmiar obrazka docelowego (11571x7996) oraz liczbę kafelków (1969) i ich rozmiar (256)
1.4.2. Przeglądając mapkę (pion, poziom, zoom) zauważamy, że format pliku to Z-X-Y.jpg gdzie Z – zoom, X - współrzędna X, Y -współrzędna Y. W zależności od wielkości mapy max zoom jest 5 lub 6
1.4.3. Kolejne obrazki są w katalogach TileGroupN, gdzie N 0..max, w jednym katalogu jest 256 kafelków w kolejnych zoomach.
1.4.4. Rozłożenie kafelków można wyczaić na piechotę patrząc gdzie się zmienia N lub wyliczyć (dzielimy rozmiar przez 256 i zaokrąglamy w górę, apotem przez dwa zaokrąglając w górę aż otrzymamy rozmiar 1x1 który odpowiadz zoom’owi 0):
- Z - zoom 6 5 4 3 2 1 0
Y 8171 31,91797 32 16 8 4 2 1 1
X 11776 46 46 23 12 6 3 2 1
NumTiles 1969 1472 368 96 24 6 2 1
1969 1969 497 129 33 9 3 1
TileGroup 1-7 0-1 0 0 0 0 0
Kod: Zaznacz cały
6 5 4 3 2 1 0
8171 =C3/256 32 =ZAOKR.GÓRA(E3/2;0) =ZAOKR.GÓRA(F3/2;0) =ZAOKR.GÓRA(G3/2;0) =ZAOKR.GÓRA(H3/2;0) =ZAOKR.GÓRA(I3/2;0) =ZAOKR.GÓRA(J3/2;0)
11776 =C4/256 46 =ZAOKR.GÓRA(E4/2;0) =ZAOKR.GÓRA(F4/2;0) =ZAOKR.GÓRA(G4/2;0) =ZAOKR.GÓRA(H4/2;0) =ZAOKR.GÓRA(I4/2;0) =ZAOKR.GÓRA(J4/2;0)
=SUMA(E5:K5) =E3*E4 =F3*F4 =G3*G4 =H3*H4 =I3*I4 =J3*J4 =K3*K4
1969 =E5+F6 =F5+G6 =G5+H6 =H5+I6 =I5+J6 =J5+K6 =K5
1-7 0-1 =ZAOKR.DÓŁ(G6/256;0) =ZAOKR.DÓŁ(H6/256;0) =ZAOKR.DÓŁ(I6/256;0) =ZAOKR.DÓŁ(J6/256;0) =ZAOKR.DÓŁ(K6/256;0)Kod: Zaznacz cały
// bniski_ws
#define URLFORMAT "http://www.compass.krakow.pl/kopie_mapy/compass/bniski_wschod/TileGroup%d/5-%d-%d.jpg\n"
#define TILEGR_START 0
#define TILEGR_END 2
int gTGStartX[TILEGR_END] = { 11, 15} ;
int gTGStartY[TILEGR_END] = { 3, 15} ;
#define MAX_X 20
#define MAX_Y 23
int _tmain(int argc, _TCHAR* argv[])
{
int tg = TILEGR_START;
for( int y = MIN_Y; y <= MAX_Y; ++y )
for( int x = MIN_X; x <= MAX_X; ++x )
{
if( x == gTGStartX[ tg ] && y == gTGStartY[ tg ])
++tg;
printf( URLFORMAT, tg, x, y ); //compass
}
return 0;
}Kod: Zaznacz cały
#define MAP_NAME "bniski_ws"
#define TILE_SIZE "21x"
#define MAX_X 20
#define MAX_Y 23
#define ZOOM_LEVEL "5"
#define IM_PATH "\"C:\\Tools\\ImageMagick-6.3.9-Q16\\montage\""
const char params[] = IM_PATH \
" -tile " \
TILE_SIZE \
" -geometry x256 -gravity NorthWest ";
const char params1[] = IM_PATH \
" -tile 1x -geometry x256 -gravity NorthWest ";
int _tmain(int argc, _TCHAR* argv[])
{
for(int y = 0; y <= MAX_Y ; ++y )
{
printf("%s", params );
for( int x = 0; x <= MAX_X ;++x )
printf( ZOOM_LEVEL "-%d-%d.jpg ", x, y );
printf("out%d.jpg\n",y);
}
printf( params1 );
for(int y = 0; y <= MAX_Y; ++y )
printf("out%d.jpg ", y );
printf(MAP_NAME ".jpg\n");
return 0;
}