Example #1
0
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
Example #2
0
    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)
                                  )