GDAL读写矢量数据
GDAL矢量下读写库,实际使用的是OGR库,因此实际是OGR操作,OGR应用非常普遍。
- 需求
需要生成MapInfo格式的TAB文件或者交换格式文件,以及Shape文件
- 下载编译GDAL
去网上下载,如果需要编译为windows 64位,需要修改nmake.opt,搜索“64”,去掉前面的#即可。WIN64=YES。
无论在Linux下,还是windows下,基本命令行下,输入1,2个命令即OK。
- 测试现有的支持哪些数据格式
在C/C++下,加入如下代码
#include "gdal.h" #include "ogrsf_frmts.h" int main(int argc,char * argv[]) { //OGRRegisterAll(); //::RegisterOGRShape(); ::RegisterOGRTAB(); //::RegisterOGRMIF(); OGRSFDriverRegistrar *registrar = OGRSFDriverRegistrar::GetRegistrar(); int count =registrar->GetDriverCount(); printf("%d\n",count); for(int i=0;i<count;i++){ printf("%s\n",registrar->GetDriver(i)->GetName()); } OGRSFDriver *pOGRDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName("Mapinfo File"); if (pOGRDriver == NULL) { printf("error"); } getchar(); }
上面用于显示OGR库当前支持的所有格式名称。
GDALAllRegister();//注册所有支持的格式,因为只关系矢量数据,那么其实等价于OGRRegisterAll();
- 读写相关格式文件
以MapInfo 为例,可以使用
RegisterOGRTAB();//注册mapinfo文件
也可以使用如下常见方式:
OGRRegisterAll(); OGRSFDriver *pOGRDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName("Mapinfo File");//注意这里面的字符串,就是在上面测试中显示的字符串
下面读写过程,GDAL官方网站很多,最容易出错的是上面GetDriverByName();这里输入的字符串,比如网上有人说TAB格式用, Mapinfo Tab,Mapinfo Mif/Mid等,都是错误的,只要用上面的代码测试下,就知道当前系统安装了哪些格式驱动。
相关推荐
CYJ0go 2020-02-14
comtop0 2019-06-28
统一开发环境UDE 2015-06-08
luoyuqihuan 2015-06-08
knijiokm 2015-04-28
Java填坑之路 2019-02-14
尤朋 2019-01-30
草丛中枪 2019-01-21
云端笔记 2019-01-21
Dickzeng 2019-04-26
Leonardwang 2017-02-12
zhushenghan 2012-01-02
Juleen0 2018-10-18
无人机中的城堡 2018-03-31
无极领域 2018-03-17