first import
This commit is contained in:
50
sites/all/modules/geocoder/plugins/geocoder_handler/exif.inc
Normal file
50
sites/all/modules/geocoder/plugins/geocoder_handler/exif.inc
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
$plugin = array(
|
||||
'title' => t("Image/exif"),
|
||||
'description' => t('Get a location from an image that was taken with a GPS enabled phone or camera'),
|
||||
'callback' => 'geocoder_exif',
|
||||
'field_types' => array('file', 'image'),
|
||||
'field_callback' => 'geocoder_exif_field',
|
||||
);
|
||||
|
||||
function geocoder_exif($url, $options = array()) {
|
||||
// Invoke hook_file_download to check permissions
|
||||
// We are essentially duplicating the logic found in file.inc file_download()
|
||||
foreach (module_implements('file_download') as $module) {
|
||||
$function = $module . '_file_download';
|
||||
$result = $function($url);
|
||||
if ($result == -1) {
|
||||
drupal_set_message(t('You do not have permission to access this file'), 'error');
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// The user has permission to access the file. Geocode it.
|
||||
geophp_load();
|
||||
if ($data = exif_read_data($url)) {
|
||||
if (!isset($data['GPSLatitudeRef'])) return FALSE;
|
||||
$lat = geocoder_exif_from($data['GPSLatitudeRef'], $data['GPSLatitude']);
|
||||
$lon = geocoder_exif_from($data['GPSLongitudeRef'], $data['GPSLongitude']);
|
||||
$point = new Point($lon, $lat);
|
||||
return $point;
|
||||
}
|
||||
else return FALSE;
|
||||
}
|
||||
|
||||
function geocoder_exif_field($field, $field_item) {
|
||||
if ($field_item['fid']) {
|
||||
$file = file_load($field_item['fid']);
|
||||
return geocoder_exif($file->uri);
|
||||
}
|
||||
}
|
||||
|
||||
function geocoder_exif_from($dir, $data) {
|
||||
foreach ($data as $k => $item) {
|
||||
list($deg, $pct) = explode('/', $item);
|
||||
if ($pct) $data[$k] = $deg / $pct;
|
||||
}
|
||||
$point = (float) $data[0] + ($data[1] / 60) + ($data[2] / 3600);
|
||||
if (in_array($dir, array('S', 'W'))) $point = $point * -1;
|
||||
return $point;
|
||||
}
|
||||
Reference in New Issue
Block a user