/[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 745 - (hide 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 bh 6 # 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 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     class Projection(BaseProjection):
19    
20     """A proj4 projection object that remembers the parameters"""
21    
22 jonathan 745 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 bh 6 BaseProjection.__init__(self, params)
29 jonathan 745
30     if name is None:
31     name = _("Unknown")
32    
33 bh 6 self.params = params
34 jonathan 695 self.name = name
35 bh 6
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 jonathan 695
53     def GetName(self):
54 jonathan 738 """Return the name of the projection."""
55 jonathan 695 return self.name
56    
57 jonathan 726 def SetName(self, name):
58 jonathan 738 """Set the name of the projection."""
59 jonathan 726 if isinstance(name, StringTypes):
60     self.name = name
61    
62 jonathan 708 def GetParameter(self, param):
63 jonathan 738 """Return the projection value for the given parameter.
64 jonathan 708
65 jonathan 738 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 jonathan 708 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 jonathan 738 """Return list of 'parameter=value' strings"""
79 jonathan 695 return self.params
80    
81     def __repr__(self):
82 jonathan 726 return self.name + ": " + repr(self.params)
83 jonathan 695
84     class ProjFile:
85    
86     def __init__(self, filename):
87 jonathan 738 """Intialize the ProjFile.
88 jonathan 695
89 jonathan 738 filename -- name of the file that this ProjFile represents.
90     """
91    
92     self.__projs = []
93    
94     self.SetFilename(filename)
95 jonathan 695
96     def Add(self, proj):
97 jonathan 738 """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 jonathan 695
102 jonathan 738 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 jonathan 726 def Remove(self, proj):
112 jonathan 738 """Remove the objection proj from the projection file.
113 jonathan 726
114 jonathan 738 Raises a ValueError is proj is not found.
115     """
116 jonathan 695
117 jonathan 738 self.__projs.remove(proj)
118 jonathan 695
119 jonathan 738 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 jonathan 695 def GetProjections(self):
131 jonathan 738 """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