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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1815 - (show annotations)
Mon Oct 13 15:53:39 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: 4662 byte(s)
(Projection.__init__): New parameter and
instance variable epsg. Update doc-string
(Projection.EPSGCode, Projection.Label): New methods to provide
access to EPSG code and a label for use in dialogs

1 # Copyright (c) 2001, 2003 by Intevation GmbH
2 # 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 from Thuban import _
11
12 from types import StringTypes
13
14 import Projection
15 BaseProjection = Projection.Projection
16 del Projection
17
18 PROJ_UNITS_METERS = 1
19 PROJ_UNITS_DEGREES = 2
20
21 class Projection(BaseProjection):
22
23 """A proj4 projection object that remembers the parameters"""
24
25 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)
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
46
47 def ForwardBBox(self, bbox):
48 """Return the bounding box of the corners of the bounding box bbox
49 """
50 # This is not really the correct way to determine the bbox of a
51 # projected shape, but for now it works well enough
52 llx, lly, urx, ury = bbox
53 xs = []; ys = []
54 x, y = self.Forward(llx, lly)
55 xs.append(x); ys.append(y)
56 x, y = self.Forward(llx, ury)
57 xs.append(x); ys.append(y)
58 x, y = self.Forward(urx, ury)
59 xs.append(x); ys.append(y)
60 x, y = self.Forward(urx, lly)
61 xs.append(x); ys.append(y)
62
63 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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26