display a map for photos if allowed. Note: there is a bug in that if the map div starts with display:none one needs to reload the frame or zoom in or they end up at minimum resolution. Still trying to sort this out.

This commit is contained in:
friendica
2015-03-16 22:06:03 -07:00
parent 7c194c37b8
commit bc22df9057
4 changed files with 59 additions and 1 deletions

View File

@@ -205,6 +205,17 @@ function photo_upload($channel, $observer, $args) {
// Create item container
$lat = $lon = null;
if($exif && $exif['GPS']) {
if(get_pconfig($channel_id,'system','allow_photo_location')) {
$lat = getGps($exif['GPS']['GPSLatitude'], $exif['GPSLatitudeRef']);
$lon = getGps($exif['GPS']['GPSLongitude'], $exif['GPSLongitudeRef']);
}
}
$item_flags = ITEM_WALL|ITEM_ORIGIN|ITEM_THREAD_TOP;
$item_restrict = (($visible) ? ITEM_VISIBLE : ITEM_HIDDEN);
$title = '';
@@ -212,6 +223,9 @@ function photo_upload($channel, $observer, $args) {
$arr = array();
if($lat && $lon)
$arr['coord'] = $lat . ' ' . $lon;
$arr['aid'] = $account_id;
$arr['uid'] = $channel_id;
$arr['mid'] = $mid;
@@ -481,3 +495,30 @@ function photos_create_item($channel, $creator_hash, $photo, $visible = false) {
return $item_id;
}
function getGps($exifCoord, $hemi) {
$degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
$minutes = count($exifCoord) > 1 ? gps2Num($exifCoord[1]) : 0;
$seconds = count($exifCoord) > 2 ? gps2Num($exifCoord[2]) : 0;
$flip = ($hemi == 'W' or $hemi == 'S') ? -1 : 1;
return floatval($flip * ($degrees + ($minutes / 60) + ($seconds / 3600)));
}
function gps2Num($coordPart) {
$parts = explode('/', $coordPart);
if (count($parts) <= 0)
return 0;
if (count($parts) == 1)
return $parts[0];
return floatval($parts[0]) / floatval($parts[1]);
}