Руководство по GPS метаданным в фотографиях (ч. 1): Географические координаты и их извлечение из файлов


Оглавление: Руководство по GPS метаданным в фотографиях

1. Географические координаты и их извлечение из файлов

1.1 Программы для редактирования метаинформации под Windows и Linux

1.2 Географические координаты

1.3 Форматы записи географических координат

1.4 Как вывести координаты в десятичных числах из метаданных GPS

1.5 Как по координатам определить примерное расположение на земном шаре

1.6 Как узнать место, где снята фотография, без использования сторонних сервисов

1.7 Преобразование координат в десятичный вид и в минуты/секунды

1.8 Онлайн сервисы геолокации и просмотра метаданных

2. Как изменить GPS и другие метаданные в фотографии

3. Построение треков движения на основе группы фотографий


Программы для редактирования метаинформации под Windows и Linux

С помощью программ mat и mat2 можно просматривать и удалять метаданные файлов (поддерживается огромное количество типов файлов). Но что если вместо удаления нужно изменить метаданные в фотографии или в документе? Эти программы не помогут в данной задаче.

Но есть другие инструменты, которые могут менять GPS координаты, дату и время съёмки, информацию о камере и любую другую метаинформацию, которую только может содержать файл. Также они могут выборочно удалять те или иные теги. Например, можно удалить GPS координаты, но оставить информацию о камере. А можно наоборот добавить комментарии в метаинформацию, например, с описанием события и других замечаний о сделанном снимке.

Дополнительно мы разберёмся в различных способах записи координат — чтобы что-то записать или отредактировать, нужно в этом разбираться. Также мы научимся копировать значения координат из фотографии в карту, чтобы можно было просмотреть место съёмки без загрузки изображения на сторонние сервисы.

Ещё мы узнаем, как сохранять метаданные в файл, чтобы затем эти метаданные можно было записать в другую фотографию и как копировать метаданные между фотографиями.

Ну и бонусом мы научимся выводить только те метаданные, которые нам нужны и менять формат их вывода.

В этой инструкции мы рассмотрим сразу три потрясающих программы:

Они все работают и на Linux и на Windows — по ссылкам для каждой из них есть подробные инструкции по установке. У программы Geotag ещё и графический интерфейс! То есть спуфинг (подмена) GPS на фотографиях сводится к редактированию цифр в таблице.

Самой мощной из этих программ является ExifTool (кстати, оцените документацию по ней). При работе с редактированием географических координат, Geotag использует именно ExifTool, поэтому если вы используете Geotag на Windows вам нужно также установить и ExifTool и указать путь до исполнимого файла (в инструкциях по ссылкам выше всё уже есть). Кстати, mat2 для показа и удаления метаинформации также использует ExifTool. А Exiv2 использует, например, редактор фотографий GIMP для показа и редактирования метаинформации.

Также менять метаданные умеет программа jhead, но её возможности очень ограниченные — например, она не может менять GPS координаты в фотографии.


Географические координаты

Географические координаты это широта и долгота.

Широта определяет расположение «вверх-вниз» на глобусе/карте. Нулём считается экватор. Долгота определяет расположение «вправо-влево» на глобусе/карте. Нулём считается Гринвич. О самих числах и как «на глаз» прикидывать в какой части планеты расположены координаты мы поговорим ниже, а пока про то, как их записывают — форматов координат много.

Форматы записи географических координат

Координаты (широта от −90° до +90°, долгота от −180° до +180°) могут записываться:

  • в ° градусах в виде десятичной дроби (современный вариант)
  • в ° градусах и ′ минутах с десятичной дробью
  • в ° градусах, ′ минутах и ″ секундах с десятичной дробью (исторически сложившаяся форма записи)

Разделителем десятичной дроби может служить точка или запятая. Положительные знаки координат представляются (в большинстве случаев опускаемым) знаком «+» либо буквами:

  • «N» или «с. ш.» — северная широта,
  • «E» или «в. д.» — восточная долгота.

Отрицательные знаки координат представляются либо знаком «−», либо буквами:

  • «S» или «ю. ш.» — южная широта,
  • «W» или «з. д.» — западная долгота.

Буквы могут стоять как впереди, так и сзади. Единых правил записи координат не существует.

На картах поисковых систем по умолчанию показываются координаты в градусах с десятичной дробью со знаком «−» для отрицательной долготы. На картах Google и картах Яндекс вначале широта, затем долгота. Эти координаты видны, например, при прокладке маршрутов от произвольных точек. При поиске распознаются и другие форматы.

Нам необязательно во всём этом детально разбираться. С практической точки зрения нам надо запомнить: искать на сервисах карт (например, Google Карты) можно координаты в формате «2 числа с десятичной дробью; разделителем десятичной дроби является точка».

К примеру, в окно поиска по карте вместо географического названия можно ввести два десятичных числа, допустим: 12.459444 99.978611. И Карты покажут вам место на планете, располагающееся по соответствующим координатам.

Но вот в метаданных координаты хранятся в виде трёх чисел — по этой причине программы, показывающие метаданные файлов, по умолчанию также показывают их в виде трёх чисел (градусы, минуты и секунды).

Например, exiftool:

12 deg 27' 34.00" N
99 deg 58' 43.00" E

А exiv2 выводит так:

12deg 27' 34"
99deg 58' 43"

В принципе, координаты легко конвертируются в десятичные числа, но эту работу можно не делать, об этом ниже.

Ещё можно добавить, что, например, Google Карты принимают следующие форматы:


  • Градусы, минуты и секунды: 41°24'12.2"N 2°10'26.5"E
  • Градусы и десятичные минуты: 41 24.2028, 2 10.4418
  • Десятичные градусы: 41.40338, 2.17403

Но удобнее всего использовать именно десятичный формат.

Как вывести координаты в десятичных числах из метаданных GPS

Если из фотографии получить координаты в виде десятичных чисел, то можно найти их расположение на сервисах карт даже не загружая само изображение, а просто выполнив поиск по координатам.

Я нашёл две программы, которые умеют показывать координаты в десятичном виде.

Во-первых, это Geotag.

Во-вторых, это ExifTool в которой с помощью опций и указания имён тегов можно вывести именно то, что требуется.

С помощью опции «-lang ru» можно вывести название тегов метаинформации на русском языке:

exiftool -lang ru 20190930_095515.jpg

Если добавить опцию '-*GPS*' (кавычки обязательны!), то будут показаны только теги метаинформации, в названии которых присутствует строка «GPS»:

exiftool -lang ru '-*GPS*' 20190930_095515.jpg

Если нужна только широта и долгота, то название тегов такое «-GPSLatitude -GPSLongitude»:

exiftool -lang ru -GPSLatitude -GPSLongitude 20190930_095515.jpg

Наконец, если указать опцию -n, то координаты будут выведены в десятичном виде:


exiftool -lang ru -GPSLatitude -GPSLongitude -n 20190930_095515.jpg

Также помните, что с опцией -n не будут использоваться буквы для указания полушарий, а, если это требуется, будут выведены отрицательные числа.


Опция -c позволяет установить формат выводимых координат. Например, если вам слишком много (или слишком мало) цифр после десятичной точки, то их количество можно изменить этой опцией.

Например, чтобы показывалось только шесть цифр после точки, а также чтобы для обозначения полушарий не использовались буквы, а использовался знак минус нужно указать опцию -c '%+.6f'

exiftool -lang ru -GPSLatitude -GPSLongitude -c '%+.6f' 20190930_095515.jpg

С помощью опции -c можно настроить не только десятичный формат, но и любой другой — можно сделать абсолютно любую форму вывода координат.

Как по координатам определить примерное расположение на земном шаре

Что вы можете сказать глядя на следующие координаты?

GPS – Широта                    : +12.459444
GPS – Долгота                   : +99.978611

Если ничего, то сейчас мы научимся «на глаз» определять примерное расположение по координатам даже без карты — хотя бы в каких полушариях находится координата и как далеко она от экватора, Гринвича и полюсов.

Широта определяет расположение «вверх-вниз» на глобусе/карте: 0° — экватор, 90° — северный полюс (верх глобуса), -90° — южный полюс (низ глобуса).

Долгота определяет расположение «вправо-влево» на глобусе/карте: 0 — Гринвич (Лондон/Великобритания), от 0° до +180° на восток (вправо) и от 0° до −180° на запад (влево).

Обратите внимание, что диапазон широты равен 180 градусам (половина окружности), а диапазон долготы 360 градусов (полная окружность). Диапазон долготы позволяет «перемещаться» по всей окружности земного шара (по всему экватору). А диапазон широты позволяет перемещаться только по видимой половине — если нужно было бы переместиться за северный/южный полюс, то для этого нужно сменить долготу, то есть «переехать» в другую часть экватора. Поэтому хватает 180° широты, но необходимо 360° долготы.

В соответствии с международным соглашением, меридиану, который проходит через Гринвичскую обсерваторию (Лондон, Великобритания) было присвоено значение 0° долготы, иными словами, он был избран в качестве точки отсчёта долготы на земном шаре. Долгота других мест измеряется как угол на восток или запад от нулевого меридиана, в диапазоне от 0° до +180° на восток и от 0° до −180° на запад".

Итак, вернёмся к нашим координатам:

GPS – Широта                    : +12.459444
GPS – Долгота                   : +99.978611

Широта 12 (положительное число) означает выше линии экватора, но не намного, где-то на 1/7 от всей высоты от экватора до северного полюса (90/12.46=7,22). Долгота 99 означает значительное отдаление от линии Гринвича в сторону востока — примерно четверть поворота земного шара на восток (180/99.97=0,55). (0,55 — это примерно половина от восточного полушария, которое составляет ½ от всей земли).

Если бы первая цифра (широта) была бы отрицательной, то координата была бы чуть ниже линии экватора. А если бы вторая цифра была бы отрицательной (долгота), то смещение было бы таким же большим, но уже в сторону запада (от Гринвича/Лондона).

Как узнать место, где снята фотография, без использования сторонних сервисов

Если вы не хотите загружать фотографию ни на какой сайт или сервис, то это вполне понятное желание.

Первый способ уже показан выше — извлеките из изображения координаты, перейдите на Google Maps и введите их, в одном из следующих форматов (различаются пробелами и запятыми, разделяющими два числа):

  • +12.459444 +99.978611
  • +12.459444, +99.978611
  • +12.459444,+99.978611

Знак + (плюс) писать необязательно, но знак минус (если он есть) писать обязательно.

Если вдруг у координаты нет десятичных цифр, то добавьте к ней «.0», иначе сервис не поймёт, что это координаты — оба числа должны быть с точкой и цифрой после неё.

Второй способ — использовать Geotag. Эта программа в один клик запускает свой локальный веб-сервер на котором размещена веб-страница с картой, открывает браузер и показывает на карте фотографии, которые вы выбрали.

Итак, запускаем Geotag и добавляем фотографии.

Теперь выбираем фотографии, которые мы хотим увидеть на карте (можно выбрать одну, или несколько, или все).

Кликаем правой кнопкой мыши по списку изображений и выбираем нужное действие.

Будет открыт браузер с такой страницей.

Обратите внимание:

  • это не статичная картинка, это интерактивная карта
  • адрес страницы localhost
  • на карте присутствует меню с возможными действиями

Преобразование координат в десятичный вид и в минуты/секунды

Прежде чем перейти к редактированию координат, давайте научимся их преобразовывать. Как уже было сказано выше, координаты хранятся в трёх числах (градусы, минуты и секунды). Некоторые программы принимают новое значение координат в десятичном виде, а некоторые в том виде, в каком они хранятся в метаданных (три рациональных числа). Поэтому не будет лишним научиться конвертировать координаты.

В десятичный вид преобразование происходит по следующей формуле:

ГРАДУС + МИНУТЫ/60 + СЕКУНДЫ/3600

То есть градус остаётся как есть, а минуты и секунды делятся на 60 и 3600 соответственно.

Если в строке присутствуют буквы S (юг) или W (запад), то перед числом ставится знак минус. Вот и всё.

Чтобы не считать вручную (к тому же, при преобразовании в минуты и секунды нужно выполнить несколько действий), напишем небольшой скрипт, который будет это делать за нас.

Создадим файл geoconverter.php:

gedit geoconverter.php

И скопируем в него:

#!/usr/bin/php

<?php
$args = count($argv);

function DMStoDD($ref, $deg, $min, $sec) {
    // Converting DMS ( Degrees / minutes / seconds ) to decimal format
    if (( $ref == "S") OR ($ref == "W")) {
        return -($deg + ((($min * 60) + ($sec)) / 3600));
    }
    return $deg + ((($min * 60) + ($sec)) / 3600);
}

function DDtoDMS($dec) {
    // Converts decimal format to DMS ( Degrees / minutes / seconds ) 
    $vars = explode(".", $dec);
    $deg = $vars[0];
    $tempma = "0." . $vars[1];

    $tempma = $tempma * 3600;
    $min = floor($tempma / 60);
    $sec = $tempma - ($min * 60);

    return array("deg" => $deg, "min" => $min, "sec" => $sec);
}

if ($args == 2) {
    if ($argv[1] < 0) {
        echo 'S/W ';
    } else {
        echo 'N/E ';
    }
    foreach (DDtoDMS(abs($argv[1])) as $value) {
        echo round($value) . ' ';
    }
    echo PHP_EOL;
} elseif ($args == 5) {
    echo DMStoDD($argv[1], $argv[2], $argv[3], $argv[4]) . PHP_EOL;
} else {
    echo "Usage:" . PHP_EOL;
    echo "php ./geoconverter.php dd.dddddd" . PHP_EOL;
    echo "OR" . PHP_EOL;
    echo "php ./geoconverter.php N|S|E|W dd mm ss" . PHP_EOL;
}

Запускать так:

php ./geoconverter.php ДЕСЯТИЧНОЕ.ЧИСЛО

В этом случае будет вычислена координата в формате градусы, минуты и секунды.

Или так:

php ./geoconverter.php N|S|E|W ГРАДУСЫ МИНУТЫ СЕКУНДЫ

В этом случае будет вычислена координата в формате десятичного числа.

Примеры запусков:

php ./geoconverter.php N 12 27 34
12.459444444444

php ./geoconverter.php S 12 27 34
-12.459444444444

php ./geoconverter.php 12.459444
N/E 12 27 34

php ./geoconverter.php 99.978611
N/E 99 58 43

php ./geoconverter.php -99.978611
S/W 99 58 43

Надеюсь, они очевидны и их не нужно комментировать.

Онлайн сервисы по конвертации географических координат:

Онлайн сервисы геолокации и просмотра метаданных

Если вы всего лишь хотите просмотреть, какие метаданные присутствуют в файлах, а также посмотреть на карте где была снята фотография, то вы можете воспользоваться следующими онлайн-сервисами:

Теперь эти сервисы переведены на использование ExifTool, поэтому вы увидите абсолютно все метаданные вашего файла.

Продолжение: во второй части «Как изменить GPS и другие метаданные в фотографии» мы научимся удалять и менять теги GPS, время создания, комментарий, производителя и модель камеры в метаданных фотографий.


Рекомендуется Вам:

4 комментария to Руководство по GPS метаданным в фотографиях (ч. 1): Географические координаты и их извлечение из файлов

  1. Аноним:

    Получил несколько сообщений "Вы были заблокированны", хотя использовал 3 разных isp, т.е. ip-адреса различные. Никакой нагрузки не создовал, кроме просмотров статей. Lulzbaster и прочее не использовал.  Если не ошибаюсь, то данная проблема есть при переходе в "все статьи" и "книги", хотя конкретные статьи открываются без проблем - эта или доноры.

    В статье указан гостевой аккаунт, который больше не работает. При попытке войти узнаете причину.

    • Alexey:

      В статье указан гостевой аккаунт, который больше не работает. При попытке войти узнаете причину.

      Приветствую! Да, так и есть. Я для себя решил эту проблему покупкой у binarymaster аккаунта за $5. Очень доволен, теперь при автоматической проверки с использованием API (скрипт в этой статье) проверка проходит очень быстро. Деньги всё равно идут на оплату хостинга для сервера.

      Получил несколько сообщений "Вы были заблокированны", хотя использовал 3 разных isp, т.е. ip-адреса различные. Никакой нагрузки не создовал, кроме просмотров статей. Lulzbaster и прочее не использовал. Если не ошибаюсь, то данная проблема есть при переходе в "все статьи" и "книги", хотя конкретные статьи открываются без проблем - эта или доноры.

      Вы здесь совершенно не при чём. Используется кэширование и, видимо, в кэш попала страница когда на неё заходил заблокированный пользователь. Я понимаю, что это плохо, возможно, откажусь от кэширования на уровне WordPress (есть ещё одно кэширование на уровне веб-сервера). Сейчас сбросил кэш, всё должно работать.

  2. Nebosklon:

    Если в строке присутствуют буквы S (сервер) или W (запад), то перед числом ставится знак минус.

    Опечатка: "S" -->ЮГ.

    • Alexey:

      Приветствую! Спасибо, что обратили внимание! Поправил. До этого исправил подобную опечатку запад/восток и числа/цифры (после запятой). Я вычитываю статьи, но, как и у всех людей, у меня не обходится без ошибок.

Добавить комментарий для Alexey Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *