[GRASS-SVN] r39571 - grass/trunk/gui/wxpython/gui_modules
svn_grass at osgeo.org
svn_grass at osgeo.org
Sun Oct 18 23:55:09 EDT 2009
Author: cmbarton
Date: 2009-10-18 23:55:09 -0400 (Sun, 18 Oct 2009)
New Revision: 39571
Modified:
grass/trunk/gui/wxpython/gui_modules/location_wizard.py
Log:
Backport from develbranch_6 r39480. Fix datum transforms and enhance searches .
Modified: grass/trunk/gui/wxpython/gui_modules/location_wizard.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/location_wizard.py 2009-10-19 03:44:31 UTC (rev 39570)
+++ grass/trunk/gui/wxpython/gui_modules/location_wizard.py 2009-10-19 03:55:09 UTC (rev 39571)
@@ -424,7 +424,7 @@
"""!Search projection by desc"""
str = event.GetString()
try:
- self.proj, self.projdesc = self.projlist.Search(index=1, pattern=event.GetString())
+ self.proj, self.projdesc = self.projlist.Search(index=[0,1], pattern=event.GetString())
except:
self.proj = self.projdesc = ''
@@ -625,20 +625,22 @@
data = []
pattern = pattern.lower()
- for i in range(len(self.sourceData)):
- try:
- value = str(self.sourceData[i][index]).lower()
- if pattern in value:
- data.append(self.sourceData[i])
- except UnicodeDecodeError:
- # osgeo4w problem (should be fixed)
- pass
-
+ for idx in index:
+ for i in range(len(self.sourceData)):
+ try:
+ value = str(self.sourceData[i][idx]).lower()
+ if pattern in value:
+ data.append(self.sourceData[i])
+ except UnicodeDecodeError:
+ # osgeo4w problem (should be fixed)
+ pass
+
+ self.Populate(data)
if len(data) > 0:
- self.Populate(data)
+
return data[0]
else:
- self.Populate(self.sourceData)
+# self.Populate(self.sourceData)
return []
class ProjTypePage(TitledPage):
@@ -768,7 +770,7 @@
# text input
self.tdatum = self.MakeTextCtrl("", size=(200,-1))
- self.ttrans = self.MakeTextCtrl("", size=(200,-1))
+# self.ttrans = self.MakeTextCtrl("", size=(200,-1))
# search box
self.searchb = wx.SearchCtrl(self, size=(200,-1),
@@ -782,14 +784,14 @@
data=data,
columns=[_('Code'), _('Description'), _('Ellipsoid')])
- # create list control for datum transformation parameters list
- data = []
- for key in self.parent.transforms.keys():
- data.append([key, self.parent.transforms[key][0], self.parent.transforms[key][1]])
- self.transformlist = ItemList(self,
- data=None,
- columns=[_('Code'), _('Datum'), _('Description')])
- self.transformlist.sourceData = data
+# # create list control for datum transformation parameters list
+# data = []
+# for key in self.parent.transforms.keys():
+# data.append([key, self.parent.transforms[key][0], self.parent.transforms[key][1]])
+# self.transformlist = ItemList(self,
+# data=None,
+# columns=[_('Code'), _('Datum'), _('Description')])
+# self.transformlist.sourceData = data
# layout
self.sizer.AddGrowableCol(4)
@@ -817,28 +819,28 @@
wx.ALIGN_LEFT |
wx.ALL, border=5, pos=(3, 1), span=(1, 4))
- self.sizer.Add(item=self.MakeLabel(_("Transformation parameters:")),
- flag=wx.ALIGN_RIGHT |
- wx.ALIGN_CENTER_VERTICAL |
- wx.ALL, border=5, pos=(5, 1))
- self.sizer.Add(item=self.ttrans,
- flag=wx.ALIGN_LEFT |
- wx.ALIGN_CENTER_VERTICAL |
- wx.ALL, border=5, pos=(5, 2))
+# self.sizer.Add(item=self.MakeLabel(_("Transformation parameters:")),
+# flag=wx.ALIGN_RIGHT |
+# wx.ALIGN_CENTER_VERTICAL |
+# wx.ALL, border=5, pos=(5, 1))
+# self.sizer.Add(item=self.ttrans,
+# flag=wx.ALIGN_LEFT |
+# wx.ALIGN_CENTER_VERTICAL |
+# wx.ALL, border=5, pos=(5, 2))
- self.sizer.Add(item=self.transformlist,
- flag=wx.EXPAND |
- wx.ALIGN_LEFT |
- wx.ALL, border=5, pos=(6, 1), span=(1, 4))
+# self.sizer.Add(item=self.transformlist,
+# flag=wx.EXPAND |
+# wx.ALIGN_LEFT |
+# wx.ALL, border=5, pos=(6, 1), span=(1, 4))
# events
self.datumlist.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnDatumSelected)
- self.transformlist.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnTransformSelected)
+# self.transformlist.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnTransformSelected)
self.searchb.Bind(wx.EVT_TEXT_ENTER, self.OnDSearch)
self.tdatum.Bind(wx.EVT_TEXT, self.OnDText)
self.tdatum.Bind(wx.EVT_TEXT_ENTER, self.OnDText)
- self.ttrans.Bind(wx.EVT_TEXT, self.OnTText)
- self.ttrans.Bind(wx.EVT_TEXT_ENTER, self.OnTText)
+# self.ttrans.Bind(wx.EVT_TEXT, self.OnTText)
+# self.ttrans.Bind(wx.EVT_TEXT_ENTER, self.OnTText)
self.Bind(wiz.EVT_WIZARD_PAGE_CHANGING, self.OnPageChanging)
self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
@@ -866,7 +868,8 @@
def OnDText(self, event):
self.datum = event.GetString().lower()
- tlist = self.transformlist.Search(index=1, pattern=self.datum)
+# tlist = self.transformlist.Search(index=1, pattern=self.datum)
+ tlist = []
if len(tlist) > 0:
self.hastransform = True
else:
@@ -909,14 +912,14 @@
def OnDSearch(self, event):
str = self.searchb.GetValue()
try:
- self.datum, self.datumdesc, self.ellipsoid = self.datumlist.Search(index=1, pattern=str)
- self.transformlist.Search(index=1, pattern=self.datum)
+ self.datum, self.datumdesc, self.ellipsoid = self.datumlist.Search(index=[0,1,2], pattern=str)
+# self.transformlist.Search(index=1, pattern=self.datum)
except:
self.datum = self.datumdesc = self.ellipsoid = ''
- if str == '' or self.datum == '':
- self.transformlist.DeleteAllItems()
- self.transformlist.Refresh()
+# if str == '' or self.datum == '':
+# self.transformlist.DeleteAllItems()
+# self.transformlist.Refresh()
event.Skip()
@@ -1049,7 +1052,7 @@
str = event.GetString()
try:
self.ellipse, self.ellipsedesc = \
- self.ellipselist.Search(index=1, pattern=event.GetString())
+ self.ellipselist.Search(index=[0,1], pattern=event.GetString())
self.ellipseparams = self.parent.ellipsoids[self.ellipse][1]
self.proj4params = self.parent.ellipsoids[self.ellipse][2]
except:
@@ -1259,7 +1262,6 @@
# buttons
self.bbrowse = self.MakeButton(_("Browse"))
self.bbcodes = self.MakeButton(_("Reload EPSG Codes"))
- self.bbsearch = self.MakeButton(_("Search"))
# search box
self.searchb = wx.SearchCtrl(self, size=(200,-1),
@@ -1307,13 +1309,8 @@
self.sizer.Add(item=self.bbcodes,
flag=wx.ALIGN_LEFT |
wx.ALIGN_CENTER_VERTICAL |
- wx.ALL, border=5, pos=(2, 4))
- self.sizer.Add(item=self.bbsearch,
- flag=wx.ALIGN_LEFT |
- wx.ALIGN_CENTER_VERTICAL |
wx.ALL, border=5, pos=(3, 4))
-
self.sizer.AddGrowableRow(4)
self.sizer.Add(item=self.epsglist,
flag=wx.ALIGN_LEFT | wx.EXPAND, pos=(4, 1),
@@ -1322,7 +1319,6 @@
# events
self.bbrowse.Bind(wx.EVT_BUTTON, self.OnBrowse)
self.bbcodes.Bind(wx.EVT_BUTTON, self.OnBrowseCodes)
- self.bbsearch.Bind(wx.EVT_BUTTON, self.OnSearch)
self.tcode.Bind(wx.EVT_TEXT, self.OnText)
self.tcode.Bind(wx.EVT_TEXT_ENTER, self.OnText)
self.epsglist.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
@@ -1377,7 +1373,7 @@
return
try:
- self.epsgcode = self.epsglist.Search(index=self.csearch.GetSelection(),
+ self.epsgcode = self.epsglist.Search(index=[self.csearch.GetSelection()],
pattern=value)[0]
except IndexError: # -> no item found
self.epsgcode = None
@@ -1650,6 +1646,11 @@
# get georeferencing information from tables in $GISBASE/etc
#
self.__readData()
+
+ #
+ # datum transform number
+ #
+ self.datumtrans = 0
#
# define wizard pages
@@ -1890,6 +1891,7 @@
proj4string = self.CreateProj4String()
msg = self.Proj4Create(proj4string)
elif coordsys == 'custom':
+ wx.MessageBox('in custom')
msg = self.CustomCreate()
elif coordsys == "epsg":
msg = self.EPSGCreate()
@@ -1966,24 +1968,26 @@
else:
datumdesc = ''
datumparams = self.datumpage.datumparams
- transparams = self.datumpage.transparams
+# transparams = self.datumpage.transparams
ellipse = self.ellipsepage.ellipse
ellipsedesc = self.ellipsepage.ellipsedesc
ellipseparams = self.ellipsepage.ellipseparams
-
+
#
# creating PROJ.4 string
#
if proj == 'll':
proj4string = '+proj=longlat'
elif proj == 'utm':
- proj4string = '+proj=%s +zone=%s' % (proj, utmzone)
+ proj4string = '+proj=%s +zone=%s' % (utm, utmzone)
if utmhemisphere == 'south':
- proj4string += ' +south'
+ proj4string += '+south'
else:
proj4string = '+proj=%s ' % (proj)
-
+
+ self.shortproj4string = proj4string
+
proj4params = ''
# set ellipsoid parameters
for item in ellipseparams:
@@ -1996,13 +2000,15 @@
if datumparams:
for item in datumparams:
proj4params = '%s +%s' % (proj4params,item)
- if transparams:
- proj4params = '%s +no_defs +%s' % (proj4params,transparams)
- else:
- proj4params = '%s +no_defs' % proj4params
- else:
- proj4params = '%s +no_defs' % proj4params
+# if transparams:
+# proj4params = '%s +no_defs +%s' % (proj4params,transparams)
+# else:
+# proj4params = '%s +no_defs' % proj4params
+ proj4params = '%s +no_defs' % proj4params
+# else:
+# proj4params = '%s +no_defs' % proj4params
+
return '%s %s' % (proj4string, proj4params)
def Proj4Create(self, proj4string):
@@ -2010,17 +2016,69 @@
@return error message (empty string on success)
"""
- # creating location from PROJ.4 string passed to g.proj
+
+ datum = self.datumpage.datum
+ if datum != '':
+ proj4string = proj4string + ' +datum=%s' % datum
+
+ # check for datum tranforms
+ ret = gcmd.RunCommand('g.proj',
+ read = True,
+ proj4 = proj4string,
+ datumtrans = '-1')
+
+ dtoptions = {}
+
+
+ if ret:
+ line = ret.splitlines()
+ i = 0
+ while i < len(line):
+ if line[i] == '---':
+ for j in range(3):
+ dtoptions[line[i+1]] = (line[i+2],
+ line[i+3],
+ line[i+4])
+ i += 5
+ if dtoptions != {}:
+ dtrans = ''
+ # open a dialog to select datum transform number
+ dlg = SelectDatumDialog(self.parent, datums=dtoptions)
+
+ if dlg.ShowModal() == wx.ID_OK:
+ dtrans = dlg.GetDatum()
+ if dtrans == '':
+ dlg.Destroy()
+ return 'Datum transform is required.'
+ else:
+ dlg.Destroy()
+ return 'Datum transform is required.'
+
+ self.datumtrans = dtrans
+
ret, msg = gcmd.RunCommand('g.proj',
flags = 'c',
proj4 = proj4string,
location = self.startpage.location,
+ datumtrans = self.datumtrans,
getErrorMsg = True)
if ret == 0:
return ''
+
+ return msg
- return msg
+# # creating location from PROJ.4 string passed to g.proj
+# ret, msg = gcmd.RunCommand('g.proj',
+# flags = 'c',
+# proj4 = proj4string,
+# location = self.startpage.location,
+# getErrorMsg = True)
+
+# if ret == 0:
+# return ''
+
+# return msg
def CustomCreate(self):
"""!Create a new location based on given proj4 string
More information about the grass-commit
mailing list