WxPython-based GUI for GRASS: Difference between revisions
(g-ps.map Prototype) |
m (fix URLs) |
||
(413 intermediate revisions by 11 users not shown) | |||
Line 1: | Line 1: | ||
See also [[GRASS GUI]] and [[GRASS and Python]]. | Browse also wxGUI related [[:Category:WxGUI|articles or screenshots]]. | ||
See also [[GRASS GUI]], and [[GRASS and Python]]. | |||
For developer-related issues see [http://trac.osgeo.org/grass/wiki/wxGUIDevelopment Trac wxGUI page] and [ GitHub GUI issues]. | |||
[[Image:GRASS_GIS_70_startup.png|center|400px]] | |||
__TOC__ | __TOC__ | ||
Line 5: | Line 11: | ||
== Overview == | == Overview == | ||
* '''{{cmd|wxGUI}} Manual page]''' | |||
Historical development documents: | |||
* A nice summary of the progress to date, written by Jachym Cepicky: | * A nice summary of the progress to date, written by Jachym Cepicky: | ||
** [http://www.les-ejk.cz/english/wxgrass-new-grass-gui-1 Part 1] | ** [http://www.les-ejk.cz/english/wxgrass-new-grass-gui-1 Part 1] | ||
** [http://www.les-ejk.cz/english/wxgrass-new-grass-gui-2 Part 2] | ** [http://www.les-ejk.cz/english/wxgrass-new-grass-gui-2 Part 2] | ||
* [http:// | * [[User:Landa|Martin Landa]]: [http://gama.fsv.cvut.cz/~landa/publications/2008/gis-ostrava-08/paper/landa-grass-gui-wxpython.pdf New GUI for GRASS GIS based on wxPython] ([http://gis2008.com/indexe.html GIS Ostrava 2008], January 27-30, 2008, Ostrava, Czech Republic) | ||
* [[User:Landa|Martin Landa]], Cristina Moretto, Michele Zanolli, Luca Manganelli and Markus Neteler: [http://gama.fsv.cvut.cz/~landa/publications/2008/gfoss-it-08/paper/grass-gfoss-tn.pdf wxPython-based GUI for GRASS GIS] ([http://gama.fsv.cvut.cz/~landa/publications/2008/gfoss-it-08/prezentazione/perugia-grass-gui-wxpython.pdf presentation]) ([http://www.grassmeeting2008.unipg.it IX Meeting degli Utenti Italiani di GRASS - GFOSS], February 20-22, Perugia, Italy) | |||
=== | Contributing: | ||
* https://github.com/OSGeo/grass/blob/master/CONTRIBUTING.md | |||
* [ | |||
=== Development === | |||
Do you want to help with the development? | |||
* basic Python programming ability required | |||
* GUI programming experience welcomed (especially wxPython) | |||
* GRASS user (or better developer) experience | |||
How to get [http://trac.osgeo.org/grass/wiki/HowToContribute write access] to the GRASS GIS code repository. | |||
See example of wxGUI module in core: {{src|doc/gui/wxpython/example/}} | |||
== Screenshots == | |||
* See [[WxGUI Screenshots|Screenshots]] page | |||
* [[:Category:WxGUI|Screenshots from GRASSWiki]] | |||
* [https://svn.osgeo.org/grass/grass-addons/screenshots/wxpython SVN] | |||
* [https://grass.osgeo.org/screenshots/user-interface Website screenshot page] | |||
* Various screenshots from [[:Category:WxGUI|GRASS-Wiki]] | |||
== Video tutorials == | |||
* See [[wxGUI/Video tutorials|Video tutorials]] page | |||
== Components == | == Components == | ||
=== Layer Manager === | === Core components === | ||
==== Layer Manager ==== | |||
'''Status:''' prototype implemented. | |||
The '''GRASS GIS Layer Manager''' provides an interactive graphical interface to GRASS commands. The Layer Manager includes a set of pull-down menus for all GRASS GIS functions (analysis, file I/O, GIS configuration and management), toolbar that manage display map layers in map display windows, layer tree in which map layers to display are organized, command output window and integrated command line prompt. | The '''GRASS GIS Layer Manager''' provides an interactive graphical interface to GRASS commands. The Layer Manager includes a set of pull-down menus for all GRASS GIS functions (analysis, file I/O, GIS configuration and management), toolbar that manage display map layers in map display windows, layer tree in which map layers to display are organized, command output window and integrated command line prompt. | ||
< | <center> | ||
<gallery perrow=2 widths=300 heights=200> | |||
Image:wxgrass-gis-manager-layer.png|2007/12 | |||
| | Image:wxgrass-gis-manager-output.png|2007/12 | ||
</ | Image:Wxgrass rgb.png|2008/02 | ||
Image:wxgui-layer-manager-70.png|2010/08 | |||
Image:wxgui-pyshell.png|2011/06 - Embedded interactive Python Shell | |||
</gallery> | |||
</center> | |||
==== Import tool ==== | |||
The GUI offers a convenient tool for single map and bulk import: | |||
* see [[Importing data]] | |||
=== Map display window === | ==== Map display window ==== | ||
Each '''Map display window''' has a unique set of layers to display and region setting (zoom). The map display window includes main toolbar with basic tools including zooming, panning, data querying, simple analyse functions (measure, profile, histogram, etc.), overlay management, etc. From main toolbar are accessible additional toolbars, currently only Digitization tool is available. Under development is Georectification tool. | Each '''Map display window''' has a unique set of layers to display and region setting (zoom). The map display window includes main toolbar with basic tools including zooming, panning, data querying, simple analyse functions (measure, profile, histogram, etc.), overlay management, etc. From main toolbar are accessible additional toolbars, currently only Digitization tool is available. Under development is Georectification tool. | ||
<center> | |||
<gallery perrow=2 widths=300 heights=200> | |||
Image:Wxgrass-mapdisplay-0.png | |||
Image:Wxgui-mapdisplay-1.png | |||
</gallery> | |||
</center> | |||
==== Map query tool ==== | |||
Raster and vector maps can be queried at cursor position: | |||
[[Image:Wxgui map query tool.png|center|thumb|500px|Raster and vector map query (select map to query in layer manager)]] | |||
=== | ==== Map measure tool ==== | ||
Raster and vector maps can be measured with a digitizer (line or self-closing area). | |||
Note for LatLong locations: The lengths/areas are returned also in metric units. | |||
[[Image:Wxgui map measure tool.png|center|thumb|500px|Measurements of line length and area size (latitude-longitude location example with SRTM]] | |||
==== GUI dialogs ==== | |||
'''Status:''' prototype implemented. | |||
Generated from XML using <tt>--interface-description</tt>. | Generated from XML using <tt>--interface-description</tt>. | ||
E.g. | E.g. <tt>d.rgb --help</tt> | ||
<pre> | <pre> | ||
Description: | Description: | ||
Line 70: | Line 127: | ||
</pre> | </pre> | ||
[ | becomes with <tt>d.rgb --interface-description</tt> | ||
<source lang="xml"> | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE task SYSTEM "[http://trac.osgeo.org/grass/browser/grass/trunk/gui/xml/grass-interface.dtd grass-interface.dtd]"> | |||
<task name="d.rgb"> | |||
<description> | |||
Displays three user-specified raster map layers as red, green, and blue overlays in the active graphics frame. | |||
</description> | |||
<keywords> | |||
display | |||
</keywords> | |||
<parameter name="red" type="string" required="yes" multiple="no"> | |||
<description> | |||
Name of raster map to be used for <red> | |||
</description> | |||
<keydesc> | |||
<item order="1">name</item> | |||
</keydesc> | |||
<gisprompt age="old" element="cell" prompt="raster" /> | |||
</parameter> | |||
<parameter name="green" type="string" required="yes" multiple="no"> | |||
<description> | |||
Name of raster map to be used for <green> | |||
</description> | |||
<keydesc> | |||
<item order="1">name</item> | |||
</keydesc> | |||
<gisprompt age="old" element="cell" prompt="raster" /> | |||
</parameter> | |||
<parameter name="blue" type="string" required="yes" multiple="no"> | |||
<description> | |||
Name of raster map to be used for <blue> | |||
</description> | |||
<keydesc> | |||
<item order="1">name</item> | |||
</keydesc> | |||
<gisprompt age="old" element="cell" prompt="raster" /> | |||
</parameter> | |||
<flag name="o"> | |||
<description> | |||
Overlay (non-null values only) | |||
</description> | |||
</flag> | |||
<flag name="x"> | |||
<description> | |||
Don't add to list of commands in monitor | |||
</description> | |||
</flag> | |||
<flag name="verbose"> | |||
<description> | |||
Verbose module output | |||
</description> | |||
</flag> | |||
<flag name="quiet"> | |||
<description> | |||
Quiet module output | |||
</description> | |||
</flag> | |||
</task> | |||
</source> | |||
which is then used to generate: | |||
[[Image:wxgrass-d-rgb.png|center|600px]] | |||
=== | ==== Startup GUI (welcome screen) ==== | ||
<!-- historical | |||
'''Status:''' implemented. | |||
Start new GRASS session with | |||
grass64 -gui | |||
[[Image:Wxgrass-startup.png|center|400px]] | |||
--> | |||
grass78 -gui | |||
[[Image:GRASS_GIS_70_startup.png|center|400px]] | |||
==== | ==== Location wizard ==== | ||
'''Status:''' prototype implemented. | |||
Wizard for creating new GRASS project location based on: | |||
* | * Coordinate system | ||
* EPSG code | |||
* Georeferenced file | |||
* PROJ.4 string | |||
* XY | |||
See also [[GRASS Location Wizard]]. | |||
[[Image:Wxgui-location-wizard.png|center|thumb|600px|Location wizard]] | |||
=== Digitizer === | === Digitizer === | ||
==== Vector | ==== Vector digitizer ==== | ||
'''Status:''' prototype implemented. | |||
See also {{cmd|wxGUI.Vector_Digitizer|desc=manual page}} | |||
See also [[GRASS Digitizing tool]] and [[wxGUI Vector Digitizer]]. | |||
Replacement of <tt>v.digit</tt> module integrated into Map display window ([http://svn.osgeo.org/grass/grass-promo/screenshots/wxpython/digitization Screenshots]). | |||
<center> | |||
<gallery perrow=2 widths=300 heights=200> | |||
Image:WxDigit200804.png|Vector digitizer (2008/04) | |||
Image:Digit-01.png|Vector digitizer (2007/11) | |||
Image:WxGUI-vdigit-fill-area.png|Vector digitizer - fill valid areas (closed boundary + centroid) (2008/07) | |||
Image:WxGUI-vdigit-bg.png|Vector digitizer - background raster maps with different opacity level (2008/07) | |||
Image:WxGUI-vdigit-win0.png|Vector digitizer on MS Windows (2011/01) | |||
Image:Wxgui-vdigit-dupl.png|Vector digitizer - checking for duplicates (2011/02) | |||
</gallery> | |||
</center> | |||
==== Raster digitizer ==== | |||
'''Status:''' development started in GRASS 7 (2014) --> implemented in 2020 | |||
* | * {{cmd|r.digit}} (merge with {{cmd|v.digit}}?) | ||
* | : Probably write a front end for {{cmd|r.in.poly}}, that's all the old {{cmd|r.digit}} is. | ||
* {{cmd|d.rast.edit}} | |||
: Idea: get cell center coords and new values from GUI interaction, then pass those through {{cmd|r.in.xyz}}, and {{cmd|r.patch}} the new values over the top of the old map. | |||
: Current status: | |||
[[Image:D_rast_edit_grass7.png|center|thumb|500px|Raster map editor in GRASS 7]] | |||
* merge with Georectifier? (i.points, i.vpoints) | * merge with Georectifier? (i.points, i.vpoints) | ||
===== Category Labels ===== | |||
* Write with new {{cmd|r.category}} import tool | |||
** ''Back-end component complete: {{cmd|r.category}} module is now updated to handle a rules= file and other goodies like dynamic labels'' | |||
* Read with one of {{cmd|r.category}}, {{cmd|r.describe}}, {{cmd|r.report}}, {{cmd|r.stats}}, ??? | |||
** probably need to add a new flag to one of those to print flat <tt>"%d %s", cat, label</tt> | |||
: or read the cats/ file directly, it's already flat ascii. | |||
* how to deal with FP maps & cats? | |||
=== Command line === | |||
In order to provide a command line in all operating systems, there is a tab "Command console" available (with auto-completion support). It communicates directly with the Map Display window: | |||
[[Image:Wxgui command line.png|350px|center|Command line]] | |||
=== Cartography tools === | |||
==== GUI for {{Cmd|ps.map}} ==== | |||
'''Status:''' under development (Anna Kratochvilova). | |||
Note: More info at '''[[WxGUI Cartographic Composer]]''' | |||
<center> | |||
{| | |||
|- | |||
| [[Image:CartographicComposer.png|350px|thumb|Cartographic Composer: draft mode]] | |||
| [[Image:CCPreview.png|350px|thumb|Cartographic Composer: preview]] | |||
|- | |||
|} | |||
</center> | |||
==== Direct printing ==== | |||
'''Status:''' development not started yet. | |||
Implement direct printing of map canvas content using GRASS PS driver or Cairo driver. | |||
* [http://trac.gispython.org/projects/PCL/wiki Python Cartographic Lab] | |||
* [http://wiki.osgeo.org/wiki/OSGeo_Cartographic_Library OSGeo Cartographic Library] | |||
** http://lists.osgeo.org/pipermail/discuss/2008-April/003337.html | |||
** http://www.intevation.de/pipermail/freegis-list/2007-April/003142.html | |||
* [http://wiki.osgeo.org/wiki/OSGeo_map_symbol_set OSGeo Map Symbol Set] | |||
* [http://www.gdal.org/ogr/ogr_feature_style.html OGR - Feature Style Specification] | |||
* [http://trac.osgeo.org/mapguide/wiki/MapGuideRfc14 MapGuide RFC 14 - Cartographic Stylization Engine] | |||
* [http://www.iho.shom.fr/PUBLICATIONS/download.htm#special S-52 standard for nautical chart (ENC) symbology] and cartography from the [http://www.iho.shom.fr/ International Hydrographic Bureau] | |||
** [http://openev.cvs.sourceforge.net/openev/contrib/S52/ GPL library implementing the S-52 standard] (OpenEV) | |||
* [http://www.opengeospatial.org/standards/symbol OpenGIS Symbology Encoding Implementation Specification] | |||
* [http://geosysin.iict.ch/trac/wiki/Index4extJPAL PAL] | |||
=== Georectifier === | |||
'''Status:''' prototype implemented. | |||
<center> | |||
{| | |||
|- | |||
| [[Image:Wxgui-georectify-0.png|thumb|350px|center|Georectifier (old interface)]] || | |||
[[Image:Wxgui-georectify-1.png|thumb|350px|center|Georectifier (old interface)]] | |||
|- | |||
|} | |||
</center> | |||
[[Image:Georectifier berlin.png|thumb|Georectification of historical maps using a simplified OpenStreetmap reference (example Berlin) - new interface|450px|center]] | |||
See also [[Georeferencing]]. | |||
=== Profile Analysis Tool === | |||
'''Status:''' prototype implemented. | |||
<center> | |||
{| | |||
|- | |||
| [[Image:Wxgui-profile-0.png|thumb|350px|center]] || | |||
[[Image:Wxgui-profile-1.png|thumb|350px|center]] | |||
|- | |||
|} | |||
</center> | |||
=== Attribute table manager === | |||
'''Status:''' prototype implemented. | |||
See [[wxGUI Attribute Table Manager]] page and also {{cmd|wxGUI.Attribute_Table_Manager|desc=manual page}}. | |||
[[Image:Grass-atm-example.png|center|thumb|640px|Attribute queries in wxGUI]] | |||
=== 3D view mode === | |||
'''Status:''' prototype implemented (Google Summer of Code 2008/2010/2011). | |||
See detailed information at [[wxNVIZ]] page and classic Tcl/Tk [[NVIZ]] pages. | |||
[[Image:Wxnviz-volumes.png|640px|thumb|center|Displaying raster (surface), 2D vector and 3D raster (volume) in the 3D space.]] | |||
=== Imagery tools === | |||
'''Status:''' (re)development not started in earnest yet. Some behind-the-scenes code has been prepared, but not much. | |||
: ''Volunteers welcome!'' | |||
==== Ortho photos ==== | ==== Ortho photos ==== | ||
* To replace i.ortho.photo and friends | '''Status:''' GUI development not started yet, initial start of module updates like {{cmd|i.ortho.rectify|version=70}} | ||
* To replace {{cmd|i.ortho.photo}} and friends | |||
==== wx.iclass ==== | |||
== | '''Status:''' prototype implemented. | ||
<!-- | |||
===== First prototype (AddOns) ===== | |||
* [http://trac.osgeo.org/grass/browser/grass-addons/gui/wxpython/wx.class wx.class] | |||
<center> | |||
{| | |||
|- | |||
| [[Image:wx.class1.png|350px|thumb|center|wx.class]] | |||
| [[Image:wx.class2.png|350px|thumb|center|wx.class]] | |||
| [[Image:wx.class3.png|350px|thumb|center|wx.class]] | |||
|- | |||
|} | |||
</center> | |||
Current Features: | |||
* Does not require xterm | |||
* works on windows which is not currently available | |||
To be implemented: | |||
* Proper view of histogram using python-matplotlib | |||
* To work on other datset (currently works for nc_spm_08) | |||
* Needs a code cleanup | |||
===== Second prototype (trunk) ===== | |||
--> | |||
* See [[wxIClass]] page | |||
=== Graphical Modeller === | |||
'''Status:''' prototype implemented. | |||
[[File:WxGUI-modeler-if-else-0.png|500px|center]] | |||
See [[wxGUI Graphical Modeler]] page for more information. | |||
=== | === Extension Manager === | ||
''' | '''Status:''' prototype implemented | ||
Settings | Addons extensions | Install extension from addons | |||
{{YouTube|buxsHVHLDBI|desc=wxGUI Extension Manager}} | |||
[[Image:wxgui-em.png|center|thumb|500px|wxGUI Extension Manager]] | |||
=== Raster Calculator === | |||
'' | '''Status:''' prototype implemented. This is a frontend to {{cmd|r.mapcalc|version=70}} | ||
[[Image:wxgui-mapcalc.png|center|thumb|500px|wxGUI Map Calculator]] | |||
See also [[wxGUI/Video tutorials#Raster calculator|video tutorials]]. | |||
=== GRASS Catalog === | |||
'''Status:''' under development (in AddOns) | |||
* [http://lsi.iiit.ac.in/grass_addons/ GRASS Catalog files] | |||
{| | <center> | ||
| [[Image: | {| | ||
|- | |- | ||
| [[Image:GRASS Catalog1.png|350px|thumb|center|GRASS Catalog ]] | |||
| [[Image:GRASS Catalog2.png|350px|thumb|center|GRASS Catalog]] | |||
|- | |||
|} | |} | ||
</center> | |||
;Current Features: | |||
* copy, delete, rename map layers (raster & vector) in current mapset. | |||
* view raster & vector map layers from any location and any mapset. | |||
* Provides a GUI wrapper for r.info & v.info grass commands while viewing map layers in mapwindow. | |||
* Can connect with OssimPlanet using PlanetSasha | |||
* Add and Remove maps from GRASS GIS to OssimPlanet(Send to OssimPlanet/Remove from OssimPlanet) | |||
;To be implemented: | |||
* copy, move map layers in different mapsets. | |||
* View DBF files as tables. | |||
* Copy, delete, rename DBF files. | |||
* Modify attribute tables. | |||
* Create a properties window to display Coordinate system & projection for each map | |||
* ... | |||
Alternative: http://code.google.com/p/wxgis/ | |||
=== r.li.setup GUI === | |||
'''Status:''' available as {{cmd|g.gui.rlisetup|version=70}} (former {{cmd|r.li.setup}}) | |||
<center> | |||
<gallery perrow=2 widths=300 heights=200> | |||
Image:Rlisetup_first_frame.png | First frame of wizard for selecting existing configuration files or creating a new one | |||
Image:Rlisetup wizard first page.png | Frame for selecting maps | |||
Image:G_gui_rlisetup_3.png | Frame for inserting sampling areas | |||
Image:G_gui_rlisetup_4.png | Frame for defining rectangular moving window | |||
Image:G_gui_rlisetup_5.png | Frame for defining circular moving window | |||
Image:Rlisetup wizard keybord sampling frame.png | Frame for choosing the sampling frame with keyboard | |||
Image:G gui rlisetup 7.png | Frame for drawing the sampling frame | |||
Image:G gui rlisetup 8.png | Summary frame | |||
</gallery> | |||
<!-- equal to Image:Rlisetup_first_frame.png? | |||
Image:Rlisetup_wizard_sampling_areas.png | Choose the type of sampling area | |||
--> | |||
</center> | |||
=== Help browser === | |||
'''Status:''' development not started yet. | |||
For browsing manual pages is currently used web browser, the goal is to design integrated help system. | |||
: HB: ''We used to have one of these for viewing the help pages of Tcl/Tk NVIZ. We dropped it because it was a pain to maintain and generally outside our core mission so a distraction.'' | |||
=== Map Swipe === | |||
'''Status:''' prototype implemented. | |||
This tool enables you to compare two raster maps covering the same area (e.g. compare maps from different year). | |||
;Current features: | |||
* orientation of swipe line can be horizontal or vertical | |||
* zooming works in the same way as in [[#Map_display_window | Map Display]] | |||
See more '''examples''' and videos at [[WxGUI Map Swipe]] page. | |||
[[Image:Tsunami japan2011 sendai.jpg|center|thumb|500px|wxGUI Map Swipe for disaster management: Tsunami Japan 2011]] | |||
=== Animation Tool === | |||
'''Status:''' prototype implemented in GRASS 7 (Anna Kratochvilova). | |||
Animation tool is a replacement for {{cmd|xganim}}. It allows to animate a series of GRASS raster maps or a space time raster dataset ([http://trac.osgeo.org/grass/wiki/Grass7/TemporalExtension see GRASS GIS temporal extension]). | |||
[[Image:WxGUI animation tool.jpg|center|500px|wxGUI animation tool]] | |||
<center>More info at '''[[WxGUI Animation Tool]]'''.</center> | |||
=== Vector Network Analysis Tool === | |||
'''Status:''' prototype implemented. | |||
See more examples and video at [[WxGUI Vector Network Analysis Tool]] page. | |||
== WMS support == | |||
{{YouTube|vfNw4SAP2Uc}} | |||
== Known issues == | |||
* See and report in trac: [http://trac.osgeo.org/grass/query?status=new&status=assigned&status=reopened&component=wxGUI&order=priority List of open issues] | |||
=== Platform specific === | |||
For the GUI to know what platform it's on, and therefore apply platform specific commands (e.g. append '.exe' to programs) it has to test what platform it is running on. Here we take the experimental approach to learning what's best to use. Please add or generalize this list as you can. | |||
--[[ | |||
Platform information - start Python from the command line then issue | |||
<source lang="python"> | |||
import sys | |||
sys.platform | |||
import os | |||
os.name | |||
os.environ['OS'] | |||
import platform | |||
platform.system() | |||
</source> | |||
* Results: | |||
{| border="1" class="wikitable" style="text-align:center" | |||
! Platform | |||
! sys.platform | |||
! os.name | |||
! os.environ['OS'] | |||
! platform.system() | |||
|- | |||
| 32bit GNU/Linux | |||
| linux2 | |||
| posix | |||
| ''n/a'' | |||
| Linux | |||
|- | |||
| 64bit GNU/Linux | |||
| linux2 | |||
| posix | |||
| ''n/a'' | |||
| Linux | |||
|- | |||
| 32bit Mac OSX (PowerPC G4) | |||
| darwin | |||
| posix | |||
| ''n/a'' | |||
| Darwin | |||
|- | |||
| 64bit Mac OSX (Intel) | |||
| [1] see note | |||
| ? | |||
| ? | |||
| ? | |||
|- | |||
| 32bit MS Windows XP | |||
| win32 | |||
| nt | |||
| Windows_NT | |||
| Windows | |||
|- | |||
| 64bit MS Windows Vista | |||
| win32 | |||
| nt | |||
| Windows_NT | |||
| Windows | |||
|- | |||
| 32bit MS Windows XP (Cygwin) | |||
| win32 | |||
| ? | |||
| ? | |||
| ? | |||
|- | |||
| 64bit MS Windows 7 | |||
| win32 | |||
| nt | |||
| Windows_NT | |||
| Windows | |||
|- | |||
|} | |||
[1] On Fri, May 29, 2009 at 10:49 PM, William Kyngesburye wrote: | |||
: ''Right now the GUI only runs 32bit, even if the rest of GRASS is 64bit, because it's not yet possible for wxPython to be 64bit. It comes out the same as PPC 32bit - no distinction between ppc/intel or 32/64 bit, it's all darwin. (yes, I checked, and I have a custom 64bit python executable to verify)'' | |||
== General GUI Design == | |||
=== Layout === | |||
For some users, the current approach of separate windows (SDI) leads to a windows flooding. Especially on large monitors or dual screen systems catching the wxGUI windows can be tedious when they appear on separate monitors (depends on windows manager, the much used KDE scatters typically the wxGUI windows all over the screen real estate). Almost each task generates a new wxGUI window which is freely floating around on the screen: [http://grass.osgeo.org/grass63/screenshots/images/wxgrass_digit-03.png example 1] and [http://grass.osgeo.org/grass63/screenshots/images/wxgrass_digit-01.png example 2]. On a dual-screen this may sum up to 50cm of distance! | |||
'''Proposed solutions:''' | |||
* implement ''optional'' layout similar to QGIS (with a legend attached to each display) or [http://sourceforge.net/dbimage.php?id=215336 GSDView] etc) (see figure below) | |||
* implement ''optional'' magnetic docking of the layer manager and display windows to keep the windows closer | |||
* do not allow module windows to stay open. That is, get rid of the apply button and force each window to close when OK is pressed (QGIS/ArcGIS approach). This leaves only the display(s) and single legend/layer manager on desktop. | |||
* If you otherwise wish to continue using your current WM, file a bug report with them asking for better multi-head support and get the problem fixed at the source. (there probably already is a bug filed with tips in it) | |||
<center> | |||
{| | |||
|- | |||
| [[Image:Wxgui_current.png|350px|thumb|center|Current wxGUI layout with detached window components]] | |||
| [[Image:Wxgui_proposal.png|350px|thumb|center|'''Proposal''' for wxGUI layout modification (Recomposition of existing toolbars, mapview and menus)]] | |||
|- | |||
|} | |||
</center> | |||
'''New solution: see [[WxGUI#Data_Catalog]] above.''' | |||
====What others do==== | |||
'''SDI: (each document opened in application occupies a window on the desktop)''' | |||
* GRASS: display window for each document (i.e., set of maps displayed) opened on desktop; one legend/layer manager window for all display windows; ; each module/function opens a separate window on the desktop | |||
* QGIS: display window for each document (i.e., set of maps displayed) opened on the desktop; legend/layer manager window attached to each display window; each module/function opens a separate window on the desktop (e.g. http://grass.osgeo.org/grass61/screenshots/images/qgis08_grass6_toolbox.png) | |||
* ArcGIS: similar to QGIS with combined legend/display for each document (set of maps displayed); each module/function opens a separate window on the desktop (e.g. http://upload.wikimedia.org/wikipedia/en/9/92/ArcMap.jpg) | |||
* MapInfo (pre Pitney Bowes): each document opens a map display window on the desktop; single legend/toolbox opened on the desktop controls all visible documents (i.e., map displays); each module/function opens a separate window on the desktop (similar to current GRASS layout) | |||
'''MDI: (a single frame is opened for the application on the desktop; all documents opened inside the application frame)''' | |||
* SAGA: single application frame opened on the desktop; all documents (display windows) open inside application frame; one legend/layer manager for all display windows; each module/function opens a separate window inside the frame (http://www.saga-gis.uni-goettingen.de/html/images/bild8.gif and http://sourceforge.net/dbimage.php?id=44455) | |||
* Ossim: single application frame opened on the desktop; all documents (display windows) open inside application frame; one legend/layer manager for all display windows; each module/function opens a separate window inside the frame (http://www.ossim.org/OSSIM/Albums/Pages/ImageLinker.html) | |||
* Idrisi: similar to SAGA and Ossim (http://www.clarklabs.org/products/idrisi-taiga.cfm) | |||
* MapInfo (Pitney Bowes): Seems to be like Saga (http://www.pbinsight.com/support/training/video-tutorials/) | |||
* Whitebox Geospatial Analysis Tools: http://www.uoguelph.ca/~hydrogeo/Whitebox/screenshots.html | |||
'''''See also''''' | |||
* Solution to the problem: [http://www.wxwidgets.org/manuals/stable/wx_wxlayoutalgorithm.html wxLayoutAlgorithm] | |||
* [http://en.wikipedia.org/wiki/Multiple_document_interface Multiple document interface] (MDI, windows reside under a single parent window) | |||
* [http://en.wikipedia.org/wiki/Single_document_interface Single document interface] (SDI, separate windows, currently used for wxGUI) | |||
* and [http://en.wikipedia.org/wiki/Human_interface_guidelines Human interface guidelines] (HIG) | |||
== Useful links == | == Useful links == | ||
Line 317: | Line 666: | ||
* [http://www.poromenos.org/tutorials/python 10 minute Python tutorial] for programmers of other languages | * [http://www.poromenos.org/tutorials/python 10 minute Python tutorial] for programmers of other languages | ||
[[ | == References == | ||
[[ | |||
[[Category: | * [[User:Landa|Martin Landa]]: [http://gama.fsv.cvut.cz/~landa/publications/2008/gis-ostrava-08/paper/landa-grass-gui-wxpython.pdf New GUI for GRASS GIS based on wxPython] ([http://gis2008.com/indexe.html GIS Ostrava 2008], January 27-30, 2008, Ostrava, Czech Republic) | ||
* [[User:Landa|Martin Landa]], Cristina Moretto, Michele Zanolli, Luca Manganelli and Markus Neteler: [http://gama.fsv.cvut.cz/~landa/publications/2008/gfoss-it-08/paper/grass-gfoss-tn.pdf wxPython-based GUI for GRASS GIS] ([http://gama.fsv.cvut.cz/~landa/publications/2008/gfoss-it-08/prezentazione/perugia-grass-gui-wxpython.pdf presentation]) ([http://www.grassmeeting2008.unipg.it IX Meeting degli Utenti Italiani di GRASS - GFOSS], February 20-22, Perugia, Italy) | |||
{{wxGUI}} | |||
[[Category: Documentation]] |
Latest revision as of 19:03, 14 April 2021
Browse also wxGUI related articles or screenshots.
See also GRASS GUI, and GRASS and Python.
For developer-related issues see Trac wxGUI page and [ GitHub GUI issues].
Overview
- wxGUI Manual page]
Historical development documents:
- A nice summary of the progress to date, written by Jachym Cepicky:
- Martin Landa: New GUI for GRASS GIS based on wxPython (GIS Ostrava 2008, January 27-30, 2008, Ostrava, Czech Republic)
- Martin Landa, Cristina Moretto, Michele Zanolli, Luca Manganelli and Markus Neteler: wxPython-based GUI for GRASS GIS (presentation) (IX Meeting degli Utenti Italiani di GRASS - GFOSS, February 20-22, Perugia, Italy)
Contributing:
Development
Do you want to help with the development?
- basic Python programming ability required
- GUI programming experience welcomed (especially wxPython)
- GRASS user (or better developer) experience
How to get write access to the GRASS GIS code repository.
See example of wxGUI module in core: doc/gui/wxpython/example/
Screenshots
- See Screenshots page
- Screenshots from GRASSWiki
- SVN
- Website screenshot page
- Various screenshots from GRASS-Wiki
Video tutorials
- See Video tutorials page
Components
Core components
Layer Manager
Status: prototype implemented.
The GRASS GIS Layer Manager provides an interactive graphical interface to GRASS commands. The Layer Manager includes a set of pull-down menus for all GRASS GIS functions (analysis, file I/O, GIS configuration and management), toolbar that manage display map layers in map display windows, layer tree in which map layers to display are organized, command output window and integrated command line prompt.
-
2007/12
-
2007/12
-
2008/02
-
2010/08
-
2011/06 - Embedded interactive Python Shell
Import tool
The GUI offers a convenient tool for single map and bulk import:
- see Importing data
Map display window
Each Map display window has a unique set of layers to display and region setting (zoom). The map display window includes main toolbar with basic tools including zooming, panning, data querying, simple analyse functions (measure, profile, histogram, etc.), overlay management, etc. From main toolbar are accessible additional toolbars, currently only Digitization tool is available. Under development is Georectification tool.
Map query tool
Raster and vector maps can be queried at cursor position:
Map measure tool
Raster and vector maps can be measured with a digitizer (line or self-closing area).
Note for LatLong locations: The lengths/areas are returned also in metric units.
GUI dialogs
Status: prototype implemented.
Generated from XML using --interface-description.
E.g. d.rgb --help
Description: Displays three user-specified raster map layers as red, green, and blue overlays in the active graphics frame. Keywords: display Usage: d.rgb [-ox] red=name green=name blue=name [--verbose] [--quiet] Flags: -o Overlay (non-null values only) -x Don't add to list of commands in monitor --v Verbose module output --q Quiet module output Parameters: red Name of raster map to be used for <red> green Name of raster map to be used for <green> blue Name of raster map to be used for <blue>
becomes with d.rgb --interface-description
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE task SYSTEM "[http://trac.osgeo.org/grass/browser/grass/trunk/gui/xml/grass-interface.dtd grass-interface.dtd]">
<task name="d.rgb">
<description>
Displays three user-specified raster map layers as red, green, and blue overlays in the active graphics frame.
</description>
<keywords>
display
</keywords>
<parameter name="red" type="string" required="yes" multiple="no">
<description>
Name of raster map to be used for <red>
</description>
<keydesc>
<item order="1">name</item>
</keydesc>
<gisprompt age="old" element="cell" prompt="raster" />
</parameter>
<parameter name="green" type="string" required="yes" multiple="no">
<description>
Name of raster map to be used for <green>
</description>
<keydesc>
<item order="1">name</item>
</keydesc>
<gisprompt age="old" element="cell" prompt="raster" />
</parameter>
<parameter name="blue" type="string" required="yes" multiple="no">
<description>
Name of raster map to be used for <blue>
</description>
<keydesc>
<item order="1">name</item>
</keydesc>
<gisprompt age="old" element="cell" prompt="raster" />
</parameter>
<flag name="o">
<description>
Overlay (non-null values only)
</description>
</flag>
<flag name="x">
<description>
Don't add to list of commands in monitor
</description>
</flag>
<flag name="verbose">
<description>
Verbose module output
</description>
</flag>
<flag name="quiet">
<description>
Quiet module output
</description>
</flag>
</task>
which is then used to generate:
Startup GUI (welcome screen)
grass78 -gui
Location wizard
Status: prototype implemented.
Wizard for creating new GRASS project location based on:
- Coordinate system
- EPSG code
- Georeferenced file
- PROJ.4 string
- XY
See also GRASS Location Wizard.
Digitizer
Vector digitizer
Status: prototype implemented.
See also manual page
See also GRASS Digitizing tool and wxGUI Vector Digitizer.
Replacement of v.digit module integrated into Map display window (Screenshots).
-
Vector digitizer (2008/04)
-
Vector digitizer (2007/11)
-
Vector digitizer - fill valid areas (closed boundary + centroid) (2008/07)
-
Vector digitizer - background raster maps with different opacity level (2008/07)
-
Vector digitizer on MS Windows (2011/01)
-
Vector digitizer - checking for duplicates (2011/02)
Raster digitizer
Status: development started in GRASS 7 (2014) --> implemented in 2020
- Idea: get cell center coords and new values from GUI interaction, then pass those through r.in.xyz, and r.patch the new values over the top of the old map.
- Current status:
- merge with Georectifier? (i.points, i.vpoints)
Category Labels
- Write with new r.category import tool
- Back-end component complete: r.category module is now updated to handle a rules= file and other goodies like dynamic labels
- Read with one of r.category, r.describe, r.report, r.stats, ???
- probably need to add a new flag to one of those to print flat "%d %s", cat, label
- or read the cats/ file directly, it's already flat ascii.
- how to deal with FP maps & cats?
Command line
In order to provide a command line in all operating systems, there is a tab "Command console" available (with auto-completion support). It communicates directly with the Map Display window:
Cartography tools
GUI for ps.map
Status: under development (Anna Kratochvilova).
Note: More info at WxGUI Cartographic Composer
Direct printing
Status: development not started yet.
Implement direct printing of map canvas content using GRASS PS driver or Cairo driver.
- Python Cartographic Lab
- OSGeo Cartographic Library
- OSGeo Map Symbol Set
- OGR - Feature Style Specification
- MapGuide RFC 14 - Cartographic Stylization Engine
- S-52 standard for nautical chart (ENC) symbology and cartography from the International Hydrographic Bureau
Georectifier
Status: prototype implemented.
See also Georeferencing.
Profile Analysis Tool
Status: prototype implemented.
Attribute table manager
Status: prototype implemented.
See wxGUI Attribute Table Manager page and also manual page.
3D view mode
Status: prototype implemented (Google Summer of Code 2008/2010/2011).
See detailed information at wxNVIZ page and classic Tcl/Tk NVIZ pages.
Imagery tools
Status: (re)development not started in earnest yet. Some behind-the-scenes code has been prepared, but not much.
- Volunteers welcome!
Ortho photos
Status: GUI development not started yet, initial start of module updates like i.ortho.rectify
- To replace i.ortho.photo and friends
wx.iclass
Status: prototype implemented.
- See wxIClass page
Graphical Modeller
Status: prototype implemented.
See wxGUI Graphical Modeler page for more information.
Extension Manager
Status: prototype implemented
Settings | Addons extensions | Install extension from addons
Raster Calculator
Status: prototype implemented. This is a frontend to r.mapcalc
See also video tutorials.
GRASS Catalog
Status: under development (in AddOns)
- Current Features
- copy, delete, rename map layers (raster & vector) in current mapset.
- view raster & vector map layers from any location and any mapset.
- Provides a GUI wrapper for r.info & v.info grass commands while viewing map layers in mapwindow.
- Can connect with OssimPlanet using PlanetSasha
- Add and Remove maps from GRASS GIS to OssimPlanet(Send to OssimPlanet/Remove from OssimPlanet)
- To be implemented
- copy, move map layers in different mapsets.
- View DBF files as tables.
- Copy, delete, rename DBF files.
- Modify attribute tables.
- Create a properties window to display Coordinate system & projection for each map
- ...
Alternative: http://code.google.com/p/wxgis/
r.li.setup GUI
Status: available as g.gui.rlisetup (former r.li.setup)
-
First frame of wizard for selecting existing configuration files or creating a new one
-
Frame for selecting maps
-
Frame for inserting sampling areas
-
Frame for defining rectangular moving window
-
Frame for defining circular moving window
-
Frame for choosing the sampling frame with keyboard
-
Frame for drawing the sampling frame
-
Summary frame
Help browser
Status: development not started yet.
For browsing manual pages is currently used web browser, the goal is to design integrated help system.
- HB: We used to have one of these for viewing the help pages of Tcl/Tk NVIZ. We dropped it because it was a pain to maintain and generally outside our core mission so a distraction.
Map Swipe
Status: prototype implemented.
This tool enables you to compare two raster maps covering the same area (e.g. compare maps from different year).
- Current features
- orientation of swipe line can be horizontal or vertical
- zooming works in the same way as in Map Display
See more examples and videos at WxGUI Map Swipe page.
Animation Tool
Status: prototype implemented in GRASS 7 (Anna Kratochvilova).
Animation tool is a replacement for xganim. It allows to animate a series of GRASS raster maps or a space time raster dataset (see GRASS GIS temporal extension).
Vector Network Analysis Tool
Status: prototype implemented.
See more examples and video at WxGUI Vector Network Analysis Tool page.
WMS support
Known issues
- See and report in trac: List of open issues
Platform specific
For the GUI to know what platform it's on, and therefore apply platform specific commands (e.g. append '.exe' to programs) it has to test what platform it is running on. Here we take the experimental approach to learning what's best to use. Please add or generalize this list as you can.
Platform information - start Python from the command line then issue
import sys
sys.platform
import os
os.name
os.environ['OS']
import platform
platform.system()
- Results:
Platform | sys.platform | os.name | os.environ['OS'] | platform.system() |
---|---|---|---|---|
32bit GNU/Linux | linux2 | posix | n/a | Linux |
64bit GNU/Linux | linux2 | posix | n/a | Linux |
32bit Mac OSX (PowerPC G4) | darwin | posix | n/a | Darwin |
64bit Mac OSX (Intel) | [1] see note | ? | ? | ? |
32bit MS Windows XP | win32 | nt | Windows_NT | Windows |
64bit MS Windows Vista | win32 | nt | Windows_NT | Windows |
32bit MS Windows XP (Cygwin) | win32 | ? | ? | ? |
64bit MS Windows 7 | win32 | nt | Windows_NT | Windows |
[1] On Fri, May 29, 2009 at 10:49 PM, William Kyngesburye wrote:
- Right now the GUI only runs 32bit, even if the rest of GRASS is 64bit, because it's not yet possible for wxPython to be 64bit. It comes out the same as PPC 32bit - no distinction between ppc/intel or 32/64 bit, it's all darwin. (yes, I checked, and I have a custom 64bit python executable to verify)
General GUI Design
Layout
For some users, the current approach of separate windows (SDI) leads to a windows flooding. Especially on large monitors or dual screen systems catching the wxGUI windows can be tedious when they appear on separate monitors (depends on windows manager, the much used KDE scatters typically the wxGUI windows all over the screen real estate). Almost each task generates a new wxGUI window which is freely floating around on the screen: example 1 and example 2. On a dual-screen this may sum up to 50cm of distance!
Proposed solutions:
- implement optional layout similar to QGIS (with a legend attached to each display) or GSDView etc) (see figure below)
- implement optional magnetic docking of the layer manager and display windows to keep the windows closer
- do not allow module windows to stay open. That is, get rid of the apply button and force each window to close when OK is pressed (QGIS/ArcGIS approach). This leaves only the display(s) and single legend/layer manager on desktop.
- If you otherwise wish to continue using your current WM, file a bug report with them asking for better multi-head support and get the problem fixed at the source. (there probably already is a bug filed with tips in it)
New solution: see WxGUI#Data_Catalog above.
What others do
SDI: (each document opened in application occupies a window on the desktop)
- GRASS: display window for each document (i.e., set of maps displayed) opened on desktop; one legend/layer manager window for all display windows; ; each module/function opens a separate window on the desktop
- QGIS: display window for each document (i.e., set of maps displayed) opened on the desktop; legend/layer manager window attached to each display window; each module/function opens a separate window on the desktop (e.g. http://grass.osgeo.org/grass61/screenshots/images/qgis08_grass6_toolbox.png)
- ArcGIS: similar to QGIS with combined legend/display for each document (set of maps displayed); each module/function opens a separate window on the desktop (e.g. http://upload.wikimedia.org/wikipedia/en/9/92/ArcMap.jpg)
- MapInfo (pre Pitney Bowes): each document opens a map display window on the desktop; single legend/toolbox opened on the desktop controls all visible documents (i.e., map displays); each module/function opens a separate window on the desktop (similar to current GRASS layout)
MDI: (a single frame is opened for the application on the desktop; all documents opened inside the application frame)
- SAGA: single application frame opened on the desktop; all documents (display windows) open inside application frame; one legend/layer manager for all display windows; each module/function opens a separate window inside the frame (http://www.saga-gis.uni-goettingen.de/html/images/bild8.gif and http://sourceforge.net/dbimage.php?id=44455)
- Ossim: single application frame opened on the desktop; all documents (display windows) open inside application frame; one legend/layer manager for all display windows; each module/function opens a separate window inside the frame (http://www.ossim.org/OSSIM/Albums/Pages/ImageLinker.html)
- Idrisi: similar to SAGA and Ossim (http://www.clarklabs.org/products/idrisi-taiga.cfm)
- MapInfo (Pitney Bowes): Seems to be like Saga (http://www.pbinsight.com/support/training/video-tutorials/)
- Whitebox Geospatial Analysis Tools: http://www.uoguelph.ca/~hydrogeo/Whitebox/screenshots.html
See also
- Solution to the problem: wxLayoutAlgorithm
- Multiple document interface (MDI, windows reside under a single parent window)
- Single document interface (SDI, separate windows, currently used for wxGUI)
- and Human interface guidelines (HIG)
Useful links
- 10 minute Python tutorial for programmers of other languages
References
- Martin Landa: New GUI for GRASS GIS based on wxPython (GIS Ostrava 2008, January 27-30, 2008, Ostrava, Czech Republic)
- Martin Landa, Cristina Moretto, Michele Zanolli, Luca Manganelli and Markus Neteler: wxPython-based GUI for GRASS GIS (presentation) (IX Meeting degli Utenti Italiani di GRASS - GFOSS, February 20-22, Perugia, Italy)