Odczyt danych GPS ze zdjęcia w PHP

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 oraz COMMENT 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.

Dodaj komentarz