[postgis-users] (shp,dbf) export and field (type,length) problem

Lionel Bargeot l.bargeot at educagri.fr
Wed Jan 26 07:07:44 PST 2005


Hi all,

I need to tune field types in a dbf output file.
I've just tryed with the two utilities :
- pgsql2shp
- ogr2ogr

I appologize in advance, but my mail is very long.

ogr2ogr is a better solution for me because it accepts a sql query to 
export my data and could avoide me a temporary table creation in my 
database.
But I can't obtain what I need with those utilities. Field length and 
field types in my dbf file are quiet different form my data in the 
database. I've tried a simple output with pgsql2shp and multiple output 
with ogr2ogr using type casting in a query.

In my database, my table look like this :

form=# \d tb_exemple

           Table «public.tb_exemple»

   Colonne    |      Type      | Modificateurs

--------------+----------------+---------------

 ogc_fid      | integer        |

 wkb_geometry | geometry       |

 objectid     | numeric(9,0)   |

 numero       | numeric(4,0)   |

 other_id     | character(9)   |

 id_ilot      | character(10)  |

 an_area      | numeric(19,11) |



----------------------
With pgsql2shp :
----------------------
pgsql2shp -f temp/test.shp -h localhost -g wkb_geometry form tb_exemple

dbfdump -i temp/test.dbf
Filename:       temp/test.dbf
Version:        0x03 (ver. 3)
Num of records: 2
Header length:  225
Record length:  132
Last change:    1995/7/26
Num fields:     6
Field info:

Num     Name            Type    Len     Decimal

1.      OGC_FID         N       16      0

2.      OBJECTID        N       32      10

3.      NUMERO          N       32      10

4.      OTHER_ID        C       9       0

5.      ID_ILOT         C       10      0

6.      AN_AREA         N       32      10

You can understand that dbf file will be to large.
----------------------
With ogr2ogr :
----------------------
simple export :
----------------------
ogr2ogr -f "ESRI Shapefile" temp  PG:"dbname=form user=lionel" -nln test 
-sql "SELECT * from tb_exemple"
dbfdump -i temp/test.dbf
...
Field info:

Num     Name            Type    Len     Decimal

1.      OBJECTID        C       80      0

2.      NUMERO          C       80      0

3.      OTHER_ID        C       80      0

4.      ID_ILOT         C       80      0

5.      AN_AREA         C       80      0

to large for me
------------------------
export with type cast in a query
------------------------
ogr2ogr -f "ESRI Shapefile" temp  PG:"dbname=form user=lionel" -nln test 
-sql "SELECT objectid::smallint, numero::int2, an_area, wkb_geometry 
from tb_exemple";
dbfdump -i temp/test.dbf
...
Field info:
Num     Name            Type    Len     Decimal
1.      OBJECTID        N       11      0
2.      NUMERO          N       11      0
3.      AN_AREA         C       80      0


Well, what I can see, is
- if I have an integer input (size 2, 4 or 8), output will be a 11 
numeric long type
- if I have a numeric input (size don't care), output will be a 80 
character long type

Well, my questions are :
- has anyone already encountered this problem
- is there an option in pgsql2shp or ogr2ogr I haven't seen
- is there a known way to obtain
    4 byte N types in a DBF for a numeric(4,0) in the database
    (19,11) Float types in a DBF for a numeric(19,11) in the db
    etc ....

Thank you very much for reading,


Lionel

-- 
Chargé de mission Sols et Territoire de Bourgogne
CNERTA-ENESAD, 2 rue champs-prevois, batiment grand-champs, 21000 Dijon
03.80.77.28.49
http://www.igcs-stb.org/






More information about the postgis-users mailing list