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 timethat 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 towhomever 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.psHamish
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.hRCS 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.cRCS 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.cRCS 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;