[GRASSLIST:4000] Re: ps.map grid in Lat/Lon

is it possible just to recompile ps.map?

regards,
Florian

On Friday, July 23, 2004, at 08:18AM, Hamish <hamish_nospam@yahoo.com> wrote:

> i'm want to overlay a map of a Lat/Lon location with a grid that
> has less than 1 degree spacing.
> is that possible? (geogrid is not available for lat/lon and if i use
>
> grid nothing happens when i choose a spacing less than 1)
>
I had a similar problem back with GRASS 5.0.0. I was told at the time

that ps.map did not support floating point grids, hence the problem
with lat-long locations. I don't know if it has been fixed, but a
simple workaround is to make a vector grid with v.mkgrid and just
display that along with whatever else you want with ps.map. Thanks to

whomever suggested that to me.

The attached patch adds this to ps.map in GRASS 5.7.

Before trying that though you might try the "geogrid" command [5.7
only], which will draw a lat/lon grid over a non-Lat/Lon location map.

I haven't put this in CVS as it needs some checking over to make sure it
doesn't cause other problems (eg it tests grid==0 when 0 is now floating
point). Maybe someone with a keener eye for C than me can comment.
It might be better to just work on getting geogrid to do lat/lon?

Results on the map look great, formats text into deg:minutes, but you
may need to use a lot of precision to get 5-minute ticks to round
correctly. e.g., for 5' use something like "grid 0.08333333333333"

This makes the mapinfo command look pretty wonky for anything smaller
than 0.25 of a degree though. I guess G_format_easting() could fix that?

e.g., for the global lat/lon dataset: [zoom in]

ps.map out=test.ps << EOF
raster nations
grid 0.25
numbers 1
end
mapinfo
where 0.5 8.5
end
end
EOF
gv test.ps

Hamish

Index: main.c

RCS file: /home/grass/grassrepository/grass51/ps/ps.map/main.c,v
retrieving revision 1.6
diff -u -r1.6 main.c
--- main.c 27 Jan 2004 12:59:16 -0000 1.6
+++ main.c 22 Jul 2004 23:21:38 -0000
@@ -625,7 +625,7 @@
  {
      PS.grid = -1;
      PS.grid_numbers = 0;
- sscanf(data, "%d", &PS.grid);
+ sscanf(data, "%lf", &PS.grid);
      if (PS.grid < 0)
      {
    PS.grid = 0;
Index: ps_info.h

RCS file: /home/grass/grassrepository/grass51/ps/ps.map/ps_info.h,v
retrieving revision 1.3
diff -u -r1.3 ps_info.h
--- ps_info.h 27 Jan 2004 12:59:16 -0000 1.3
+++ ps_info.h 22 Jul 2004 23:21:38 -0000
@@ -41,12 +41,12 @@
    int do_colortable;
    int do_scalebar;
    int num_psfiles;
- int grid, grid_color, grid_numbers, grid_numbers_color, grid_fontsize;
+ int grid_color, grid_numbers, grid_numbers_color, grid_fontsize;
    float grid_cross;
+ double grid, grid_width, geogrid_width;
    char geogridunit[64];
    int geogrid, geogrid_color, geogrid_numbers;
    int geogrid_numbers_color, geogrid_fontsize;
- double grid_width, geogrid_width;
    int do_outline, outline_color;
    int cell_fd;
    int row_delta, col_delta;
Index: do_grid.c

RCS file: /home/grass/grassrepository/grass51/ps/ps.map/do_grid.c,v
retrieving revision 1.2
diff -u -r1.2 do_grid.c
--- do_grid.c 10 Jul 2003 17:59:32 -0000 1.2
+++ do_grid.c 22 Jul 2004 23:21:39 -0000
@@ -109,7 +109,8 @@
{
    double g;
    char num_text[50];
- int grid, vy, vx, hy=0, hx=0;
+ double grid;
+ int vy, vx, hy=0, hx=0;
    int first, len, x, y, last_bottom, last_right;
    int rounded_grid, margin;

@@ -120,7 +121,7 @@
    rounded_grid = 1;
    if (PS.w.proj != PROJECTION_LL)
    {
- sprintf(num_text, "%d", PS.grid);
+ sprintf(num_text, "%lf", PS.grid);
  len = strlen(num_text);
  while (len-- && num_text[len] == '0') rounded_grid *= 10;
  if (rounded_grid == 10) rounded_grid = 1;
Index: map_info.c

RCS file: /home/grass/grassrepository/grass51/ps/ps.map/map_info.c,v
retrieving revision 1.1
diff -u -r1.1 map_info.c
--- map_info.c 26 Mar 2003 15:56:15 -0000 1.1
+++ map_info.c 22 Jul 2004 23:21:39 -0000
@@ -47,7 +47,7 @@
      {
      k = 5.5;
            sprintf(buf,
- "%d %s", PS.grid, G_database_unit_name(PS.grid != 1));
+ "%g %s", PS.grid, G_database_unit_name(PS.grid != 1));
          fprintf(PS.fp, "(%s) SW pop /t2 XD\n", buf);
      fprintf(PS.fp, "t1 t2 lt {/t1 t2 def} if \n");
      }
@@ -74,7 +74,7 @@
    if (PS.grid)
    {
        sprintf(buf,
- "%d %s", PS.grid, G_database_unit_name(PS.grid != 1));
+ "%g %s", PS.grid, G_database_unit_name(PS.grid != 1));
        show_text(x, y - dy, "GRID:");
        fprintf(PS.fp, "(%s) sx %.1f MS\n", buf, y - dy);
        y -= dy;

>> > i'm want to overlay a map of a Lat/Lon location with a grid that
>> > has less than 1 degree spacing.

..

>The attached patch adds this to ps.map in GRASS 5.7.

..

is it possible just to recompile ps.map?

Yes, just make the changes shown in the patch in a text editor and then
recompile the ps.map module by changing into the ps/ps.map/ directory
and running "make". It should take about 10 seconds.

You might have to rerun 'make install' after that, I'm really not sure.

Hamish