Shapefile field problem
Abe Gillespie
agillesp at VT.EDU
Tue Dec 7 08:54:43 PST 2004
I do appreciate the help, but I'm not looking for an "external to
MapServer" way of getting access to my DBF field values. I just use my
PHP script to *reveal* problematic shapefile fields. When there is a
problem it's unusable to MapServer! I.e.: I can't use the field for
labelling.
-Abe
On Dec 7, 2004, at 11:27 AM, Ryan, Adam wrote:
> Abe,
>
> Here's a routine I use to get the header information (field info) from
> a dbf
> file.
>
> // ========== iDbf_fields ==============
> // $f is a dbf file path, returns an array of field arrays
> function iDbf_fields($f){
> $h = fopen($f,"rb");
> $a =
> unpack("cversion/cyy/cmm/cdd/inumrecs/sheadsize/
> srecsize",fread($h,12));
> fread($h,20); //skip some reserved space
> for($i=0;$i<($a["headsize"]-33)/32;$i++){
> $fa = array();
> $fname = trim(fread($h,11));
> $fa["type"] = fread($h,1);
> fread($h,4);
> $fa = array_merge($fa,unpack("Clen/Cpre",fread($h,2)));
> fread($h,14);
> $flds[$fname] = $fa;
> }
> fclose($h);
> return $flds;
> }
>
> When I generate a result table I'll go through the array like this:
> ($so is
> the shape Object)
>
> foreach($flds as $fname => $fA){
> $val = $so->values[$fname];
> if ($val==null)$val=" ";
> $val = str_replace(" ","
> ",$val);
> if ($fA["type"]=="D"){$val =
> substr($val,4,2)."-".substr($val,6,2)."-".substr($val,0,4);}
> echo "<td>$val</td>";}
> }
>
>
> Cheers to all,
>
> Adam
>
>> -----Original Message-----
>> From: Abe Gillespie [mailto:agillesp at VT.EDU]
>> Sent: Monday, December 06, 2004 5:14 PM
>> To: MAPSERVER-USERS at LISTS.UMN.EDU
>> Subject: Re: [UMN_MAPSERVER-USERS] Shapefile field problem
>>
>>
>> It's a regular shapefile. I think I've mostly narrowed it
>> down. It seems to me (though I may be completely off) that
>> MapServer loads the first record of the DBF in order to get
>> the field definitions. If the first record has a string
>> field and the value is zero length it won't give me the field
>> (though the field count is always correct). In addition, it
>> won't give me any fields after that either. If, however, I
>> make sure that field has some value (a dash, an "x",
>> whatever) then the field definition will come in correctly.
>> I still haven't narrowed down a problematic number field
>> though. Mind you, this is all done in MapServer PHP v. 4.2.0.
>>
>> -Abe
>>
>> On Dec 6, 2004, at 6:15 PM, Daniel Morissette wrote:
>>
>>> Abe Gillespie wrote:
>>>> A good amount of fields aren't showing up in MapServer for
>> me. I use
>>>> the following PHP script to dump out all layers and their
>> fields for
>>>> debugging. Does MapServer have problems with certain data
>> types or
>>>> certain values in a row?
>>>>
>>>
>>> Are you using a tiled shapefile layer or is this a regular
>> shapefile
>>> layer?
>>>
>>> --
>>> ------------------------------------------------------------
>>> Daniel Morissette dmorissette at dmsolutions.ca
>>> DM Solutions Group http://www.dmsolutions.ca/
>>> ------------------------------------------------------------
>>>
>>
>
More information about the MapServer-users
mailing list