Rozdział pierwszy: teoria
Słowem wstępu o Google Maps API
Google Maps API to interfejs programowania aplikacji pozwalający na osadzenie mapy Google na dowolnej stronie internetowej. Dostęp do niego odbywa się za pomocą obrazu (Google Static Maps API), języka ActionScript 3 (Google Maps for Flash) lub JavaScript.
Najnowsza, dostępna wersja oznaczona jest numerkiem trzy i w porównaniu z poprzedniczką charakteryzuje się przede wszystkim zwiększoną wydajnością, szczególnie na płaszczyźnie przeglądarek mobilnych dla iPhone'a i urządzeń bazujących na systemie Android.
Usługa ta jest darmowa, z tymże autorzy zostawili sobie w regulaminie furtkę na ewentualne wprowadzenie reklam („4.3 Advertising. The Service currently does not include advertising in the maps images. However, Google reserves the right to include advertising in the maps images provided to you through the Service, but will provide you with ninety (90) days notice prior to the commencement of advertising in the maps images..."). Podobnie nieodpłatne i wymagane do rozpoczęcia pracy jest pobranie unikatowego klucza działającego w obrębie podanej domeny.
Rysunek 1: usługa mapy Google.
Założenia artykułu
W tekście tym postaram się w jak najprostszy sposób przedstawić proces implementowania ww. interfejsu, tworząc przy tym elementarną bazę użytkowników, która pomoże w zobrazowaniu opisywanego problemu. Skatalogowane dane zostaną wykorzystane do wyświetlenia ich położenia na mapie wraz z możliwością ich personalizacji. Artykuł poruszać będzie tylko podstawowe aspekty tytularnego problemu.
Rozdział drugi: baza danych
Projektowanie bazy i tworzenie tabel
Domyślnie omawiane API nie wymaga korzystania z jakiejkolwiek bazy danych, czy języka wykonywanego po stronie serwera. Żeby jednak spełnić nasz cel, skorzystamy z dobrodziejstw MySQL i PHP.
Przy projektowaniu tabel zabierzemy pod uwagę kilka warunków:
- Informacje ogólne o użytkownikach będą rozdzielone od znaczników położenia, co pozwoli użytkownikowi na dodanie więcej niż jednej lokalizacji dla swojego profilu.
- Rozwiązanie to ma zezwalać na wyodrębnianie na mapie tylko użytkowników przypisanych do odpowiednich województw. Z tego powodu ich lista zostanie utworzona w oddzielnej tabeli.
- Relacje pomiędzy tabelami będą występowały z wykorzystaniem identyfikatorów (będących liczbami naturalnymi).
- Artykuł ten ogranicza się w swoich przykładach do obszaru Polski, przez co zakresy niektórych typów kolumn mogą być niewystarczające w przypadku zagranicznych danych (przykładowo nazw obszarów).
Dzięki temu możemy utworzyć trzy tabele.
Rysunek 2: diagram relacji zachodzących w bazie.
Pierwsza z nich, nazwana tutaj gma_markers zawiera informacje o wymienionych już oznaczeniach. Znaczniki te to nic innego jak punkty na mapie, wskazujące na wybraną lokalizację. Dane, które w niej zawrzemy, to przede wszystkim:
- długość (markers_longitude) i szerokość (markers_latitude) geograficzna, w formacie zmiennoprzecinkowym, z możliwością wpisania do 4 znaków przed i 6 po przecinku,
- identyfikator użytkownika o rozmiarze mniejszym niż maksymalna liczba możliwych do zdefiniowania markerów (ponieważ zakładamy, że jeden użytkownik może dodać więcej niż jedną pozycję, to hipotetycznie możemy przygotować się na to, że będzie ich więcej niż dostępnych w naszym serwisie profilów),
- identyfikator województwa, do którego należą podane współrzędne,
- informacje dodatkowe w postaci adresu oraz opisu miejsca.
CREATE TABLE gma_markers(
markers_id int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY ,
markers_user_id mediumint unsigned NOT NULL ,
markers_address varchar( 100 ) NOT NULL ,
markers_longitude float( 10, 6 ) NOT NULL ,
markers_latitude float( 10, 6 ) NOT NULL ,
markers_province_id tinyint unsigned NOT NULL ,
markers_description varchar(255)
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci ; # tabela przechowująca markery z współrzędnymi dla map wraz z identyfikatorem województwa
Pozostałe dwie tabele utworzone zostały w znacznym uproszczeniu i powinny być rozszerzane indywidualnie, już wg potrzeb.
Pierwsza z nich, gma_users zawiera listę użytkowników i została uproszczona do przetrzymywania automatycznie inkrementowanego identyfikatora oraz nazwy. Kolejna za to, na podobnej zasadzie, przechowuje dane dotyczące województw (długość pola w tym wypadku została ograniczona do 20 znaków, gdyż tyle najwięcej posiada obszar o najdłuższej nazwie). Warto zauwazyć, że w przypadku drugiej tabeli porównywanie znaków ustawione jest na utf8_polish_ci w celu poprawnego sortowania wyników z niej zwracanych.
CREATE TABLE gma_users(
users_id mediumint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY ,
users_name varchar( 50 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci ; # podstawowa, przykładowa tabela użytkowników
CREATE TABLE gma_provinces(
provinces_id tinyint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY ,
provinces_name varchar( 20 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_polish_ci ; # tabela przechowująca nazwy województw
Ładowanie







Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0
www.mapcreator.pl
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8
Browser: Mozilla/5.0 (X11; U; Linux x86_64; pl; rv:1.9.2.3) Gecko/20100407 Ubuntu/9.10 (karmic) Firefox/3.6.3