/[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 6 by bh, Tue Aug 28 15:41:52 2001 UTC revision 1815 by bh, Mon Oct 13 15:53: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    
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):      def __init__(self, params, name = None, epsg = None):
26            """Initialize the Projection
27    
28            Parameters:
29    
30            params -- a list of 'parameter=value' strings
31    
32            name -- (optional) The name of the projectin. If None or omitted
33                    it defaults to 'Unknown' in the local language.
34    
35            epsg -- (optional) The EPSG code as a string.
36            """
37          BaseProjection.__init__(self, params)          BaseProjection.__init__(self, params)
38    
39            if name is None:
40                self.name = _("Unknown")
41            elif isinstance(name, StringTypes):
42                self.name = name
43    
44            self.epsg = epsg
45          self.params = params          self.params = params
46    
47      def ForwardBBox(self, bbox):      def ForwardBBox(self, bbox):
# Line 34  class Projection(BaseProjection): Line 59  class Projection(BaseProjection):
59          xs.append(x); ys.append(y)          xs.append(x); ys.append(y)
60          x, y = self.Forward(urx, lly)          x, y = self.Forward(urx, lly)
61          xs.append(x); ys.append(y)          xs.append(x); ys.append(y)
62            
63          return min(xs), min(ys), max(xs), max(ys)          return min(xs), min(ys), max(xs), max(ys)
64    
65        def GetName(self):
66            """Return the name of the projection."""
67            return self.name
68    
69        def Label(self):
70            if self.epsg:
71                return "EPSG % 5s %s" % (self.epsg, self.name)
72            return self.name
73    
74        def EPSGCode(self):
75            """Return the EPSG code as a string or None if there is none"""
76            return self.epsg
77    
78        def GetParameter(self, param):
79            """Return the projection value for the given parameter.
80    
81            If 'param' exists as a valid parameter return the associated
82            value as a string. If the parameter does not have a value (like
83            e.g. the 'south' parameter for utm) then the value is the
84            parameter name itself.
85    
86            If the parameter doesn't exist return an empty string.
87            """
88    
89            for pair in self.params:
90                if "=" in pair:
91                    p, v = pair.split("=")
92                else:
93                    p = v = pair
94                if p == param:
95                    return v
96    
97            return ""
98    
99        def GetAllParameters(self):
100            """Return list of 'parameter=value' strings"""
101            return self.params
102    
103        def GetProjectedUnits(self):
104            if self.GetParameter("proj") == "latlong":
105                return PROJ_UNITS_DEGREES
106            else:
107                return PROJ_UNITS_METERS
108    
109        def __repr__(self):
110            return self.name + ": " + repr(self.params)
111    
112    
113    class ProjFile:
114    
115        def __init__(self, filename):
116            """Intialize the ProjFile.
117    
118            filename -- name of the file that this ProjFile represents.
119            """
120    
121            self.__projs = []
122    
123            self.SetFilename(filename)
124        
125        def Add(self, proj):
126            """Add the projection to the end of the file."""
127            self.__projs.append(proj)
128    
129        def Remove(self, proj):
130            """Remove the object proj from the projection file.
131    
132            Raises a ValueError is proj is not found.
133            """
134    
135            self.__projs.remove(proj)
136    
137        def Replace(self, oldproj, newproj):
138            """Replace the object 'oldproj' with 'newproj'.
139            
140            Raises ValueError if oldproj is not in the file.
141            """
142    
143            #
144            # see if the projection already exists.
145            # this only works if Projection doesn't override __eq__
146            #
147            self.__projs[self.__projs.index(oldproj)] = newproj
148    
149        def GetFilename(self):
150            """Return the filename where the ProjFile was read or will be
151            written to.
152            """
153    
154            return self.__filename
155    
156        def SetFilename(self, filename):
157            """Set the filename where the ProjFile will be written to."""
158            self.__filename = filename
159    
160        def GetProjections(self):
161            """Return a list of the projections in the order they were read
162            from the file or will be written.
163    
164            This is not a deep copy list, so any modifications made to the
165            Projection objects will be written to the file.
166            """
167    
168            return self.__projs
169    

Legend:
Removed from v.6  
changed lines
  Added in v.1815

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26