欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏开源GIS → 正文
Shapelib的小问题
08-09-11 10:07:44 作者:nilarcs 出处:http://www.gissky.net/blog/user1/1069
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位整型,但要等很长一段时间。没关系,只要有更新就总是好事情,等吧:)
(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    无相关新闻

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号