[mapserver-dev] Error accessing Shape files w/noattributes
Howard Butler
hobu.inc at gmail.com
Fri Oct 2 23:16:22 EDT 2009
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
More information about the mapserver-dev
mailing list