Bladeren bron

r.out.gdal: +option to add overviews

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@71667 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 7 jaren geleden
bovenliggende
commit
84070578f5
1 gewijzigde bestanden met toevoegingen van 38 en 1 verwijderingen
  1. 38 1
      raster/r.out.gdal/main.c

+ 38 - 1
raster/r.out.gdal/main.c

@@ -118,7 +118,7 @@ int main(int argc, char *argv[])
     struct GModule *module;
     struct Flag *flag_l, *flag_c, *flag_m, *flag_f, *flag_t;
     struct Option *input, *format, *type, *output, *createopt, *metaopt,
-	*nodataopt;
+	          *nodataopt, *overviewopt;
 
     struct Cell_head cellhead;
     struct Ref ref;
@@ -129,6 +129,7 @@ int main(int argc, char *argv[])
     double dfCellMax, export_max;
     struct FPRange sRange;
     int retval = 0;
+    int n_overviews = 0;
 
     G_gisinit(argv[0]);
 
@@ -238,6 +239,17 @@ int main(int argc, char *argv[])
     nodataopt->required = NO;
     nodataopt->guisection = _("Creation");
     
+    overviewopt = G_define_option();
+    overviewopt->key = "overviews";
+    overviewopt->type = TYPE_INTEGER;
+    overviewopt->options = "0-5";
+    overviewopt->answer = "0";
+    overviewopt->label =
+	_("Number of overviews to create for the output dataset");
+    overviewopt->multiple = NO;
+    overviewopt->required = NO;
+    overviewopt->guisection = _("Creation");
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
@@ -642,6 +654,31 @@ int main(int argc, char *argv[])
 	}
     }
 
+    /* overviews */
+    if (overviewopt->answer) {
+	n_overviews = atoi(overviewopt->answer);
+	if (n_overviews < 0 || n_overviews > 5) {
+	    G_warning(_("Number of overviews must be between 0 and 5"));
+	    n_overviews = 0;
+	}
+    }
+    if (n_overviews) {
+	int i, oi, *ol;
+
+	G_message(_("Building overviews ..."));
+	
+	ol = G_malloc(n_overviews * sizeof(int));
+	oi = 2;
+	for (i = 0; i < n_overviews; i++) {
+	    ol[i] = oi;
+	    oi *= 2;
+	}
+	if (GDALBuildOverviews(hDstDS, "NEAREST", n_overviews, ol,
+	                       0, NULL, NULL, NULL) != CE_None) {
+	    G_warning(_("Unable to build overviews"));
+	}
+    }
+
     /* Finaly create user requested raster format from memory raster 
      * if in-memory driver was used */
     if (hMEMDS) {