Here is step by step procedure to make this mod. to support getting GPS information in EXIF.
The procedure here is baed on 1.4.10. I am not sure if it is compatible to later version.
1.Modify GPS EXIF decoding, to support different endian
in include\makers\gps.php
find code, near line 237
$data = $hour+$minutes/60+$seconds/3600;
change it to
if ( $intel == 1)
{
$data = $hour+$minutes/60+$seconds/3600;
}
else
{
$data = $seconds+$minutes/60+$hour/3600;
}
2.Modify to extract GPS information of EXIF when adding new pictures.
in include/picmgmt.inc.php
find code, near line 24
if($CONFIG['read_iptc_data'] ){
include("include/iptc.inc.php");
}
ADD following code after
include("include/exif.php");
find code, near line 34
$image = $CONFIG['fullpath'] . $filepath . $filename;
$normal = $CONFIG['fullpath'] . $filepath . $CONFIG['normal_pfx'] . $filename;
$thumb = $CONFIG['fullpath'] . $filepath . $CONFIG['thumb_pfx'] . $filename;
ADD following code after
$Latitude='';
$Longitude='';
Find, 4 lines after previous code
if (!is_known_filetype($image)) {
return false;
} elseif (is_image($filename)) {
$imagesize = getimagesize($image);
ADD following after
$exifRawData=read_exif_data_raw($image,0);
if(is_array($exifRawData['GPS']))
{
$Longitude=$exifRawData['GPS']['Longitude'];
if(strncmp($exifRawData['GPS']['Longitude Reference'],"W",1)==0)
{
$Longitude = '-'.$Longitude;
}
$Latitude=$exifRawData['GPS']['Latitude'];
if(strncmp($exifRawData['GPS']['Latitude Reference'],"S",1)==0)
{
$Latitude = '-'.$Latitude;
}
}
Find, near line 130 ( the line count is that before modification)
$query = "INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename, filesize, total_filesize, pwidth, pheight, ctime, owner_id, owner_name, title, caption, keywords, approved, user1, user2, user3, user4, pic_raw_ip, pic_hdr_ip, position) VALUES ('{$CURRENT_PIC_DATA['aid']}', '" . addslashes($CURRENT_PIC_DATA['filepath']) . "', '" . addslashes($CURRENT_PIC_DATA['filename']) . "', '{$CURRENT_PIC_DATA['filesize']}', '{$CURRENT_PIC_DATA['total_filesize']}', '{$CURRENT_PIC_DATA['pwidth']}', '{$CURRENT_PIC_DATA['pheight']}', '" . time() . "', '{$CURRENT_PIC_DATA['owner_id']}', '{$CURRENT_PIC_DATA['owner_name']}','{$CURRENT_PIC_DATA['title']}', '{$CURRENT_PIC_DATA['caption']}', '{$CURRENT_PIC_DATA['keywords']}', '{$CURRENT_PIC_DATA['approved']}', '{$CURRENT_PIC_DATA['user1']}', '{$CURRENT_PIC_DATA['user2']}', '{$CURRENT_PIC_DATA['user3']}', '{$CURRENT_PIC_DATA['user4']}', '{$CURRENT_PIC_DATA['pic_raw_ip']}', '{$CURRENT_PIC_DATA['pic_hdr_ip']}', '{$CURRENT_PIC_DATA['position']}')";
MODIFY to
if($Latitude == '')
{
// modified end
$query = "INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename, filesize, total_filesize, pwidth, pheight, ctime, owner_id, owner_name, title, caption, keywords, approved, user1, user2, user3, user4, pic_raw_ip, pic_hdr_ip, position) VALUES ('{$CURRENT_PIC_DATA['aid']}', '" . addslashes($CURRENT_PIC_DATA['filepath']) . "', '" . addslashes($CURRENT_PIC_DATA['filename']) . "', '{$CURRENT_PIC_DATA['filesize']}', '{$CURRENT_PIC_DATA['total_filesize']}', '{$CURRENT_PIC_DATA['pwidth']}', '{$CURRENT_PIC_DATA['pheight']}', '" . time() . "', '{$CURRENT_PIC_DATA['owner_id']}', '{$CURRENT_PIC_DATA['owner_name']}','{$CURRENT_PIC_DATA['title']}', '{$CURRENT_PIC_DATA['caption']}', '{$CURRENT_PIC_DATA['keywords']}', '{$CURRENT_PIC_DATA['approved']}', '{$CURRENT_PIC_DATA['user1']}', '{$CURRENT_PIC_DATA['user2']}', '{$CURRENT_PIC_DATA['user3']}', '{$CURRENT_PIC_DATA['user4']}', '{$CURRENT_PIC_DATA['pic_raw_ip']}', '{$CURRENT_PIC_DATA['pic_hdr_ip']}', '{$CURRENT_PIC_DATA['position']}')";
//movidifed
}
else
{
$query = "INSERT INTO {$CONFIG['TABLE_PICTURES']} (aid, filepath, filename, filesize, total_filesize, pwidth, pheight, ctime, owner_id, owner_name, title, caption, keywords, approved, user1, user2, user3, user4, pic_raw_ip, pic_hdr_ip, position, latitude, longitude) VALUES ('{$CURRENT_PIC_DATA['aid']}', '" . addslashes($CURRENT_PIC_DATA['filepath']) . "', '" . addslashes($CURRENT_PIC_DATA['filename']) . "', '{$CURRENT_PIC_DATA['filesize']}', '{$CURRENT_PIC_DATA['total_filesize']}', '{$CURRENT_PIC_DATA['pwidth']}', '{$CURRENT_PIC_DATA['pheight']}', '" . time() . "', '{$CURRENT_PIC_DATA['owner_id']}', '{$CURRENT_PIC_DATA['owner_name']}','{$CURRENT_PIC_DATA['title']}', '{$CURRENT_PIC_DATA['caption']}', '{$CURRENT_PIC_DATA['keywords']}', '{$CURRENT_PIC_DATA['approved']}', '{$CURRENT_PIC_DATA['user1']}', '{$CURRENT_PIC_DATA['user2']}', '{$CURRENT_PIC_DATA['user3']}', '{$CURRENT_PIC_DATA['user4']}', '{$CURRENT_PIC_DATA['pic_raw_ip']}', '{$CURRENT_PIC_DATA['pic_hdr_ip']}', '{$CURRENT_PIC_DATA['position']}', '{$Latitude}', '{$Longitude}')";
}
3. Finish. Try it. Just add your JPEG files embedded with GPS information in any way Coppermine supports.
------------------------------------------------------------------------------------------------
Regarding the way to add GPS information into JPEG, you can try
1. Picasa ( no GPS needed)
2. gpsphoto.pl ( support RAW file)
3. gpsphotoLink (for Mac only)
4. Robogeo
I only have experience with Robogeo, which does great job, except that it didn't support Canon's CRW/CR2 file.