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 @ 475
History | View | Annotate | Download (2.78 KB)
1 |
|
---|---|
2 |
|
3 |
#
|
4 |
# ============================================
|
5 |
#
|
6 |
# Lector de los metadatos de GPS de las imagenes
|
7 |
#
|
8 |
execfile( script.getResource("../libs/import_utils.py").getAbsolutePath() ) |
9 |
|
10 |
import_from_jars("libs","com.drew.imaging.ImageMetadataReader") |
11 |
|
12 |
|
13 |
class ImageGPSMetadata: |
14 |
def __init__(self,pathname=None): |
15 |
self.load(pathname)
|
16 |
|
17 |
def load(self, pathname): |
18 |
self.__pathname = pathname
|
19 |
self.__values = dict() |
20 |
if pathname != None: |
21 |
metadata = ImageMetadataReader.readMetadata(pathname) |
22 |
for directory in metadata.getDirectories(): |
23 |
if directory.getName() == "GPS": |
24 |
for tag in directory.getTags(): |
25 |
self.__values[tag.getTagName().strip()] = tag.getDescription().strip()
|
26 |
|
27 |
def getLatitude(self, defaultValue=None): |
28 |
return self.__values.get("GPS Latitude",defaultValue) |
29 |
|
30 |
def getLatitudeRef(self, defaultValue=None): |
31 |
return self.__values.get("GPS Latitude Ref",defaultValue) |
32 |
|
33 |
def getLongitude(self, defaultValue=None): |
34 |
return self.__values.get("GPS Longitude",defaultValue) |
35 |
|
36 |
def getLongitudeRef(self, defaultValue=None): |
37 |
return self.__values.get("GPS Longitude Ref",defaultValue) |
38 |
|
39 |
def getAltitude(self, defaultValue=None): |
40 |
return self.__values.get("GPS Altitude",defaultValue) |
41 |
|
42 |
def getAltitudeRef(self, defaultValue=None): |
43 |
return self.__values.get("GPS Altitude Ref",defaultValue) |
44 |
|
45 |
def getDatum(self, defaultValue=None): |
46 |
return self.__values.get("GPS Map Datum",defaultValue) |
47 |
|
48 |
def getDate(self, defaultValue=None): |
49 |
return self.__values.get("GPS Date Stamp",defaultValue) |
50 |
|
51 |
def getTime(self, defaultValue=None): |
52 |
return self.__values.get("GPS Time-Stam",defaultValue) |
53 |
|
54 |
def hasPosition(self): |
55 |
if self.getLatitude() == None or self.getLatitudeRef() == None or self.getLongitude() == None or self.getLongitudeRef() == None: |
56 |
return False |
57 |
return True |
58 |
|
59 |
def getPoint(self): |
60 |
import re |
61 |
|
62 |
def getFloat(s): |
63 |
return float(s.replace(",",".")) |
64 |
|
65 |
if not self.hasPosition(): |
66 |
return None |
67 |
|
68 |
latitud_ref = self.getLatitudeRef().strip().lower()
|
69 |
longitud_ref = self.getLongitudeRef().strip().lower()
|
70 |
|
71 |
m = re.search("[ ]*([0-9,]+).* ([0-9,]+).* ([0-9,]+)", self.getLatitude()) |
72 |
la = getFloat(m.group(1)) + getFloat(m.group(2))/60 + getFloat(m.group(3))/3600 |
73 |
if latitud_ref == "S": |
74 |
la = -la |
75 |
|
76 |
m = re.search("[ ]*([0-9,]+).* ([0-9,]+).* ([0-9,]+)", self.getLongitude()) |
77 |
lo = getFloat(m.group(1)) + getFloat(m.group(2))/60 + getFloat(m.group(3))/3600 |
78 |
if longitud_ref in ("O", "W"): |
79 |
lo = -lo |
80 |
|
81 |
from org.gvsig.fmap.geom import GeometryLocator |
82 |
from org.gvsig.fmap.geom import Geometry |
83 |
|
84 |
geomManager = GeometryLocator.getGeometryManager() |
85 |
point = geomManager.createPoint(lo,la, Geometry.SUBTYPES.GEOM2D) |
86 |
return point
|