Wykonanie zdjęcia urządzeniem posiadającym GPS, spowoduje zapisanie w nim dodatkowych informacji na temat lokalizacji. Są one przechowywane w metadanych obrazu (EXIF
), zatem można je bardzo łatwo odczytać przy pomocy odpowiedniej funkcji dostępnej w PHP.
Rozszerzenie do obsługi EXIF
zawiera w PHP kilka ciekawych funkcji. Aby było ono dostępne, PHP musi zostać skompilowane z opcją -–enable-exif
. Najbardziej przydatną w omawianym przykładzie będzie oczywiście exif_read_data()
, która odczytuje nagłówek z plików JPG oraz TIFF. Zwraca ona tablicę z danymi określającymi urządzenie oraz szczegółowe parametry zdjęcia. Funkcja przyjmuje następujące parametry:
array exif_read_data ( string $filename [, string $sections = NULL [, bool $arrays = false [, bool $thumbnail = false ]]] )
Kolejno oznaczają one:
- filename – nazwa pliku, z którego odczytujemy dane
- sections – lista sekcji, jakie mają zostać odczytane, np.
FILE
,COMPUTED
,THUMBNAIL
, itd. Gdy parametr nie zostanie określony, odczytane zostaną wszystkie - arrays – określa, czy poszczególne sekcje mają zostać tablicami.
COMPUTED
,THUMBNAIL
orazCOMMENT
zawsze zostają zwrócone w ten sposób, gdyż mogą zawierać nazwy powodujące konflikt z innymi sekcjami. - thumbnail – gdy ustawiony na
true
, zostanie odczytana miniaturka
Standardowe wywołanie funkcji spowoduje pobranie wszystkich danych ze zdjęcia. W przypadku, gdy wykonano je urządzeniem z GPS, pojawią się dodatkowe pola. Pierwszym miejscem, gdzie je zauważymy, jest lista sekcji:
[SectionsFound] => ANY_TAG, IFD0, THUMBNAIL, EXIF, GPS
Wystarczy sprawdzić poszczególne pola, aby oprócz informacji na temat urządzenia oraz parametrów wykonanego zdjęcia, znaleźć także dane GPS. Mogą one wyglądać następująco:
[GPSLatitudeRef] => N [GPSLatitude] => Array ( [0] => 33/1 [1] => 52/1 [2] => 129675/4096 ) [GPSLongitudeRef] => W [GPSLongitude] => Array ( [0] => 116/1 [1] => 18/1 [2] => 23882/4096 ) [GPSAltitudeRef] => [GPSAltitude] => 304/1
Jak widać na przedstawionym przykładzie, możemy odczytać szczegółowe dane na temat współrzędnych geograficznych miejsca, w którym wykonano zdjęcie. Są one wyrażone w stopniach, GPSLatitude
oraz GPSLongitude
zawierają tablice z odpowiednimi danymi: [0] – stopnie, [1] – minuty, [2] – sekundy (należy podzielić dane liczby). Aby uzyskać stosowane częściej w Google Maps oraz innych serwisach wartości dziesiętne, musimy odpowiednio przeliczyć powyższe dane. Należy w tym celu skorzystać ze wzoru:
DD = D + M/60 + S/3600
gdzie D to stopnie, M to minuty, a S to sekundy.
Należy także pamiętać, że w zależności od szerokości i długości geograficznej określonej w GPSLatitudeRef
oraz GPSLongitudeRef
musimy postawić odpowiednio znak minus. W tym przypadku jest tak dla drugiej wartości, która wskazuje na zachód (podobnie należy zrobić dla południa).
Ostatecznie przeliczone współrzędne posiadają następujące wartości 33.87555556 oraz -116.30166667 (dla 33° 52' 32" N i 116° 18' 06" W).
Tablica z danymi GPS zawiera także wartość GPSAltitude
, która określa wysokość w metrach, na jakiej wykonano zdjęcie.