[mapserver-dev] Error accessing Shape files w/noattributes

Jim Klassen Jim.Klassen at ci.stpaul.mn.us
Mon Oct 5 17:33:09 EDT 2009


My guess is the example I found came from an AutoDesk product. It isn't a lone shape file, it is a .shp, .shx, .dbf. The catch is the .dbf has no columns in it.

>>> Howard Butler <hobu.inc at gmail.com> 10/02/09 10:26 PM >>>
I don't think ArcView 3.x allows shapefiles without at least on  
attribute column.

On Oct 2, 2009, at 7:23 PM, Paul Ramsey wrote:

> Hrm. :) That's an experiment I haven't seen run. Can you open up a
> lone .shp file with an Arc* tool?
>
> On Fri, Oct 2, 2009 at 12:56 PM, Steve Lime <Steve.Lime at dnr.state.mn.us 
> > wrote:
>> I'll take care of it. Just to confirm, a shapefile with no  
>> attributes is valid according to the ESRI spec. correct?
>>
>> Steve
>>
>>>>> On 10/2/2009 at 1:53 PM, in message  
>>>>> <4AC605C70200004F000144EC at jeckle>, "Jim
>> Klassen" <Jim.Klassen at ci.stpaul.mn.us> wrote:
>>> Sorry for the delay. I didn't see your response until now...  
>>> anyway #3147
>>>
>>>>>> "Steve Lime" <Steve.Lime at dnr.state.mn.us> 09/29/09 10:10 AM >>>
>>> Jim: Create a quick ticket and I'll take care of applying your  
>>> patch tonite.
>>>
>>> Steve
>>>
>>>>>> On 9/28/2009 at 2:38 PM, in message  
>>>>>> <4AC0CA720200004F000142A1 at jeckle>, "Jim
>>> Klassen" <Jim.Klassen at ci.stpaul.mn.us> wrote:
>>>> When I try to access a layer that points to a shape file with no  
>>>> attributes
>>> I
>>>> get the following error...
>>>>
>>>> msDrawMap(): Image handling error. Failed to draw layer named  
>>>> 'CITYOUTLINE'.
>>>
>>>> msGetDBFItems(): DBASE file error. File contains no data.
>>>>
>>>> It looks like this is related to a change introduced with the  
>>>> improved
>>>> algorithm in msLayerWhichItems() in maplayer.c. The problem seems  
>>>> to be how
>>>> lines 385 and 386 are interacting with
>>> msDBFGetItems/msShapeFileLayerGetItems
>>>> in that msShapeFileLayerGetItems is returning MS_FAILURE because
>>>> msDBFGetItems found no items and thus calls msSetError and  
>>>> returns NULL. The
>>>
>>>> line maplayer.c:386 then causes msLayerWhichItems to fail before  
>>>> line 388
>>> can
>>>> say this is an expected condition.
>>>>
>>>> 385  rv = msLayerGetItems(layer);
>>>> 386  if(rv != MS_SUCCESS) return rv;
>>>> 387
>>>> 388  if(layer->numitems == 0) return MS_SUCCESS; /* nothing to do  
>>>> but not an
>>>> error */
>>>>
>>>> The following are the changes I made to mapshape.c (to return  
>>>> MS_SUCCESS)
>>>> and to mapxbase.c to not set an error that isn't an error. The  
>>>> change to
>>>> mapxbase.c may cause issues with tileindexed layers with no  
>>>> attributes in
>>> the
>>>> tileindex shapefile failing without an error message. This  
>>>> depends on what
>>>> the correct behavior is in another place in  
>>>> msTiledSHPLayerGetItems. I think
>>>
>>>> this is for the tileindex not the actual data shapes, and the  
>>>> tileindex does
>>>
>>>> require at least one attribute. If this is true and the  
>>>> mapxbase.c change is
>>>
>>>> kept, an error probably needs to be set in  
>>>> msTiledSHPLayerGetItems if there
>>>> are no items.
>>>>
>>>> Index: mapshape.c
>>>> ===================================================================
>>>> --- mapshape.c       (revision 9354)
>>>> +++ mapshape.c       (working copy)
>>>> @@ -2579,6 +2579,7 @@
>>>>
>>>>    layer->numitems = msDBFGetFieldCount(shpfile->hDBF);
>>>>    layer->items = msDBFGetItems(shpfile->hDBF);
>>>> +  if(layer->numitems == 0) return MS_SUCCESS; /* No items is a  
>>>> valid case */
>>>>    if(!layer->items) return MS_FAILURE;
>>>>
>>>>    return msLayerInitItemInfo(layer);
>>>> Index: mapxbase.c
>>>> ===================================================================
>>>> --- mapxbase.c       (revision 9354)
>>>> +++ mapxbase.c       (working copy)
>>>> @@ -824,7 +824,7 @@
>>>>    char fName[32];
>>>>
>>>>    if((nFields = msDBFGetFieldCount(dbffile)) == 0) {
>>>> -    msSetError(MS_DBFERR, "File contains no data.",  
>>>> "msGetDBFItems()");
>>>> +    /*msSetError(MS_DBFERR, "File contains no data.",  
>>>> "msGetDBFItems()");*/
>>>>      return(NULL);
>>>>    }
>>>>
>>>>
>>>> James Klassen
>>>> Office of Technology and Communications
>>>> 15 West Kellogg Blvd
>>>> Saint Paul, MN 55102
>>>> P: 651-329-8741
>>>> USNG: 15TVK92577674
>>>> ( http://www.stpaul.gov/ )
>>>> Making Saint Paul the Most Livable City in America
>>>> _______________________________________________
>>>> mapserver-dev mailing list
>>>> mapserver-dev at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
>>
>> _______________________________________________
>> mapserver-dev mailing list
>> mapserver-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
>>
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev

_______________________________________________
mapserver-dev mailing list
mapserver-dev at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-dev



More information about the mapserver-dev mailing list