Closes gh-50 Add unsigned option to geolocation.decimal_to_dms function and call with False from photo.py
				
					
				
			This commit is contained in:
		
							parent
							
								
									229a23c471
								
							
						
					
					
						commit
						c9d7bc7102
					
				| @ -44,18 +44,24 @@ def coordinates_by_name(name): | ||||
|                      | ||||
|     return None | ||||
| 
 | ||||
| def decimal_to_dms(decimal): | ||||
| def decimal_to_dms(decimal, signed=True): | ||||
|     # if decimal is negative we need to make the degrees and minutes negative also | ||||
|     sign = 1 | ||||
|     if(decimal < 0): | ||||
|         sign = -1 | ||||
| 
 | ||||
| 
 | ||||
|     # http://anothergisblog.blogspot.com/2011/11/convert-decimal-degree-to-degrees.html | ||||
|     degrees = int(decimal) | ||||
|     subminutes = abs((decimal - int(decimal)) * 60) | ||||
|     minutes = int(subminutes) * sign | ||||
|     subseconds = abs((subminutes - int(subminutes)) * 60) * sign | ||||
|     subseconds_fraction = Fraction(subseconds) | ||||
| 
 | ||||
|     if(signed == False): | ||||
|         degrees = abs(degrees) | ||||
|         minutes = abs(minutes) | ||||
|         subseconds_fraction = Fraction(abs(subseconds)) | ||||
| 
 | ||||
|     return (pyexiv2.Rational(degrees, 1), pyexiv2.Rational(minutes, 1), pyexiv2.Rational(subseconds_fraction.numerator, subseconds_fraction.denominator)) | ||||
| 
 | ||||
| def dms_to_decimal(degrees, minutes, seconds, sign=' '): | ||||
|  | ||||
| @ -172,9 +172,9 @@ class Photo(Media): | ||||
|         exif_metadata = pyexiv2.ImageMetadata(source) | ||||
|         exif_metadata.read() | ||||
| 
 | ||||
|         exif_metadata['Exif.GPSInfo.GPSLatitude'] = geolocation.decimal_to_dms(latitude) | ||||
|         exif_metadata['Exif.GPSInfo.GPSLatitude'] = geolocation.decimal_to_dms(latitude, False) | ||||
|         exif_metadata['Exif.GPSInfo.GPSLatitudeRef'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSLatitudeRef', 'N' if latitude >= 0 else 'S') | ||||
|         exif_metadata['Exif.GPSInfo.GPSLongitude'] = geolocation.decimal_to_dms(longitude) | ||||
|         exif_metadata['Exif.GPSInfo.GPSLongitude'] = geolocation.decimal_to_dms(longitude, False) | ||||
|         exif_metadata['Exif.GPSInfo.GPSLongitudeRef'] = pyexiv2.ExifTag('Exif.GPSInfo.GPSLongitudeRef', 'E' if longitude >= 0 else 'W') | ||||
| 
 | ||||
|         exif_metadata.write() | ||||
|  | ||||
| @ -25,3 +25,18 @@ def test_decimal_to_dms(): | ||||
|         check_value = round(check_value, 8) | ||||
| 
 | ||||
|         assert target_decimal_value == check_value, '%s does not match %s' % (check_value, target_decimal_value) | ||||
| 
 | ||||
| def test_decimal_to_dms_unsigned(): | ||||
| 
 | ||||
|     for x in range(0, 1000): | ||||
|         target_decimal_value = random.uniform(0.0, 180.0) * -1 | ||||
|      | ||||
|         dms = geolocation.decimal_to_dms(target_decimal_value, False) | ||||
|         check_value = dms[0].to_float() + dms[1].to_float() / 60 + dms[2].to_float() / 3600 | ||||
| 
 | ||||
|         target_decimal_value = round(target_decimal_value, 8) | ||||
|         check_value = round(check_value, 8) | ||||
| 
 | ||||
|         new_target_decimal_value = abs(target_decimal_value) | ||||
| 
 | ||||
|         assert new_target_decimal_value == check_value, '%s does not match %s' % (check_value, new_target_decimal_value) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jaisen Mathai
						Jaisen Mathai