[GRASS GIS] #550: v.to.3d: column name case sensitive

5 messages Options
Embed this post
Permalink
GRASS GIS

[GRASS GIS] #550: v.to.3d: column name case sensitive

Reply Threaded More More options
Print post
Permalink
#550: v.to.3d: column name case sensitive
---------------------+------------------------------------------------------
 Reporter:  hamish   |       Owner:  [hidden email]
     Type:  defect   |      Status:  new                      
 Priority:  minor    |   Milestone:  6.4.0                    
Component:  Vector   |     Version:  svn-develbranch6        
 Keywords:  v.to.3d  |    Platform:  Linux                    
      Cpu:  x86-32   |  
---------------------+------------------------------------------------------
 Hi,

 just had need to use v.to.3d for the first time. It's nice!

 minor issue: the imported shapefile created columns named as:
 {{{
 INTEGER|cat
 DOUBLE PRECISION|EASTING
 DOUBLE PRECISION|NORTHING
 DOUBLE PRECISION|ELEVATION
 }}}
 (using dbf driver)

 I tried to use 'v.to.3d column=elevation' but it exited with the message:
 {{{
 ERROR: Column <elevation> not found in table <bathymetry_point>
 }}}

 It needed to see 'column=ELEVATION'. G_strcasecmp() or tolower() needed?


 also that failure left an empty map behind.


 thanks,
 Hamish

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/550>
GRASS GIS <http://grass.osgeo.org>

_______________________________________________
grass-dev mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/grass-dev
Moritz Lennert

Re: [GRASS GIS] #550: v.to.3d: column name case sensitive

Reply Threaded More More options
Print post
Permalink
On 09/04/09 05:10, GRASS GIS wrote:

> #550: v.to.3d: column name case sensitive
> ---------------------+------------------------------------------------------
>  Reporter:  hamish   |       Owner:  [hidden email]
>      Type:  defect   |      Status:  new                      
>  Priority:  minor    |   Milestone:  6.4.0                    
> Component:  Vector   |     Version:  svn-develbranch6        
>  Keywords:  v.to.3d  |    Platform:  Linux                    
>       Cpu:  x86-32   |  
> ---------------------+------------------------------------------------------
>  Hi,
>
>  just had need to use v.to.3d for the first time. It's nice!
>
>  minor issue: the imported shapefile created columns named as:
>  {{{
>  INTEGER|cat
>  DOUBLE PRECISION|EASTING
>  DOUBLE PRECISION|NORTHING
>  DOUBLE PRECISION|ELEVATION
>  }}}
>  (using dbf driver)
>
>  I tried to use 'v.to.3d column=elevation' but it exited with the message:
>  {{{
>  ERROR: Column <elevation> not found in table <bathymetry_point>
>  }}}
>
>  It needed to see 'column=ELEVATION'. G_strcasecmp() or tolower() needed?

Are column names case insensitive in all db backends ?

Moritz
_______________________________________________
grass-dev mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/grass-dev
Benjamin Ducke

v.in.dxf patch

Reply Threaded More More options
Print post
Permalink
Dear all,

I have attached a little patch for v.in.dxf. This just makes a small but
useful addition:

it allows parsing of the 'handle' field which exists for every DXF
entity and provides a way for transporting small bits of data in the DXF
file.

The patch is against the current sources in:

http://trac.osgeo.org/grass/browser/grass/trunk

I am not sure which version of GRASS this should go into,
as it does add a new feature (but really just a tiny one).

Cheers,

Ben

--
Benjamin Ducke
Senior Geospatial Consultant

Oxford Archaeology
Janus House
Osney Mead
OX2 0ES
Oxford, U.K.

Tel: +44 (0)1865 263 800 (switchboard)
Tel: +44 (0)1865 980 758 (direct)
Fax :+44 (0)1865 793 496
[hidden email]





------
Files attached to this email may be in ISO 26300 format (OASIS Open Document Format). If you have difficulty opening them, please visit http://iso26300.info for more information.

diff -urB old/add_3dface.c new/add_3dface.c
--- old/add_3dface.c 2009-04-09 09:39:49.000000000 +0100
+++ new/add_3dface.c 2009-04-09 09:52:26.000000000 +0100
@@ -12,21 +12,30 @@
     int yflag = 0; /* indicates if a y value has been found */
     int zflag = 0; /* indicates if a z value has been found */
     int arr_size = 0;
+    char handle[DXF_BUF_SIZE]; /* read in from dxf file */
+    char *handle_ptr = NULL;
+    
 
     strcpy(layer, UNIDENTIFIED_LAYER);
 
     /* read in lines and process information until a 0 is read in */
     while ((code = dxf_get_code(dxf)) != 0) {
  if (code == -2)
-    return -1;
+    return -1;
 
  switch (code) {
+ case 5: /* handle value (int) */
+    strcpy(handle, dxf_buf);
+    handle_ptr = &handle[0];
+    break;    
  case 8: /* layer name */
     if (!layer_flag && *dxf_buf) {
  if (flag_list) {
     if (!is_layer_in_list(dxf_buf)) {
  add_layer_to_list(dxf_buf);
  print_layer(dxf_buf);
+ fprintf(stdout, _("Layer %d: %s\n"), num_layers,
+ dxf_buf);
     }
     return 0;
  }
@@ -116,7 +125,7 @@
  if (xpnts[2] == xpnts[3] && ypnts[2] == ypnts[3] &&
     zpnts[2] == zpnts[3])
     arr_size--;
- write_face(Map, layer, arr_size);
+ write_face(Map, layer, handle_ptr, arr_size);
     }
 
     return 0;
diff -urB old/add_arc.c new/add_arc.c
--- old/add_arc.c 2009-04-09 09:40:07.000000000 +0100
+++ new/add_arc.c 2009-04-09 09:53:06.000000000 +0100
@@ -19,6 +19,9 @@
     float start_angle = 0; /* read in from dxf file */
     float finish_angle = 0; /* read in from dxf file */
     int arr_size = 0;
+    char handle[DXF_BUF_SIZE]; /* read in from dxf file */
+    char *handle_ptr = NULL;
+    
 
     strcpy(layer, UNIDENTIFIED_LAYER);
 
@@ -28,12 +31,18 @@
     return -1;
 
  switch (code) {
+ case 5: /* handle value (int) */
+    strcpy(handle, dxf_buf);
+    handle_ptr = &handle[0];
+    break;    
  case 8: /* layer name */
     if (!layer_flag && *dxf_buf) {
  if (flag_list) {
     if (!is_layer_in_list(dxf_buf)) {
  add_layer_to_list(dxf_buf);
  print_layer(dxf_buf);
+ fprintf(stdout, _("Layer %d: %s\n"), num_layers,
+ dxf_buf);
     }
     return 0;
  }
@@ -78,7 +87,7 @@
  arr_size =
     make_arc(0, centerx, centery, radius, start_angle, finish_angle,
      zcoor);
- write_line(Map, layer, arr_size);
+ write_line(Map, layer, handle_ptr, arr_size);
     }
 
     return 0;
diff -urB old/add_circle.c new/add_circle.c
--- old/add_circle.c 2009-04-09 09:40:18.000000000 +0100
+++ new/add_circle.c 2009-04-09 09:53:25.000000000 +0100
@@ -15,6 +15,9 @@
     double radius = 0; /* read in from dxf file */
     double zcoor = 0; /* read in from dxf file */
     int arr_size = 0;
+    char handle[DXF_BUF_SIZE]; /* read in from dxf file */
+    char *handle_ptr = NULL;
+    
 
     strcpy(layer, UNIDENTIFIED_LAYER);
 
@@ -24,12 +27,18 @@
     return -1;
 
  switch (code) {
+ case 5: /* handle value (int) */
+    strcpy(handle, dxf_buf);
+    handle_ptr = &handle[0];
+    break;    
  case 8: /* layer name */
     if (!layer_flag && *dxf_buf) {
  if (flag_list) {
     if (!is_layer_in_list(dxf_buf)) {
  add_layer_to_list(dxf_buf);
  print_layer(dxf_buf);
+ fprintf(stdout, _("Layer %d: %s\n"), num_layers,
+ dxf_buf);
     }
     return 0;
  }
@@ -64,7 +73,7 @@
 
     if (xflag && yflag && rflag) {
  arr_size = make_arc(0, centerx, centery, radius, 0.0, 360.0, zcoor);
- write_line(Map, layer, arr_size);
+ write_line(Map, layer, handle_ptr, arr_size);
     }
 
     return 0;
diff -urB old/add_line.c new/add_line.c
--- old/add_line.c 2009-04-09 09:40:30.000000000 +0100
+++ new/add_line.c 2009-04-09 10:10:03.000000000 +0100
@@ -11,6 +11,9 @@
     int yflag = 0; /* indicates if a y value has been found */
     int zflag = 0; /* indicates if a z value has been found */
     int arr_size = 0;
+    char handle[DXF_BUF_SIZE]; /* read in from dxf file */
+    char *handle_ptr = NULL;
+    
 
     strcpy(layer, UNIDENTIFIED_LAYER);
 
@@ -21,12 +24,18 @@
     return -1;
 
  switch (code) {
+ case 5: /* handle value (int) */
+    strcpy(handle, dxf_buf);
+    handle_ptr = &handle[0];
+    break;    
  case 8: /* layer name */
     if (!layer_flag && *dxf_buf) {
  if (flag_list) {
     if (!is_layer_in_list(dxf_buf)) {
  add_layer_to_list(dxf_buf);
  print_layer(dxf_buf);
+ fprintf(stdout, _("Layer %d: %s\n"), num_layers,
+ dxf_buf);
     }
     return 0;
  }
@@ -76,8 +85,8 @@
  }
     }
 
-    if (arr_size == 2) /* have both start and stop */
- write_line(Map, layer, arr_size);
+    if (arr_size == 2) /* have both start and stop */
+ write_line(Map, layer, handle_ptr, arr_size);
 
     return 0;
 }
diff -urB old/add_lwpolyline.c new/add_lwpolyline.c
--- old/add_lwpolyline.c 2009-04-09 09:40:41.000000000 +0100
+++ new/add_lwpolyline.c 2009-04-09 09:54:54.000000000 +0100
@@ -11,6 +11,8 @@
     int xflag = 0; /* indicates if a x value has been found */
     int yflag = 0; /* indicates if a y value has been found */
     int arr_size = 0;
+    char handle[DXF_BUF_SIZE]; /* read in from dxf file */
+    char *handle_ptr = NULL;
 
     /* variables to create arcs */
     double bulge = 0.0; /* for arc curves */
@@ -25,12 +27,18 @@
     return -1;
 
  switch (code) {
+ case 5: /* handle value (int) */
+    strcpy(handle, dxf_buf);
+    handle_ptr = &handle[0];
+    break;    
  case 8: /* layer name */
     if (!layer_flag && *dxf_buf) {
  if (flag_list) {
     if (!is_layer_in_list(dxf_buf)) {
  add_layer_to_list(dxf_buf);
  print_layer(dxf_buf);
+ fprintf(stdout, _("Layer %d: %s\n"), num_layers,
+ dxf_buf);
     }
     return 0;
  }
@@ -105,7 +113,7 @@
     zpnts[i] = 0.0;
     }
 
-    write_line(Map, layer, arr_size);
+    write_line(Map, layer, handle_ptr, arr_size);
 
     return 0;
 }
diff -urB old/add_point.c new/add_point.c
--- old/add_point.c 2009-04-09 09:40:52.000000000 +0100
+++ new/add_point.c 2009-04-09 10:17:18.000000000 +0100
@@ -9,6 +9,8 @@
     int layer_flag = 0; /* indicates if a layer name has been found */
     int xflag = 0; /* indicates if a x value has been found */
     int yflag = 0; /* indicates if a y value has been found */
+    char handle[DXF_BUF_SIZE]; /* read in from dxf file */
+    char *handle_ptr = NULL;
 
     strcpy(layer, UNIDENTIFIED_LAYER);
 
@@ -19,12 +21,18 @@
     return -1;
 
  switch (code) {
+ case 5: /* handle value (int) */
+    strcpy(handle, dxf_buf);
+    handle_ptr = &handle[0];
+    break;    
  case 8: /* layer name */
     if (!layer_flag && *dxf_buf) {
  if (flag_list) {
     if (!is_layer_in_list(dxf_buf)) {
  add_layer_to_list(dxf_buf);
  print_layer(dxf_buf);
+ fprintf(stdout, _("Layer %d: %s\n"), num_layers,
+ dxf_buf);
     }
     return 0;
  }
@@ -61,7 +69,7 @@
  * ypnts[1] = ypnts[0];
  * zpnts[1] = zpnts[0];
  */
- write_point(Map, layer);
+ write_point(Map, layer, handle_ptr);
     }
 
     return 0;
diff -urB old/add_polyline.c new/add_polyline.c
--- old/add_polyline.c 2009-04-09 09:41:04.000000000 +0100
+++ new/add_polyline.c 2009-04-09 10:16:55.000000000 +0100
@@ -2,7 +2,7 @@
 #include <string.h>
 #include "global.h"
 
-static void write_pnts(struct Map_info *, char *, int, int, int);
+static void write_pnts(struct Map_info *, char *, char *, int, int, int);
 
 int add_polyline(struct dxf_file *dxf, struct Map_info *Map)
 {
@@ -17,6 +17,8 @@
     int yflag = 0; /* indicates if a y value has been found */
     int zflag = 0; /* indicates if a z value has been found */
     int arr_size = 0;
+    char handle[DXF_BUF_SIZE]; /* read in from dxf file */
+    char *handle_ptr = NULL;
 
     /* variables to create arcs */
     double bulge = 0.0; /* for arc curves */
@@ -31,7 +33,9 @@
     double *mesh_ypnts = NULL;
     double *mesh_zpnts = NULL;
 
+
     strcpy(layer, UNIDENTIFIED_LAYER);
+    
 
     /* read in lines and process information until a 0 is read in */
     while ((code = dxf_get_code(dxf)) != 0) {
@@ -67,8 +71,8 @@
     if (polyline_flag & (8 | 16 | 32))
  if (warn_flag70) {
     if (!flag_list)
- G_warning(_("3-d data in dxf file. Polyline_flag: %d"),
-  polyline_flag);
+        G_warning(_("3-d data in dxf file. Polyline_flag: %d"),
+          polyline_flag);
     warn_flag70 = 0;
  }
     break;
@@ -91,6 +95,10 @@
     return -1;
 
  switch (code) {
+ case 5: /* handle value (int) */
+        strcpy(handle, dxf_buf);
+        handle_ptr = &handle[0];
+        break;    
  case 8: /* layer name */
     /* if no layer previously assigned */
     if (!layer_flag && *dxf_buf) {
@@ -98,6 +106,8 @@
     if (!is_layer_in_list(dxf_buf)) {
  add_layer_to_list(dxf_buf);
  print_layer(dxf_buf);
+ fprintf(stdout, _("Layer %d: %s\n"),
+ num_layers, dxf_buf);
     }
     return 0;
  }
@@ -201,11 +211,11 @@
     arr_size++;
     if (flag_frame) {
  set_entity("POLYFACE FRAME");
- write_line(Map, layer, arr_size);
+ write_line(Map, layer, handle_ptr, arr_size);
     }
     else {
  set_entity("POLYFACE");
- write_face(Map, layer, arr_size);
+ write_face(Map, layer, handle_ptr, arr_size);
     }
     arr_size = 0;
  }
@@ -235,13 +245,14 @@
  G_free(mesh_ypnts);
  G_free(mesh_zpnts);
     }
-    else
- write_pnts(Map, layer, polyline_flag, zflag, arr_size);
+    else {
+       write_pnts(Map, layer, handle_ptr, polyline_flag, zflag, arr_size);
+    }
 
     return 0;
 }
 
-static void write_pnts(struct Map_info *Map, char *layer, int polyline_flag,
+static void write_pnts(struct Map_info *Map, char *layer, char *handle, int polyline_flag,
        int zflag, int arr_size)
 {
     /* done reading vertices */
@@ -271,8 +282,8 @@
  for (i = 0; i < arr_size; i++)
     zpnts[i] = 0.0;
     }
-
-    write_line(Map, layer, arr_size);
+    
+    write_line(Map, layer, handle, arr_size);
 
     return;
 }
diff -urB old/add_text.c new/add_text.c
--- old/add_text.c 2009-04-09 09:41:13.000000000 +0100
+++ new/add_text.c 2009-04-09 09:57:27.000000000 +0100
@@ -13,6 +13,9 @@
     double angle = 0.0; /* read in from dxf file */
     char label[DXF_BUF_SIZE]; /* read in from dxf file */
     int label_len = 0;
+    char handle[DXF_BUF_SIZE]; /* read in from dxf file */
+    char *handle_ptr = NULL;
+    
 
     strcpy(layer, UNIDENTIFIED_LAYER);
 
@@ -27,12 +30,18 @@
     label_len = strlen(dxf_buf);
     strcpy(label, dxf_buf);
     break;
+ case 5: /* handle value (int) */
+    strcpy(handle, dxf_buf);
+    handle_ptr = &handle[0];
+    break;    
  case 8: /* layer name */
     if (!layer_flag && *dxf_buf) {
  if (flag_list) {
     if (!is_layer_in_list(dxf_buf)) {
  add_layer_to_list(dxf_buf);
  print_layer(dxf_buf);
+ fprintf(stdout, _("Layer %d: %s\n"), num_layers,
+ dxf_buf);
     }
     return 0;
  }
@@ -110,9 +119,9 @@
  ypnts[3] = ypnts[0] + (length * sin(theta));
  zpnts[3] = zpnts[0];
 
- write_line(Map, layer, 5);
+ write_line(Map, layer, handle_ptr, 5);
 #endif
- write_text(Map, layer, label);
+ write_text(Map, layer, handle_ptr, label);
     }
 
     return 0;
diff -urB old/dxf_to_vect.c new/dxf_to_vect.c
--- old/dxf_to_vect.c 2009-04-09 09:41:25.000000000 +0100
+++ new/dxf_to_vect.c 2009-04-07 15:34:22.000000000 +0100
@@ -172,8 +172,11 @@
 void set_entity(char *str)
 {
     strcpy(entity, str);
-    for (str = entity; *str; str++)
- *str = tolower(*str);
+    
+    if ( flag_to_lower ) {
+       for (str = entity; *str; str++)
+  *str = tolower(*str);
+    }
 
     return;
 }
diff -urB old/global.h new/global.h
--- old/global.h 2009-04-09 09:41:35.000000000 +0100
+++ new/global.h 2009-04-09 10:00:19.000000000 +0100
@@ -20,7 +20,7 @@
 #define DXF_BUF_SIZE 256
 
 extern int flag_list, flag_extent, flag_table, flag_topo, flag_invert,
-    flag_one_layer, flag_frame;
+    flag_one_layer, flag_frame, flag_int_handles, flag_real_handles, flag_to_lower;
 extern int num_layers, found_layers;
 extern char **layers;
 extern char dxf_buf[DXF_BUF_SIZE], entity[DXF_BUF_SIZE];
@@ -76,11 +76,11 @@
 int add_text(struct dxf_file *, struct Map_info *);
 
 /* write_vect.c */
-#define write_point(a, b) write_vect(a, b, entity, "", 1, GV_POINT)
-#define write_line(a, b, c) write_vect(a, b, entity, "", c, GV_LINE)
-#define write_face(a, b, c) write_vect(a, b, entity, "", c, GV_FACE)
-#define write_text(a, b, c) write_vect(a, b, entity, c, 1, GV_POINT)
-void write_vect(struct Map_info *, char *, char *, char *, int, int);
+#define write_point(a, b, c) write_vect(a, b, entity, c, "", 1, GV_POINT)
+#define write_line(a, b, c, d) write_vect(a, b, entity, c, "", d, GV_LINE)
+#define write_face(a, b, c, d) write_vect(a, b, entity, c, "", d, GV_FACE)
+#define write_text(a, b, c, d) write_vect(a, b, entity, c, d, 1, GV_POINT)
+void write_vect(struct Map_info *, char *, char *, char*, char *, int, int);
 void write_done(struct Map_info *);
 
 #endif
diff -urB old/main.c new/main.c
--- old/main.c 2009-04-09 09:41:56.000000000 +0100
+++ new/main.c 2009-04-09 10:22:02.000000000 +0100
@@ -14,10 +14,12 @@
  *
  *               Rewrite for GRASS 6:
  *               Huidae Cho <grass4u gmail.com>
+ * Small enhancements:
+ * Benjamin Ducke <[hidden email]>
  *
  * PURPOSE:      Import DXF file
  *
- * COPYRIGHT:    (C) 1999-2006 by the GRASS Development Team
+ * COPYRIGHT:    (C) 1999-2009 by the GRASS Development Team
  *
  *               This program is free software under the GNU General Public
  *               License (>=v2). Read the file COPYING that comes with GRASS
@@ -30,7 +32,7 @@
 #include "global.h"
 
 int flag_list, flag_extent, flag_table, flag_topo, flag_invert,
-    flag_one_layer, flag_frame;
+    flag_one_layer, flag_frame, flag_int_handles, flag_real_handles, flag_to_lower;
 int num_layers, found_layers;
 char **layers;
 char dxf_buf[DXF_BUF_SIZE], entity[DXF_BUF_SIZE];
@@ -53,6 +55,9 @@
  struct Flag *topo;
  struct Flag *invert;
  struct Flag *one_layer;
+ struct Flag *int_handles;
+ struct Flag *real_handles;
+ struct Flag *to_lower;
  struct Flag *frame;
     } flag;
     struct
@@ -84,6 +89,18 @@
     flag.frame = G_define_flag();
     flag.frame->key = 'f';
     flag.frame->description = _("Import polyface meshes as 3D wire frame");
+    
+    flag.int_handles = G_define_flag();
+    flag.int_handles->key = 'n';
+    flag.int_handles->description = _("Import handles as integer values");
+
+    flag.real_handles = G_define_flag();
+    flag.real_handles->key = 'r';
+    flag.real_handles->description = _("Import handles as floating point values");
+
+    flag.to_lower = G_define_flag();
+    flag.to_lower->key = 'c';
+    flag.to_lower->description = _("Convert DXF entity names to lower case");
 
     flag.list = G_define_flag();
     flag.list->key = 'l';
@@ -100,7 +117,7 @@
     flag.one_layer->key = '1';
     flag.one_layer->description = _("Import all objects into one layer");
     flag.one_layer->guisection = _("DXF layers");
-
+    
     opt.input = G_define_standard_option(G_OPT_F_INPUT);
     opt.input->description = _("Name of input DXF file");
 
@@ -124,11 +141,18 @@
     flag_invert = flag.invert->answer;
     flag_one_layer = flag.one_layer->answer;
     flag_frame = flag.frame->answer;
+    flag_int_handles = flag.int_handles->answer;
+    flag_real_handles = flag.real_handles->answer;
+    flag_to_lower = flag.to_lower->answer;
 
     /* open DXF file */
     if (!(dxf = dxf_open(opt.input->answer)))
  G_fatal_error(_("Unable to open DXF file <%s>"), opt.input->answer);
 
+    if ( flag_real_handles && flag_int_handles ) {
+        G_fatal_error(_("Please specify either '-n' or '-r'") );
+    }
+
     if (flag_list) {
  num_layers = 0;
  layers = NULL;
Only in new: main.c~
diff -urB old/v.in.dxf.html new/v.in.dxf.html
--- old/v.in.dxf.html 2009-04-09 09:42:37.000000000 +0100
+++ new/v.in.dxf.html 2009-04-09 10:06:55.000000000 +0100
@@ -1,6 +1,6 @@
 <h2>DESCRIPTION</h2>
 
-Standard DXF is imported. The following graphical objects are supported:
+Converts DXF format CAD files to GRASS vector format. The following graphical objects (DXF entities) are supported:
 
 <ul>
 <li>GRASS point type:</li>
@@ -23,13 +23,28 @@
  </ul></li>
 </ul>
 
-Capital column names are changed to lowercase characters as for easier
+Capital column names are changed to lowercase characters for easier
 SQL usage (lowercase column names avoid the need to quote them if the
 attribute table is stored in a SQL DBMS such as PostgreSQL).
 
+For text type entities, the text value will be stored in a column
+"label" of the GRASS vector output map. The "layer" field will contain
+the name(s) of the DXF input layer(s). The DXF entity type string will
+be stored in "entity". DXF specification suggest upper case spelling
+for entity names. Use the <b>-c</b> flag to store them as lower case.
+<p>
+The "handle" column can be used to store small bits of data associated with any entity
+in the DXF file. The DXF specification is not clear about whether this
+is supposed to be a text string or a number. You can force numeric interpretation
+by using the <b>-n</b> and <b>-r</b> flags. Most applications that read DXF files
+seem to be relaxed about the contents of this column.
+<p>
+Neither the "label" nor the "handle" columns are mandatory.
+
 <H2>REFERENCES</H2>
 
-<a href="http://en.wikipedia.org/wiki/AutoCAD_DXF">AutoCad DXF</a> (from Wikipedia, the free encyclopedia)
+<a href="http://en.wikipedia.org/wiki/AutoCAD_DXF">AutoCad DXF</a> (from Wikipedia, the free encyclopedia)<br>
+<a href="http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=12272454&linkID=10809853">DXF Reference</a> (Autodesk-supplied documentation)
 
 <H2>SEE ALSO</H2>
 
@@ -43,6 +58,7 @@
 Revised by Dave Gerdes, 12/1989<BR>
 US Army Construction Engineering Research Lab
 <P>
-Updated for GRASS 6 and 3D support. Huidae Cho, 3/2006
+Updated for GRASS 6 and 3D support. Huidae Cho, 3/2006<BR>
+With minor additions by Benjamin Ducke (Oxford Archaeology), 4/2009
 
-<P><I>Last changed: $Date$</I>
+<P><I>Last changed: $Date: 2009-04-09 10:00:00 (Thu, 09 Apr 2009) $</I>
diff -urB old/write_vect.c new/write_vect.c
--- old/write_vect.c 2009-04-09 09:42:50.000000000 +0100
+++ new/write_vect.c 2009-04-09 10:15:24.000000000 +0100
@@ -11,7 +11,7 @@
 static dbString sql, str;
 static char buf[1000];
 
-void write_vect(struct Map_info *Map, char *layer, char *entity, char *label,
+void write_vect(struct Map_info *Map, char *layer, char *entity, char *handle, char *label,
  int arr_size, int type)
 {
     struct line_cats *Cats;
@@ -30,6 +30,7 @@
  sprintf(buf, "insert into %s (%s"
  ", layer"
  ", entity"
+ ", handle"
  ", label" ") values (%d, '", Fi[i]->table, Fi[i]->key, cat);
 
  if (layer) {
@@ -42,20 +43,38 @@
  if (entity) {
     db_set_string(&str, entity);
     db_double_quote_string(&str);
-    strcat(buf, db_get_string(&str));
+    strcat(buf, db_get_string(&str));    
  }
- strcat(buf, "', '");
+ strcat(buf, "', ");
 
- if (label) {
+ if (handle) {
+    if ( !flag_int_handles && !flag_real_handles ) {
+        strcat(buf, "'");
+    }
+    if ( !flag_int_handles && !flag_real_handles ) {
+        db_double_quote_string(&str);
+    }    
+    db_set_string(&str, handle);
+    strcat(buf, db_get_string(&str));
+    if ( !flag_int_handles && !flag_real_handles ) {
+        strcat(buf, "'");
+    }    
+ } else {
+    strcat(buf, "NULL"); /* no handle? Set to NULL value */
+ }
+ strcat(buf, ", '");
+
+ if ( label ) {
     db_set_string(&str, label);
     db_double_quote_string(&str);
     strcat(buf, db_get_string(&str));
  }
- strcat(buf, "')");
+
+ strcat(buf, "' )");
 
  db_set_string(&sql, buf);
  if (db_execute_immediate(driver, &sql) != DB_OK)
-    G_fatal_error(_("Unable to insert new record: %s"),
+    G_fatal_error(_("Unable to insert new record: %s"),
   db_get_string(&sql));
  db_free_string(&sql);
     }
@@ -133,11 +152,11 @@
      */
     strcpy(field_name, layer);
     if (field_name[0] >= '0' && field_name[0] <= '9')
- x = field_name[0];
+       x = field_name[0];
     G_str_to_sql(field_name);
     if (x)
         field_name[0] = x;
-
+
     for (i = 0; i < num_fields; i++) {
  /* field name already exists */
  if (strcmp(field_name, field_names[i]) == 0) {
@@ -208,11 +227,34 @@
 
     /* capital table names are a pain in SQL */
     G_str_to_lower(Fi[i]->table);
-    sprintf(buf, "create table %s (cat integer"
+    
+    if ( flag_int_handles ) {
+        sprintf(buf, "create table %s (cat integer"
+    ", layer varchar(%d)"
+    ", entity varchar(%d)"
+    ", handle integer"
+    ", label varchar(%d)"
+    ")", Fi[i]->table, DXF_BUF_SIZE, DXF_BUF_SIZE, DXF_BUF_SIZE);
+    }
+    
+    if ( flag_real_handles ) {
+        sprintf(buf, "create table %s (cat integer"
     ", layer varchar(%d)"
     ", entity varchar(%d)"
+    ", handle double"
     ", label varchar(%d)"
     ")", Fi[i]->table, DXF_BUF_SIZE, DXF_BUF_SIZE, DXF_BUF_SIZE);
+    }
+    
+    if ( !flag_int_handles && !flag_real_handles ) {
+        sprintf(buf, "create table %s (cat integer"
+    ", layer varchar(%d)"
+    ", entity varchar(%d)"
+    ", handle varchar(%d)"
+    ", label varchar(%d)"
+    ")", Fi[i]->table, DXF_BUF_SIZE, DXF_BUF_SIZE, DXF_BUF_SIZE, DXF_BUF_SIZE);
+    }    
+    
     db_set_string(&sql, buf);
 
     if (db_execute_immediate(driver, &sql) != DB_OK)
@@ -221,7 +263,7 @@
 
     if (db_grant_on_table
  (driver, Fi[i]->table, DB_PRIV_SELECT, DB_GROUP | DB_PUBLIC) != DB_OK)
- G_fatal_error(_("Unable to grant privileges on table <%s>"),
+ G_fatal_error(_("Unable to grant privileges on table <%s>"),
       Fi[i]->table);
     if (db_create_index2(driver, Fi[i]->table, Fi[i]->key) != DB_OK)
  G_warning(_("Unable to create index for table <%s>, key <%s>"),

_______________________________________________
grass-dev mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/grass-dev
GRASS GIS

Re: [GRASS GIS] #550: v.to.3d: column name case sensitive

Reply Threaded More More options
Print post
Permalink
In reply to this post by GRASS GIS
#550: v.to.3d: column name case sensitive
---------------------+------------------------------------------------------
  Reporter:  hamish  |       Owner:  [hidden email]
      Type:  defect  |      Status:  new                      
  Priority:  minor   |   Milestone:  6.4.0                    
 Component:  Vector  |     Version:  svn-develbranch6        
Resolution:          |    Keywords:  v.to.3d                  
  Platform:  Linux   |         Cpu:  x86-32                  
---------------------+------------------------------------------------------
Comment (by martinl):

 Replying to [ticket:550 hamish]:
 > also that failure left an empty map behind.

 Fixed in r38297.

 Martin

--
Ticket URL: <http://trac.osgeo.org/grass/ticket/550#comment:1>
GRASS GIS <http://grass.osgeo.org>

_______________________________________________
grass-dev mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/grass-dev
GRASS GIS

Re: [GRASS GIS] #550: v.to.3d: column name case sensitive

Reply Threaded More More options
Print post
Permalink
In reply to this post by GRASS GIS
#550: v.to.3d: column name case sensitive
---------------------+------------------------------------------------------
  Reporter:  hamish  |       Owner:  [hidden email]
      Type:  defect  |      Status:  new                      
  Priority:  minor   |   Milestone:  6.4.0                    
 Component:  Vector  |     Version:  svn-develbranch6        
Resolution:          |    Keywords:  v.to.3d                  
  Platform:  Linux   |         Cpu:  x86-32                  
---------------------+------------------------------------------------------
Comment (by martinl):

 Replying to [ticket:550 hamish]:
 > It needed to see 'column=ELEVATION'. G_strcasecmp() or tolower() needed?

 It seems to be related to the db drivers, not v.to.3d.

--
Ticket URL: <http://trac.osgeo.org/grass/ticket/550#comment:2>
GRASS GIS <http://grass.osgeo.org>

_______________________________________________
grass-dev mailing list
[hidden email]
http://lists.osgeo.org/mailman/listinfo/grass-dev