Mapki bitmapowe again

O narzędziach do tworzenia własnych map, takich jak MapEdit czy cGPSmapper, a także o serwisach udostępniania, wymiany i przetwarzania danych geograficznych takich jak MapCenter, OpenStreetMap czy SDD (SRTM). Ogólnie, o wszystkim co związane z radością UMPowania.
Awatar użytkownika
Yogi
Początkujący
Posty: 15
Rejestracja: 17 mar 2007, 19:17

Mapki bitmapowe again

Post autor: Yogi »

W nawiązaniu do:
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
Formuły do tabelki

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)
1.4.5. Jak już wszystko wiemy to należy wygenerować listę plików do ściągnięcia wgetem lub total commanderem. Ja używam darmowego VStudio2008 Express ale to kobyła więc można użyć dowolnego innego języka skryptowego

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;
}
2. A na koniec sklejamy używając ImageMagic (http://www.imagemagick.org/), poniżej generator skryptu

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;
}
Jeśli dotarłeś do tego miejsca to gratuluję zacięcia :wink:
Ostatnio zmieniony 08 kwie 2008, 20:39 przez Yogi, łącznie zmieniany 4 razy.
Yogi
eTerex 32x, 60CX USA, eTrex Venture
makbyr
Nowy
Posty: 2
Rejestracja: 01 kwie 2008, 06:50

Post autor: makbyr »

Jaki człowiek cieniutki jest ! ;)
Spróbuję , ale już widzę że raczej polegnę ! ;)
Nie mniej bardzo dziękuję za informację.
Chyba że znajdzie się ktoś kto ma ściągnięte pliki i pozostanie tylko sklejenie.
Mam sporo sklejonych z mapyonline to można by wymienić
Pozdrawiam ! :)

ps
podziwiam za wiedzę
Awatar użytkownika
Magnoom
Radny
Posty: 1714
Rejestracja: 16 mar 2007, 10:48
Lokalizacja: Bełchatów
Kontakt:

Re: Mapki bitmapowe again

Post autor: Magnoom »

Yogi pisze:... Sorki za kompletnie rozwalone formatowanie...
Ależ to można dopracować czy to przez BBCode, czy HTML w swoim poście. Przyznam szczerze, że nie dobrnąłem nawet do połowy. Proponuję edycję tej wiadomości i zastosowanie chociażby znaczników [ code ], [ list= ].
Pozdrawiam Damian Gałka
GPS38; Rino530HCX; GPSMap 60CS; GPSMap 66ST: UMP-pcPL-topo oraz Topo PL, Instinct Tactical
Nuvi 760 + GA27C: UMP-pcPL, GPMapa 2007.3, CNE NT 2009; Holux M-215 + Fugawi
Awatar użytkownika
Yogi
Początkujący
Posty: 15
Rejestracja: 17 mar 2007, 19:17

Post autor: Yogi »

Będę miał chwilę to jeszcze to wyklaruję, w razie czego na priva mogę wysłać opis w znienawidzonym wORD'zie i tabelki w eXCEL'u
Yogi
eTerex 32x, 60CX USA, eTrex Venture
makbyr
Nowy
Posty: 2
Rejestracja: 01 kwie 2008, 06:50

Post autor: makbyr »

Ja poproszę ! ;)
ODPOWIEDZ