Отправляет email-рассылки с помощью сервиса Sendsay

Построй свой сайт на PHP!

  Все выпуски  

Построй свой сайт на PHP!


Информационный Канал Subscribe.Ru

Построй свой сайт на PHP!

искать в
Здравствуйте, уважаемые читатели!

Как-то нехорошо, рассылка есть, сайт есть, обещанная периодичность есть, люди подписываются, а вот меня-то, как раз, и нет. То есть я-то есть, но вот не пишу ничего. Это, конечно, абсолютный непорядок.

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

И я подумал, ну зачем в сотый раз рассказывать вам основы? Для этого лучше купить (или скачать) какую-нибудь книгу, например, книгу Дмитрия Котерова (за рекламу не проплачено). А в рассылке, мне кажется, следует публиковать статьи, вроде той, чтением которой вы чуть позже насладитесь. Как думаете?

А пока одно объявление. Я ищу человека, который пишет на PHP5 и (желательно) знаком с Java для своего (в обязательном порядке революционного ;-) проекта. Проект в перспективе коммерческий. Подробности - личным письмом или по ICQ. (координаты чуть ниже).

Итак, если вы все еще мужественно читаете вступление, знайте, что чуть ниже вас ожидает перевод статьи из январского номера журнала php|architect. Как говорится, enjoy!

Ведущий рассылки, The Wanderer.
E-mail: wanderer@osrc.info. ICQ: 233661333

Где была снята эта фотография?

Автор: Рон Гофф (Ron Goff)

Когда-нибудь интересовались, где была снята фотография? Все мы видели экзотические или просто интересные фотографии, но не было реального способа определить место их съемки. Теперь, когда GPS (Global Positioning System - глобальная система навигации и определения положения) и цифровая фотография тесно переплелись, мы можем узнать точное положение съемки наших любимых фотографий.

Сидя в своем комфортабельном офисе на сороковом этаже, он без усилий нажимает кнопку, отправляя робота слежения в небо с крыши гигантского небоскреба. Робот внезапно устремляется вниз по направлению к земле, останавливаясь всего на расстоянии одного шага от поверхности своей цели, грузовика последней модели, перевозящего какие-то грузы. Робот следует за транспортным средством и снимает изображение каждые несколько секунд, а затем посылает их в офис на сороковом этаже, используя свою Wi-Fi антенну. Когда фотографии получены, на мониторе компьютера в офисе помещается точка на карту, показывая, где они были сняты, отслеживая цель на всем протяжении ее маршрута.

Конечно же, эта история – фантастика, за исключением того, что касается изображений. Изображения, упомянутые в этой истории, были закодированы вместе с широтой и долготой, полученной со спутников GPS. С развитием цифровой фотографии и технологии GPS, у нас теперь есть доступ к таким изображениям.

Я помню, когда я впервые увидел GPS устройство. Это было около шести лет назад. Я был в археологическом классе в колледже и единственный, кто мог прикасаться к устройству, был учитель, потому что оно было довольно дорогим. Устройство, которое мы использовали в этом классе, было очень простое и выдавало только направление и долготу с широтой. Нам приходилось использовать его в тени, потому что ЖК-дисплей был довольно тусклый. Но было круто иметь возможность использовать такое устройство, потому что в то время немногие люди имели их. Сегодня GPS оборудование почти так же дешево, как и доступно, а также намного более сложно и заключено в намного меньшие корпуса; и вы, как ни странно, можете точно видеть, что изображено на ЖК-дисплее при солнечном свете. Так как пространство, которое требуется GPS устройствам для функционирования, уменьшилось, они находят применение в очень неожиданных, но полезных местах.

Все больше и больше сотовых телефонов попадают на рынок ежегодно, и каждый производитель добавляет новую технологию в свои продолжающие уменьшаться устройства. Одна из самых последних разработок – это интеграция GPS в сотовые телефоны. Кроме просто возможности сказать, где вы находитесь в любую заданную секунду, эта новая возможность открывает многие двери для навигации и слежения с использованием сотового телефона. Это, однако, определенно придает новое значение словам “большой брат”

Вместе с GPS получило распространение и включение цифровых камер в сотовые телефоны. Конечно, цифровые камеры были в телефонах уже достаточно давно, намного дольше, чем GPS, но с появлением новой технологии произошло их объединение. Если ваш телефон оснащен GPS, а также имеет встроенную цифровую камеру, вы должны иметь возможность посылать изображения по электронной почте или даже позже закачивать их на компьютер, при этом широта, долгота, направление и даже скорость, на которой была произведена съемка, будут присоединены к ним. Эта информация не видна на самом фото, но она непосредственно встраивается в заголовки изображения, когда производится съемка. Так как информация находится в изображении, задача состоит только в ее извлечении оттуда для того, чтобы затем отметить точку на карте, показывая, где была снята фотография – точно так, как в моей короткой фантастической истории выше.

Когда я впервые услышал о GPS информации, включенной в изображения из сотовых телефонов, я представлял, что это какая-то строчка в e-mail, посылаемая вместе с изображением. В некоторых ранних моделях производители действительно пошли этим путем, но в основном данные GPS сегодня помещаются в EXIF-тэги, которые находятся в отправляемом JPEG изображении.

Что такое EXIF?

Вот определение EXIF:

Годный для обмена формат файлов изображений, JPEG-кодированный файловый формат для цифровых камер, которые имеют сходные с TIFF тэги.

Большинство цифровых, профессиональных по сравнению с качеством сотовых телефонов, камер на рынке используют этот стандарт для включения тегов в заголовки, предоставляющие информацию о фотографии. Некоторые из них настолько детальны, что предоставляют вам тип камеры, настройки камеры, разрешение изображения, время и дату, когда была произведена съемка, а также многое другое. Эти тэги, будучи встроенными в фотографию, дают возможность фотографу или зрителю знать, как и даже где было снято фото, и могут быть просмотрены в любое время без необходимости обращаться к отдельному файлу.

Этот стандарт был создан в 1995 JEITA (Japan Electronic Informational Technology Association), чтобы стандартизировать не только способ записи изображения, но также атрибуты фотографии. Так как существует стандарт, многие программы, не привязанные к определенным типам камер или брендам, могут просматривать эти заголовки и использовать информацию для других приложений. Вы даже можете установить и сконфигурировать PHP с возможностью просмотра заголовков EXIF напрямую, без использования сторонних инструментов, что, между прочим, является тем, что мы будем делать чуть позже.

В этой статье мы увидим, как вытащить широту и долготу из EXIF заголовков фотографии, используя библиотеку под названием Exifer, написанную Джейком Олефски (Jake Olefsky) Затем мы отформатируем GPS информацию в формат, пригодный для использования, и нанесем месторасположение фотографии на карту мира.

Изображение, которое мы используем для примера, было сделано профессиональной цифровой камерой. Фотограф использовал программу, чтобы включить в заголовки EXIF GPS информацию с портативного GPS устройства, который записывал месторасположение и время фотографа, на протяжении всего его фотографического дня. Если вы получили фото с сотового телефона с поддержкой GPS или с профессиональной цифровой камеры с GPS информацией, добавленной после, широта и долгота будет так же помещена в EXIF заголовки в том же формате.

Давайте отметим на карте

Прежде чем начать, вам необходимо скачать последнюю версию Exifer. Я использовал для этого примера версию 1.4. Ее можно найти на http://www.jakeo.com/software/exif/. Это библиотека, которую мы будем использовать, чтобы получить информацию о широте и долготе.

Я выбрал этот путь потому, что он являлся самым простым и не требует никакой установки или настройки PHP, кроме размещения файлов на вашем веб-сервере. Нам придется использовать что-то вроде библиотеки, чтобы производить разбор и декодирование этих EXIF тэгов. В большинстве своем, тэги хранятся в формате, нечитабельном для человека. Если вы возьмете изображение и откроете его в каком-нибудь текстовом редакторе, вы увидите всего лишь набор бессмысленных символов – ничего такого, с чем бы вы могли работать.


Изображение 1
Copyright © FreeFoto ( freefoto.com), Ян Бриттон (Ian Britton).
(Фотография коммуникационной вышки. Но
это фото способно объединять и другие вещи, кроме всего лишь изображения.)

В первом листинге (листинг 1) мы присоединяем файл exif.php из библиотеки Exifer. Таким образом, мы можем вытащить EXIF информацию из нашего изображения. $path указывает, где на нашем сервере располагается изображение. Затем мы установим опцию $verbose в ноль.

include(“exif.php”);
$path=”image.jpg”;
$verbose = 0;
$result = read_exif_data_raw($path,$verbose);
Листинг 1.

Если verbose установлен в один, возвращаемое значение также будет включать необработанный вывод изображения, который, в нашем случае, будет всего лишь лишней нагрузкой. Последняя строчка листинга будет непосредственно получать тэги EXIF из изображения, читать их и помещать в массив, из которого мы затем можем очень просто вытянуть любую информацию. Вы можете запустить индексный файл, располагающийся вместе с пакетом Exifer – он просто читает и выводит на экран массив, созданный файлом exif.php.

В листинге 2 мы получаем широту и долготу из фотографии. В большинстве из фотографий, имеющих эту информацию, она будет отформатированы в формате чч мм сс (часы, минуты и секунды) и выглядеть наподобие 34 55.43 23.44 при получении из массива. В нашем изображении, этот формат только чч мм.

$lats = $result[GPS][Latitude];
$lons = $result[GPS][Longitude];
Листинг 2

В листинге 3 широта и долгота разбивается непосредственно на массив часов, минут и секунд. Так как мы получаем широту и долготу в таком формате, наши координаты нуждаются в преобразовании в обычную строку чисел с десятичной точкой, что-то вроде 35.445845.

$lat_ar = explode(“ “, $lats);
$lon_ar = explode(“ “, $lons);
$l_h = $lat_ar[0];
$l_m = $lat_ar[1];
$l_s = $lat_ar[2];
$lo_h = $lon_ar[0];
$lo_m = $lon_ar[1];
$lo_s = $lon_ar[2];
Листинг 3

В листинге 4 берутся все элементы массива, и преобразуется каждый из наборов цифр, чтобы выдать нам два пригодных к использованию числа, с помощью которых мы можем отметить место на нашей карте мира. Метод преобразования следующий. Вначале секунды делятся на 60:

сс/60

Затем мы делаем то же самое с минутами:

мм/60

После мы прибавляем минуты к секундам:

мм+сс


$lat_ar = explode(“ “, $lats);
$lon_ar = explode(“ “, $lons);
$l_h = $lat_ar[0];
$l_m = $lat_ar[1];
$l_s = $lat_ar[2];
$lo_h = $lon_ar[0];
$lo_m = $lon_ar[1];
$lo_s = $lon_ar[2];
if($l_m != ‘’){
$l_m = $l_m/60;
}
if($l_h != ‘’){
$l_h = round($l_h);
}
if($l_s != ‘’){
$l_s1 = $l_s/60;
$l_mt = $l_m+$l_s1;
}else{
$l_mt = $l_m;
}
$lat = $l_h+$l_mt;
if($lo_m != ‘’){
$lo_m = $lo_m/60;
}
if($lo_h != ‘’){
$lo_h = round($lo_h);
}
if($lo_s != ‘’){
$lo_s1 = $l_s/60;
$lo_mt = $lo_m+$lo_s1;
}else{
$lo_mt = $lo_m;
}
$long = $lo_h+$lo_mt;
$long = -$long;
$lat = $lat;
Листинг 4

Затем часы округляются до ближайшего целого значения, и, наконец, уже округленные часы

объединяются с минутами, которые уже были объединены с секундами.

чч+мм


Изображение 2

В листинг 5 я добавил широту и долготу своего родного городка, чтобы отметить его на карте. Это также послужит способом проверить точность нанесения. Если точка на карте не там, где она должна быть, вы будете знать, что что-то не так с кодом или картой. Конечно, вы можете заменить эту информацию широтой и долготой вашей собственной области. Большинство картографических сервисов в Интернете позволить вам перевести ваш адрес в координаты широты и долготы. Я обнаружил, что http://www.maporama.com включает большинство стран мира и отдает вам широту и долготу в простом для чтения формате в левой части их сайта.

Теперь мы подошли к собственно отметке мест на карте. Существует много различных способов сделать это, но, для этого примера, мы будем использовать один из наиболее простых и фундаментальных методов, используя преимущества так называемой цилиндрической проекционной карты. Вы можете использовать такую же карту, какую использовал я, или можете найти свою собственную цилиндрическую проекционную карту. Карта может быть больше или меньше, и это никак не повлияет на этот код. Сгодится большинство из цилиндрических проекционных карт, если они не имеют бордюра. Даже самый простой бордюр может отрицательно повлиять на вычисления в последующих листингах. Я тестировал эту программу, используя абстрактные карты с http://flatplanet.sourceforge.net/maps/, и она работала просто прекрасно, даже несмотря на то, что карты на этом сайте намного больше нашей карты. Кроме того, в листинге 5 мы начнем создавать нашу карту. Я использую функцию imagecolorresolveдля объявления цветов, потому что я обнаружил, что это намного более точно, чем использование imagecolorallocate с картой, которую я выбрал. Один цвет, $red1, будет использован для точки, которая указывает на мой родной городок, в то время как другой, $red2, будет указывать, где было снято фото, затем мы отметим два этих места на карте.

$lata = 32.78714;
$longa = -115.55937;
$im = imagecreatefromjpeg(“map.jpg”);
$red1 = imagecolorresolve ($im,255,5,5);
$red2 = imagecolorresolve ($im,255,5,0);
$width = imagesx($im);
$height = imagesy($im);
Листинг 5

Листинг 6 снимает размеры изображения, так что мы можем использовать их в вычислениях, используемых для отметки местоположений. Листинг 7 – это метод получения координат x и y, чтобы отметить точку на карте, используя ранее преобразованные координаты широты и долготы из нашего фото, а также ширину и высоту карты. Затем он создаст красный кружок на изображении карты, отмечая место, где была снята фотография. Опять же, это, возможно, один из наиболее простых способов нанесения места на карту, но определенно не единственный и/или лучший из них.

$x = (($long + 180) * ($width / 360));
$y = ((($lat * -1) + 90) * ($height / 180));
$xx = round($x);
$yy = round($y);
imagefilledrectangle($im,$xx-2,$yy-2,$xx+2,$yy+2, $red2);
Листинг 6

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

$x = (($longa + 180) * ($width / 360));
$y = ((($lata * -1) + 90) * ($height / 180));
$xx = round($x);
$yy = round($y);
imagefilledrectangle($im,$xx-2,$yy-2,$xx+2,$yy+2, $red1);
Листинг 7

Листинг 8 покажет только что созданную карту в вашем браузере. Если все идет по плану, вы должны увидеть тот же самый результат, что и на рисунке 2: карту мира с местом, где была снята фотография, отмеченным в Великобритании. Если вы заменили координаты моего родного городка своими, вы должны увидеть другую точку, показывающую вашу местность; иначе точка должна быть возле края Мексики. Вы можете захотеть проверить точность отметки по сравнению с другой картографической системой, вроде http://geoengine.nima.mil/muse-cgi-bin/rast_roam.cgi

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

header (“Content-type: image/jpeg”);
imagejpeg($im);
imagedestroy($im);
Листинг 8

Существуют и другие способы нанесения места на карту, и я расскажу о том, где найти некоторые из них. Как вы можете видеть из карты, созданной нашей программой, результаты, которые мы получили, предоставляют только основное представление о том, где было снято изображение. Но, если карта имеет возможность увеличения, пользователь сможет увидеть точное место, где она была снята. Многие карты, которые вы можете найти в Интернете, доступны в векторном и растровом формате и иногда включают дополнительную географическую информацию, такую как улицы и шоссе – ее использование определенно даст большую точность. Я знаю, что картографическая система Tiger (http://tiger.census.gov/cgi-bin/mapbrowse-tbl) созданная Управлением по переписи населения США, позволяет вам создавать карты с очень детальной информацией, но эти данные ограничиваются только США. Использование более детализированных карт будет означать, что ваш пользователь будет иметь возможность лучше понять, как попасть в место, где было снято изображение.

Вы также можете захотеть взглянуть на статью “Webmapping with MapServer”, написанную Родриго Бекке Кабрал (Rodrigo Becke Cabral) и опубликованную в июльском номере php|architect за 2004 год.

Итак, у вас есть программа, возможности которой похожи на описанные в моей краткой истории выше (минус крутой летающий робот). Теперь вы можете осуществить путешествие со своим сотовым телефоном с поддержкой GPS и снимать все крутые монументы на обочине, а затем создать карту, показывающую, где вы были и что видели.

Примеры

Существует несколько сайтов, специализирующихся на показе на карте места, где была снята фотография. Большинство из этих сайтов или проектов предназначены строго для развлечения и экспериментирования и очень немногие были адаптированы для профессионального рынка. Одним из лучших примеров использования этой технологии является http://www.geosnapper.com. Этот сайт посвящен фотографиям, имеющих GPS данные. Он помечает все загруженные изображения на карте мира, и вы просто используете прокрутку, чтобы подобраться к секции мира, которую вы бы хотели посмотреть, а затем щелкаете по изображению – очень хорошее и занимательное применение технологии. Еще один хороший пример – это WWMX (World Wide Media Exchange), располагающийся на http://www.wwmx.org. Этот сайт устроен немного иначе: вы непосредственно скачиваете приложение, которое работает с логами GPS, полученными от GPS устройства (в основном файл предоставляет GPS координаты каждую минуту). Затем программа сопоставляет время создания фотографий с временем координирования в GPS логе и выбирает соответствующее место. Используя эту информацию, она создает карту и веб-страницу, где отмечается каждое снятое изображение. Затем вы можете взять карту и страницу и закачать их на ваш собственный сайт. Пользователи этой системы в основном используют ее особенности для создания журналов путешествия и для демонстрации другим пути, по которому они следовали, и того, что они видели по дороге.

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

Вот еще профессиональные применения этой технологии (или, по меньшей мере, ее форм). На http://arcweb.esri.com/sc/album/index.html вы можете просматривать и определять расположение изображений со всего света. Эта система переводит адрес улицы фотографа в широту и долготу. Даже несмотря на то, что она работает немного иначе, чем наша, она также создает карту с расположением фото.

Тем не менее, вот мое любимое применение изображений с GPS тэгами: http://www.downgoes-thesystem.com/devzone/exiftest/final/. Пользователи непосредственно отправляют по электронной почте изображения со своих сотовых телефонов, и сайт читает EXIF заголовки и отмечает изображения на карте, ограничивающейся Токио. Карта имеет возможность увеличения и позволяет пользователям просматривать место съемки изображений, а также просматривать сами фото, нажимая на маркер расположения. Возможно, я люблю эту систему больше всего, потому что она непосредственно использует изображения с тегами с сотовых телефонов, а не добавляет данные в фото после.

Финальные мысли

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

Горстка этих сайтов должна все же насладиться всеми возможностями, которые предоставляют EXIF тэги. Необходимость вводить GPS данные отдельно – это лишнее и, возможно, менее точно, особенно, если вы имеете сотовый телефон или устройство, которое записывает эти данные в само фото. Мне кажется, что GPS становится все более и более популярным и, я предполагаю, будет поставляться с все большим числом электронных продуктов в будущем. Сегодня мы наблюдаем технологию GPS в доставочных грузовиках, применяющуюся для отслеживания водителей внутри города или штата. Или вы можете иметь машину с установленным устройством, которое будет следить за ней, если ее угонят.

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

Надеюсь, эта программа, так же, как и идея фотографий с встроенными GPS данными, взбудоражила ваше собственное воображение. Знаю, я был немного заинтригован возможностями этой технологии и ее применений, это может тянуться с самого первого раза, когда я ее увидел.

Объединение GPS и цифровых фотографий в сотовых телефонах произошло довольно недавно, и ее полезность не была полностью исследована. Было бы очень интересно увидеть, к чему придет эта технология в будущем.

Об авторе

Рон – технический директор/старший программист Conveyor Group (http://www.conveyorgroup.com/), южно-калифорнийской фирмы, специализирующейся на веб-разработке. Его обязанности включают разработку технологий, программирование, ИТ и сетевой менеджмент, стратегические научные исследования, управление серверными системами (вебмастер) и лидерство над проектами веб-сайтов.

 
Copyright © 2004-2005 Построй свой сайт на PHP!
Перепечатка возможна только с сохранением авторства.
issue_number: issue_date

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.phpdev
Отписаться

В избранное