Co zrobić z Google Latitude

11-24-2009 przez Michał Bielecki Zostaw odpowiedź »

Stosunkowo niedawno Google uruchomiło usługę geolokalizacji o nazwie Latitude. Usługa nie jest szczególnie popularna w Polsce, być może ze względu na fakt iż do korzystania z niej potrzebny jest telefon z obsługą latitude oraz plan taryfowy na dostęp do Internetu w komórce. Ponadto nawet jeżeli spełnimy te wymagania to aplikacja zaczyna być przydatna dopiero, gdy korzystają z niej również nasi znajomi. Sami będziemy mogli co najwyżej bawić się w sprawdzanie czy Google dokładnie wykryło nasze położenie.

W tej chwili Latitude oferuje cztery podstawowe funkcjonalności, jest to informacja o położeniu w statusie google talk, publiczna plakietka z naszym położeniem (którą można np. umieścić na swoim blogu) oraz dwie niedawno dodane funkcjonalności historia lokalizacji oraz alerty.

Mnie najbardziej zainteresowała jednak funkcja w publicznej plakietce, umożliwiająca pobieranie danych o obecnej lokalizacji w formacie JSON lub KML. Mając te dane można w prosty sposób zapisywać historię lokalizacji. Oczywiście Google oferuje już dostęp do historii, ale jedyne co możemy z tymi danymi zrobić to wyświetlić je na mapce, nie da się ich użyć w żaden inny sposób.

Na szybko napisałem więc skrypt (w PHP – bo tak), który przy pomocy CURL’a pobiera dane w formacie JSON i wrzuca je do mojej bazy danych. Ustawiłem, aby skrypt był uruchamiany co 10 minut i mam już swoją bazę danych z historią lokalizacji. Idealnie nie jest – telefon wysyła informację o swoim położeniu średnio co 40 minut, w dodatku, gdy korzysta tylko z nadajników GSM często określa położenie z dokładnością do kilku kilometrów. O dziwo, gdy telefon ma włączony moduł wi-fi dokładność jest znacznie większa – kilkanaście metrów (jak słusznie zauważono tydzień temu).

Dobrze, mamy już dane ale po co nam one? A chociażby do geotagowania zdjęć. Jest to bardzo przydatna opcja wspierana przez coraz większą ilość programów, np. Google Picasa. Jedynym wymaganiem jest ustawienie poprawnego czasu w aparacie oraz posiadanie przy sobie komórki. Jestem w trakcie pisania aplikacji, która sprawdzi wszystkie zdjęcia z wybranego katalogu, pobierze z EXIF ich daty wykonania, odpyta bazę danych poprzez zapytanie http pobierając dla każdego pliku długość i szerokość geogr. a następnie doda je do zdjęcia.

Zastosowań tego typu danych oczywiście jest więcej. Mam już kilka innych pomysłów, o których być może napiszę już niebawem.

Poniżej skrypt do pobierania danych:

<?php

$googleId = 'XXXXXX';

$dbh = new PDO('mysql:host=localhost;dbname=***', '***', '***');
$url = "http://www.google.com/latitude/apps/badge/api?user=$googleId&type=json";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_HTTPGET, true);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$curl_result = curl_exec($curl);
curl_close($curl);

$res = json_decode($curl_result);
$lat = $res->features[0]->geometry->coordinates[0];
$lng = $res->features[0]->geometry->coordinates[1];
$name = $res->features[0]->properties->reverseGeocode;
$timestamp = $res->features[0]->properties->timeStamp;
$accuracy = $res->features[0]->properties->accuracyInMeters;

$date = date('Y-m-d H:i:s', $timestamp);

$sql = 'SELECT id FROM locations WHERE timestamp="'.$date.'"';
$stmt = $dbh->prepare($sql);
$stmt->execute();
$data = $stmt->fetch();
if( $data['id'] == '' ) {
$sql = 'INSERT INTO locations (lat, lng, name, timestamp, accuracy) VALUES ('.$lat.','.$lng.',"'.$name.'","'.$date.'",'.$accuracy.')';
$stmt = $dbh->prepare($sql);
$stmt->execute();
}

?>
Reklama

Zostaw odpowiedź