[GRASS-SVN] r44417 - in grass/trunk: gui/wxpython/gui_modules
lib/python
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Nov 25 11:06:27 EST 2010
Author: martinl
Date: 2010-11-25 08:06:27 -0800 (Thu, 25 Nov 2010)
New Revision: 44417
Modified:
grass/trunk/gui/wxpython/gui_modules/location_wizard.py
grass/trunk/lib/python/core.py
Log:
wxGUI/locwizard: use grass.create_location() to create a new location
Modified: grass/trunk/gui/wxpython/gui_modules/location_wizard.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/location_wizard.py 2010-11-25 15:52:25 UTC (rev 44416)
+++ grass/trunk/gui/wxpython/gui_modules/location_wizard.py 2010-11-25 16:06:27 UTC (rev 44417)
@@ -920,7 +920,7 @@
self.parent.ellipsepage.ellipseparams = self.parent.ellipsoids[self.ellipse][1]
def OnEnterPage(self,event):
- self.parent.datumtrans = 0
+ self.parent.datumtrans = None
if event.GetDirection():
if len(self.datum) == 0:
# disable 'next' button by default when entering from previous page
@@ -1316,7 +1316,7 @@
self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
def OnEnterPage(self, event):
- self.parent.datumtrans = 0
+ self.parent.datumtrans = None
if event.GetDirection():
if not self.epsgcode:
# disable 'next' button by default
@@ -1697,7 +1697,7 @@
#
# datum transform number and list of datum transforms
#
- self.datumtrans = 0
+ self.datumtrans = None
self.proj4string = ''
#
@@ -1782,7 +1782,7 @@
#
if self.wizard.RunWizard(self.startpage):
msg = self.OnWizFinished()
- if len(msg) < 1:
+ if not msg:
self.wizard.Destroy()
self.location = self.startpage.location
@@ -1791,7 +1791,7 @@
message=_("Do you want to set the default "
"region extents and resolution now?"),
caption=_("Location <%s> created") % self.location,
- style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+ style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
dlg.CenterOnScreen()
if dlg.ShowModal() == wx.ID_YES:
dlg.Destroy()
@@ -1802,22 +1802,18 @@
dlg.Destroy()
else: # -> error
self.wizard.Destroy()
- wx.MessageBox(parent=self.parent,
- message="%s" % _("Unable to create new location. "
+ gcmd.GError(parent = self.parent,
+ message = "%s" % _("Unable to create new location. "
"Location <%(loc)s> not created.\n\n"
"Details: %(err)s") % \
{ 'loc' : self.startpage.location,
- 'err' : msg },
- caption=_("Location wizard"),
- style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
+ 'err' : msg })
else: # -> cancelled
self.wizard.Destroy()
- wx.MessageBox(parent=self.parent,
+ gcmd.GMessage(parent = self.parent,
message=_("Location wizard canceled. "
- "Location not created."),
- caption=_("Location wizard"),
- style=wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
-
+ "Location not created."))
+
self.__cleanUp()
def __cleanUp(self):
@@ -1910,23 +1906,22 @@
f.close()
def OnWizFinished(self):
+ """!Wizard finished, create new location
+
+ @return error message on error
+ @return None on success
+ """
database = self.startpage.grassdatabase
location = self.startpage.location
- global coordsys
- msg = '' # error message (empty on success)
# location already exists?
if os.path.isdir(os.path.join(database,location)):
- dlg = wx.MessageDialog(parent=self.wizard,
- message="%s <%s>: %s" % \
- (_("Unable to create new location"),
- os.path.join(database, location),
- _("Location already exists in GRASS Database.")),
- caption=_("Error"),
- style=wx.OK | wx.ICON_ERROR)
- dlg.ShowModal()
- dlg.Destroy()
- return False
+ gcmd.GError(parent = self.wizard,
+ message = "%s <%s>: %s" % \
+ (_("Unable to create new location"),
+ os.path.join(database, location),
+ _("Location already exists in GRASS Database.")))
+ return None
# current GISDbase or a new one?
current_gdb = grass.gisenv()['GISDBASE']
@@ -1935,7 +1930,7 @@
if os.path.isdir(database) != True:
# create new directory
os.mkdir(database)
-
+
# change to new GISDbase directory
gcmd.RunCommand('g.gisenv',
parent = self.wizard,
@@ -1949,76 +1944,54 @@
{ 'loc' : location, 'dir' : database},
caption=_("New GIS data directory"),
style=wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
+
# location created in alternate GISDbase
self.altdb = True
-
- if coordsys == "xy":
- msg = self.XYCreate()
- elif coordsys == "proj":
- proj4string = self.CreateProj4String()
- msg = self.Proj4Create(proj4string)
- elif coordsys == 'custom':
- msg = self.CustomCreate()
- elif coordsys == "epsg":
- msg = self.EPSGCreate()
- elif coordsys == "file":
- msg = self.FileCreate()
- elif coordsys == "wkt":
- msg = self.WKTCreate()
-
- return msg
-
- def XYCreate(self):
- """!Create an XY location
-
- @return error message (empty string on success)
- """
- database = self.startpage.grassdatabase
- location = self.startpage.location
- # create location directory and PERMANENT mapset
+ global coordsys
try:
- os.mkdir(os.path.join(database, location))
- os.mkdir(os.path.join(database, location, 'PERMANENT'))
- # create DEFAULT_WIND and WIND files
- regioninfo = ['proj: 0',
- 'zone: 0',
- 'north: 1',
- 'south: 0',
- 'east: 1',
- 'west: 0',
- 'cols: 1',
- 'rows: 1',
- 'e-w resol: 1',
- 'n-s resol: 1',
- 'top: 1',
- 'bottom: 0',
- 'cols3: 1',
- 'rows3: 1',
- 'depths: 1',
- 'e-w resol3: 1',
- 'n-s resol3: 1',
- 't-b resol: 1']
-
- defwind = open(os.path.join(database, location,
- "PERMANENT", "DEFAULT_WIND"), 'w')
- for param in regioninfo:
- defwind.write(param + '%s' % os.linesep)
- defwind.close()
-
- shutil.copy(os.path.join(database, location, "PERMANENT", "DEFAULT_WIND"),
- os.path.join(database, location, "PERMANENT", "WIND"))
-
- # create MYNAME file
- myname = open(os.path.join(database, location, "PERMANENT",
- "MYNAME"), 'w')
- myname.write('%s' % os.linesep)
- myname.close()
- except OSError, e:
- return e
+ if coordsys == "xy":
+ grass.create_location(dbase = self.startpage.grassdatabase,
+ location = self.startpage.location)
+ elif coordsys == "proj":
+ grass.create_location(dbase = self.startpage.grassdatabase,
+ location = self.startpage.location,
+ proj4 = self.CreateProj4String(),
+ datum = self.datumtrans)
+ elif coordsys == 'custom':
+ grass.create_location(dbase = self.startpage.grassdatabase,
+ location = self.startpage.location,
+ proj4 = self.custompage.customstring)
+ elif coordsys == "epsg":
+ if not self.epsgpage.epsgcode:
+ return _('EPSG code missing.')
+
+ grass.create_location(dbase = self.startpage.grassdatabase,
+ location = self.startpage.location,
+ epsg = self.epsgpage.epsgcode,
+ datum = self.datumtrans)
+ elif coordsys == "file":
+ if not self.filepage.georeffile or \
+ not os.path.isfile(self.filepage.georeffile):
+ return _("File <%s> not found." % self.filepage.georeffile)
+
+ grass.create_location(dbase = self.startpage.grassdatabase,
+ location = self.startpage.location,
+ filename = self.filepage.georeffile)
+ elif coordsys == "wkt":
+ if not self.wktpage.wktfile or \
+ not os.path.isfile(self.wktpage.wktfile):
+ return _("File <%s> not found." % self.wktpage.wktfile)
+
+ grass.create_location(dbase = self.startpage.grassdatabase,
+ location = self.startpage.location,
+ filename = self.wktpage.wktfile)
- return ''
-
+ except grass.ScriptException, e:
+ return str(e)
+
+ return None
+
def CreateProj4String(self):
"""!Constract PROJ.4 string"""
location = self.startpage.location
@@ -2060,117 +2033,7 @@
proj4string = '%s +no_defs' % proj4string
return proj4string
-
- def Proj4Create(self, proj4string):
- """!Create a new location for selected projection
-
- @return error message (empty string on success)
- """
- 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
-
-
- def CustomCreate(self):
- """!Create a new location based on given proj4 string
-
- @return error message (empty string on success)
- """
- proj4string = self.custompage.customstring
- location = self.startpage.location
-
- ret, msg = gcmd.RunCommand('g.proj',
- flags = 'c',
- proj4 = proj4string,
- location = location,
- getErrorMsg = True)
-
- if ret == 0:
- return ''
-
- return msg
-
- def EPSGCreate(self):
- """!Create a new location from an EPSG code.
-
- @return error message (empty string on success)
- """
- epsgcode = self.epsgpage.epsgcode
- epsgdesc = self.epsgpage.epsgdesc
- location = self.startpage.location
-
- # should not happend
- if epsgcode == '':
- return _('EPSG code missing.')
-
- ret, msg = gcmd.RunCommand('g.proj',
- flags = 'c',
- epsg = epsgcode,
- location = location,
- datumtrans = self.datumtrans,
- getErrorMsg = True)
-
- if ret == 0:
- return ''
-
- return msg
-
- def FileCreate(self):
- """!Create a new location from a georeferenced file
-
- @return error message (empty string on success)
- """
- georeffile = self.filepage.georeffile
- location = self.startpage.location
-
- # this should not happen
- if not georeffile or not os.path.isfile(georeffile):
- return _("File not found.")
-
- # creating location
- ret, msg = gcmd.RunCommand('g.proj',
- flags = 'c',
- georef = georeffile,
- location = location,
- getErrorMsg = True)
-
- if ret == 0:
- return ''
-
- return msg
-
- def WKTCreate(self):
- """!Create a new location from a WKT file
-
- @return error message (empty string on success)
- """
- wktfile = self.wktpage.wktfile
- location = self.startpage.location
-
- # this should not happen
- if not wktfile or not os.path.isfile(wktfile):
- return _("File not found.")
-
- # creating location
- ret, msg = gcmd.RunCommand('g.proj',
- flags = 'c',
- wkt = wktfile,
- location = location,
- getErrorMsg = True)
-
- if ret == 0:
- return ''
-
- return msg
-
class RegionDef(BaseClass, wx.Frame):
"""
Page for setting default region extents and resolution
@@ -2295,7 +2158,7 @@
# self.ewres3 = float(region['ewres3'])
self.tbres = float(region['tbres'])
self.depth = int(region['depths'])
- self.cells3 = int(region['3dcells'])
+ self.cells3 = int(region['cells3'])
#
# 3D box collapsable
Modified: grass/trunk/lib/python/core.py
===================================================================
--- grass/trunk/lib/python/core.py 2010-11-25 15:52:25 UTC (rev 44416)
+++ grass/trunk/lib/python/core.py 2010-11-25 16:06:27 UTC (rev 44417)
@@ -919,49 +919,87 @@
# interface to `g.proj -c`
-def create_location(location, epsg = None, proj4 = None, filename = None, wkt = None, datum = None):
+def create_location(dbase, location,
+ epsg = None, proj4 = None, filename = None, wkt = None,
+ datum = None):
"""!Create new location
+ Raise ScriptException on error.
+
+ @param dbase path to GRASS database
@param location location name to create
@param epgs if given create new location based on EPSG code
@param proj4 if given create new location based on Proj4 definition
@param filename if given create new location based on georeferenced file
@param wkt if given create new location based on WKT definition (path to PRJ file)
@param datum datum transformation parameters (used for epsg and proj4)
+ """
+ gisdbase = None
+ if epsg or proj4 or filename or wkt:
+ gisdbase = gisenv()['GISDBASE']
+ run_command('g.gisenv',
+ set = 'GISDBASE=%s' % dbase)
+ if not os.path.exists(dbase):
+ os.mkdir(dbase)
- @return True on success
- @return False on failure
- """
+ kwargs = dict()
+ if datum:
+ kwargs['datum'] = datum
+
if epsg:
- ret = run_command('g.proj',
+ ps = pipe_command('g.proj',
+ quiet = True,
flags = 'c',
epsg = epsg,
location = location,
- datumtrans = datum)
+ stderr = PIPE,
+ **kwargs)
elif proj4:
- ret = run_command('g.proj',
+ ps = pipe_command('g.proj',
+ quiet = True,
flags = 'c',
proj4 = proj4,
location = location,
- datumtrans = datum)
+ stderr = PIPE,
+ **kwargs)
elif filename:
- ret = run_command('g.proj',
+ ps = pipe_command('g.proj',
+ quiet = True,
flags = 'c',
georef = filename,
- location = location)
+ location = location,
+ stderr = PIPE)
elif wkt:
- ret = run_command('g.proj',
+ ps = pipe_command('g.proj',
+ quiet = True,
flags = 'c',
wkt = wktfile,
- location = location)
+ location = location,
+ stderr = PIPE)
else:
- ret = _create_location_xy(location)
-
-def _create_location_xy(location):
- """!Create unprojected location"""
+ return _create_location_xy(dbase, location)
+
+ error = ps.communicate()[1]
+ run_command('g.gisenv',
+ set = 'GISDBASE=%s' % gisdbase)
+
+ if ps.returncode != 0 and error:
+ raise ScriptException(repr(error))
+
+def _create_location_xy(database, location):
+ """!Create unprojected location
+
+ Raise ScriptException on error.
+
+ @param database GRASS database where to create new location
+ @param location location name
+ """
+ cur_dir = os.getcwd()
try:
+ os.chdir(database)
os.mkdir(location)
os.mkdir(os.path.join(location, 'PERMANENT'))
+
# create DEFAULT_WIND and WIND files
regioninfo = ['proj: 0',
'zone: 0',
@@ -996,11 +1034,11 @@
"MYNAME"), 'w')
myname.write('%s' % os.linesep)
myname.close()
- except OSError:
- return 1
+
+ os.chdir(cur_dir)
+ except OSError, e:
+ raise ScriptException(repr(e))
- return 0
-
# get debug_level
if find_program('g.gisenv', ['--help']):
debug_level = int(gisenv().get('DEBUG', 0))
More information about the grass-commit
mailing list