Browse Source

v.external: -t print also geometry column (useful when layer has multiple geometries)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@63608 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 10 years ago
parent
commit
f016825666
2 changed files with 16 additions and 6 deletions
  1. 1 1
      vector/v.external/args.c
  2. 15 5
      vector/v.external/list.c

+ 1 - 1
vector/v.external/args.c

@@ -51,7 +51,7 @@ void parse_args(int argc, char **argv,
     flags->tlist->key = 't';
     flags->tlist->label = _("List available layers including feature type "
 			    "in data source and exit");
-    flags->tlist->description = _("Format: layer name,type,projection check");
+    flags->tlist->description = _("Format: layer name,type,projection check,geometry");
     flags->tlist->guisection = _("Print");
     flags->tlist->suppress_required = YES;
 

+ 15 - 5
vector/v.external/list.c

@@ -283,9 +283,10 @@ int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_type
 
 	if (fd) {
 	    if (print_types) {
-		int proj_same;
+                int proj_same, igeom;
 		OGRSpatialReferenceH Ogr_projection;
-
+                OGRGeomFieldDefnH Ogr_geomdefn;
+                
 		/* projection check */
 		Ogr_projection = OGR_L_GetSpatialRef(Ogr_layer);
 		proj_same = 0;
@@ -304,9 +305,18 @@ int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_type
 			proj_same = 0;
 		}
 		G_suppress_warnings(FALSE);
-		fprintf(fd, "%s,%s,%d\n", layer_name,
-			feature_type(OGRGeometryTypeToName(Ogr_geom_type)),
-			proj_same);
+
+                for (igeom = 0; igeom < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); igeom++) {
+                    Ogr_geomdefn = OGR_FD_GetGeomFieldDefn(Ogr_featuredefn, igeom);
+                    if (!Ogr_geomdefn) {
+                        G_warning(_("Invalid geometry column %d"), igeom);
+                        continue;
+                    }
+                    
+                    fprintf(fd, "%s,%s,%d,%s\n", layer_name,
+                            feature_type(OGRGeometryTypeToName(Ogr_geom_type)),
+                            proj_same, OGR_GFld_GetNameRef(Ogr_geomdefn));
+                }
 	    }
 	    else {
 		fprintf(fd, "%s\n", layer_name);