[GRASS-dev] Re: m.distance / SWIG-Python interface +
passingpointers with SWIG [was: d.measure w/ bearing]
Michael Barton
michael.barton at asu.edu
Tue Mar 4 10:49:57 EST 2008
On Mar 4, 2008, at 4:50 AM, Patton, Eric wrote:
>> This means that for the specific issue at hand, i.e. d.measure with
>> bearing, I strongly plead for adding the possibility of giving
>> start /
>> end coordinates as parameters to the module. This would then allow
>> other
>> uses beyond the wxgrass gui such as web apps, shell scripts, etc.
>
>> As I have mentioned before, I am afraid that slowly but surely the
>> wxgrass gui will multiply functionality which is only available
>> via the
>> gui, but should, in my eyes, also be available from the command line.
>> I'm thinking of things like profiling, measuring, etc.
>
>> Moritz
>
> I agree; the ability to use and script modules on the command line
> is a
> key feature that I rely on. GUI lock-in of certain features would
> really
> be frustrating.
>
> ~ Eric.
This is why we should have a non-interactive version of d.measure.
We've been slowly getting non-interactive versions of key command
modules over the past couple years. A command that returns the
distance between two xy coordiates would be useful. As I said
earlier, modifying d.measure (or as Hamish has suggested, creating a
new m.measure) would be desirable.
FWIW, there are already 2 non-interactive profiling commands that can
be used in scripts that have existed for a long time, r.transect and
r.profile. The GUI (both TclTk and wxPython) simply display the
results of running r.profile. As far as I am concerned, this is the
ideal model: a GRASS command that can be used in scripting, also used
in a GUI script to produce an interactive display.
The issue is not that we are losing functionality to a GUI. It is the
difference between a command that returns a new map (or other file,
such as a graphic image) or returns information, and a command that
has a hard-coded interactive interface built in. When GRASS was first
developed, there weren't any widely used, easy ways to control an
interactive interface. So a suite of commands were developed in which
interfaces were hard-coded into the modules. Because this was done,
we are still dealing with 20-year-old interface design and it's
headaches (e.d., i.orthophoto). I agree with Glynn that we are better
off in terms of current and future flexibility to use a dedicated GUI
scripting platform that sits on top of GRASS to create the
interactive user interface and handle interactive displays. This is
much easier to update as the technology changes (e.g., moving from
TclTk to wxPython).
This does not mean getting rid of GRASS commands. It simply means
that we need to take the hard-coded interactive interfaces out of
GRASS commands so that you can type them on the command line and they
run without further intervention on the part of the user. In fact,
this makes them much easier to script (e.g., you can't script
i.orthophoto or i.points). Tightly coupling command line tools and an
interactive interface in the same module limits both ways of
manipulating GIS data. There are simply some things you can do in a
good GUI that you can't do with commands and vice versa. You can't
drag a box to zoom a display on the command line--but you can enter
extents into g.region and have the same computational result. For
profiling, r.profile returns detailed information on the elevations
between a series of xy points. This information can be viewed and
manipulated in a variety of ways. You could drop it into a
spreadsheet or gnuplot and plot it, for example. The GUI provides a
visually appealing, interactive way to access this information. That
is what it supposed to do, but doing this does not decrease the
functionality or value of the underlying command that produced the
information.
Michael
More information about the grass-dev
mailing list