Shapelib是一个不错的库,不过前几日在使用中遇到个小问题。
在获取字段信息时,它的返回值有点问题。对于111560000137715这样的一个值,无论是整形还是双精度,它都会返回一个FTInteger。从源码中可以看出它是这么来做的
--------------------------------
else if( psDBF->pachFieldType[iField] == 'N'
|| psDBF->pachFieldType[iField] == 'F'
|| psDBF->pachFieldType[iField] == 'D' )
{
if( psDBF->panFieldDecimals[iField] > 0 )
return( FTDouble );
else
return( FTInteger );
---------------------------------
对于数值型、浮点型和日期型,只要没找到小数点就返回整形(FTInteger),这显然无法满足前面的情况。
解决的方法:
1、在程序中避免通过DBFGetFieldInfo()来确定读取什么类型的属性,对于这些特殊字段,直接指定读取方法。
2、在DBFGetFieldInfo()中修改,做一点调整。
------------------------------------------
else if( psDBF->pachFieldType[iField] == 'N'
|| psDBF->pachFieldType[iField] == 'F'
|| psDBF->pachFieldType[iField] == 'D' )
{
if( psDBF->panFieldDecimals[iField] > 0 || psDBF->panFieldSize[iField] > 4)
return( FTDouble );
else
return( FTInteger );
------------------------------------------
为了安全,用了4,但Frank说用10可能合理些。安全第一,还是先用4吧,呵呵。
Frank说以后会支持64位整型,但要等很长一段时间。没关系,只要有更新就总是好事情,等吧:) (本文已被浏览 次) | | |