PHP и EXIF ​​данные для Google Maps mashup - PullRequest
1 голос
/ 24 августа 2011

Я пытаюсь создать коллаж из карт Google, который будет показывать местоположение каждого изображения, которое я делаю на своем мобильном телефоне. У меня возникли некоторые проблемы с этим, и я не смог найти что-либо на Google, чтобы помочь мне.

По сути, у меня есть скрипт, который находит все изображения в папке и помещает имена этих изображений в массив - вот этот скрипт:

<?php
// create a handler for the directory
$handler = opendir("images");

// open directory and walk through the filenames
while ($file = readdir($handler)) {
// if file isn't this directory or its parent, add it to the results
if ($file != "." && $file != "..") {
$results[] = $file;
    }
}

// tidy up: close the handler
closedir($handler);

// done!
print_r ($results);     
?>

Это дает мне следующий массив:

Array
(
    [0] => IMAG0005.jpg
    [1] => IMAG0030.jpg
)

Эта часть в порядке и работает как положено. Теперь я использую этот массив для получения необходимых данных EXIF ​​для каждого изображения. Проблема в том, что если я использую массив для вывода, я получаю два отдельных массива и не могу с ними что-либо сделать, чтобы создать новые маркеры на карте. Я использую следующий код для получения данных EXIF ​​

for ($i = 0; $i < count($results); ++$i) {
//print $results[$i];

$arrPhotoExif = exif_read_data('images/'.$results[$i]);

$intLatDeg = GpsDivide($arrPhotoExif["GPSLatitude"][0]);
$intLatMin = GpsDivide($arrPhotoExif["GPSLatitude"][1]);
$intLatSec = GpsDivide($arrPhotoExif["GPSLatitude"][2]);

$intLongDeg = GpsDivide($arrPhotoExif["GPSLongitude"][0]);
$intLongMin = GpsDivide($arrPhotoExif["GPSLongitude"][1]);
$intLongSec = GpsDivide($arrPhotoExif["GPSLongitude"][2]);

// round to 5 = approximately 1 meter accuracy
$intLatitude = round(DegToDec($arrPhotoExif["GPSLatitudeRef"],
$intLatDeg,$intLatMin,$intLatSec),5);

$intLongitude = round(DegToDec($arrPhotoExif["GPSLongitudeRef"],
$intLongDeg,$intLongMin,$intLongSec), 5);

$markers = array("$intLatitude, $intLongitude");
print_r($markers);

Этот последний фрагмент кода печатает это как массив:

Array
(
    [0] => 51.508742, -0.134583
)
Array
(
    [0] => 38.410558, 17.314453
)

Я не могу использовать это для перечисления маркеров - в соответствии с документацией Google код должен выглядеть следующим образом для создания новых маркеров на карте.

var marker = new google.maps.Marker({
    position: **THIS IS WHERE I NEED TO OUTPUT THE GPS CO-ORDS**, 
    map: map,
    title:"Hello World!"
});

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

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

Спасибо, я знаю, что это довольно длинный пост.

Приветствия

1 Ответ

0 голосов
/ 24 августа 2011

Я подозреваю, что вы хотите создать один массив с несколькими записями. Вместо:

$markers = array("$intLatitude, $intLongitude");

... попробуйте использовать:

$markers[] = array("$intLatitude, $intLongitude");

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

После цикла $ markers должен содержать:

Array
(
    [0] => Array
        (
            [0] => 51.508742, -0.134583
        )

    [1] => Array
        (
            [0] => 38.410558, 17.314453
        )

)

Который вы можете затем циклически обработать и обработать при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...