/[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 708 by jonathan, Wed Apr 23 08:44:52 2003 UTC revision 1250 by jonathan, Fri Jun 20 09:27:43 2003 UTC
# Line 7  Line 7 
7    
8  __version__ = "$Revision$"  __version__ = "$Revision$"
9    
10    from Thuban import _
11    
12    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 35  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    
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 then the returned
66            value is a string with that value. If the parameter doesn't
67            exist an empty string is returned.
68            """
69    
70          for pair in self.params:          for pair in self.params:
71              p, v = pair.split("=")              p, v = pair.split("=")
# Line 50  class Projection(BaseProjection): Line 75  class Projection(BaseProjection):
75          return ""          return ""
76    
77      def GetAllParameters(self):      def GetAllParameters(self):
78            """Return list of 'parameter=value' strings"""
79          return self.params          return self.params
80    
81        def GetProjectedUnits(self):
82            if self.GetParameter("proj") == "latlong":
83                return PROJ_UNITS_DEGREES
84            else:
85                return PROJ_UNITS_METERS
86    
87      def __repr__(self):      def __repr__(self):
88          return repr(self.params)          return self.name + ": " + repr(self.params)
89    
90  class ProjFile:  class ProjFile:
91    
92      def __init__(self, filename):      def __init__(self, filename):
93          self.projs = []          """Intialize the ProjFile.
94    
95          self.SetFileName(filename)          filename -- name of the file that this ProjFile represents.
96            """
97    
98            self.__projs = []
99    
100            self.SetFilename(filename)
101            
102      def Add(self, proj):      def Add(self, proj):
103          self.projs.append(proj)          """Add the given projection to the end of the file. If 'proj'
104            already exists, it is replaced in the same location as the
105            original projection.
106            """
107    
108      def GetFileName(self):          try:
109          return self.filename              #
110                # see if the projection already exists.
111                # this only works if Projection doesn't override __eq__
112                #
113                self.__projs[self.__projs.index(proj)] = proj
114            except ValueError:
115                self.__projs.append(proj)
116    
117      def SetFileName(self, filename):      def Remove(self, proj):
118          self.filename = filename          """Remove the object proj from the projection file.
119    
120            Raises a ValueError is proj is not found.
121            """
122    
123            self.__projs.remove(proj)
124    
125        def Replace(self, oldproj, newproj):
126            """Replace the object 'oldproj' with 'newproj'.
127            
128            Raises ValueError if oldproj is not in the file.
129            """
130    
131            #
132            # see if the projection already exists.
133            # this only works if Projection doesn't override __eq__
134            #
135            self.__projs[self.__projs.index(oldproj)] = newproj
136    
137        def GetFilename(self):
138            """Return the filename where the ProjFile was read or will be
139            written to.
140            """
141    
142            return self.__filename
143    
144        def SetFilename(self, filename):
145            """Set the filename where the ProjFile will be written to."""
146            self.__filename = filename
147    
148      def GetProjections(self):      def GetProjections(self):
149          return self.projs          """Return a list of the projections in the order they were read
150            from the file or will be written.
151    
152            This is not a deep copy list, so any modifications made to the
153            Projection objects will be written to the file.
154            """
155    
156            return self.__projs
157    

Legend:
Removed from v.708  
changed lines
  Added in v.1250

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26