Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / scripts / tools / photo2shape / imagegpsmetadata.py @ 795

History | View | Annotate | Download (2.83 KB)

1

    
2

    
3
#
4
# ============================================
5
#
6
#  Lector de los metadatos de GPS de las imagenes
7
#
8
import os
9

    
10
from gvsig.uselib import use_jar
11

    
12
use_jar(os.path.join(os.path.dirname(__file__),"libs","metadata-extractor-2.8.1.jar"))
13
use_jar(os.path.join(os.path.dirname(__file__),"libs","xmpcore-5.1.2.jar"))
14

    
15
from com.drew.imaging import ImageMetadataReader
16

    
17

    
18
class ImageGPSMetadata:
19
  def __init__(self,pathname=None):
20
    self.load(pathname)
21

    
22
  def load(self, pathname):
23
    self.__pathname = pathname
24
    self.__values = dict()
25
    if pathname != None:
26
      metadata = ImageMetadataReader.readMetadata(pathname)
27
      for directory in metadata.getDirectories():
28
        if directory.getName() == "GPS":
29
          for tag in directory.getTags():
30
            self.__values[tag.getTagName().strip()] = tag.getDescription().strip()
31

    
32
  def getLatitude(self, defaultValue=None):
33
    return self.__values.get("GPS Latitude",defaultValue)
34

    
35
  def getLatitudeRef(self, defaultValue=None):
36
    return self.__values.get("GPS Latitude Ref",defaultValue)
37

    
38
  def getLongitude(self, defaultValue=None):
39
    return self.__values.get("GPS Longitude",defaultValue)
40

    
41
  def getLongitudeRef(self, defaultValue=None):
42
    return self.__values.get("GPS Longitude Ref",defaultValue)
43

    
44
  def getAltitude(self, defaultValue=None):
45
    return self.__values.get("GPS Altitude",defaultValue)
46

    
47
  def getAltitudeRef(self, defaultValue=None):
48
    return self.__values.get("GPS Altitude Ref",defaultValue)
49

    
50
  def getDatum(self, defaultValue=None):
51
    return self.__values.get("GPS Map Datum",defaultValue)
52

    
53
  def getDate(self, defaultValue=None):
54
    return self.__values.get("GPS Date Stamp",defaultValue)
55

    
56
  def getTime(self, defaultValue=None):
57
    return self.__values.get("GPS Time-Stam",defaultValue)
58

    
59
  def hasPosition(self):
60
    if self.getLatitude() == None or self.getLatitudeRef() == None or self.getLongitude() == None or self.getLongitudeRef() == None:
61
      return False
62
    return True
63

    
64
  def getPoint(self):
65
    import re
66

    
67
    def getFloat(s):
68
      return float(s.replace(",","."))
69

    
70
    if not self.hasPosition():
71
      return None
72

    
73
    latitud_ref = self.getLatitudeRef().strip().lower()
74
    longitud_ref = self.getLongitudeRef().strip().lower()
75

    
76
    m = re.search("[ ]*([0-9,]+).* ([0-9,]+).* ([0-9,]+)", self.getLatitude())
77
    la = getFloat(m.group(1)) + getFloat(m.group(2))/60 + getFloat(m.group(3))/3600
78
    if latitud_ref == "S":
79
      la = -la
80

    
81
    m = re.search("[ ]*([0-9,]+).* ([0-9,]+).* ([0-9,]+)", self.getLongitude())
82
    lo = getFloat(m.group(1)) + getFloat(m.group(2))/60 + getFloat(m.group(3))/3600
83
    if longitud_ref in ("O", "W"):
84
      lo = -lo
85

    
86
    from org.gvsig.fmap.geom import GeometryLocator
87
    from org.gvsig.fmap.geom import Geometry
88

    
89
    geomManager = GeometryLocator.getGeometryManager()
90
    point = geomManager.createPoint(lo,la, Geometry.SUBTYPES.GEOM2D)
91
    return point