浏览代码

vlib: switch to level1 if topology is not built for OGR layer
* use table name for layer name if not defined


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@39555 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa 15 年之前
父节点
当前提交
1e46e0d564
共有 3 个文件被更改,包括 20 次插入15 次删除
  1. 3 2
      lib/vector/Vlib/build_ogr.c
  2. 14 11
      lib/vector/Vlib/field.c
  3. 3 2
      lib/vector/Vlib/open.c

+ 3 - 2
lib/vector/Vlib/build_ogr.c

@@ -1,5 +1,5 @@
 /*!
 /*!
-   \file build_ogr.c
+   \file lib/vector/Vlib/build_ogr.c
 
 
    \brief Vector library - Building topology for OGR
    \brief Vector library - Building topology for OGR
 
 
@@ -339,7 +339,8 @@ int Vect_build_ogr(struct Map_info *Map, int build)
 
 
     /* test layer capabilities */
     /* test layer capabilities */
     if (!OGR_L_TestCapability(Map->fInfo.ogr.layer, OLCRandomRead)) {
     if (!OGR_L_TestCapability(Map->fInfo.ogr.layer, OLCRandomRead)) {
-	G_warning(_("Random read is not supported by OGR for this layer, cannot build support"));
+	G_warning(_("Random read is not supported by OGR for this layer, "
+		    "unable to build topology"));
 	return 0;
 	return 0;
     }
     }
 
 

+ 14 - 11
lib/vector/Vlib/field.c

@@ -70,7 +70,7 @@ void Vect_reset_dblinks(struct dblinks *p)
 
 
   \param Map pointer to Map_info structure
   \param Map pointer to Map_info structure
   \param number layer number
   \param number layer number
-  \param name layer name
+  \param name layer name (if not given use table name)
   \param table table name
   \param table table name
   \param key key name
   \param key key name
   \param db database name
   \param db database name
@@ -85,25 +85,26 @@ int Vect_map_add_dblink(struct Map_info *Map, int number, const char *name,
 {
 {
     int ret;
     int ret;
 
 
-    if (number == 0) {
+    if (number < 1) {
 	G_warning(_("Layer number must be 1 or greater"));
 	G_warning(_("Layer number must be 1 or greater"));
 	return -1;
 	return -1;
     }
     }
 
 
     if (Map->mode != GV_MODE_WRITE && Map->mode != GV_MODE_RW) {
     if (Map->mode != GV_MODE_WRITE && Map->mode != GV_MODE_RW) {
-	G_warning(_("Unable to add database link, map is not opened in WRITE mode"));
+	G_warning(_("Unable to add attribute link, vector map is "
+		    "not opened in WRITE mode"));
 	return -1;
 	return -1;
     }
     }
 
 
     ret = Vect_add_dblink(Map->dblnk, number, name, table, key, db, driver);
     ret = Vect_add_dblink(Map->dblnk, number, name, table, key, db, driver);
     if (ret == -1) {
     if (ret == -1) {
-	G_warning(_("Unable to add database link"));
+	G_warning(_("Unable to add attribute link"));
 	return -1;
 	return -1;
     }
     }
     /* write it immediately otherwise it is lost if module crashes */
     /* write it immediately otherwise it is lost if module crashes */
     ret = Vect_write_dblinks(Map);
     ret = Vect_write_dblinks(Map);
     if (ret == -1) {
     if (ret == -1) {
-	G_warning(_("Unable to write database links"));
+	G_warning(_("Unable to write attribute links"));
 	return -1;
 	return -1;
     }
     }
     return 0;
     return 0;
@@ -202,7 +203,7 @@ int Vect_check_dblink(const struct dblinks *p, int field, const char *name)
   
   
   \param[in,out] p pointer to existing dblinks structure
   \param[in,out] p pointer to existing dblinks structure
   \param number layer number (1 for OGR)
   \param number layer number (1 for OGR)
-  \param name   layer name (layer for OGR)
+  \param name   layer name (layer for OGR) - if not given use table name
   \param table  table name (layer for OGR)
   \param table  table name (layer for OGR)
   \param key    key name
   \param key    key name
   \param db     database name (datasource for OGR)
   \param db     database name (datasource for OGR)
@@ -218,6 +219,10 @@ int Vect_add_dblink(struct dblinks *p, int number, const char *name,
     int ret;
     int ret;
 
 
     G_debug(3, "Field number <%d>, name <%s>", number, name);
     G_debug(3, "Field number <%d>, name <%s>", number, name);
+    if (!name) {
+	/* if name is not given, use table name */
+	name = table;
+    }
     ret = Vect_check_dblink(p, number, name);
     ret = Vect_check_dblink(p, number, name);
     if (ret == 1) {
     if (ret == 1) {
 	G_warning(_("Layer number %d or name <%s> already exists"), number,
 	G_warning(_("Layer number %d or name <%s> already exists"), number,
@@ -277,9 +282,8 @@ int Vect_add_dblink(struct dblinks *p, int number, const char *name,
 
 
   \return pointer to new field_info structure
   \return pointer to new field_info structure
  */
  */
-struct field_info
-    *Vect_default_field_info(struct Map_info *Map,
-			     int field, const char *field_name, int type)
+struct field_info *Vect_default_field_info(struct Map_info *Map,
+					   int field, const char *field_name, int type)
 {
 {
     struct field_info *fi;
     struct field_info *fi;
     char buf[1000], buf2[1000];
     char buf[1000], buf2[1000];
@@ -295,8 +299,7 @@ struct field_info
     db = G__getenv2("DB_DATABASE", G_VAR_MAPSET);
     db = G__getenv2("DB_DATABASE", G_VAR_MAPSET);
 
 
     G_debug(2, "drv = %s db = %s", drv, db);
     G_debug(2, "drv = %s db = %s", drv, db);
-
-
+    
     if (!connection.driverName && !connection.databaseName) {
     if (!connection.driverName && !connection.databaseName) {
 	/* Set default values and create dbf db dir */
 	/* Set default values and create dbf db dir */
 	db_set_default_connection();
 	db_set_default_connection();

+ 3 - 2
lib/vector/Vlib/open.c

@@ -375,8 +375,9 @@ int Vect__open_old(struct Map_info *Map, const char *name, const char *mapset, c
 	    G_message(_("Building topology for OGR layer <%s> from datasource '%s'..."),
 	    G_message(_("Building topology for OGR layer <%s> from datasource '%s'..."),
 		      Map->fInfo.ogr.layer_name, Map->fInfo.ogr.dsn);
 		      Map->fInfo.ogr.layer_name, Map->fInfo.ogr.dsn);
 	    G_set_verbose(0);
 	    G_set_verbose(0);
-	    Vect_build(Map);
-	    level = 2;
+	    if (Vect_build(Map)) {
+		level = 2;
+	    }
 	    G_set_verbose(verbose);
 	    G_set_verbose(verbose);
 	}
 	}
     }
     }