00001 #include <stdio.h>
00002 #include <math.h>
00003 #include <grass/gis.h>
00004
00025 char *
00026 G_align_window (struct Cell_head *window, struct Cell_head *ref)
00027
00028 {
00029 int preserve;
00030
00031 window->ns_res = ref->ns_res;
00032 window->ew_res = ref->ew_res;
00033 window->zone = ref->zone;
00034 window->proj = ref->proj;
00035
00036 preserve = window->proj == PROJECTION_LL && window->east == (window->west+360);
00037 window->south =
00038 G_row_to_northing (ceil(G_northing_to_row (window->south, ref)), ref);
00039 window->north =
00040 G_row_to_northing (floor(G_northing_to_row (window->north, ref)), ref);
00041 window->east =
00042 G_col_to_easting (ceil(G_easting_to_col (window->east, ref)), ref);
00043 window->west =
00044 G_col_to_easting (floor(G_easting_to_col (window->west, ref)), ref);
00045
00046 if (window->proj == PROJECTION_LL)
00047 {
00048 while (window->north > 90.0)
00049 window->north -= window->ns_res;
00050 while (window->south < -90.0)
00051 window->south += window->ns_res;
00052 if (preserve)
00053 window->east = window->west + 360;
00054 else
00055 while (window->east - window->west > 360.0)
00056 window->east -= window->ew_res;
00057 }
00058
00059 return G_adjust_Cell_head (window, 0, 0);
00060 }