首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Exif数据:“IFDRational”对象不可订阅

Django Exif数据:“IFDRational”对象不可订阅
EN

Stack Overflow用户
提问于 2020-10-17 17:27:43
回答 1查看 2.4K关注 0票数 5

我在代码中遇到了一个问题:'IFDRational‘对象不可订阅

这是痕迹:

代码语言:javascript
复制
lat = get_decimal_from_dms(geotags['GPSLatitude'], geotags['GPSLatitudeRef'])
degrees = dms[0][0] / dms[0][1] 

is问题是:可变值dms (45.0,46.0,34.29)

代码语言:javascript
复制
{'GPSAltitude': 22.90324416619237,
 'GPSAltitudeRef': b'\x00',
 'GPSDateStamp': '2020:10:17',
 'GPSDestBearing': 18.1919587128,
 'GPSDestBearingRef': 'M',
 'GPSHPositioningError': 65.0,
 'GPSImgDirection': 108.199192887128,
 'GPSImgDirectionRef': 'M',
 'GPSLatitude': (12.0, 26.0, 14.09),
 'GPSLatitudeRef': 'N',
 'GPSLongitude': (1.0, 47.0, 39.38),
 'GPSLongitudeRef': 'E',
 'GPSSpeed': 0.0,
 'GPSSpeedRef': 'K',
 'GPSTimeStamp': (12.0, 58.0, 42.0)}

比如我从一张照片中得到的。我认为代码将GPSLatitudeRef同化为dms / dms。问题是,GPSLatitudeRef是一个字母,没有一个数字。

代码语言:javascript
复制
def get_geotagging(exifgps):
    
        geotagging = {}
        for (idx, tag) in TAGS.items():
            if tag == 'GPSInfo':
                if idx not in exifgps:
                    raise ValueError("No EXIF geotagging found")
    
                for (key, val) in GPSTAGS.items():
                    if key in exifgps[idx]:
                        geotagging[val] = exifgps[idx][key]
    
        return geotagging
        
    def get_decimal_from_dms(dms, ref):

        degrees = dms[0][0] / dms[0][1]
        minutes = dms[1][0] / dms[1][1] / 60.0
        seconds = dms[2][0] / dms[2][1] / 3600.0
    
        if ref in ['S', 'W']:
            degrees = -degrees
            minutes = -minutes
            seconds = -seconds
    
        return round(degrees + minutes + seconds, 5)
        
    def get_lat_coordinates(geotags):
            lat = get_decimal_from_dms(geotags['GPSLatitude'], geotags['GPSLatitudeRef'])
            return lat
            
    def get_lon_coordinates(geotags):
            lon = get_decimal_from_dms(geotags['GPSLongitude'], geotags['GPSLongitudeRef'])
            return lon

try:
            exifgps = img.getexif()
            geotags = get_geotagging(exifgps)
            self.gpsinfo = geotags
        except Exception as e:
                pass
        
        #try:
        exifgps = img.getexif()
        geotags = get_geotagging(exifgps)
        self.latitude = get_lat_coordinates(geotags)
        #except Exception as e:
                #pass
        
        #try:
        exifgps = img.getexif()
        geotags = get_geotagging(exifgps)
        self.longitude = get_lon_coordinates(geotags)
        #except Exception as e:
                #pass
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-18 13:21:07

我无法理解为什么degrees = dms[0][0] / dms[0][1]是必要的,因为您可以使用degrees = dms[0]从元组中提取度。

取代

代码语言:javascript
复制
def get_decimal_from_dms(dms, ref):

    degrees = dms[0][0] / dms[0][1]
    minutes = dms[1][0] / dms[1][1] / 60.0
    seconds = dms[2][0] / dms[2][1] / 3600.0

代码语言:javascript
复制
def get_decimal_from_dms(dms, ref):

    degrees = dms[0]
    minutes = dms[1] / 60.0
    seconds = dms[2] / 3600.0
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64405326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档