Browse Source

v.in.lidar, v.out.lidar, v.in.pdal: do not use category 0

Merge class 0 into class 1
and add 1 to the RGB number before saving
(and subtract 1 before reading).


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@68472 15284696-431f-4ddb-bdfa-cd5b030d7da7
Vaclav Petras 9 năm trước cách đây
mục cha
commit
5bc0062757
3 tập tin đã thay đổi với 16 bổ sung5 xóa
  1. 9 2
      vector/v.in.lidar/main.c
  2. 1 0
      vector/v.in.pdal/main.cpp
  3. 6 3
      vector/v.out.lidar/main.c

+ 9 - 2
vector/v.in.lidar/main.c

@@ -595,8 +595,14 @@ int main(int argc, char *argv[])
             int return_c = return_to_cat(return_n, n_returns);
             Vect_cat_set(Cats, return_layer, return_c);
         }
-        if (class_layer)
-            Vect_cat_set(Cats, class_layer, point_class);
+        if (class_layer) {
+            /* 0 is not a valid category and
+             * classes 0 and 1 as practically the same */
+            if (point_class == 0)
+                Vect_cat_set(Cats, class_layer, 1);
+            else
+                Vect_cat_set(Cats, class_layer, point_class);
+        }
         if (have_color && rgb_layer) {
             /* TODO: if attr table, acquired again, performance difference? */
             LASColorH LAS_color = LASPoint_GetColor(LAS_point);
@@ -607,6 +613,7 @@ int main(int argc, char *argv[])
                 int rgb = red;
                 rgb = (rgb << 8) + green;
                 rgb = (rgb << 8) + blue;
+                rgb++;  /* cat 0 is not valid, add one */
                 Vect_cat_set(Cats, rgb_layer, rgb);
             }
         }

+ 1 - 0
vector/v.in.pdal/main.cpp

@@ -64,6 +64,7 @@ void pdal_point_to_grass(struct Map_info *output_vector,
         int rgb = red;
         rgb = (rgb << 8) + green;
         rgb = (rgb << 8) + blue;
+        rgb++;  /* cat 0 is not valid, add one */
         Vect_cat_set(cats, layers->rgb_layer, rgb);
     }
 

+ 6 - 3
vector/v.out.lidar/main.c

@@ -416,9 +416,12 @@ static void write_point(struct WriteContext *context, int cat, double x,
         if (context->rgb_layer) {
             if (!Vect_cat_get(cats, context->rgb_layer, &cat))
                 return;         /* TODO: is this an error? */
-            int red = (cat >> 16) & 0xFF;
-            int green = (cat >> 8) & 0xFF;
-            int blue = cat & 0xFF;
+            /* cat 0 is not valid, so we are adding 1 when storing
+             * now we need to subtract 1 */
+            int rgb = cat - 1;
+            int red = (rgb >> 16) & 0xFF;
+            int green = (rgb >> 8) & 0xFF;
+            int blue = rgb & 0xFF;
 
             LASColor_SetRed(las_color, red);
             LASColor_SetGreen(las_color, green);