/[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 749 by jonathan, Fri Apr 25 14:22:35 2003 UTC revision 1860 by jan, Fri Oct 24 16:01:39 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    
 from Thuban import _  
   
10  from types import StringTypes  from types import StringTypes
11    
12    from Thuban import _
13    from Thuban.Lib.connector import Publisher
14    
15  import Projection  import Projection
16  BaseProjection = Projection.Projection  BaseProjection = Projection.Projection
17  del Projection  del Projection
18    
19    from messages import PROJECTION_ADDED, PROJECTION_REPLACED, PROJECTION_REMOVED
20    
21    PROJ_UNITS_METERS  = 1
22    PROJ_UNITS_DEGREES = 2
23    
24  class Projection(BaseProjection):  class Projection(BaseProjection):
25    
26      """A proj4 projection object that remembers the parameters"""      """A proj4 projection object that remembers the parameters"""
27    
28      def __init__(self, params, name = None):      def __init__(self, params, name = None, epsg = None):
29          """Initialize the Projection with a list of          """Initialize the Projection
30          'parameter=value' strings and an optional name. If 'name' is  
31          None, the name will be set to 'Unknown' in the local language.          Parameters:
32          """  
33            params -- a list of 'parameter=value' strings
34    
35            name -- (optional) The name of the projectin. If None or omitted
36                    it defaults to 'Unknown' in the local language.
37    
38            epsg -- (optional) The EPSG code as a string.
39            """
40          BaseProjection.__init__(self, params)          BaseProjection.__init__(self, params)
41    
42          self.SetName(name)          if name is None:
43          self.SetAllParameters(params)              self.name = _("Unknown")
44            elif isinstance(name, StringTypes):
45                self.name = name
46    
47            self.epsg = epsg
48            self.params = params
49    
50      def ForwardBBox(self, bbox):      def ForwardBBox(self, bbox):
51          """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 45  class Projection(BaseProjection): Line 62  class Projection(BaseProjection):
62          xs.append(x); ys.append(y)          xs.append(x); ys.append(y)
63          x, y = self.Forward(urx, lly)          x, y = self.Forward(urx, lly)
64          xs.append(x); ys.append(y)          xs.append(x); ys.append(y)
65            
66          return min(xs), min(ys), max(xs), max(ys)          return min(xs), min(ys), max(xs), max(ys)
67    
68      def GetName(self):      def GetName(self):
69          """Return the name of the projection."""          """Return the name of the projection."""
70          return self.name          return self.name
71    
72      def SetName(self, name):      def Label(self):
73          """Set the name of the projection.          if self.epsg:
74                return "EPSG % 5s %s" % (self.epsg, self.name)
75          If 'name' is None, the name will be set to 'Unknown'          return self.name
         in the local language.  
         """  
76    
77          if name is None:      def EPSGCode(self):
78              self.name = _("Unknown")          """Return the EPSG code as a string or None if there is none"""
79          elif isinstance(name, StringTypes):          return self.epsg
             self.name = name  
80    
81      def GetParameter(self, param):      def GetParameter(self, param):
82          """Return the projection value for the given parameter.          """Return the projection value for the given parameter.
83    
84          If 'param' exists as a valid parameter then the returned          If 'param' exists as a valid parameter return the associated
85          value is a string with that value. If the parameter doesn't          value as a string. If the parameter does not have a value (like
86          exist an empty string is returned.          e.g. the 'south' parameter for utm) then the value is the
87            parameter name itself.
88    
89            If the parameter doesn't exist return an empty string.
90          """          """
91    
92          for pair in self.params:          for pair in self.params:
93              p, v = pair.split("=")              if "=" in pair:
94                    p, v = pair.split("=")
95                else:
96                    p = v = pair
97              if p == param:              if p == param:
98                  return v                  return v
99    
# Line 82  class Projection(BaseProjection): Line 103  class Projection(BaseProjection):
103          """Return list of 'parameter=value' strings"""          """Return list of 'parameter=value' strings"""
104          return self.params          return self.params
105    
106      def SetAllParameters(self, params):      def GetProjectedUnits(self):
107          """Set the projection's parameters to the given parameter list."""          if self.GetParameter("proj") in [ 'latlong', 'longlat' ]:
108          self.params = params              return PROJ_UNITS_DEGREES
109            else:
110      def SetProjection(self, proj):              return PROJ_UNITS_METERS
         """Set the projection properties to those of the given projection.  
   
         This does not copy the object.  
         """  
   
         self.SetName(proj.name)  
         self.SetAllParameters(proj.params)  
111    
112      def __repr__(self):      def __repr__(self):
113          return self.name + ": " + repr(self.params)          return self.name + ": " + repr(self.params)
114    
115  class ProjFile:  
116    class ProjFile(Publisher):
117    
118      def __init__(self, filename):      def __init__(self, filename):
119          """Intialize the ProjFile.          """Intialize the ProjFile.
# Line 109  class ProjFile: Line 124  class ProjFile:
124          self.__projs = []          self.__projs = []
125    
126          self.SetFilename(filename)          self.SetFilename(filename)
       
     def Add(self, proj):  
         """Add the given projection to the end of the file. If 'proj'  
         already exists, it is replaced in the same location as the  
         original projection.  
         """  
127    
128          try:      def Add(self, proj):
129              #          """Add the projection to the end of the file."""
130              # see if the projection already exists.          self.__projs.append(proj)
131              # this only works if Projection doesn't override __eq__          self.issue(PROJECTION_ADDED, proj)
             #  
             self.__projs[self.__projs.index(proj)] = proj  
         except ValueError:  
             self.__projs.append(proj)  
132    
133      def Remove(self, proj):      def Remove(self, proj):
134          """Remove the objection proj from the projection file.          """Remove the object proj from the projection file.
135    
136          Raises a ValueError is proj is not found.          Raises a ValueError is proj is not found.
137          """          """
   
138          self.__projs.remove(proj)          self.__projs.remove(proj)
139            self.issue(PROJECTION_REMOVED, proj)
140    
141        def Replace(self, oldproj, newproj):
142            """Replace the object 'oldproj' with 'newproj'.
143    
144            Raises ValueError if oldproj is not in the file.
145            """
146            self.__projs[self.__projs.index(oldproj)] = newproj
147            self.issue(PROJECTION_REPLACED, oldproj, newproj)
148    
149      def GetFilename(self):      def GetFilename(self):
150          """Return the filename where the ProjFile was read or will be          """Return the filename where the ProjFile was read or will be

Legend:
Removed from v.749  
changed lines
  Added in v.1860

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26