/[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 758 by jonathan, Tue Apr 29 09:01:12 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          if name is None:          if name is None:
# Line 32  class Projection(BaseProjection): Line 44  class Projection(BaseProjection):
44          elif isinstance(name, StringTypes):          elif isinstance(name, StringTypes):
45              self.name = name              self.name = name
46    
47            self.epsg = epsg
48          self.params = params          self.params = params
49    
50      def ForwardBBox(self, bbox):      def ForwardBBox(self, bbox):
# Line 56  class Projection(BaseProjection): Line 69  class Projection(BaseProjection):
69          """Return the name of the projection."""          """Return the name of the projection."""
70          return self.name          return self.name
71    
72        def Label(self):
73            if self.epsg:
74                return "EPSG % 5s %s" % (self.epsg, self.name)
75            return self.name
76    
77        def EPSGCode(self):
78            """Return the EPSG code as a string or None if there is none"""
79            return self.epsg
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 75  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 GetProjectedUnits(self):
107            if self.GetParameter("proj") in [ 'latlong', 'longlat' ]:
108                return PROJ_UNITS_DEGREES
109            else:
110                return PROJ_UNITS_METERS
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 89  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 object 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):      def Replace(self, oldproj, newproj):
142          """Replace the object 'oldproj' with 'newproj'.          """Replace the object 'oldproj' with 'newproj'.
143            
144          Raises ValueError if oldproj is not in the file.          Raises ValueError if oldproj is not in the file.
145          """          """
   
         #  
         # see if the projection already exists.  
         # this only works if Projection doesn't override __eq__  
         #  
146          self.__projs[self.__projs.index(oldproj)] = newproj          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.758  
changed lines
  Added in v.1860

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26