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
|