[GRASS-SVN] r63798 - in grass/trunk/display: d.geodesic d.rhumbline
svn_grass at osgeo.org
svn_grass at osgeo.org
Sun Dec 28 05:22:50 PST 2014
Author: neteler
Date: 2014-12-28 05:22:50 -0800 (Sun, 28 Dec 2014)
New Revision: 63798
Modified:
grass/trunk/display/d.geodesic/d.geodesic.html
grass/trunk/display/d.geodesic/d_geodesic.png
grass/trunk/display/d.geodesic/local_proto.h
grass/trunk/display/d.geodesic/main.c
grass/trunk/display/d.geodesic/plot.c
grass/trunk/display/d.rhumbline/main.c
Log:
d.geodesic: hardcoded miles changed to units choice; new screenshot (related to trac #2417); d.rhumbline: minor sync with d.geodesic
Modified: grass/trunk/display/d.geodesic/d.geodesic.html
===================================================================
--- grass/trunk/display/d.geodesic/d.geodesic.html 2014-12-28 04:35:23 UTC (rev 63797)
+++ grass/trunk/display/d.geodesic/d.geodesic.html 2014-12-28 13:22:50 UTC (rev 63798)
@@ -8,20 +8,12 @@
<h2>OPTIONS</h2>
-This program can be run either interactively or non-interactively.
-If the user types <b>d.geodesic</b> on the command line and runs it without other program
-parameters, the mouse will be activated; the user is asked to use
-the mouse to indicate the starting and ending points of each geodesic line
-to be drawn. The default line color (black) and text color (red)
-will be used.
+By default black line color and red text color will be used.
-<p>Alternately, the user can specify the starting and ending coordinates
-of the geodesic, line color, and text color on the command line,
-and run the program non-interactively.
-
-<p>Once the user indicates the starting and ending coordinates
-of the geodesic, the line and its length (in miles) are displayed to
-the user's graphics monitor. If the text color is set to <em>none</em>,
+<p>
+By indicating the starting and ending coordinates
+of the geodesic, the line and its length (by default in meters) are displayed to
+the graphical output. If the text color is set to <em>none</em>,
the great circle distance is not displayed.
<h2>EXAMPLE</h2>
@@ -33,10 +25,11 @@
g.region vector=country_boundaries -p
d.mon wx0
d.vect country_boundaries type=area
+# show additionally a 20 degree grid
+d.grid 20
+
d.geodesic coordinates=55:58W,33:18S,26:43E,60:37N \
- line_color=yellow text_color=red
-# show additionally 10 degree grid
-d.grid 10
+ line_color=yellow text_color=red units=kilometers
</pre></div>
<p><center>
Modified: grass/trunk/display/d.geodesic/d_geodesic.png
===================================================================
(Binary files differ)
Modified: grass/trunk/display/d.geodesic/local_proto.h
===================================================================
--- grass/trunk/display/d.geodesic/local_proto.h 2014-12-28 04:35:23 UTC (rev 63797)
+++ grass/trunk/display/d.geodesic/local_proto.h 2014-12-28 13:22:50 UTC (rev 63798)
@@ -1 +1 @@
-void plot(double, double, double, double, int, int);
+void plot(double, double, double, double, int, int, double, const char *);
Modified: grass/trunk/display/d.geodesic/main.c
===================================================================
--- grass/trunk/display/d.geodesic/main.c 2014-12-28 04:35:23 UTC (rev 63797)
+++ grass/trunk/display/d.geodesic/main.c 2014-12-28 13:22:50 UTC (rev 63798)
@@ -11,7 +11,7 @@
* Jan-Oliver Wagner <jan intevation.de>
* PURPOSE: displays a geodesic line in the active frame on the user's
* graphics monitor
- * COPYRIGHT: (C) 1999-2006 by the GRASS Development Team
+ * COPYRIGHT: (C) 1999-2014 by the GRASS Development Team
*
* This program is free software under the GNU General Public
* License (>=v2). Read the file COPYING that comes with GRASS
@@ -31,10 +31,13 @@
int text_color;
double lon1, lat1, lon2, lat2;
char *deftcolor;
+ const char *unit;
+ int unit_id;
+ double factor;
struct GModule *module;
struct
{
- struct Option *lcolor, *tcolor, *coor;
+ struct Option *lcolor, *tcolor, *coor, *units;
} parm;
G_gisinit(argv[0]);
@@ -42,6 +45,8 @@
module = G_define_module();
G_add_keyword(_("display"));
G_add_keyword(_("distance"));
+ G_add_keyword(_("great circle"));
+ G_add_keyword(_("shortest path"));
module->description =
_("Displays a geodesic line, tracing the shortest distance "
"between two geographic points along a great circle, in "
@@ -60,14 +65,24 @@
parm.tcolor->key = "text_color";
parm.tcolor->label = _("Text color");
parm.tcolor->answer = NULL;
-
+
+ parm.units = G_define_standard_option(G_OPT_M_UNITS);
+ parm.units->options = "meters,kilometers,feet,miles";
+ parm.units->label = parm.units->description;
+ parm.units->answer = "meters";
+
if (G_parser(argc, argv))
exit(EXIT_FAILURE);
-
if (G_projection() != PROJECTION_LL)
- G_fatal_error(_("Location is not %s"), G__projection_name(PROJECTION_LL));
+ G_fatal_error(_("Location is not %s"),
+ G__projection_name(PROJECTION_LL));
+ /* get conversion factor and unit name */
+ unit_id = G_units(parm.units->answer);
+ factor = 1. / G_meters_to_units_factor(unit_id);
+ unit = G_get_units_name(unit_id, 1, 0);
+
if (parm.coor->answers[0] == NULL)
G_fatal_error(_("No coordinates given"));
@@ -103,8 +118,8 @@
else
text_color = D_translate_color(parm.tcolor->answer);
- plot(lon1, lat1, lon2, lat2, line_color, text_color);
-
+ plot(lon1, lat1, lon2, lat2, line_color, text_color, factor, unit);
+
D_save_command(G_recreate_command());
D_close_driver();
Modified: grass/trunk/display/d.geodesic/plot.c
===================================================================
--- grass/trunk/display/d.geodesic/plot.c 2014-12-28 04:35:23 UTC (rev 63797)
+++ grass/trunk/display/d.geodesic/plot.c 2014-12-28 13:22:50 UTC (rev 63798)
@@ -1,13 +1,11 @@
+#include <stdio.h>
#include <string.h>
-#include <grass/display.h>
#include <grass/gis.h>
-#include <stdio.h>
+#include <grass/display.h>
#include "local_proto.h"
-#define METERS_TO_MILES(x) ((x) * 6.213712e-04)
-
void plot(double lon1, double lat1, double lon2, double lat2,
- int line_color, int text_color)
+ int line_color, int text_color, double factor, const char *unit)
{
double distance;
double text_x, text_y;
@@ -33,6 +31,7 @@
for (i = 0; i <= nsteps; i++) {
double lon = lon1 + (lon2 - lon1) * i / nsteps;
double lat = G_geodesic_lat_from_lon(lon);
+
if (i == 0)
D_move_abs(lon, lat);
else
@@ -58,7 +57,7 @@
D_text_size(10, 10);
distance = G_geodesic_distance(lon1, lat1, lon2, lat2);
- sprintf(buf, "%.0f miles", METERS_TO_MILES(distance));
+ sprintf(buf, "%.0f %s", distance / factor, unit);
D_pos_abs(text_x, text_y);
D_get_text_box(buf, &t, &b, &l, &r);
Modified: grass/trunk/display/d.rhumbline/main.c
===================================================================
--- grass/trunk/display/d.rhumbline/main.c 2014-12-28 04:35:23 UTC (rev 63797)
+++ grass/trunk/display/d.rhumbline/main.c 2014-12-28 13:22:50 UTC (rev 63798)
@@ -17,7 +17,8 @@
* for details.
*
*****************************************************************************/
-/* TODO: implement G_rhumbline_distance() in libgis
+/* TODO: implement G_rhumbline_distance() in libgis
+ * see also d.geodesic
*/
#include <stdlib.h>
@@ -56,9 +57,15 @@
parm.lcolor->label = _("Line color");
#ifdef CAN_DO_DISTANCES
- parm.tcolor = G_define_option(G_OPT_M_COORDS);
+ parm.tcolor = G_define_standard_option(G_OPT_C);
parm.tcolor->key = "text_color";
parm.tcolor->label = _("Text color");
+ parm.tcolor->answer = NULL;
+
+ parm.units = G_define_standard_option(G_OPT_M_UNITS);
+ parm.units->options = "meters,kilometers,feet,miles";
+ parm.units->label = parm.units->description;
+ parm.units->answer = "meters";
#endif
if (G_parser(argc, argv))
@@ -68,6 +75,13 @@
G_fatal_error(_("Location is not %s"),
G__projection_name(PROJECTION_LL));
+#ifdef CAN_DO_DISTANCES
+ /* get conversion factor and unit name */
+ unit_id = G_units(parm.units->answer);
+ factor = 1. / G_meters_to_units_factor(unit_id);
+ unit = G_get_units_name(unit_id, 1, 0);
+#endif
+
if (parm.coor->answers[0] == NULL)
G_fatal_error(_("No coordinates given"));
@@ -98,10 +112,11 @@
deftcolor = DEFAULT_FG_COLOR;
if (parm.tcolor->answer == NULL)
- parm.tcolor->answer = deftcolor;
- text_color = D_translate_color(parm.tcolor->answer);
- if (!text_color)
text_color = D_translate_color(deftcolor);
+ else if (strcmp(parm.tcolor->answer, "none") == 0)
+ text_color = -1;
+ else
+ text_color = D_translate_color(parm.tcolor->answer);
#endif
plot(lon1, lat1, lon2, lat2, line_color, text_color);
More information about the grass-commit
mailing list