def edit_img(gpx, file_path): file_name = os.path.basename(file_path) try: jpg = JpegFile.fromFile(file_path) print "Processing `%s'..." % (file_name) except: print >> sys.stderr, "File `%s' is not image or broken" % (file_name) return False #Getting images datetime attribute exif = jpg.get_exif() ifd = exif.get_primary() if ifd.has_key(GPSIFD): print "`%s' already has gps tag" % (file_name) if not force_mode: return False try: date = ifd.__getattr__("DateTime") for entry in ifd.entries: tag, exif_type, data = entry if ifd.isifd(data): date = data.__getattr__("DateTimeOriginal") if date: break except: print >> sys.stderr, "Image File `%s' has wrong attributes" % (file_name) return False exif_date = datetime_iso(date) #Selecting tracking period print "Looking for `%s' exif date:" % (file_name), exif_date lonlat = parse_in_gpx(gpx, exif_date) if lonlat: print "Seems it was at LonLat:", lonlat jpg.set_geo(lonlat[1], lonlat[0]) jpg.writeFile(file_path) print "..Done" else: print "No one track found =( ..." return True
def __init__(self, node, version, geometry=None, attributes={}): """Construct a trackpint given an XML node.""" self.version = version self.attributes = {} if geometry: self.geometry = geometry self.attributes = attributes self.version = u"1.0" else: self.lat = float(node.getAttribute("lat")) self.lon = float(node.getAttribute("lon")) self.elevation = None self.time = None for node in node.childNodes: if node.nodeType != node.ELEMENT_NODE: continue if node.nodeName == "time": self.time = datetime_iso(node.firstChild.data) self.attributes['time'] = self.time elif node.nodeName == "ele": self.elevation = float(node.firstChild.data) else: raise ValueError, "Can't handle node", node.nodeName if self.elevation: self.geometry = Point( float(self.lat), float(self.lon), float(self.elevation) ) else: self.geometry = Point( float(self.lat), float(self.lon) )