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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1797 - (hide annotations)
Thu Oct 9 10:00:06 2003 UTC (21 years, 5 months ago) by bh
Original Path: trunk/thuban/Thuban/Model/proj.py
File MIME type: text/x-python
File size: 4633 byte(s)
(Projection.GetParameter): Handle
parameters that do not contain a "=". Update the doc-string

1 bh 1797 # Copyright (c) 2001, 2003 by Intevation GmbH
2 bh 6 # Authors:
3     # Bernhard Herzog <[email protected]>
4     #
5     # This program is free software under the GPL (>=v2)
6     # Read the file COPYING coming with Thuban for details.
7    
8     __version__ = "$Revision$"
9    
10 jonathan 745 from Thuban import _
11    
12 jonathan 726 from types import StringTypes
13    
14 bh 6 import Projection
15     BaseProjection = Projection.Projection
16     del Projection
17    
18 jonathan 1250 PROJ_UNITS_METERS = 1
19     PROJ_UNITS_DEGREES = 2
20    
21 bh 6 class Projection(BaseProjection):
22    
23     """A proj4 projection object that remembers the parameters"""
24    
25 jonathan 745 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 bh 6 BaseProjection.__init__(self, params)
32 jonathan 745
33 jonathan 758 if name is None:
34     self.name = _("Unknown")
35     elif isinstance(name, StringTypes):
36     self.name = name
37 jonathan 745
38 jonathan 758 self.params = params
39    
40 bh 6 def ForwardBBox(self, bbox):
41     """Return the bounding box of the corners of the bounding box bbox
42     """
43     # This is not really the correct way to determine the bbox of a
44     # projected shape, but for now it works well enough
45     llx, lly, urx, ury = bbox
46     xs = []; ys = []
47     x, y = self.Forward(llx, lly)
48     xs.append(x); ys.append(y)
49     x, y = self.Forward(llx, ury)
50     xs.append(x); ys.append(y)
51     x, y = self.Forward(urx, ury)
52     xs.append(x); ys.append(y)
53     x, y = self.Forward(urx, lly)
54     xs.append(x); ys.append(y)
55 jonathan 758
56 bh 6 return min(xs), min(ys), max(xs), max(ys)
57 jonathan 695
58     def GetName(self):
59 jonathan 738 """Return the name of the projection."""
60 jonathan 695 return self.name
61    
62 jonathan 708 def GetParameter(self, param):
63 jonathan 738 """Return the projection value for the given parameter.
64 jonathan 708
65 bh 1797 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 jonathan 738 """
72    
73 jonathan 708 for pair in self.params:
74 bh 1797 if "=" in pair:
75     p, v = pair.split("=")
76     else:
77     p = v = pair
78 jonathan 708 if p == param:
79     return v
80    
81     return ""
82    
83     def GetAllParameters(self):
84 jonathan 738 """Return list of 'parameter=value' strings"""
85 jonathan 695 return self.params
86    
87 jonathan 1250 def GetProjectedUnits(self):
88     if self.GetParameter("proj") == "latlong":
89     return PROJ_UNITS_DEGREES
90     else:
91     return PROJ_UNITS_METERS
92    
93 jonathan 695 def __repr__(self):
94 jonathan 726 return self.name + ": " + repr(self.params)
95 jonathan 695
96     class ProjFile:
97    
98     def __init__(self, filename):
99 jonathan 738 """Intialize the ProjFile.
100 jonathan 695
101 jonathan 738 filename -- name of the file that this ProjFile represents.
102     """
103    
104     self.__projs = []
105    
106     self.SetFilename(filename)
107 jonathan 695
108     def Add(self, proj):
109 jonathan 738 """Add the given projection to the end of the file. If 'proj'
110     already exists, it is replaced in the same location as the
111     original projection.
112     """
113 jonathan 695
114 jonathan 738 try:
115     #
116     # see if the projection already exists.
117     # this only works if Projection doesn't override __eq__
118     #
119     self.__projs[self.__projs.index(proj)] = proj
120     except ValueError:
121     self.__projs.append(proj)
122    
123 jonathan 726 def Remove(self, proj):
124 jonathan 758 """Remove the object proj from the projection file.
125 jonathan 726
126 jonathan 738 Raises a ValueError is proj is not found.
127     """
128 jonathan 695
129 jonathan 738 self.__projs.remove(proj)
130 jonathan 695
131 jonathan 758 def Replace(self, oldproj, newproj):
132     """Replace the object 'oldproj' with 'newproj'.
133    
134     Raises ValueError if oldproj is not in the file.
135     """
136    
137     #
138     # see if the projection already exists.
139     # this only works if Projection doesn't override __eq__
140     #
141     self.__projs[self.__projs.index(oldproj)] = newproj
142    
143 jonathan 738 def GetFilename(self):
144     """Return the filename where the ProjFile was read or will be
145     written to.
146     """
147    
148     return self.__filename
149    
150     def SetFilename(self, filename):
151     """Set the filename where the ProjFile will be written to."""
152     self.__filename = filename
153    
154 jonathan 695 def GetProjections(self):
155 jonathan 738 """Return a list of the projections in the order they were read
156     from the file or will be written.
157    
158     This is not a deep copy list, so any modifications made to the
159     Projection objects will be written to the file.
160     """
161    
162     return self.__projs
163    

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26