/[thuban]/trunk/thuban/Thuban/UI/proj4dialog.py
ViewVC logotype

Contents of /trunk/thuban/Thuban/UI/proj4dialog.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1035 - (show annotations)
Mon May 26 17:03:08 2003 UTC (21 years, 9 months ago) by jan
File MIME type: text/x-python
File size: 9828 byte(s)
Replace the true/false of wxWindows by True/False of Python 2.2.1.

1 # Copyright (c) 2001 by Intevation GmbH
2 # Authors:
3 # Frank Koormann <[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 """
9 Dialogs to the geographic projection library PROJ
10 """
11
12 __version__ = "$Revision$"
13
14 from wxPython.wx import *
15 from string import split
16
17 from Thuban import _
18
19 ID_PROJECTION_EDIT = 4010
20 ID_PROJECTION_SELECT = 4011
21 ID_PROJECTION_OK = 4001
22 ID_PROJECTION_CANCEL = 4002
23
24 ID_UTM_DIALOG_OK = 4101
25 ID_UTM_DIALOG_CANCEL = 4102
26 ID_UTM_DIALOG_PROPOSE_ZONE = 4103
27
28 ID_UTM_PROPOSE_ZONE_DIALOG_TAKE = 4201
29 ID_UTM_PROPOSE_ZONE_DIALOG_CANCEL = 4202
30
31 projectionDict = {'None' : 'None', 'UTM' : 'utm'}
32 projectionMapping = {'None' : 'None', 'utm' : 'UTM'}
33
34 class Proj4Dialog(wxDialog):
35
36 """Let the user select a projection and specify related parameters"""
37
38 def __init__(self, parent, projectionParamsList, map_bounding_box):
39 wxDialog.__init__(self, parent, -1, _("Projection"),
40 style = wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
41
42 self.map_bounding_box = map_bounding_box
43 self.dialogLayout()
44 self.projectionParams={}
45 combo = self.projection
46 if projectionParamsList is not None:
47 for element in projectionParamsList:
48 key, val = split(element,'=')
49 self.projectionParams[key] = val
50 if self.projectionParams.has_key('proj'):
51 proj = projectionMapping[self.projectionParams['proj']]
52 combo.SetSelection(combo.FindString(proj))
53 else:
54 combo.SetSelection(combo.FindString('None'))
55 self.UpdateProjectionInfo()
56 else:
57 self.projection.SetValue('None')
58 self.UpdateProjectionInfo()
59
60
61 def dialogLayout(self):
62 topBox = wxBoxSizer(wxVERTICAL)
63
64 # Projection selection:
65 projectionBox = wxBoxSizer(wxHORIZONTAL)
66 projectionBox.Add(wxStaticText(self, -1, _("Projection")),
67 0, wxALIGN_CENTER|wxALL, 4)
68
69 self.projection = wxComboBox(self, ID_PROJECTION_SELECT, "",
70 style = wxCB_READONLY)
71 for projection in projectionDict.keys():
72 self.projection.Append(projection)
73 projectionBox.Add(self.projection, 0, wxALL, 4)
74 projectionBox.Add(wxButton(self, ID_PROJECTION_EDIT, _("Edit")),
75 0, wxALL, 4)
76 EVT_COMBOBOX(self, ID_PROJECTION_SELECT, self.OnProj4Select)
77 EVT_BUTTON(self, ID_PROJECTION_EDIT, self.OnEdit)
78
79 topBox.Add(projectionBox, 0, 0)
80
81 # Info about current projection:
82 self.projectionInfo = wxTextCtrl(self, -1, "",
83 style = wxTE_MULTILINE|wxTE_READONLY,
84 size = (-1, 60))
85 topBox.Add(self.projectionInfo,1,wxEXPAND|wxALL, 4)
86
87 # Control buttons:
88 buttonBox = wxBoxSizer( wxHORIZONTAL )
89 buttonBox.Add(wxButton(self, ID_PROJECTION_OK, _("OK")),
90 0, wxALL, 4)
91 buttonBox.Add(wxButton(self, ID_PROJECTION_CANCEL, _("Cancel")),
92 0, wxALL, 4)
93 topBox.Add(buttonBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10)
94
95 EVT_BUTTON(self, ID_PROJECTION_OK, self.OnProj4OK)
96 EVT_BUTTON(self, ID_PROJECTION_CANCEL, self.OnProj4Cancel)
97
98 self.SetAutoLayout(True)
99 self.SetSizer(topBox)
100 topBox.Fit(self)
101 topBox.SetSizeHints(self)
102
103 def OnProj4Select(self, event):
104 projection = self.projection.GetStringSelection()
105 if projection == 'None':
106 self.projectionParams = {}
107 self.UpdateProjectionInfo()
108
109 def OnEdit(self, event):
110 projection = self.projection.GetStringSelection()
111 if projection is not 'None':
112 dialogname = getattr(self, 'launch' + projection + 'Dialog', None)
113 if dialogname is not None:
114 if dialogname(self):
115 self.UpdateProjectionInfo()
116 else:
117 pass
118 else:
119 self.projectionParams = {}
120
121 def UpdateProjectionInfo(self):
122 self.projectionInfo.Clear()
123 for key in self.projectionParams.keys():
124 self.projectionInfo.AppendText(key+": "
125 +str(self.projectionParams[key])+"\n")
126
127
128 def OnProj4OK(self, event):
129 self.EndModal(wxID_OK)
130
131 def OnProj4Cancel(self, event):
132 self.EndModal(wxID_CANCEL)
133
134 def launchUTMDialog(self, parent):
135 dlg = UTMDialog(parent, parent.projectionInfo )
136 if dlg.ShowModal():
137 return True
138 else:
139 return False
140
141 def GetParams(self):
142 if len(self.projectionParams.keys()) > 0:
143 projection = []
144 for key in self.projectionParams.keys():
145 projection.append(key+"="+str(self.projectionParams[key]))
146 else:
147 projection=None
148
149 return projection
150
151
152
153 class UTMDialog(wxDialog):
154
155 """Let the user specify parameters for UTM projection (Zone, Spheroid)"""
156
157 def __init__(self, parent, projection):
158 wxDialog.__init__(self, parent, -1, _("Projection: UTM Parameters"),
159 wxDefaultPosition, wxSize(200, 100))
160 self.parent = parent
161 self.dialogLayout()
162 if self.parent.projectionParams.has_key('zone'):
163 text = str(self.parent.projectionParams['zone'])
164 self.zone.SetSelection(self.zone.FindString(text))
165 if self.parent.projectionParams.has_key('ellps'):
166 text = str(self.parent.projectionParams['ellps'])
167 self.ellps.SetSelection(self.ellps.FindString(text))
168
169 def dialogLayout(self):
170 topBox = wxBoxSizer(wxVERTICAL)
171
172 zoneBox = wxBoxSizer(wxHORIZONTAL)
173 zoneBox.Add(wxStaticText(self, -1, _("UTM Zone")),
174 0, wxALIGN_CENTER|wxALL, 4)
175 self.zone = wxComboBox(self, -1, "", style = wxCB_READONLY)
176 for zone in range(1,61):
177 self.zone.Append(str(zone))
178 zoneBox.Add(self.zone, 0, wxALIGN_CENTER|wxALL, 4)
179 zoneBox.Add(wxButton(self, ID_UTM_DIALOG_PROPOSE_ZONE, _("Propose")),
180 0, wxALL, 4)
181 EVT_BUTTON(self, ID_UTM_DIALOG_PROPOSE_ZONE, self.OnProposeZone)
182
183 topBox.Add(zoneBox, 1, wxEXPAND|wxALL, 4)
184
185 ellipsoidBox = wxBoxSizer(wxHORIZONTAL)
186 ellipsoidBox.Add(wxStaticText(self, -1, _("Ellipsoid")),
187 0, wxALIGN_CENTER|wxALL, 4)
188 self.ellps = wxComboBox(self, -1, "", style = wxCB_READONLY)
189 for ellps in ["clrk66", "GRS80"]:
190 self.ellps.Append(ellps)
191 ellipsoidBox.Add(self.ellps, 0, wxALIGN_CENTER|wxALL, 4)
192
193 topBox.Add(ellipsoidBox, 1, wxEXPAND|wxALL, 4)
194
195 buttonBox = wxBoxSizer(wxHORIZONTAL)
196 buttonBox.Add(wxButton(self, ID_UTM_DIALOG_OK, _("OK")),
197 0, wxALL, 4)
198 buttonBox.Add(wxButton(self, ID_UTM_DIALOG_CANCEL, _("Cancel")),
199 0, wxALL, 4)
200 topBox.Add(buttonBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10)
201 EVT_BUTTON(self, ID_UTM_DIALOG_OK, self.OnOK)
202 EVT_BUTTON(self, ID_UTM_DIALOG_CANCEL, self.OnCancel)
203
204 self.SetAutoLayout(True)
205 self.SetSizer(topBox)
206 topBox.Fit(self)
207 topBox.SetSizeHints(self)
208
209 def OnProposeZone(self, event):
210 dlg = UTMProposeZoneDialog(self)
211 if dlg.ShowModal():
212 return True
213 else:
214 return False
215
216 def OnOK(self, event):
217 self.parent.projectionParams = {}
218 self.parent.projectionParams['zone'] = self.zone.GetStringSelection()
219 self.parent.projectionParams['ellps'] = self.ellps.GetStringSelection()
220 self.parent.projectionParams['proj'] = "utm"
221 self.Close(True)
222
223 def OnCancel(self, event):
224 self.Close(False)
225
226 class UTMProposeZoneDialog(wxDialog):
227
228 """Propose a sensible Zone considering the current map extent."""
229
230 def __init__(self, parent):
231 wxDialog.__init__(self, parent, -1, _("Projection: Propose UTM Zone"),
232 wxDefaultPosition, wxSize(200, 100))
233 self.parent = parent
234 x, y, x2, y2 = self.parent.parent.map_bounding_box
235 x = x + 180
236 x2 = x2 + 180
237 center = (x2 - x) / 2 + x
238 self.proposedZone = str(int(center / 6 + 1))
239 self.dialogLayout()
240
241 def dialogLayout(self):
242 topBox = wxBoxSizer(wxVERTICAL)
243
244 textBox = wxBoxSizer(wxVERTICAL)
245 textBox.Add(wxStaticText(self, -1, _("The current map extent center " +
246 "lies in UTM Zone")),
247 0, wxALIGN_CENTER|wxALL, 4)
248 textBox.Add(wxStaticText(self, -1, self.proposedZone),
249 0, wxALIGN_CENTER|wxALL, 4)
250
251 topBox.Add(textBox, 1, wxEXPAND|wxALL, 4)
252
253 buttonBox = wxBoxSizer(wxHORIZONTAL)
254 buttonBox.Add(wxButton(self, ID_UTM_PROPOSE_ZONE_DIALOG_TAKE,
255 _("Take")), 0, wxALL, 4)
256 buttonBox.Add(wxButton(self, ID_UTM_PROPOSE_ZONE_DIALOG_CANCEL,
257 _("Cancel")), 0, wxALL, 4)
258 topBox.Add(buttonBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10)
259 EVT_BUTTON(self, ID_UTM_PROPOSE_ZONE_DIALOG_TAKE, self.OnTake)
260 EVT_BUTTON(self, ID_UTM_PROPOSE_ZONE_DIALOG_CANCEL, self.OnCancel)
261
262 self.SetAutoLayout(True)
263 self.SetSizer(topBox)
264 topBox.Fit(self)
265 topBox.SetSizeHints(self)
266
267 def OnTake(self, event):
268 self.parent.zone.SetSelection(self.parent.zone.FindString(self.proposedZone))
269 self.Close(True)
270
271 def OnCancel(self, event):
272 self.Close(False)

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26