[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