浏览代码

wxGUI/wxIClass: when there is no area with given cat, display warning, not error message

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@50618 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová 13 年之前
父节点
当前提交
9523f0a293
共有 3 个文件被更改,包括 25 次插入15 次删除
  1. 8 4
      gui/wxpython/iclass/frame.py
  2. 12 5
      lib/imagery/iclass.c
  3. 5 6
      lib/imagery/iclass_perimeter.c

+ 8 - 4
gui/wxpython/iclass/frame.py

@@ -562,8 +562,9 @@ class IClassMapFrame(DoubleMapFrame):
                                      stats.color,
                                      stats.nstd)
                                      
-            if I_iclass_analysis(statistics, self.refer, self.poMapInfo, "1",
-                                 self.group, stats.rasterName):
+            ret = I_iclass_analysis(statistics, self.refer, self.poMapInfo, "1",
+                                 self.group, stats.rasterName)
+            if ret > 0:
                 # tests
                 self.cStatisticsDict[i] = statistics
                 
@@ -576,9 +577,12 @@ class IClassMapFrame(DoubleMapFrame):
                                                 alias = stats.name, resultsLayer = True)
                 # write statistics
                 I_iclass_add_signature(self.signatures, statistics)
+                
+            elif ret == 0:
+                GMessage(parent = self, message = _("No area in category %s. Category skipped.") % stats.category)
+                I_iclass_free_statistics(statistics)
             else:
-                GMessage(parent = self, message = _("Analysis failed. "
-                                                    "Check training areas and their categories."))
+                GMessage(parent = self, message = _("Analysis failed."))
                 I_iclass_free_statistics(statistics)
         
         self.UpdateChangeState(changes = False)

+ 12 - 5
lib/imagery/iclass.c

@@ -44,13 +44,14 @@
    \param group name of imagery group
    \param raster_name name of temporary raster map (to be created)
 
-   \return 1 on success
-   \return 0 on failure
+   \return number of processed training areas
+   \return -1 on failure
  */
 int I_iclass_analysis(IClass_statistics * statistics, struct Ref *refer,
 		      struct Map_info *map_info, const char *layer_name,
 		      const char *group, const char *raster_name)
 {
+    int ret;
 
     int category;
 
@@ -72,8 +73,14 @@ int I_iclass_analysis(IClass_statistics * statistics, struct Ref *refer,
     Rast_get_cellhd(refer->file[0].name, refer->file[0].mapset, &band_region);
 
     /* find perimeter points from vector map */
-    if (!vector2perimeters
-	(map_info, layer_name, category, &perimeters, &band_region)) {
+    ret =
+	vector2perimeters(map_info, layer_name, category, &perimeters,
+			  &band_region);
+    if (ret < 0) {
+	return -1;
+    }
+    else if (ret == 0) {
+	G_warning(_("No areas in category %d"), category);
 	return 0;
     }
 
@@ -84,7 +91,7 @@ int I_iclass_analysis(IClass_statistics * statistics, struct Ref *refer,
     close_band_files(refer, band_buffer, band_fd);
 
     free_perimeters(&perimeters);
-    return 1;
+    return ret;
 }
 
 

+ 5 - 6
lib/imagery/iclass_perimeter.c

@@ -46,8 +46,8 @@
    \param[out] perimeters list of perimeters
    \param band_region region which determines perimeter cells
 
-   \return 1 on success
-   \return 0 on error
+   \return number of areas of given cat
+   \return -1 on error
  */
 int vector2perimeters(struct Map_info *Map, const char *layer_name,
 		      int category, IClass_perimeter_list * perimeters,
@@ -82,7 +82,6 @@ int vector2perimeters(struct Map_info *Map, const char *layer_name,
 	    nareas_cat++;
 	}
     }
-
     if (nareas_cat == 0)
 	return 0;
 
@@ -108,14 +107,14 @@ int vector2perimeters(struct Map_info *Map, const char *layer_name,
 		Vect_destroy_line_struct(points);
 		free_perimeters(perimeters);
 		G_warning(_("Get area %d failed"), i);
-		return 0;
+		return -1;
 	    }
 	    if (make_perimeter
 		(points, &perimeters->perimeters[j - 1], band_region) <= 0) {
 		Vect_destroy_line_struct(points);
 		free_perimeters(perimeters);
 		G_warning(_("Perimeter computation failed"));
-		return 0;
+		return -1;
 	    }
 	    Vect_destroy_line_struct(points);
 	}
@@ -124,7 +123,7 @@ int vector2perimeters(struct Map_info *Map, const char *layer_name,
 
     //Vect_close(&Map);
 
-    return 1;
+    return nareas_cat;
 }
 
 /*!