[GRASS5] GRASS5.1: trouble importing shape file with v.in.ogr (+ g.rename vectors)

Glynn Clements glynn.clements at virgin.net
Thu May 29 05:06:23 EDT 2003


Radim Blazek wrote:

> Here you could realy say: How awful! I cannot rename all OGR
> datasources! Etc.
> The problem here, is the same as with table names for attributes
> (vector names may have characters not allowed in SQL ('.','-').
> Any ideas for name mangling are welcome. Requirements for new name:
> - similar to original
> - simple enough for user
> - using only chars accepted by SQL (for tables and columns)

Change all non-alphanumeric characters to underscores; prepend a
leading underscore if the name starts with a digit.

That satisfies all three stated conditions, although it doesn't
satisfy the (unstated) condition that distinct map names correspond to
distinct table/column names (no collisions).

There are two basic options for avoiding collisions:

1. Add a numeric suffix if the desired name is already in use; keep
incrementing the suffix until no collision occurs.

2. Use a scheme similar to URL-encoding, i.e. each non-alphanumeric
character (including underscores) is replaced by an underscore then
the two hex digits for the character's code.

3. Redefine the syntax of GRASS map names to match SQL; e.g. no case
sensitivity, and either:
a) no non-alphanumeric characters except underscore, or
b) all non-alphanumeric are equivalent (i.e. represented by an
underscore internally, so foo.bar and foo_bar are the same map).

All have disadvantages.

Option 1 is non-deterministic, in the sense that the translation
depends upon which maps already exist; also, you would have to store
the original name somewhere.

Option 2 is messy; particularly given that GRASS map names are
case-sensitive and SQL table/column names aren't, so you would also
have to encode all upper-case characters.

Option 3 means that anyone who wishes to preserve the names of their
existing maps loses.

> > Now I have the next problem:
> >
> > g.rename vect=cp_clean,cp
> > WARNING: Vectors are not supported by g.rename
> >
> > Is there another way to rename vector files in 5.1 ?
> 
> Would it be a problem to do g.copy + g.remove?
> 
> As I mentioned in code:
>     /* Vectors are not supported because I don't know how should work:
>     *  1. Should be all attribute tables renamed?
>     *  2. Should be all attribute tables moved to current default driver/database?
>     *  3. Should be PostGis tables renamed?
>     *  4. Should be PostGis tables moved to current default PostGis database? */

Treat vector maps like reclassed rasters. I.e. a vector map is
basically a file which tells you where to get the actual data from. 
This satisfies the "store the original name somewhere" requirement of
option 1 above.

g.rename would work the same way as for other maps, i.e. it renames
the file/directory.

-- 
Glynn Clements <glynn.clements at virgin.net>




More information about the grass-dev mailing list