gdal 读取点要素_用GDAL/OGR库读写mif和tab文件 | 学步园

本人log中所有未注明转载的文章和blog一般为本人原创或整理加工,

原创文章版权本人(lonefox)所有;转载文章版权归原作者所有;

欢迎转载,但请注明出处,保留作者和版权信息。

===================================

最近项目中使用GDAL/OGR库读写mif和tab文件, 经过几天的折腾,积累了点点经验,且记之.

1. OGRSFDriverRegistrar::Open(Path, FALSE);只能读文件

对于OGRSFDriverRegistrar::Open方法, ogr内置的mif/TAB读写库MITAB是不支持该方法的更新的,看下面的MITAB源码:

OGRDataSource *OGRTABDriver::Open(constchar* pszFilename,

intbUpdate )

{

OGRTABDataSource    *poDS;

if( bUpdate )//请注意这儿,如果bUpdate为TRUE,则直接返回NULL

{

returnNULL;

}

//other code

}

OGRDataSource *OGRTABDriver::Open( const char * pszFilename,

int bUpdate )

{

OGRTABDataSource *poDS;

if( bUpdate )//请注意这儿,如果bUpdate为TRUE,则直接返回NULL

{

return NULL;

}

//other code

}

再深入源码,你会发现,通过Open方法传给IMapInfoFile类访问文件的方式是TABRead,而非TABWrite

也许你会说"这是OGRTABDriver的方法, 可以看看OGRMIFDriver的方法?", 遗憾, 我们只能用 RegisterOGRTAB(); 注册mif和tab通用的驱动,RegisterOGRMIF();是一个只有定义而没有函数实现的美丽谎言, 不知道OGR库留着这个定义的目的何在。也不存在OGRMIFDriver,OGRTABDriver通吃mif和tab文件。这也是我们的第二点。

2.只使用RegisterOGRTAB();注册tab/MIF文件读写驱动

原因上面已经提过。单凭RegisterOGRTAB();已足够。

mif和tab文件的读取都是通过Open方法,MITAB库内部会调用SmartOpen方法区分是mif/mid后缀或是tab后缀。

3.写mif/tab文件的方法

OGRSFDriver *pDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName("MapInfo File");

OGRDataSource *pDSTAB = pDriver->CreateDataSource(strTabPath);//创建一个文件,根据扩展名自动判断是创建mif文件或tab文件

lonefox的解释: MITAB库在实现CreateDataS

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值