From 5b7aa892b1a2194602d787da9c24f2776b8f76b8 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Fri, 2 Jun 2023 15:34:38 +0200 Subject: [PATCH 1/9] wxGUI: Rename location to project This renames location to project in user messages in wxGUI. This does not change any documentation or variable names. It does not change names outside of wxGUI. This changes only location to project. It leaves mapset as is because there seems to be much higher consensus about renaming location to project than about renaming mapset in general. --- gui/wxpython/datacatalog/catalog.py | 4 +-- gui/wxpython/datacatalog/toolbars.py | 8 +++--- gui/wxpython/datacatalog/tree.py | 34 +++++++++++----------- gui/wxpython/gui_core/dialogs.py | 8 +++--- gui/wxpython/gui_core/preferences.py | 2 +- gui/wxpython/startup/guiutils.py | 42 ++++++++++++++-------------- gui/wxpython/startup/locdownload.py | 40 ++++++++++++++------------ 7 files changed, 71 insertions(+), 67 deletions(-) diff --git a/gui/wxpython/datacatalog/catalog.py b/gui/wxpython/datacatalog/catalog.py index e2b14170f33..2b4508e321e 100644 --- a/gui/wxpython/datacatalog/catalog.py +++ b/gui/wxpython/datacatalog/catalog.py @@ -208,11 +208,11 @@ def OnAddGrassDB(self, event): # Offer to create a new location if grassdb_node and not os.listdir(grassdatabase): - message = _("Do you want to create a location?") + message = _("Do you want to create a project?") dlg2 = wx.MessageDialog( self, message=message, - caption=_("Create location?"), + caption=_("Create project?"), style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION, ) if dlg2.ShowModal() == wx.ID_YES: diff --git a/gui/wxpython/datacatalog/toolbars.py b/gui/wxpython/datacatalog/toolbars.py index 2606b8fa139..4463de9026e 100644 --- a/gui/wxpython/datacatalog/toolbars.py +++ b/gui/wxpython/datacatalog/toolbars.py @@ -20,7 +20,7 @@ from icons.icon import MetaIcon icons = { - "reloadTree": MetaIcon(img="redraw", label=_("Reload GRASS locations")), + "reloadTree": MetaIcon(img="redraw", label=_("Reload GRASS projects")), "reloadMapset": MetaIcon(img="reload", label=_("Reload current GRASS mapset only")), "unlocked": MetaIcon( img="edit", label=_("Restrict edits to the current mapset only") @@ -32,14 +32,14 @@ img="grassdb-add", label=_("Add existing or create new database") ), "addMapset": MetaIcon( - img="mapset-add", label=_("Create new mapset in current location") + img="mapset-add", label=_("Create new mapset in current project") ), "addLocation": MetaIcon( - img="location-add", label=_("Create new location in current GRASS database") + img="location-add", label=_("Create new project in current GRASS database") ), "downloadLocation": MetaIcon( img="location-download", - label=_("Download sample location to current GRASS database"), + label=_("Download sample project to current GRASS database"), ), "importRaster": MetaIcon( img="raster-import", label=_("Import raster data [r.import]") diff --git a/gui/wxpython/datacatalog/tree.py b/gui/wxpython/datacatalog/tree.py index 8d04f4e5129..ba7431d0bdc 100644 --- a/gui/wxpython/datacatalog/tree.py +++ b/gui/wxpython/datacatalog/tree.py @@ -92,14 +92,14 @@ def getLocationTree(gisdbase, location, queue, mapsets=None, lazy=False): queue.put( ( maps_dict, - _("Failed to read mapsets from location <{l}>.").format(l=location), + _("Failed to read mapsets from project <{l}>.").format(l=location), ) ) gscript.try_remove(tmp_gisrc_file) return else: mapsets = mapsets.split(",") - Debug.msg(4, "Location <{0}>: {1} mapsets found".format(location, len(mapsets))) + Debug.msg(4, "Project <{0}>: {1} mapsets found".format(location, len(mapsets))) for each in mapsets: maps_dict[each] = [] if lazy: @@ -118,7 +118,7 @@ def getLocationTree(gisdbase, location, queue, mapsets=None, lazy=False): queue.put( ( maps_dict, - _("Failed to read maps from location <{l}>.").format(l=location), + _("Failed to read maps from project <{l}>.").format(l=location), ) ) gscript.try_remove(tmp_gisrc_file) @@ -126,7 +126,7 @@ def getLocationTree(gisdbase, location, queue, mapsets=None, lazy=False): else: # fill dictionary listOfMaps = maplist.splitlines() - Debug.msg(4, "Location <{0}>: {1} maps found".format(location, len(listOfMaps))) + Debug.msg(4, "Project <{0}>: {1} maps found".format(location, len(listOfMaps))) for each in listOfMaps: ltype, wholename = each.split("/") name, mapset = wholename.split("@", maxsplit=1) @@ -550,7 +550,7 @@ def _reloadGrassDBNode(self, grassdb_node): Debug.msg( 3, - "Scanning location <{0}> ({1}/{2})".format( + "Scanning project <{0}> ({1}/{2})".format( location, loc_count, nlocations ), ) @@ -901,9 +901,9 @@ def OnDoubleClick(self, node): dlg = wx.MessageDialog( parent=self, message=_( - "Map <{map_name}@{map_mapset}> is not in the current location. " + "Map <{map_name}@{map_mapset}> is not in the current project. " "To be able to display it you need to switch to <{map_location}> " - "location. Note that if you switch there all current " + "project. Note that if you switch there all current " "Map Displays will be closed.\n\n" "Do you want to switch anyway?" ).format( @@ -911,7 +911,7 @@ def OnDoubleClick(self, node): map_mapset=selected_mapset.data["name"], map_location=selected_loc.data["name"], ), - caption=_("Map in a different location"), + caption=_("Map in a different project"), style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION, ) dlg.SetYesNoLabels("S&witch", "C&ancel") @@ -945,7 +945,7 @@ def ExpandCurrentLocation(self): self.Select(item[0], select=True) self.ExpandNode(item[0], recursive=False) else: - Debug.msg(1, "Location <%s> not found" % location) + Debug.msg(1, "Project <%s> not found" % location) def GetCurrentDbLocationMapsetNode(self): """Get current mapset node""" @@ -1249,7 +1249,7 @@ def OnEditLabel(self, node, event): ) self._renameNode(self.selected_location[0], new_name) label = _( - "Renaming location <{oldlocation}> to <{newlocation}> completed" + "Renaming project <{oldlocation}> to <{newlocation}> completed" ).format(oldlocation=old_name, newlocation=new_name) self.showNotification.emit(message=label) @@ -1756,9 +1756,9 @@ def OnEndDrag(self, node, event): else: GMessage( _( - "To move or copy maps to other location, " + "To move or copy maps to other project, " "please drag them to a mapset in the " - "destination location" + "destination project" ), parent=self, ) @@ -2192,13 +2192,13 @@ def _popupMenuLocation(self): menu.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnCreateMapset, item) - item = wx.MenuItem(menu, wx.ID_ANY, _("&Delete location")) + item = wx.MenuItem(menu, wx.ID_ANY, _("&Delete project")) menu.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnDeleteLocation, item) if self._restricted: item.Enable(False) - item = wx.MenuItem(menu, wx.ID_ANY, _("&Rename location")) + item = wx.MenuItem(menu, wx.ID_ANY, _("&Rename project")) menu.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnRenameLocation, item) if self._restricted: @@ -2217,11 +2217,11 @@ def _popupMenuGrassDb(self): genv = gisenv() currentGrassDb, currentLocation, currentMapset = self._isCurrent(genv) - item = wx.MenuItem(menu, wx.ID_ANY, _("&Create new location")) + item = wx.MenuItem(menu, wx.ID_ANY, _("&Create new project")) menu.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnCreateLocation, item) - item = wx.MenuItem(menu, wx.ID_ANY, _("&Download sample location")) + item = wx.MenuItem(menu, wx.ID_ANY, _("&Download sample project")) menu.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnDownloadLocation, item) @@ -2263,7 +2263,7 @@ def _popupMenuElement(self): def _popupMenuMultipleLocations(self): """Create popup menu for multiple selected locations""" menu = Menu() - item = wx.MenuItem(menu, wx.ID_ANY, _("&Delete locations")) + item = wx.MenuItem(menu, wx.ID_ANY, _("&Delete projects")) menu.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnDeleteLocation, item) if self._restricted: diff --git a/gui/wxpython/gui_core/dialogs.py b/gui/wxpython/gui_core/dialogs.py index 88d31c2b4ab..824303f3614 100644 --- a/gui/wxpython/gui_core/dialogs.py +++ b/gui/wxpython/gui_core/dialogs.py @@ -119,7 +119,7 @@ def ValidatorCallback(self, win): class LocationDialog(SimpleDialog): """Dialog used to select location""" - def __init__(self, parent, title=_("Select GRASS location and mapset")): + def __init__(self, parent, title=_("Select GRASS project and mapset")): SimpleDialog.__init__(self, parent, title) self.element1 = LocationSelect( @@ -139,7 +139,7 @@ def __init__(self, parent, title=_("Select GRASS location and mapset")): validator=SimpleValidator(callback=self.ValidatorCallback), ) self.element1.SetFocus() - self.warning = _("Location or mapset is not defined.") + self.warning = _("Project or mapset is not defined.") self._layout() self.SetMinSize(self.GetSize()) @@ -147,7 +147,7 @@ def _layout(self): """Do layout""" self.dataSizer.Add( StaticText( - parent=self.panel, id=wx.ID_ANY, label=_("Name of GRASS location:") + parent=self.panel, id=wx.ID_ANY, label=_("Name of GRASS project:") ), proportion=0, flag=wx.ALL, @@ -190,7 +190,7 @@ class MapsetDialog(SimpleDialog): """Dialog used to select mapset""" def __init__( - self, parent, title=_("Select mapset in GRASS location"), location=None + self, parent, title=_("Select mapset in GRASS project"), location=None ): SimpleDialog.__init__(self, parent, title) diff --git a/gui/wxpython/gui_core/preferences.py b/gui/wxpython/gui_core/preferences.py index 2fbc1aefa04..61d6fc6bd7c 100644 --- a/gui/wxpython/gui_core/preferences.py +++ b/gui/wxpython/gui_core/preferences.py @@ -1685,7 +1685,7 @@ def _createProjectionPage(self, notebook): "displayed in the lower-left of the Map " "Display\nwindow's status bar. It is purely " "cosmetic and does not affect the working " - "location's\nprojection in any way. You will " + "project's\ncoordinate reference system in any way. You will " "need to enable the Projection check box in " "the drop-down\nmenu located at the bottom " "of the Map Display window.\n" diff --git a/gui/wxpython/startup/guiutils.py b/gui/wxpython/startup/guiutils.py index 42382f2e76d..59c23314307 100644 --- a/gui/wxpython/startup/guiutils.py +++ b/gui/wxpython/startup/guiutils.py @@ -110,7 +110,7 @@ def __init__( def _showLocationNameInvalidReason(self, ctrl): message = get_location_name_invalid_reason(self.database, ctrl.GetValue()) - GError(parent=self, message=message, caption=_("Invalid location name")) + GError(parent=self, message=message, caption=_("Invalid project name")) def _isLocationNameValid(self, text): """Check whether user's input location is valid or not.""" @@ -171,9 +171,9 @@ def create_location_interactively(guiparent, grassdb): return gWizard_output if gWizard.georeffile: - message = _( - "Do you want to import {} " "to the newly created location?" - ).format(gWizard.georeffile) + message = _("Do you want to import {} to the newly created project?").format( + gWizard.georeffile + ) dlg = wx.MessageDialog( parent=guiparent, message=message, @@ -282,11 +282,11 @@ def rename_location_interactively(guiparent, grassdb, location): dlg = wx.MessageDialog( parent=guiparent, message=_( - "Cannot rename location <{location}> for the following reasons:\n\n" + "Cannot rename project <{location}> for the following reasons:\n\n" "{reasons}\n\n" - "No location will be renamed." + "No project will be renamed." ).format(location=location, reasons="\n".join(messages)), - caption=_("Unable to rename selected location"), + caption=_("Unable to rename selected project"), style=wx.OK | wx.ICON_WARNING, ) dlg.ShowModal() @@ -298,7 +298,7 @@ def rename_location_interactively(guiparent, grassdb, location): parent=guiparent, default=location, message=_("Current name: {}\n\nEnter new name:").format(location), - caption=_("Rename selected location"), + caption=_("Rename selected project"), database=grassdb, ) if dlg.ShowModal() == wx.ID_OK: @@ -310,7 +310,7 @@ def rename_location_interactively(guiparent, grassdb, location): wx.MessageBox( parent=guiparent, caption=_("Error"), - message=_("Unable to rename location.\n\n{}").format(err), + message=_("Unable to rename project.\n\n{}").format(err), style=wx.OK | wx.ICON_ERROR | wx.CENTRE, ) dlg.Destroy() @@ -457,11 +457,11 @@ def delete_locations_interactively(guiparent, locations): dlg = wx.MessageDialog( parent=guiparent, message=_( - "Cannot delete one or more locations for the following reasons:\n\n" + "Cannot delete one or more projects for the following reasons:\n\n" "{reasons}\n\n" - "No locations will be deleted." + "No projects will be deleted." ).format(reasons="\n".join(messages)), - caption=_("Unable to delete selected locations"), + caption=_("Unable to delete selected projects"), style=wx.OK | wx.ICON_WARNING, ) dlg.ShowModal() @@ -478,11 +478,11 @@ def delete_locations_interactively(guiparent, locations): parent=guiparent, message=_( "Do you want to continue with deleting" - " one or more of the following locations?\n\n" + " one or more of the following projects?\n\n" "{deletes}\n\n" - "All mapsets included in these locations will be permanently deleted!" + "All mapsets included in these projects will be permanently deleted!" ).format(deletes="\n".join(deletes)), - caption=_("Delete selected locations"), + caption=_("Delete selected projects"), style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION, ) if dlg.ShowModal() == wx.ID_YES: @@ -495,11 +495,11 @@ def delete_locations_interactively(guiparent, locations): except OSError as error: wx.MessageBox( parent=guiparent, - caption=_("Error when deleting locations"), + caption=_("Error when deleting projects"), message=_( - "The following error occurred when deleting location <{path}>:" + "The following error occurred when deleting project <{path}>:" "\n\n{error}\n\n" - "Deleting of locations was interrupted." + "Deleting of projects was interrupted." ).format( path=os.path.join(grassdb, location), error=error, @@ -661,7 +661,7 @@ def import_file(guiparent, filePath, env): GMessage( message=_( "Data file <%(name)s> imported successfully. " - "The location's default region was set from " + "The project's default region was set from " "this imported map." ) % {"name": filePath}, @@ -692,7 +692,7 @@ def switch_mapset_interactively( parent=guiparent, message=_( "Current GRASS database is <%(dbase)s>.\n" - "Current location is <%(loc)s>.\n" + "Current project is <%(loc)s>.\n" "Current mapset is <%(mapset)s>." ) % {"dbase": dbase, "loc": location, "mapset": mapset}, @@ -709,7 +709,7 @@ def switch_mapset_interactively( GMessage( parent=guiparent, message=_( - "Current location is <%(loc)s>.\n" + "Current project is <%(loc)s>.\n" "Current mapset is <%(mapset)s>." ) % {"loc": location, "mapset": mapset}, diff --git a/gui/wxpython/startup/locdownload.py b/gui/wxpython/startup/locdownload.py index 56f6bc1d212..8e97b538747 100644 --- a/gui/wxpython/startup/locdownload.py +++ b/gui/wxpython/startup/locdownload.py @@ -40,27 +40,27 @@ # TODO: labels (and descriptions) translatable? LOCATIONS = [ { - "label": "Complete NC location", + "label": "Complete North Carolina dataset", "url": "https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.tar.gz", }, { - "label": "Basic NC location", + "label": "Basic North Carolina dataset", "url": "https://grass.osgeo.org/sampledata/north_carolina/nc_basic_spm_grass7.tar.gz", }, { - "label": "World location in LatLong/WGS84", + "label": "World project in LatLong/WGS84", "url": "https://grass.osgeo.org/sampledata/worldlocation.tar.gz", }, { - "label": "Spearfish (SD) location", + "label": "Spearfish (SD) dataset", "url": "https://grass.osgeo.org/sampledata/spearfish_grass70data-0.3.tar.gz", }, { - "label": "Piemonte, Italy data set", + "label": "Piemonte, Italy dataset", "url": "http://geodati.fmach.it/gfoss_geodata/libro_gfoss/grassdata_piemonte_utm32n_wgs84_grass7.tar.gz", }, { - "label": "Slovakia 3D precipitation voxel data set", + "label": "Slovakia 3D precipitation voxel dataset", "url": "https://grass.osgeo.org/sampledata/slovakia3d_grass7.tar.gz", }, { @@ -68,7 +68,7 @@ "url": "https://grass.osgeo.org/sampledata/fire_grass6data.tar.gz", }, { - "label": "GISMentors location, Czech Republic", + "label": "GISMentors dataset, Czech Republic", "url": "http://training.gismentors.eu/geodata/grass/gismentors.zip", }, { @@ -176,7 +176,7 @@ def download_location(url, name, database): directory = download_and_extract(source=url, reporthook=reporthook) destination = os.path.join(database, name) if not is_location_valid(directory): - return _("Downloaded location is not valid") + return _("Downloaded project is not valid") shutil.copytree(src=directory, dst=destination) try_rmdir(directory) except DownloadError as error: @@ -221,10 +221,10 @@ def __init__(self, parent, database, locations=LOCATIONS): self.database = database self.locations = locations self._abort_btn_label = _("Abort") - self._abort_btn_tooltip = _("Abort download location") + self._abort_btn_tooltip = _("Abort dataset download") self.label = StaticText( - parent=self, label=_("Select sample location to download:") + parent=self, label=_("Select sample project to download:") ) choices = [] @@ -289,7 +289,7 @@ def _layout(self): self.SetMinSize(self.GetBestSize()) def _change_download_btn_label( - self, label=_("Do&wnload"), tooltip=_("Download selected location") + self, label=_("Do&wnload"), tooltip=_("Download selected project") ): """Change download button label/tooltip""" if self.parent.download_button: @@ -321,7 +321,9 @@ def DownloadItem(self, item): destination = os.path.join(self.database, dirname) if os.path.exists(destination): self._error( - _("Location named <%s> already exists," " download canceled") % dirname + _( + "Project name {name} already exists in {path}, download canceled" + ).format(name=dirname, path=self.database) ) self._change_download_btn_label() return @@ -335,8 +337,8 @@ def download_complete_callback(event): self._last_downloaded_location_name = dirname self._warning( _( - "Download completed. The downloaded sample data is listed " - "in the location/mapset tabs upon closing of this window" + "Download completed. The downloaded sample data is available " + "now in the data tree" ) ) self._change_download_btn_label() @@ -376,7 +378,9 @@ def CheckItem(self, item): destination = os.path.join(self.database, dirname) if os.path.exists(destination): self._warning( - _("Location named <%s> already exists," " rename it first") % dirname + _("Project named {name} already exists, rename it first").format( + name=dirname + ) ) self.parent.download_button.SetLabel(label=_("Download")) return @@ -429,7 +433,7 @@ class LocationDownloadDialog(wx.Dialog): Contains the panel and Cancel button. """ - def __init__(self, parent, database, title=_("Location Download")): + def __init__(self, parent, database, title=_("Project Download")): """ :param database: database to download the location to :param title: window title if the default is not appropriate @@ -437,7 +441,7 @@ def __init__(self, parent, database, title=_("Location Download")): wx.Dialog.__init__(self, parent=parent, title=title) cancel_button = Button(self, id=wx.ID_CANCEL) self.download_button = Button(parent=self, id=wx.ID_ANY, label=_("Do&wnload")) - self.download_button.SetToolTip(_("Download selected location")) + self.download_button.SetToolTip(_("Download selected project")) self.panel = LocationDownloadPanel(parent=self, database=database) cancel_button.Bind(wx.EVT_BUTTON, self.OnCancel) self.Bind(wx.EVT_CLOSE, self.OnCancel) @@ -480,7 +484,7 @@ def OnCancel(self, event=None): # running thread dlg = wx.MessageDialog( parent=self, - message=_("Do you want to cancel location download?"), + message=_("Do you want to cancel project download?"), caption=_("Abort download"), style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE, ) From 0bf980cde84b825304ed78fc5865fd7187faabf9 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Fri, 2 Jun 2023 17:09:13 +0200 Subject: [PATCH 2/9] Rename in docs --- gui/wxpython/datacatalog/g.gui.datacatalog.html | 6 +++--- gui/wxpython/docs/wxGUI.html | 6 +++--- gui/wxpython/gcp/g.gui.gcp.html | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/gui/wxpython/datacatalog/g.gui.datacatalog.html b/gui/wxpython/datacatalog/g.gui.datacatalog.html index eb9f6ba744d..a858b6f4728 100644 --- a/gui/wxpython/datacatalog/g.gui.datacatalog.html +++ b/gui/wxpython/datacatalog/g.gui.datacatalog.html @@ -9,12 +9,12 @@

DESCRIPTION

Data Catalog allows you to: diff --git a/gui/wxpython/docs/wxGUI.html b/gui/wxpython/docs/wxGUI.html index 980e8886c75..63349d2c424 100644 --- a/gui/wxpython/docs/wxGUI.html +++ b/gui/wxpython/docs/wxGUI.html @@ -187,7 +187,7 @@

Layer Manager Toolbar

icon  Add overlay grids and lines
-
Adds layer to display regular grid (for all locations) +
Adds layer to display regular grid see d.grid
icon  @@ -199,12 +199,12 @@

Layer Manager Toolbar

icon  Add geodesic line layer
-
Add layer to display geodesic line for latitude/longitude locations only, +
Add layer to display geodesic line for latitude/longitude projects only, see d.geodesic
icon  Add rhumbline layer -
Add layer to display rhumblines (for latitude/longitude locations only), +
Add layer to display rhumblines (for latitude/longitude projects only), see d.rhumbline.
icon  diff --git a/gui/wxpython/gcp/g.gui.gcp.html b/gui/wxpython/gcp/g.gui.gcp.html index 767b8eae6f5..4585de25674 100644 --- a/gui/wxpython/gcp/g.gui.gcp.html +++ b/gui/wxpython/gcp/g.gui.gcp.html @@ -15,8 +15,8 @@

DESCRIPTION

permanent and can be undone by reloading the Ground Control Points.

-The GCP Manager must be started in the target location, not in the -source location. +The GCP Manager must be started in the target project, not in the +source project.

The GCP Manager is structured into three panels: @@ -28,8 +28,8 @@

DESCRIPTION

caption or by clicking on the pin button on the right in the caption. This panel can also be placed below the map displays by dragging.
  • The two panels in the lower part are used for map and GCP display, - the left pane showing a map from the source location and the right - pane showing a reference map from the target location. Numbered Ground + the left pane showing a map from the source project and the right + pane showing a reference map from the target project. Numbered Ground Control Points are shown on both map displays. @@ -64,8 +64,8 @@

    Components of the GCP Manager

    Two panels for map display

    -The left panel is used to display a map from the source location, the -right panel to display a map from the target location. Zooming in and +The left panel is used to display a map from the source project, the +right panel to display a map from the target project. Zooming in and out is always possible with the mouse wheel and done for each map canvas separately.

    @@ -214,9 +214,9 @@

    GCP Map Display Toolbar

    Select rectification method
    Set the polynomial order for georectification. This order will also be used for RMS error calculation.
    -
    Clip to computational region in target location
    +
    Clip to computational region in target project
    Clip raster maps to the current computational region in the - target location when georectifying.
    + target project when georectifying.
    Extension for output maps
    Change the extension for output map names when doing the actual georectification.
    From 8ad5c441e7b1ddae84a25f2e0c50603aa9e06c04 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Sat, 3 Jun 2023 10:21:21 +0200 Subject: [PATCH 3/9] Rename in menu items --- gui/wxpython/xml/wxgui_items.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/gui/wxpython/xml/wxgui_items.xml b/gui/wxpython/xml/wxgui_items.xml index a07e357090f..c795ae9ce3b 100644 --- a/gui/wxpython/xml/wxgui_items.xml +++ b/gui/wxpython/xml/wxgui_items.xml @@ -268,14 +268,14 @@ OnMapsets g.mapsets - Set/unset access to other mapsets in current location + Set/unset access to other mapsets in current project general,settings,search path - + OnChangeLocation - Change current location and mapset. - general,location,current + Change current project and mapset. + general,project,location,current @@ -295,22 +295,22 @@ general,settings,variables - + OnLocationWizard - Launches location wizard to create new GRASS location. - general,location,wizard + Launches project wizard to create a new GRASS project (also known as location). + general,project,location,wizard OnCreateMapset - Creates new mapset in the current location, changes current mapset. + Creates new mapset in the current project, changes current mapset. general,mapset,create g.proj -p Converts co-ordinate system descriptions (i.e. projection information) between various formats (including GRASS format). - general,projection,create location + general,projection,create project,create location From b797c175ce47f9cce47bf3e2e32568c4b6026f95 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Sat, 3 Jun 2023 10:22:24 +0200 Subject: [PATCH 4/9] Mention also 'location' in selected texts --- gui/wxpython/datacatalog/catalog.py | 4 +++- gui/wxpython/datacatalog/g.gui.datacatalog.html | 2 ++ gui/wxpython/datacatalog/toolbars.py | 5 +++-- gui/wxpython/datacatalog/tree.py | 4 ++-- gui/wxpython/main_window/frame.py | 2 +- gui/wxpython/startup/locdownload.py | 2 +- 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/gui/wxpython/datacatalog/catalog.py b/gui/wxpython/datacatalog/catalog.py index 2b4508e321e..4c2c1712433 100644 --- a/gui/wxpython/datacatalog/catalog.py +++ b/gui/wxpython/datacatalog/catalog.py @@ -208,7 +208,9 @@ def OnAddGrassDB(self, event): # Offer to create a new location if grassdb_node and not os.listdir(grassdatabase): - message = _("Do you want to create a project?") + message = _( + "Do you want to create a new project (also known as location)?" + ) dlg2 = wx.MessageDialog( self, message=message, diff --git a/gui/wxpython/datacatalog/g.gui.datacatalog.html b/gui/wxpython/datacatalog/g.gui.datacatalog.html index a858b6f4728..9a918dd3039 100644 --- a/gui/wxpython/datacatalog/g.gui.datacatalog.html +++ b/gui/wxpython/datacatalog/g.gui.datacatalog.html @@ -18,6 +18,8 @@

    DESCRIPTION

  • show metadata of maps
  • +Note that projects are called locations at some places and in old documentation. +
    data catalog screenshot
    diff --git a/gui/wxpython/datacatalog/toolbars.py b/gui/wxpython/datacatalog/toolbars.py index 4463de9026e..03de4f350b3 100644 --- a/gui/wxpython/datacatalog/toolbars.py +++ b/gui/wxpython/datacatalog/toolbars.py @@ -35,11 +35,12 @@ img="mapset-add", label=_("Create new mapset in current project") ), "addLocation": MetaIcon( - img="location-add", label=_("Create new project in current GRASS database") + img="location-add", + label=_("Create new project (location) in current GRASS database"), ), "downloadLocation": MetaIcon( img="location-download", - label=_("Download sample project to current GRASS database"), + label=_("Download sample project (location) to current GRASS database"), ), "importRaster": MetaIcon( img="raster-import", label=_("Import raster data [r.import]") diff --git a/gui/wxpython/datacatalog/tree.py b/gui/wxpython/datacatalog/tree.py index ba7431d0bdc..836c49f4768 100644 --- a/gui/wxpython/datacatalog/tree.py +++ b/gui/wxpython/datacatalog/tree.py @@ -2217,11 +2217,11 @@ def _popupMenuGrassDb(self): genv = gisenv() currentGrassDb, currentLocation, currentMapset = self._isCurrent(genv) - item = wx.MenuItem(menu, wx.ID_ANY, _("&Create new project")) + item = wx.MenuItem(menu, wx.ID_ANY, _("&Create new project (location)")) menu.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnCreateLocation, item) - item = wx.MenuItem(menu, wx.ID_ANY, _("&Download sample project")) + item = wx.MenuItem(menu, wx.ID_ANY, _("&Download sample project (location)")) menu.AppendItem(item) self.Bind(wx.EVT_MENU, self.OnDownloadLocation, item) diff --git a/gui/wxpython/main_window/frame.py b/gui/wxpython/main_window/frame.py index 77ef66604a7..179226fa927 100644 --- a/gui/wxpython/main_window/frame.py +++ b/gui/wxpython/main_window/frame.py @@ -1364,7 +1364,7 @@ def OnChangeLocation(self, event): if not location or not mapset: GError( parent=self, - message=_("No location/mapset provided. Operation canceled."), + message=_("No project provided. Operation canceled."), ) return # this should not happen if can_switch_mapset_interactive( diff --git a/gui/wxpython/startup/locdownload.py b/gui/wxpython/startup/locdownload.py index 8e97b538747..44825799b74 100644 --- a/gui/wxpython/startup/locdownload.py +++ b/gui/wxpython/startup/locdownload.py @@ -221,7 +221,7 @@ def __init__(self, parent, database, locations=LOCATIONS): self.database = database self.locations = locations self._abort_btn_label = _("Abort") - self._abort_btn_tooltip = _("Abort dataset download") + self._abort_btn_tooltip = _("Abort download") self.label = StaticText( parent=self, label=_("Select sample project to download:") From c8dea605ad5c51306bb780980d874943b53fbbad Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Sat, 3 Jun 2023 12:52:17 +0200 Subject: [PATCH 5/9] Replace location by project in data doc and note the old name --- doc/grass_database.html | 100 +++++++++++++++++++++------------------ doc/projectionintro.html | 28 +++++------ 2 files changed, 67 insertions(+), 61 deletions(-) diff --git a/doc/grass_database.html b/doc/grass_database.html index c8fc3a1bd55..f8ff513e659 100644 --- a/doc/grass_database.html +++ b/doc/grass_database.html @@ -2,16 +2,17 @@ A GRASS GIS Database is simply a set of directories and files with certain structure which GRASS GIS works efficiently with. -Location is a directory with data related to -one geographic location or a project. -All data within one Location has the same cartographic projection. -A Location contains Mapsets and each Mapset contains data related to +Project is a directory with data related to +one geographic location or a real-world project. +All data within one project has the same coordinate reference system. +A project contains Mapsets and each Mapset contains data related to a specific task, user or a smaller project. -Within each Location, a mandatory PERMANENT Mapset exists -which can contain commonly used data within a Location such as base maps. -PERMANENT Mapset also contains metadata related to Location -such as projection. -When GRASS GIS is started it connects to a Database, Location and Mapset +Within each project, a mandatory PERMANENT Mapset exists +which can contain commonly used data within one GRASS project +such as base maps. +PERMANENT Mapset also contains metadata related to the project +such as the coordinate reference system. +When GRASS GIS is started it connects to a Database, Project and Mapset specified by the user.

    @@ -34,7 +35,7 @@

    GRASS GIS Database

    All data for GRASS GIS must be in GRASS GIS Database which is a directory -(visible on the disk) containing subdirectories which are GRASS Locations. +(visible on the disk) containing subdirectories which are GRASS Projects. User can have one or more of Databases on the disk. Typically users have one directory called grassdata in their home directory. In multi-user environment users often have a grassdata directory @@ -52,28 +53,32 @@

    GRASS GIS Database

    inside in a specific format and is accessible by specific tools. GRASS GIS Databases is in GRASS GIS often called GISDBASE or DATABASE. -

    GRASS Locations

    +

    GRASS Projects

    -Location is a directory which contains GRASS Mapsets which are its subdirectories. -All data in one Location have the same projection (coordinate system, datum). -Each Location must contain Mapset called PERMANENT. -Typically, a Location contains all data related to one project +Project is a directory which contains GRASS Mapsets which are its subdirectories. +All data in one Project have the same coordinate reference system (projection, datum). +Each project must contain Mapset called PERMANENT. +Typically, a project contains all data related to one real-world project or a geographic area (geographic location or region). -Alternatively, Location can simply contain all data in a given projection. +Alternatively, project can simply contain all data in a given coordinate +reference system.

    -GRASS Locations can be safely copied or moved as any other directories. -Compressed Location is usually what GRASS users exchange between each other +GRASS project can be safely copied or moved as any other directories. +Compressed project is usually what GRASS users exchange between each other when they want to share a lot of data. -For example, GRASS GIS sample data are provided as Locations. +For example, GRASS GIS sample data are provided as projects. + +

    +Note that projects are called locations at some places +and in old documentation. Location is an older name for GRASS projects +and was not completely removed yet from the code and documentation +(contributions welcome).

    -Don't be confused with location as a place (file or directory) in a file system. -The word location in GRASS Location refers to a location or area on Earth -(or whatever is applicable). Users and programmers familiar with relational databases such as PostgreSQL -can view Location as an individual database inside the system or a storage area -which would be equivalent to GRASS GIS Database. Mapsets in a Locations +can view project as an individual database inside a system or a storage area +which would be equivalent to GRASS GIS Database. Mapsets in a Projects are like namespaces or schemas inside a database. @@ -106,7 +111,7 @@

    GRASS Mapsets

    specific task, issue or subregions. In multi-user environment, when a team works together on one project, Mapsets support simultaneous access of several users to the maps -stored within the same Location. +stored within the same project. Besides access to his or her own Mapset, each user can also read maps in PERMANENT Mapsent and in other users' Mapsets when set. @@ -122,7 +127,7 @@

    GRASS Mapsets

    Mapsets can be copied and moved as directories, however only when it is clear -that the projections of both Locations +that the projections of both projects (as reported by g.proj) match each other. Since this is sometimes hard to to establish, it is recommended to use r.proj @@ -132,8 +137,8 @@

    GRASS Mapsets

    The role of the PERMANENT Mapset

    -When creating a new Location, GRASS GIS automatically creates a special -Mapset called PERMANENT where the core data for the Location are stored. +When creating a new project, GRASS GIS automatically creates a special +Mapset called PERMANENT where the core data for the project are stored.

    Since the maps in PERMANENT Mapset are visible from all the other Mapsets, @@ -146,14 +151,14 @@

    The role of the PERMANENT Mapset

    accessed, analyzed, and copied into their own Mapset by the other users. The PERMANENT Mapset is useful for providing general spatial data (e.g. an elevation model), accessible but write-protected to all -users who are working in the same Location as the database owner. +users who are working with the same GRASS project as the database owner. To manipulate or add data to PERMANENT, the owner can start -GRASS GIS and choose the relevant Location and the PERMANENT Mapset. +GRASS GIS and choose the relevant project and the PERMANENT Mapset.

    The PERMANENT Mapset also contains the DEFAULT_WIND file which holds the default computational region's extent and resolution values -for the Location (which all Mapsets will inherit when they are created). +for the project (which all Mapsets will inherit when they are created). Users have the option of switching back to the default region at any time.

    Importing, exporting and linking data

    @@ -168,7 +173,8 @@

    Importing, exporting and linking data

    For cases when import is not desirable, an option to link external data exists. -Projection of the linked data must match the Location's projection +Projection of the linked data must match the projects's +coordinate reference system otherwise the external data cannot be linked. (Linking data in different projection is not allowed as it would require on-the-fly reprojection which could cause inconsistencies in the data. @@ -184,15 +190,15 @@

    Importing, exporting and linking data

    Starting GRASS GIS

    After launching GRASS GIS for the first time, -the GUI opens in a default Location world_latlong_wgs84. -From there a new Location and Mapset can be created. +the GUI opens in a default project world_latlong_wgs84. +From there a new project can be created.

    GRASS GIS GUI after first start
    -GRASS GIS can be also started with a given Database, Location and Mapset +GRASS GIS can be also started with a given Database, Project and Mapset from the command line. For example, the following will start in a given Mapset with only command line interface: @@ -204,34 +210,34 @@

    Starting GRASS GIS

    grass --text D:\grassdata\nc_spm_08_grass7\user1 -And the following will create the given Location with projection given -by the EPSG code and it will start the default interface +And the following will create the given project with coordinate reference +system given by the EPSG code and it will start the default interface (GUI or command line):
     # Linux, Mac, *BSD, ...:
    -grass -c EPSG:5514:3 ~/grassdata/mylocation
    +grass -c EPSG:5514:3 ~/grassdata/myproject
     
     # Windows
    -grass -c EPSG:5514:3 D:\grassdata\mylocation
    +grass -c EPSG:5514:3 D:\grassdata\myproject
     
    See grass command manual for more details. -

    Creating a New Location with the Location Wizard

    +

    Creating a New Project with the Project Wizard

    The GUI provides a -graphical Location Wizard which lets you easily create a -new Location for your own data. You will be guided through a series of +graphical Project Wizard which lets you easily create a +new project for your own data. You will be guided through a series of dialogues to browse and select predefined projections or to define custom projections.

    -The most convenient way of using Location Wizard is creating new -Location based on a georeferenced file, such as Shapefile or GeoTIFF, +The most convenient way of using Project Wizard is creating new +project based on a georeferenced file, such as Shapefile or GeoTIFF, or by selecting the corresponding EPSG projection code. In case of using georeferenced file, you are asked whether the data itself -should be imported into the new Location. +should be imported into the new project. The default region is then set to match imported map. @@ -244,13 +250,13 @@

    Creating a New Location with the Location Wizard

    this was in the text pointing to some unknown text: * The rules to define the resolution as described above also apply here. * Find below also some rules to define the default raster resolution - for a new Location. + for a new project. -->

    If data were already imported, you can add them into the Layer Manager now and display them. -More data can be imported into the Location, e.g. using import options in +More data can be imported into the project, e.g. using import options in the File menu in Layer Manager or r.import. diff --git a/doc/projectionintro.html b/doc/projectionintro.html index 4a62eb15c62..c3c73ffe9d3 100644 --- a/doc/projectionintro.html +++ b/doc/projectionintro.html @@ -1,30 +1,30 @@

    Projection management in general

    -A GRASS location is referenced with a single projection and coordinate system -(or unreferenced as XY location). When creating a new location from an existing +A GRASS project is referenced with a single projection and coordinate system +(or unreferenced as XY project). When creating a new project from an existing raster or vector map using the tools available from the startup screen or the map import commands, projection and coordinate system are defined. -To change the projection of maps, a new location has to be created and -the desired maps have to be reprojected into it from the source location +To change the projection of maps, a new project has to be created and +the desired maps have to be reprojected into it from the source project as explained below.

    Raster map projections

    Raster maps are backward projected in GRASS. This means that the user has to run the raster projection command (r.proj) -in the target location and "pull" the map from the source location. -Both locations need to have a projection defined. +in the target project and "pull" the map from the source project. +Both projects need to have a projection defined.

    Raster map transformation

    -To transform an unprojected map from a XY location into a projected -location (or another XY location), a forward transformation is performed. -The unreferenced map is geocoded within the XY location by defining +To transform an unprojected map from a XY project into a projected +project (or another XY project), a forward transformation is performed. +The unreferenced map is geocoded within the XY project by defining four corner points or by seeking several ground control points (i.group, i.target, g.gui.gcp) and then transformed into the -target location (i.rectify). Polynomial +target project (i.rectify). Polynomial transformation of 1st, 2nd and 3rd order are supported.

    A graphical user interface is provided by wxGUI. @@ -37,17 +37,17 @@

    Vector map projections

    Vector maps are backward projected in GRASS. This means that the user has to run the vector projection command (v.proj) -in the target location and "pull" the map from the source location. -Both locations need to have a projection defined. +in the target project and "pull" the map from the source project. +Both projects need to have a projection defined.

    Vector map transformation

    To transform an unprojected map (e.g. CAD map) into projected coordinates, a forward transformation is performed. The unreferenced map is imported -into the location with projection and geocoded within this location by +into the project with projection and geocoded within this project by defining four corner points or by seeking several ground control points. These points are stored into an ASCII file and then transformed within -the same location (v.transform). +the same project (v.transform). Alternatively, v.rectify rectifies a vector by computing a coordinate transformation for each object in the vector From b27dcf975634c2729548182bf731d42a10072df2 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Sun, 4 Jun 2023 17:21:17 -0400 Subject: [PATCH 6/9] Apply most of wording suggestions from code review Co-authored-by: Caitlin Haedrich <69856275+chaedri@users.noreply.github.com> Co-authored-by: Veronica Andreo --- doc/grass_database.html | 26 +++++++++++++------------- doc/projectionintro.html | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/doc/grass_database.html b/doc/grass_database.html index f8ff513e659..a2b5e430759 100644 --- a/doc/grass_database.html +++ b/doc/grass_database.html @@ -3,7 +3,7 @@ A GRASS GIS Database is simply a set of directories and files with certain structure which GRASS GIS works efficiently with. Project is a directory with data related to -one geographic location or a real-world project. +one geographic location or a project. All data within one project has the same coordinate reference system. A project contains Mapsets and each Mapset contains data related to a specific task, user or a smaller project. @@ -57,22 +57,22 @@

    GRASS Projects

    Project is a directory which contains GRASS Mapsets which are its subdirectories. All data in one Project have the same coordinate reference system (projection, datum). -Each project must contain Mapset called PERMANENT. +Each project must contain a Mapset called PERMANENT. Typically, a project contains all data related to one real-world project or a geographic area (geographic location or region). -Alternatively, project can simply contain all data in a given coordinate +Alternatively, a project can simply contain data in a given coordinate reference system.

    -GRASS project can be safely copied or moved as any other directories. -Compressed project is usually what GRASS users exchange between each other +GRASS projects can be safely copied or moved as any other directories. +Compressed projects are usually what GRASS users exchange between each other when they want to share a lot of data. For example, GRASS GIS sample data are provided as projects.

    -Note that projects are called locations at some places +Note that projects are referred to as locations in some places, such as older documentation. and in old documentation. Location is an older name for GRASS projects -and was not completely removed yet from the code and documentation +and has not been completely removed from the code and documentation yet (contributions welcome).

    @@ -109,10 +109,10 @@

    GRASS Mapsets

    Mapsets are used to store maps related to one project, smaller project, specific task, issue or subregions. -In multi-user environment, when a team works together on one project, +In a multi-user environment, where team members work together on a single project, Mapsets support simultaneous access of several users to the maps stored within the same project. -Besides access to his or her own +Besides access to their own Mapset, each user can also read maps in PERMANENT Mapsent and in other users' Mapsets when set. However, each user can modify or remove only the maps @@ -126,10 +126,10 @@

    GRASS Mapsets

    and managed by g.region.

    -Mapsets can be copied and moved as directories, however only when it is clear -that the projections of both projects +Mapsets can be copied and moved as directories only when it is clear +that their projections (as reported by g.proj) -match each other. Since this is sometimes hard to to establish, +match. Since this is sometimes hard to to establish, it is recommended to use r.proj or v.proj to reproject the data. The files and directories should not be moved or modified directly, @@ -173,7 +173,7 @@

    Importing, exporting and linking data

    For cases when import is not desirable, an option to link external data exists. -Projection of the linked data must match the projects's +Projection of the linked data must match the project's coordinate reference system otherwise the external data cannot be linked. (Linking data in different projection is not allowed as it would require on-the-fly reprojection diff --git a/doc/projectionintro.html b/doc/projectionintro.html index c3c73ffe9d3..f377c912a9a 100644 --- a/doc/projectionintro.html +++ b/doc/projectionintro.html @@ -9,7 +9,7 @@

    Projection management in general

    the desired maps have to be reprojected into it from the source project as explained below. -

    Raster map projections

    +

    Reprojecting raster maps

    Raster maps are backward projected in GRASS. This means that the user has to run the raster projection command (r.proj) From ac142dd4b20e5d9d957ed94e5676dc1a696626db Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 8 Aug 2023 21:21:53 -0400 Subject: [PATCH 7/9] Change wording based on reviews --- doc/grass_database.html | 11 +++++------ doc/projectionintro.html | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/doc/grass_database.html b/doc/grass_database.html index a2b5e430759..c4812d394f9 100644 --- a/doc/grass_database.html +++ b/doc/grass_database.html @@ -71,15 +71,14 @@

    GRASS Projects

    Note that projects are referred to as locations in some places, such as older documentation. -and in old documentation. Location is an older name for GRASS projects -and has not been completely removed from the code and documentation yet +Location is an older name for GRASS projects +and has not been completely removed from the code and documentation yet (contributions welcome).

    Users and programmers familiar with relational databases such as PostgreSQL -can view project as an individual database inside a system or a storage area -which would be equivalent to GRASS GIS Database. Mapsets in a Projects -are like namespaces or schemas inside a database. +can view projects as individual databases inside a storage area (the GRASS GIS Database). +Mapsets in a project are like namespaces or schemas inside a database. @@ -127,7 +126,7 @@

    GRASS Mapsets

    Mapsets can be copied and moved as directories only when it is clear -that their projections +that their projections (as reported by g.proj) match. Since this is sometimes hard to to establish, it is recommended to use r.proj diff --git a/doc/projectionintro.html b/doc/projectionintro.html index f377c912a9a..f85416640d3 100644 --- a/doc/projectionintro.html +++ b/doc/projectionintro.html @@ -11,10 +11,11 @@

    Projection management in general

    Reprojecting raster maps

    -Raster maps are backward projected in GRASS. This means that the -user has to run the raster projection command (r.proj) -in the target project and "pull" the map from the source project. -Both projects need to have a projection defined. +Rasters are reprojected using the raster projection tool +r.proj. +The tool is used in the target project to "pull" a map from its source project. +Both projects need to have a projection defined, +i.e., they cannot be XY (unprojected).

    Raster map transformation

    @@ -35,10 +36,11 @@

    Raster map transformation

    Vector map projections

    -Vector maps are backward projected in GRASS. This means that the -user has to run the vector projection command (v.proj) -in the target project and "pull" the map from the source project. -Both projects need to have a projection defined. +Vectors are reprojected using the vector projection tool +v.proj. +The tool is used in the target project to "pull" a map from its source project. +Both projects need to have a projection defined, +i.e., they cannot be XY (unprojected).

    Vector map transformation

    From f612307389973b96aefc0fb411dfeb2ff81619d1 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Fri, 15 Mar 2024 22:56:19 -0400 Subject: [PATCH 8/9] Address review: more CRS than projection, dataset then projet, more lowercase, only lowercase mapset in database doc --- doc/grass_database.html | 77 ++++++++++++++--------------- gui/wxpython/startup/locdownload.py | 8 +-- 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/doc/grass_database.html b/doc/grass_database.html index c4812d394f9..4e8063e0d59 100644 --- a/doc/grass_database.html +++ b/doc/grass_database.html @@ -5,14 +5,14 @@ Project is a directory with data related to one geographic location or a project. All data within one project has the same coordinate reference system. -A project contains Mapsets and each Mapset contains data related to +A project contains mapsets and each mapset contains data related to a specific task, user or a smaller project. -Within each project, a mandatory PERMANENT Mapset exists +Within each project, a mandatory PERMANENT mapset exists which can contain commonly used data within one GRASS project such as base maps. -PERMANENT Mapset also contains metadata related to the project +PERMANENT mapset also contains metadata related to the project such as the coordinate reference system. -When GRASS GIS is started it connects to a Database, Project and Mapset +When GRASS GIS is started it connects to a database, project and mapset specified by the user.

    @@ -35,7 +35,7 @@

    GRASS GIS Database

    All data for GRASS GIS must be in GRASS GIS Database which is a directory -(visible on the disk) containing subdirectories which are GRASS Projects. +(visible on the disk) containing subdirectories which are GRASS projects. User can have one or more of Databases on the disk. Typically users have one directory called grassdata in their home directory. In multi-user environment users often have a grassdata directory @@ -55,9 +55,10 @@

    GRASS GIS Database

    GRASS Projects

    -Project is a directory which contains GRASS Mapsets which are its subdirectories. -All data in one Project have the same coordinate reference system (projection, datum). -Each project must contain a Mapset called PERMANENT. +Project is further organized into mapsets which are subdirectories of +the project directory. All data in one project have the same coordinate +reference system (projection, datum). +Each project contains a mapset called PERMANENT. Typically, a project contains all data related to one real-world project or a geographic area (geographic location or region). Alternatively, a project can simply contain data in a given coordinate @@ -70,10 +71,8 @@

    GRASS Projects

    For example, GRASS GIS sample data are provided as projects.

    -Note that projects are referred to as locations in some places, such as older documentation. -Location is an older name for GRASS projects -and has not been completely removed from the code and documentation yet -(contributions welcome). +Note that a GRASS project used to be called location and +this name has not been completely removed from code and documentation yet.

    Users and programmers familiar with relational databases such as PostgreSQL @@ -90,17 +89,17 @@

    GRASS Mapsets

    as well as a tool for isolating different tasks to prevent data loss.

    -GRASS GIS is always connected to one particular Mapset. +GRASS GIS is always connected to one particular mapset. GRASS GIS modules can create, modify, change, or delete a data only in -the current Mapset. -By default, only the data from the current Mapset and PERMANENT Mapset +the current mapset. +By default, only the data from the current mapset and PERMANENT mapset are visible. Using g.mapsets -module or in GUI other Mapsets can be made visible and seamlessly accessible. -All data are available for reading when Mapset is specified explicitly, -for example to access map streets in Mapset +module or in GUI other mapsets can be made visible and seamlessly accessible. +All data are available for reading when mapset is specified explicitly, +for example to access map streets in mapset new_highway user can use streets@new_highway. -For maps which are in the current or PERMAENT Mapsets or Mapsets +For maps which are in the current or PERMAENT mapsets or mapsets sets as visible (accessible), there is no need to use @mapset syntax. @@ -109,16 +108,16 @@

    GRASS Mapsets

    Mapsets are used to store maps related to one project, smaller project, specific task, issue or subregions. In a multi-user environment, where team members work together on a single project, -Mapsets support simultaneous access of several users to the maps +mapsets support simultaneous access of several users to the maps stored within the same project. Besides access to their own -Mapset, each user can also read maps in PERMANENT Mapsent -and in other users' Mapsets when set. +mapset, each user can also read maps in PERMANENT Mapsent +and in other users' mapsets when set. However, each user can modify or remove only the maps -in his or her own Mapset. +in his or her own mapset.

    -Besides the geospatial data, Mapset holds additional data such as +Besides the geospatial data, mapset holds additional data such as color tables (managed e.g. by r.colors) and the current computational region's extent and resolution stored in a file called WIND @@ -126,7 +125,7 @@

    GRASS Mapsets

    Mapsets can be copied and moved as directories only when it is clear -that their projections +that their coordinate reference systems (as reported by g.proj) match. Since this is sometimes hard to to establish, it is recommended to use r.proj @@ -137,27 +136,27 @@

    GRASS Mapsets

    The role of the PERMANENT Mapset

    When creating a new project, GRASS GIS automatically creates a special -Mapset called PERMANENT where the core data for the project are stored. +mapset called PERMANENT where the core data for the project are stored.

    -Since the maps in PERMANENT Mapset are visible from all the other Mapsets, +Since the maps in PERMANENT mapset are visible from all the other mapsets, it can be used to store the base maps (base cartography), data common -to all projects or needed for different analyses done is separate Mapsets. +to all projects or needed for different analyses done is separate mapsets.

    -In multi-user environment, data in the PERMANENT Mapset can only be added, -modified or removed by the owner of the PERMANENT Mapset; however, they can be -accessed, analyzed, and copied into their own Mapset by the other -users. The PERMANENT Mapset is useful for providing general spatial +In multi-user environment, data in the PERMANENT mapset can only be added, +modified or removed by the owner of the PERMANENT mapset; however, they can be +accessed, analyzed, and copied into their own mapset by the other +users. The PERMANENT mapset is useful for providing general spatial data (e.g. an elevation model), accessible but write-protected to all users who are working with the same GRASS project as the database owner. To manipulate or add data to PERMANENT, the owner can start -GRASS GIS and choose the relevant project and the PERMANENT Mapset. +GRASS GIS and choose the relevant project and the PERMANENT mapset.

    -The PERMANENT Mapset also contains the DEFAULT_WIND file which holds +The PERMANENT mapset also contains the DEFAULT_WIND file which holds the default computational region's extent and resolution values -for the project (which all Mapsets will inherit when they are created). +for the project (which all mapsets will inherit when they are created). Users have the option of switching back to the default region at any time.

    Importing, exporting and linking data

    @@ -172,7 +171,7 @@

    Importing, exporting and linking data

    For cases when import is not desirable, an option to link external data exists. -Projection of the linked data must match the project's +The coordinate reference system of the linked data must match the project's coordinate reference system otherwise the external data cannot be linked. (Linking data in different projection is not allowed as it would require on-the-fly reprojection @@ -197,9 +196,9 @@

    Starting GRASS GIS

    GRASS GIS GUI after first start
    -GRASS GIS can be also started with a given Database, Project and Mapset +GRASS GIS can be also started with a given database, project and mapset from the command line. For example, the following will start -in a given Mapset with only command line interface: +in a given mapset with only command line interface:
     # Linux, Mac, *BSD, ...:
    @@ -234,7 +233,7 @@ 

    Creating a New Project with the Project Wizard

    The most convenient way of using Project Wizard is creating new project based on a georeferenced file, such as Shapefile or GeoTIFF, -or by selecting the corresponding EPSG projection code. +or by selecting the corresponding EPSG code of the coordinate reference system. In case of using georeferenced file, you are asked whether the data itself should be imported into the new project.