Merge branch 'zserg-gh-44'
This commit is contained in:
		
						commit
						91a7622967
					
				@ -105,7 +105,7 @@ def decimal_to_dms(decimal, signed=True):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def dms_to_decimal(degrees, minutes, seconds, direction=' '):
 | 
					def dms_to_decimal(degrees, minutes, seconds, direction=' '):
 | 
				
			||||||
    sign = 1
 | 
					    sign = 1
 | 
				
			||||||
    if(direction[0] in 'NEne'):
 | 
					    if(direction[0] in 'WSws'):
 | 
				
			||||||
        sign = -1
 | 
					        sign = -1
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
        float(degrees) + float(minutes) / 60 + float(seconds) / 3600
 | 
					        float(degrees) + float(minutes) / 60 + float(seconds) / 3600
 | 
				
			||||||
 | 
				
			|||||||
@ -29,6 +29,11 @@ class Media(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    __name__ = 'Media'
 | 
					    __name__ = 'Media'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    d_coordinates = {
 | 
				
			||||||
 | 
					            'latitude' : 'latitude_ref',
 | 
				
			||||||
 | 
					            'longitude': 'longitude_ref'
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, source=None):
 | 
					    def __init__(self, source=None):
 | 
				
			||||||
        self.source = source
 | 
					        self.source = source
 | 
				
			||||||
        self.exif_map = {
 | 
					        self.exif_map = {
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,6 @@ image objects (JPG, DNG, etc.).
 | 
				
			|||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import imghdr
 | 
					import imghdr
 | 
				
			||||||
import LatLon
 | 
					 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import pyexiv2
 | 
					import pyexiv2
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
@ -68,9 +67,7 @@ class Photo(Media):
 | 
				
			|||||||
        if(not self.is_valid()):
 | 
					        if(not self.is_valid()):
 | 
				
			||||||
            return None
 | 
					            return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        key = self.exif_map['latitude']
 | 
					        key = self.exif_map[type]
 | 
				
			||||||
        if(type == 'longitude'):
 | 
					 | 
				
			||||||
            key = self.exif_map['longitude']
 | 
					 | 
				
			||||||
        exif = self.get_exif()
 | 
					        exif = self.get_exif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(key not in exif):
 | 
					        if(key not in exif):
 | 
				
			||||||
@ -79,29 +76,12 @@ class Photo(Media):
 | 
				
			|||||||
        try:
 | 
					        try:
 | 
				
			||||||
            # this is a hack to get the proper direction by negating the
 | 
					            # this is a hack to get the proper direction by negating the
 | 
				
			||||||
            #   values for S and W
 | 
					            #   values for S and W
 | 
				
			||||||
            latdir = 1
 | 
					 | 
				
			||||||
            if(type == 'latitude' and str(exif[self.exif_map['latitude_ref']].value) == 'S'):  # noqa
 | 
					 | 
				
			||||||
                latdir = -1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            londir = 1
 | 
					 | 
				
			||||||
            if(type == 'longitude' and str(exif[self.exif_map['longitude_ref']].value) == 'W'):  # noqa
 | 
					 | 
				
			||||||
                londir = -1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            coords = exif[key].value
 | 
					            coords = exif[key].value
 | 
				
			||||||
            if(type == 'latitude'):
 | 
					            return geolocation.dms_to_decimal(
 | 
				
			||||||
                lat_val = LatLon.Latitude(
 | 
					                    *coords,
 | 
				
			||||||
                    degree=coords[0],
 | 
					                    direction = exif[self.exif_map[self.d_coordinates[type]]].value
 | 
				
			||||||
                    minute=coords[1],
 | 
					 | 
				
			||||||
                    second=coords[2]
 | 
					 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                return float(str(lat_val)) * latdir
 | 
					
 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                lon_val = LatLon.Longitude(
 | 
					 | 
				
			||||||
                    degree=coords[0],
 | 
					 | 
				
			||||||
                    minute=coords[1],
 | 
					 | 
				
			||||||
                    second=coords[2]
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
                return float(str(lon_val)) * londir
 | 
					 | 
				
			||||||
        except KeyError:
 | 
					        except KeyError:
 | 
				
			||||||
            return None
 | 
					            return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -92,3 +92,13 @@ def time_convert(s_time):
 | 
				
			|||||||
        return time.gmtime((time.mktime(s_time)))
 | 
					        return time.gmtime((time.mktime(s_time)))
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        return s_time
 | 
					        return s_time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# isclose(a,b,rel_tol)
 | 
				
			||||||
 | 
					# To compare float coordinates a and b
 | 
				
			||||||
 | 
					# with relative tolerance c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def isclose(a, b, rel_tol = 1e-8):
 | 
				
			||||||
 | 
					    diff = abs(a - b)
 | 
				
			||||||
 | 
					    return (diff <= abs(rel_tol * a) and
 | 
				
			||||||
 | 
					            diff <= abs(rel_tol * b))
 | 
				
			||||||
 | 
				
			|||||||
@ -57,31 +57,31 @@ def test_get_coordinate_default():
 | 
				
			|||||||
    photo = Photo(helper.get_file('with-location.jpg'))
 | 
					    photo = Photo(helper.get_file('with-location.jpg'))
 | 
				
			||||||
    coordinate = photo.get_coordinate()
 | 
					    coordinate = photo.get_coordinate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert coordinate == 37.3667027222, coordinate
 | 
					    assert helper.isclose(coordinate,37.3667027222), coordinate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_get_coordinate_latitude():
 | 
					def test_get_coordinate_latitude():
 | 
				
			||||||
    photo = Photo(helper.get_file('with-location.jpg'))
 | 
					    photo = Photo(helper.get_file('with-location.jpg'))
 | 
				
			||||||
    coordinate = photo.get_coordinate('latitude')
 | 
					    coordinate = photo.get_coordinate('latitude')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert coordinate == 37.3667027222, coordinate
 | 
					    assert helper.isclose(coordinate,37.3667027222), coordinate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_get_coordinate_latitude_minus():
 | 
					def test_get_coordinate_latitude_minus():
 | 
				
			||||||
    photo = Photo(helper.get_file('with-location-inv.jpg'))
 | 
					    photo = Photo(helper.get_file('with-location-inv.jpg'))
 | 
				
			||||||
    coordinate = photo.get_coordinate('latitude')
 | 
					    coordinate = photo.get_coordinate('latitude')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert coordinate == -37.3667027222, coordinate
 | 
					    assert helper.isclose(coordinate,-37.3667027222), coordinate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_get_coordinate_longitude():
 | 
					def test_get_coordinate_longitude():
 | 
				
			||||||
    photo = Photo(helper.get_file('with-location.jpg'))
 | 
					    photo = Photo(helper.get_file('with-location.jpg'))
 | 
				
			||||||
    coordinate = photo.get_coordinate('longitude')
 | 
					    coordinate = photo.get_coordinate('longitude')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert coordinate == -122.033383611, coordinate
 | 
					    assert helper.isclose(coordinate,-122.033383611), coordinate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_get_coordinate_longitude_plus():
 | 
					def test_get_coordinate_longitude_plus():
 | 
				
			||||||
    photo = Photo(helper.get_file('with-location-inv.jpg'))
 | 
					    photo = Photo(helper.get_file('with-location-inv.jpg'))
 | 
				
			||||||
    coordinate = photo.get_coordinate('longitude')
 | 
					    coordinate = photo.get_coordinate('longitude')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert coordinate == 122.033383611, coordinate
 | 
					    assert helper.isclose(coordinate,122.033383611), coordinate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_get_coordinates_without_exif():
 | 
					def test_get_coordinates_without_exif():
 | 
				
			||||||
    photo = Photo(helper.get_file('no-exif.jpg'))
 | 
					    photo = Photo(helper.get_file('no-exif.jpg'))
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,3 @@
 | 
				
			|||||||
click>=6.2,<7.0
 | 
					click>=6.2,<7.0
 | 
				
			||||||
LatLon>=1.0.2,<2.0
 | 
					 | 
				
			||||||
requests>=2.9.1,<3.0
 | 
					requests>=2.9.1,<3.0
 | 
				
			||||||
send2trash>=1.3.0,<2.0
 | 
					send2trash>=1.3.0,<2.0
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user