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
	 Jaisen Mathai
						Jaisen Mathai