[gdal-dev] Odd 1.7.3 <> 1.8.0 trunk OGR difference (shapefile driver?)

Roger Bivand Roger.Bivand at nhh.no
Tue Dec 14 13:41:42 EST 2010


Hi,

Agus Lobo has drawn my attention to an oddity (here using GADM Tunisia 
shapefiles) introduced between 1.7.3 and current(ish) trunk:

$ ogr2ogr --version
GDAL 1.7.3, released 2010/11/10
$ ls TUN*
TUN_adm0.dbf  TUN_adm0.shp  TUN_adm1.sbn  TUN_adm2.dbf  TUN_adm2.shp
TUN_adm0.prj  TUN_adm0.shx  TUN_adm1.sbx  TUN_adm2.prj  TUN_adm2.shx
TUN_adm0.sbn  TUN_adm1.dbf  TUN_adm1.shp  TUN_adm2.sbn  TUN_adm.zip
TUN_adm0.sbx  TUN_adm1.prj  TUN_adm1.shx  TUN_adm2.sbx  TUN_readme.txt
$ ogr2ogr -f "ESRI Shapefile" TUN TUN_adm0.shp -nln TUN
$ ls TUN*
TUN_adm0.dbf  TUN_adm0.shp  TUN_adm1.sbn  TUN_adm2.dbf  TUN_adm2.shp
TUN_adm0.prj  TUN_adm0.shx  TUN_adm1.sbx  TUN_adm2.prj  TUN_adm2.shx
TUN_adm0.sbn  TUN_adm1.dbf  TUN_adm1.shp  TUN_adm2.sbn  TUN_adm.zip
TUN_adm0.sbx  TUN_adm1.prj  TUN_adm1.shx  TUN_adm2.sbx  TUN_readme.txt

TUN:
TUN.dbf  TUN.prj  TUN.shp  TUN.shx

where:

ogr2ogr -f "ESRI Shapefile" TUN TUN_adm0.shp -nln TUN

creates a new DSN (TUN), and populates it with files. But in 1.8.0 (SVN 
21235):

$ rm -rf TUN TUN.*
# swap GDAL versions
$ ogr2ogr --version
GDAL 1.8dev, released 2010/01/19
$ ogr2ogr --version
GDAL 1.8dev, released 2010/01/19
[rsb at reclus2 bigshape]$ ogr2ogr -f "ESRI Shapefile" TUN TUN_adm0.shp -nln 
TUN
[rsb at reclus2 bigshape]$ ls TUN*
TUN_adm0.dbf  TUN_adm0.shx  TUN_adm1.shp  TUN_adm2.sbx  TUN.prj
TUN_adm0.prj  TUN_adm1.dbf  TUN_adm1.shx  TUN_adm2.shp  TUN_readme.txt
TUN_adm0.sbn  TUN_adm1.prj  TUN_adm2.dbf  TUN_adm2.shx  TUN.shp
TUN_adm0.sbx  TUN_adm1.sbn  TUN_adm2.prj  TUN_adm.zip   TUN.shx
TUN_adm0.shp  TUN_adm1.sbx  TUN_adm2.sbn  TUN.dbf

TUN:

it creates the new DSN directory, but does not put the files inside it, 
but rather in the working directory. If the new DSN and layer have 
different names:

$ rm -rf TUN TUN.*
$ ls TUN*
$ ogr2ogr -f "ESRI Shapefile" TUN TUN_adm0.shp -nln TUN0
$ ls TUN*

it works. This also affects the R OGR interface, but it can be reproduced 
with ogr2ogr, so it is inside OGR somewhere. Is the change intended?

With a different driver, it also works, so maybe it is in shape:

$ rm -rf TUN TUN.*
$ ogr2ogr -f "Mapinfo File" TUN TUN_adm0.shp -nln TUN
$ ls TUN*
TUN_adm0.dbf  TUN_adm0.shp  TUN_adm1.sbn  TUN_adm2.dbf  TUN_adm2.shp
TUN_adm0.prj  TUN_adm0.shx  TUN_adm1.sbx  TUN_adm2.prj  TUN_adm2.shx
TUN_adm0.sbn  TUN_adm1.dbf  TUN_adm1.shp  TUN_adm2.sbn  TUN_adm.zip
TUN_adm0.sbx  TUN_adm1.prj  TUN_adm1.shx  TUN_adm2.sbx  TUN_readme.txt

TUN:
TUN.dat  TUN.id  TUN.map  TUN.tab

as expected. Have the changes "to improve the user Shapefile experience" 
got overenthusiastic, maybe? This breaks existing behaviour, so needs 
justification if sustained. It looks like line 509 in

trunk/gdal/ogr/ogrsf_frmts/shape/ogrshapedatasource.cpp

with:

EQUAL(CPLGetBasename(pszName), pszLayerName))

being the smoking gun change? The DSN is TUN, not TUN.shp, but is being 
mistaken for TUN.shp, isn't it?

Best wishes,

Roger

-- 
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no



More information about the gdal-dev mailing list