[GRASS-SVN] r69649 - grass/trunk/vector/v.external

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Oct 3 08:08:44 PDT 2016


Author: martinl
Date: 2016-10-03 08:08:44 -0700 (Mon, 03 Oct 2016)
New Revision: 69649

Modified:
   grass/trunk/vector/v.external/args.c
   grass/trunk/vector/v.external/list.c
   grass/trunk/vector/v.external/local_proto.h
   grass/trunk/vector/v.external/main.c
Log:
v.external: change layer option to be not required

Modified: grass/trunk/vector/v.external/args.c
===================================================================
--- grass/trunk/vector/v.external/args.c	2016-10-03 08:54:37 UTC (rev 69648)
+++ grass/trunk/vector/v.external/args.c	2016-10-03 15:08:44 UTC (rev 69649)
@@ -29,7 +29,7 @@
 				    "\t\tESRI Shapefile: shapefile name\n"
 				    "\t\tMapInfo File: mapinfo file name\n"
 				    "\t\tPostGIS database: table name");
-    options->layer->required = YES;
+    options->layer->required = NO;
     options->layer->key_desc = "name";
     options->layer->gisprompt = "old,datasource_layer,datasource_layer";
         

Modified: grass/trunk/vector/v.external/list.c
===================================================================
--- grass/trunk/vector/v.external/list.c	2016-10-03 08:54:37 UTC (rev 69648)
+++ grass/trunk/vector/v.external/list.c	2016-10-03 15:08:44 UTC (rev 69649)
@@ -18,10 +18,10 @@
 static char **format_list(int *, size_t *);
 static char *feature_type(const char *);
 #ifdef HAVE_OGR
-static int list_layers_ogr(FILE *, const char *, const char *, int);
+static int list_layers_ogr(FILE *, const char *, char **, int);
 #endif /* HAVE_OGR */
 #ifdef HAVE_POSTGRES
-static int list_layers_pg(FILE *, const char *, const char *, int);
+static int list_layers_pg(FILE *, const char *, char **, int);
 #endif /* HAVE_POSTGRES */
 
 int cmp(const void *a, const void *b)
@@ -102,7 +102,7 @@
     G_free(list);
 }
 
-int list_layers(FILE *fd, const char *dsn, const char *layer, int print_types, int use_ogr)
+int list_layers(FILE *fd, const char *dsn, char **layer, int print_types, int use_ogr)
 {
     if (!use_ogr) {
 #ifdef HAVE_POSTGRES
@@ -139,7 +139,7 @@
 }
 
 #ifdef HAVE_POSTGRES
-int list_layers_pg(FILE *fd, const char *conninfo, const char *table, int print_types)
+int list_layers_pg(FILE *fd, const char *conninfo, char **table, int print_types)
 {
     int   row, ntables, ret, print_schema;
     char *value_schema, *value_table, *value_type, *value_column;
@@ -171,7 +171,7 @@
     /* get schema & table_name */
     table_name = schema_name = NULL;
     if (table)
-	get_table_name(table, &table_name, &schema_name);
+	get_table_name(*table, &table_name, &schema_name);
     
     ntables = PQntuples(res);
     G_debug(3, "   nrows = %d", ntables);
@@ -235,7 +235,7 @@
 #endif /* HAVE_POSTGRES */
 
 #ifdef HAVE_OGR
-int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_types)
+int list_layers_ogr(FILE *fd, const char *dsn, char **layer, int print_types)
 {
     int i, ret;
     int nlayers;
@@ -263,12 +263,22 @@
     /* Make a list of available layers */
     nlayers = OGR_DS_GetLayerCount(Ogr_ds);
 
-    if (fd)
+    if (fd) {
 	G_message(n_("Data source <%s> (format '%s') contains %d layer:",
                      "Data source <%s> (format '%s') contains %d layers:",
                      nlayers),
 		  dsn, OGR_Dr_GetName(OGR_DS_GetDriver(Ogr_ds)), nlayers);
-    
+    }
+    else if (layer && !(*layer)) {
+        /* return first layer by default (if layer not defined) */
+        if (nlayers > 0) {
+            Ogr_layer = OGR_DS_GetLayer(Ogr_ds, 0);
+            Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
+            *layer = G_store((char *) OGR_FD_GetName(Ogr_featuredefn));
+            return 0;
+        }
+        return -1;
+    }
 
     G_get_default_window(&loc_wind);
     if (print_types && loc_wind.proj != PROJECTION_XY) {
@@ -333,7 +343,7 @@
 	    }
 	}
 	if (layer)
-	    if (strcmp(layer_name, layer) == 0) {
+	    if (strcmp(layer_name, *layer) == 0) {
 		ret = i;
 	    }
     }

Modified: grass/trunk/vector/v.external/local_proto.h
===================================================================
--- grass/trunk/vector/v.external/local_proto.h	2016-10-03 08:54:37 UTC (rev 69648)
+++ grass/trunk/vector/v.external/local_proto.h	2016-10-03 15:08:44 UTC (rev 69649)
@@ -18,7 +18,7 @@
 
 /* list.c */
 void list_formats();
-int list_layers(FILE *, const char *, const char *, int, int);
+int list_layers(FILE *, const char *, char **, int, int);
 void get_table_name(const char *, char **, char **);
 
 #endif

Modified: grass/trunk/vector/v.external/main.c
===================================================================
--- grass/trunk/vector/v.external/main.c	2016-10-03 08:54:37 UTC (rev 69648)
+++ grass/trunk/vector/v.external/main.c	2016-10-03 15:08:44 UTC (rev 69649)
@@ -41,7 +41,7 @@
     FILE *fd;
     
     int ilayer, use_ogr;
-    char buf[GPATH_MAX], *dsn;
+    char buf[GPATH_MAX], *dsn, *layer;
     const char *output;
     
     G_gisinit(argv[0]);
@@ -108,22 +108,26 @@
         exit(EXIT_SUCCESS);
     }
 
+    /* get layer index/name */
+    layer = NULL;
+    if (options.layer->answer)
+        layer = G_store(options.layer->answer);
+    ilayer = list_layers(NULL, dsn, &layer,
+                         FALSE, use_ogr);
+    if (ilayer == -1) {
+        if (options.layer->answer)
+            G_fatal_error(_("Layer <%s> not available"), options.layer->answer);
+        else
+            G_fatal_error(_("No layer defined"));
+    }
+    G_debug(2, "layer '%s' was found", layer);
+
     /* define name for output */
     if (!options.output->answer)
-        output = options.layer->answer;
+        output = layer;
     else
         output = options.output->answer;
-    
 
-    /* get layer index */
-    ilayer = list_layers(NULL, dsn, options.layer->answer,
-                         FALSE, use_ogr);
-    if (ilayer == -1) {
-        G_fatal_error(_("Layer <%s> not available"), options.layer->answer);
-    }
-    
-    G_debug(2, "layer '%s' was found", options.layer->answer);
-
     if (G_find_vector2(output, G_mapset()) && !G_check_overwrite(argc, argv)) {
         G_fatal_error(_("option <%s>: <%s> exists. To overwrite, use the --overwrite flag"),
                       options.output->key, output);
@@ -254,7 +258,7 @@
     if (!use_ogr) {
         char *table_name, *schema_name;
         
-        get_table_name(options.layer->answer, &table_name, &schema_name);
+        get_table_name(layer, &table_name, &schema_name);
         
         fprintf(fd, "format: postgis\n");
         fprintf(fd, "conninfo: %s\n", dsn);
@@ -268,7 +272,7 @@
     else {
         fprintf(fd, "format: ogr\n");
         fprintf(fd, "dsn: %s\n", dsn);
-        fprintf(fd, "layer: %s\n", options.layer->answer);
+        fprintf(fd, "layer: %s\n", layer);
     }
     fclose(fd);
     



More information about the grass-commit mailing list