/[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 745 - (show annotations)
Fri Apr 25 10:26:50 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/Thuban/Model/proj.py
File MIME type: text/x-python
File size: 3920 byte(s)
(Projection.__init__): Change the default
        value for 'name' to None and then test if name is equal to None
        in the body of the constructor. This way the caller doesn't have to
        know what the default value should be. Namely, useful in load.py
        where we have to pick a default value if the 'name' parameter
        doesn't exist in the XML file.

1 # Copyright (c) 2001 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 class Projection(BaseProjection):
19
20 """A proj4 projection object that remembers the parameters"""
21
22 def __init__(self, params, name = None):
23 """Initialize the Projection with a list of
24 'parameter=value' strings and an optional name. If 'name' is
25 None, the name will be set to 'Unknown' in the local language.
26 """
27
28 BaseProjection.__init__(self, params)
29
30 if name is None:
31 name = _("Unknown")
32
33 self.params = params
34 self.name = name
35
36 def ForwardBBox(self, bbox):
37 """Return the bounding box of the corners of the bounding box bbox
38 """
39 # This is not really the correct way to determine the bbox of a
40 # projected shape, but for now it works well enough
41 llx, lly, urx, ury = bbox
42 xs = []; ys = []
43 x, y = self.Forward(llx, lly)
44 xs.append(x); ys.append(y)
45 x, y = self.Forward(llx, ury)
46 xs.append(x); ys.append(y)
47 x, y = self.Forward(urx, ury)
48 xs.append(x); ys.append(y)
49 x, y = self.Forward(urx, lly)
50 xs.append(x); ys.append(y)
51 return min(xs), min(ys), max(xs), max(ys)
52
53 def GetName(self):
54 """Return the name of the projection."""
55 return self.name
56
57 def SetName(self, name):
58 """Set the name of the projection."""
59 if isinstance(name, StringTypes):
60 self.name = name
61
62 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:
71 p, v = pair.split("=")
72 if p == param:
73 return v
74
75 return ""
76
77 def GetAllParameters(self):
78 """Return list of 'parameter=value' strings"""
79 return self.params
80
81 def __repr__(self):
82 return self.name + ": " + repr(self.params)
83
84 class ProjFile:
85
86 def __init__(self, filename):
87 """Intialize the ProjFile.
88
89 filename -- name of the file that this ProjFile represents.
90 """
91
92 self.__projs = []
93
94 self.SetFilename(filename)
95
96 def Add(self, proj):
97 """Add the given projection to the end of the file. If 'proj'
98 already exists, it is replaced in the same location as the
99 original projection.
100 """
101
102 try:
103 #
104 # see if the projection already exists.
105 # this only works if Projection doesn't override __eq__
106 #
107 self.__projs[self.__projs.index(proj)] = proj
108 except ValueError:
109 self.__projs.append(proj)
110
111 def Remove(self, proj):
112 """Remove the objection proj from the projection file.
113
114 Raises a ValueError is proj is not found.
115 """
116
117 self.__projs.remove(proj)
118
119 def GetFilename(self):
120 """Return the filename where the ProjFile was read or will be
121 written to.
122 """
123
124 return self.__filename
125
126 def SetFilename(self, filename):
127 """Set the filename where the ProjFile will be written to."""
128 self.__filename = filename
129
130 def GetProjections(self):
131 """Return a list of the projections in the order they were read
132 from the file or will be written.
133
134 This is not a deep copy list, so any modifications made to the
135 Projection objects will be written to the file.
136 """
137
138 return self.__projs
139

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26