/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/proj.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/proj.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 726 by jonathan, Thu Apr 24 16:05:56 2003 UTC revision 1802 by bh, Thu Oct 9 15:18:35 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001 by Intevation GmbH  # Copyright (c) 2001, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 7  Line 7 
7    
8  __version__ = "$Revision$"  __version__ = "$Revision$"
9    
10    from Thuban import _
11    
12  from types import StringTypes  from types import StringTypes
13    
14  import Projection  import Projection
15  BaseProjection = Projection.Projection  BaseProjection = Projection.Projection
16  del Projection  del Projection
17    
18    PROJ_UNITS_METERS  = 1
19    PROJ_UNITS_DEGREES = 2
20    
21  class Projection(BaseProjection):  class Projection(BaseProjection):
22    
23      """A proj4 projection object that remembers the parameters"""      """A proj4 projection object that remembers the parameters"""
24    
25      def __init__(self, params, name = "Unknown"):      def __init__(self, params, name = None):
26            """Initialize the Projection with a list of
27            'parameter=value' strings and an optional name. If 'name' is
28            None, the name will be set to 'Unknown' in the local language.
29            """
30    
31          BaseProjection.__init__(self, params)          BaseProjection.__init__(self, params)
32    
33            if name is None:
34                self.name = _("Unknown")
35            elif isinstance(name, StringTypes):
36                self.name = name
37    
38          self.params = params          self.params = params
         self.name = name  
39    
40      def ForwardBBox(self, bbox):      def ForwardBBox(self, bbox):
41          """Return the bounding box of the corners of the bounding box bbox          """Return the bounding box of the corners of the bounding box bbox
# Line 37  class Projection(BaseProjection): Line 52  class Projection(BaseProjection):
52          xs.append(x); ys.append(y)          xs.append(x); ys.append(y)
53          x, y = self.Forward(urx, lly)          x, y = self.Forward(urx, lly)
54          xs.append(x); ys.append(y)          xs.append(x); ys.append(y)
55            
56          return min(xs), min(ys), max(xs), max(ys)          return min(xs), min(ys), max(xs), max(ys)
57    
58      def GetName(self):      def GetName(self):
59            """Return the name of the projection."""
60          return self.name          return self.name
61    
     def SetName(self, name):  
         if isinstance(name, StringTypes):  
             self.name = name  
   
62      def GetParameter(self, param):      def GetParameter(self, param):
63            """Return the projection value for the given parameter.
64    
65            If 'param' exists as a valid parameter return the associated
66            value as a string. If the parameter does not have a value (like
67            e.g. the 'south' parameter for utm) then the value is the
68            parameter name itself.
69    
70            If the parameter doesn't exist return an empty string.
71            """
72    
73          for pair in self.params:          for pair in self.params:
74              p, v = pair.split("=")              if "=" in pair:
75                    p, v = pair.split("=")
76                else:
77                    p = v = pair
78              if p == param:              if p == param:
79                  return v                  return v
80    
81          return ""          return ""
82    
83      def GetAllParameters(self):      def GetAllParameters(self):
84            """Return list of 'parameter=value' strings"""
85          return self.params          return self.params
86    
87        def GetProjectedUnits(self):
88            if self.GetParameter("proj") == "latlong":
89                return PROJ_UNITS_DEGREES
90            else:
91                return PROJ_UNITS_METERS
92    
93      def __repr__(self):      def __repr__(self):
94          return self.name + ": " + repr(self.params)          return self.name + ": " + repr(self.params)
95    
96  class ProjFile:  class ProjFile:
97    
98      def __init__(self, filename):      def __init__(self, filename):
99          self.projs = {}          """Intialize the ProjFile.
100    
101          self.SetFileName(filename)          filename -- name of the file that this ProjFile represents.
102            """
103    
104            self.__projs = []
105    
106            self.SetFilename(filename)
107            
108      def Add(self, proj):      def Add(self, proj):
109          self.projs[proj] = 0          """Add the projection to the end of the file."""
110            self.__projs.append(proj)
111    
112      def Remove(self, proj):      def Remove(self, proj):
113          if self.projs.has_key(proj):          """Remove the object proj from the projection file.
114              del self.projs[proj]  
115            Raises a ValueError is proj is not found.
116            """
117    
118      def GetFileName(self):          self.__projs.remove(proj)
         return self.filename  
119    
120      def SetFileName(self, filename):      def Replace(self, oldproj, newproj):
121          self.filename = filename          """Replace the object 'oldproj' with 'newproj'.
122            
123            Raises ValueError if oldproj is not in the file.
124            """
125    
126            #
127            # see if the projection already exists.
128            # this only works if Projection doesn't override __eq__
129            #
130            self.__projs[self.__projs.index(oldproj)] = newproj
131    
132        def GetFilename(self):
133            """Return the filename where the ProjFile was read or will be
134            written to.
135            """
136    
137            return self.__filename
138    
139        def SetFilename(self, filename):
140            """Set the filename where the ProjFile will be written to."""
141            self.__filename = filename
142    
143      def GetProjections(self):      def GetProjections(self):
144          return self.projs.keys()          """Return a list of the projections in the order they were read
145            from the file or will be written.
146    
147            This is not a deep copy list, so any modifications made to the
148            Projection objects will be written to the file.
149            """
150    
151            return self.__projs
152    

Legend:
Removed from v.726  
changed lines
  Added in v.1802

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26