Artykuł ten ma na celu jedynie zaprezentowanie na przykładzie strony maps.google.com jak serwis ten rozwiązał problem udostępniania swoich zdjęć satelitarnych.
Wszelkie zawarte tu informacje mają charakter wyłącznie edukacyjny i nie mogą służyć do działań nielegalnych i/lub niezgodnych z prawem. Autor artykuły nie ponosi żadnej odpowiedzialności za wszelkie skutki i szkody wynikłe z wykorzystania informacji tu zawartych.
Poniżej znajduje się drugi opis mojego autorstwa, instruujący w jaki sposób uzyskać zdjęcia satelitarne o dużej dokładności, znajdujące się tym razem w zasobach maps.google.com.
Najpierw trochę nudnej teorii i matematyki.
Zdjęcia satelitarne na maps.google.com są poukładane na wzór macierzy (nazwijmy ją macierzą główną). Macierz główna jest tworzona za pomocą macierzy prawdy (o niej później). A pozycja każdego zdjęcia jest zapisana w postaci macierzy jednowierszowej (o niej zaraz). Tu pragnę zaznaczyć, że nie połykałem żadnej czerownej tabletki i Neo z Matrixa u mnie jeszcze nie był :-)
Pozycja zdjęcia o dokładności około 0.6m/pixel jest zapisywana w postaci ciągu dziewiętnastu liter, np. trtqtrqsqtsqsstqsrt. Zdjęcie takie ma wymiary 256x256 pixela, odpowiada skali 20m na podziałkę i jest maksymalnym powiększeniem na jakie pozwala maps.google.com dla zdjęć o tej dokładności. Dla Polski nie ma chyba jeszcze zdjęć o większej dokładności metra/pixel.
Jeżeli w przeglądarce internetowej wpiszemy następujący link:
kh0.google.com/kh?n=404&v=14&t=trtqtrqsqtsqsstqsrt
to w odpowiedzi otrzymamy zdjęcie satelitarne o w/w parametrach. Pewnie od razu chcesz zapytać, skąd wziąłem ten cudowny link. Otóż, tu z pomocą przychodzi przeglądarka Mozilla Firefox (strona do pobrania przeglądarki). Jeżeli w przeglądarce tej otworzymy typowy link maps.google.com/?ie=UTF8&t=h&om=1&ll=53.444206,14.554144&spn=0.001498,0.003616 który kieruje do określonego miejsca (w tym przypadku jest to miasto Szczecin i mój blok w którym mieszkam - zdjęcie powyżej), a następnie klikniemy prawym klawiszem myszy w pustym miejscu i wybierzemy z rozwiniętego menu "Pokaż informacje po stronie", to otworzy się okienko "Informacje o stronie" z przydatnymi... informacjami oczywiście. Teraz przechodzimy do zakładki "Media" i okienku na samej górze, w którym są zamieszczone linki, szukamy interesującego nas zdjęcia. Gdy już je znajdziemy, to wiemy jaki jest do niego bezpośredni link i jaki jest ciąg je identyfikujący w macierzy.
W linku tym możemy zmieniać ciąg "kh0" na "kh1", "kh2", "kh3" - jest to numer serwera Google z którego pobrane zostało zdjęcie. Natomiast odpowiednio zmieniając ciąg trtqtrqsqtsqsstqsrt, możemy uzyskać kolejne zdjęcie satelitarne znajdujące się np. po lewej stronie zdjęcia z powyższego linku
I to jest właśnie sedno sprawy. Jak zmieniać ten ciąg aby uzyskać zdjęcia które nas interesują? Na szczęście udało mi się rozpracować jak to sobie maps.google.com wykombinowało.
Jak już wspomniałem, zdjęcia te są poukładane na wzór macierzy, a o ich pozycji w macierzy stanowi ciąg dziewiętnastu znaków, przy czym znaki przyjmują postać następujących liter: Q, R, S oraz T. Załóżmy, że ciąg tych dziewiętnastu znaków to macierz jednowierszowa. Jeżeli teraz spiszemy sobie wszystkie te macierze jednowierszowe np. z kwadratu o wymiarach 4x5 zdjęć i poukładamy analogicznie do ułożenia zdjęć to już mamy fragment macierzy głównej. Przykład poniżej.
trtqtrqsrrtqtsrsqrq | trtqtrqsrrtqtsrsqrr | trtqtrqsrrtqtsrsrqq | trtqtrqsrrtqtsrsrqr |
trtqtrqsrrtqtsrsqrt | trtqtrqsrrtqtsrsqrs | trtqtrqsrrtqtsrsrqt | trtqtrqsrrtqtsrsrqs |
trtqtrqsrrtqtsrsqsq | trtqtrqsrrtqtsrsqsr | trtqtrqsrrtqtsrsrtq | trtqtrqsrrtqtsrsrtr |
trtqtrqsrrtqtsrsqst | trtqtrqsrrtqtsrsqss | trtqtrqsrrtqtsrsrtt | trtqtrqsrrtqtsrsrts |
trtqtrqsrrtqtsrstrq | trtqtrqsrrtqtsrstrr | trtqtrqsrrtqtsrssqq | trtqtrqsrrtqtsrssqr |
Teraz trzeba się przyjrzeć zależnością które rządzą zmianami na poszczególnych pozycjach macierzy jednowierszowej. Pierwsze co się rzuca w oczy to cykliczność zmian liter na poszczególnych pozycjach, zarówno jeżeli przesuwamy się z lewej strony na prawo lub z góry na dół. W każdym wierszu i kolumnie macierzy głównej, na ostatniej pozycji macierzy jednowierszowej, zmiany następują naprzemiennie co jedną macierz jednowierszową, czyli mamy np. dla pierwszego rzędu poziomego: q, r, q, r. Na przedostatniej pozycji, zmiany następują co dwie macierze, czyli mamy np. r, r, q, q. Na trzeciej od końca pozycji macierzy jednowierszowej, zamiany następują już co 4 macierze, czyli mamy q, q, q, q, t, t, t, t (widać to dobrze w pierwszym rzędzie pionowym od lewej), na czwartej pozycji od końca co 8 macierzy, na piątej co 16, na szóstej co 32, itd. Łatwo zauważyć, że jest to ciąg liczb: 1, 2, 4, 8, 16, 32, 64, 128, 256... (typowy ciąg wagowy, stosowany w systemie binarnym). Czyli inaczej na to patrząc, zawsze na ostatniej pozycji macierzy jednowierszowej znaki q, r występują naprzemiennie co jeden, na drugiej pozycji od końca zawsze jest kolejność: dwa znaki np. r, dwa znaki q, na trzeciej pozycji od końca: cztery znaki np. q, cztery znaki t, itd. Poniżej plik TXT w którym znajduje się przykładowa kolumna z macierzy głównej na której doskonale widać te zależności, każdy wiersz to oczywiście macierz jednowierszowa: kolumna.txt
Teraz pora na wymienioną na samym początku macierz prawdy. Ponieważ nie chce mi się pisać tutaj wykładu z matematyki wyższej, to napiszę tylko po krótce co ona nam daje. A więc, jeżeli będziemy mieli tylko jeden wiersz i jedną kolumnę z macierzy głównej, przy czym wiersz i kolumna będą składały się np. z 100 macierzy jednowierszowych (dla wiersza i kolumny osobno), to mając macierz prawdy, bardzo szybko i bardzo łatwo możemy wyznaczyć ciąg (w naszym przypadku jest to te dziewiętnaście liter) definiujący każdą macierz jednowierszową, mieszczącą się w kwadracie zdefiniowanym przez wspomniany wiersz i kolumnę macierzy głównej. Tak więc, jak łatwo policzyć, możemy znać pozycję 10.000 macierzy jednowierszowych. A te 10.000 macierzy jednowierszowych to z kolei ciągi definiujące nasze zdjęcia satelitarne o wymiarach 256x256 pix każde. Czyli w ten sposób znamy pozycję każdego z tych zdjęć w jednym dużym zdjęciu o wymiarach 25600x25600 pix. Oczywiście im wiersz lub kolumna dłuższe, tym więcej pozycji będziemy znali.
O tym jak wyliczyć ciąg definiujący pojedyńczą macierz jednowierszową, nie będę już pisał. Mimo, iż jest to dosyć proste, to od tego jest dobra szkoła średnia (czy gimanazjum) lub studia o odpowiednim profilu. Poniżej macierz prawdy.
q | r | s | t | |
---|---|---|---|---|
q | q | r | r | q |
r | q | r | r | q |
s | t | s | s | t |
t | t | s | s | t |