Changeset 25801


Ignore:
Timestamp:
12/06/13 20:14:44 (6 years ago)
Author:
mistic100
Message:

feature 3009: Add 'latitude' and 'longitude' fields in images table

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/include/functions_metadata.php

    r25018 r25801  
    123123      array_merge( 
    124124        $update_fields, 
    125         array_keys($conf['use_exif_mapping']) 
     125        array_keys($conf['use_exif_mapping']), 
     126        array('latitude', 'longitude') 
    126127        ); 
    127128  } 
  • trunk/include/functions_metadata.inc.php

    r25550 r25801  
    153153  if ($exif = @read_exif_data($filename)) 
    154154  { 
    155     $exif = trigger_event('format_exif_data', $exif, $filename, $map ); 
     155    $exif = trigger_event('format_exif_data', $exif, $filename, $map); 
     156 
     157    // configured fields 
    156158    foreach ($map as $key => $field) 
    157159    { 
     
    170172          $result[$key] = $exif[$tokens[0]][$tokens[1]]; 
    171173        } 
     174      } 
     175    } 
     176 
     177    // GPS data 
     178    $gps_exif = array_intersect_key($exif, array_flip(array('GPSLatitudeRef', 'GPSLatitude', 'GPSLongitudeRef', 'GPSLongitude'))); 
     179    if (count($gps_exif) == 4) 
     180    { 
     181      if ( 
     182        is_array($gps_exif['GPSLatitude'])  and in_array($gps_exif['GPSLatitudeRef'], array('S', 'N')) and 
     183        is_array($gps_exif['GPSLongitude']) and in_array($gps_exif['GPSLongitudeRef'], array('W', 'E')) 
     184        ) 
     185      { 
     186        $result['latitude'] = parse_exif_gps_data($gps_exif['GPSLatitude'], $gps_exif['GPSLatitudeRef']); 
     187        $result['longitude'] = parse_exif_gps_data($gps_exif['GPSLongitude'], $gps_exif['GPSLongitudeRef']); 
    172188      } 
    173189    } 
     
    187203} 
    188204 
     205 
     206/** 
     207 * Converts EXIF GPS format to a float value. 
     208 * @since 2.6 
     209 * 
     210 * @param string[] $raw eg: 
     211 *    - 41/1 
     212 *    - 54/1 
     213 *    - 9843/500 
     214 * @param string $ref 'S', 'N', 'E', 'W'. eg: 'N' 
     215 * @return float eg: 41.905468 
     216 */ 
     217function parse_exif_gps_data($raw, $ref) 
     218{ 
     219  foreach ($raw as &$i) 
     220  { 
     221    $i = explode('/', $i); 
     222    $i = $i[1]==0 ? 0 : $i[0]/$i[1]; 
     223  } 
     224  unset($i); 
     225 
     226  $v = $raw[0] + $raw[1]/60 + $raw[2]/3600; 
     227 
     228  $ref = strtoupper($ref); 
     229  if ($ref == 'S' or $ref == 'W') $v= -$v; 
     230 
     231  return $v; 
     232} 
     233 
    189234?> 
  • trunk/install/piwigo_structure-mysql.sql

    r22879 r25801  
    197197  `md5sum` char(32) default NULL, 
    198198  `added_by` smallint(5) NOT NULL default '0', 
    199   `rotation` tinyint unsigned default null, 
     199  `rotation` tinyint unsigned default NULL, 
     200  `latitude` double(8, 6) default NULL, 
     201  `longitude` double(9, 6) default NULL, 
    200202  PRIMARY KEY  (`id`), 
    201203  KEY `images_i2` (`date_available`), 
     
    203205  KEY `images_i4` (`hit`), 
    204206  KEY `images_i5` (`date_creation`), 
    205   KEY `images_i1` (`storage_category_id`) 
     207  KEY `images_i1` (`storage_category_id`), 
     208  KEY `images_i6` (`latitude`) 
    206209) ENGINE=MyISAM; 
    207210 
Note: See TracChangeset for help on using the changeset viewer.