OGR:GUID赋值

void GetGUID(char *pBuffer,unsigned long Size)
{
 GUID guid;
 if ( S_OK == ::CoCreateGuid( &guid ) )
 {  _snprintf(pBuffer, Size
 , "%08X%04X%04x%02X%02X%02X%02X%02X%02X%02X%02X"
 , guid.Data1
 , guid.Data2
 , guid.Data3
 , guid.Data4[0], guid.Data4[1]
 , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]
 , guid.Data4[6], guid.Data4[7]);
 }
 return;
}

 

//注册TAB格式的驱动
 RegisterOGRTAB();

 
 //从容器中获取需要处理的tab数据,容器中存储的是所有要处理数据的完整路径
 for ( set< string >::iterator it = FileAllPath.setFileAllPath.begin(); it != FileAllPath.setFileAllPath.end(); ++it )
 {
   string SingleFilePath = *it;//从容器中取出数据,即D:/text/绿地.tab
   string LayerNameContainExtend = SingleFilePath.substr( SingleFilePath.rfind("//") + 1 );//获取正在处理的图层名包含扩展
   string LayerName = LayerNameContainExtend.substr( 0, LayerNameContainExtend.find( "." )  );//获取正在处理的图层名不包含扩展名

 

   //获取数据源
   OGRDataSource *LineDS;
   LineDS = OGRSFDriverRegistrar::Open( SingleFilePath.c_str(), FALSE );
   if ( LineDS == NULL )
   {
    cout << "数据源获取失败" << endl;
    cin.get();
    exit( 1 );--------------注意exit、continue、return的作用------------出错退出之前要先关闭打开的文件,可以用continue处理下一条数据,Exit表示退出当前程序
   }

 

   //根据处理的图层名读取图层
   OGRLayer *poLayer;
   poLayer = LineDS->GetLayerByName( LayerName.c_str() );//从数据源中获取图层----------------------特殊文件名的情况有问题,带版本号的情况
   if (PoLayer==NULL) //时时监控指针所指向的值是否合法
   {

     continue;
   }
   //读取正在处理图层中的记录
   OGRFeature *poFeature;
   poLayer->ResetReading();
   //判断要素是否为空,空则重新开始循环
   if ( poLayer->GetFeatureCount()  == 0 )
   {
    continue;//核实countinue/return/exit的三个作用,coutinue是不是返回最近的一个循环语句
   }
   char strNewGuid[32];
   while( ( poFeature = poLayer->GetNextFeature() ) != NULL )
   {
    string GuidValue = poFeature->GetFieldAsString( "GUID" );
    string FidValue = poFeature->GetFieldAsString( "FID" );//此处的变量没有什么作用于,主要是为了凑合map容器的第二个变量------------用set可以达到这个目的
    //char strNewGuid[32] = {'/0'};//存储改后的GUID值,这样赋值的方式不正确,只给了数组的第0位赋了值。
    memset(strNewGuid,0,32);
    //判断GUID的正确性,不正确的则要重新赋值,把赋完值后的GUID存入到map容器中
    if ( strlen( GuidValue.c_str() ) != 32 ||  GuidValue == "" )//判断GUID的值是否正确---------------------第二个判断条件已经包含在第一个里面了
    {
     GetGUID( strNewGuid, 32 );
     poFeature -> SetField( "GUID", strNewGuid );
     GuidValue = poFeature->GetFieldAsString( "GUID" );
    }
    //插入GUID到容器中
    while( mapGuid.insert( make_pair( GuidValue, FidValue ) ).second == FALSE )----------------------???????????没看明白,注意代码的清晰和简洁,循环的含义是什么?
    {
     char strNewGuid[32] = {'/0'};-----------------------------定义放到循环外面,初始化最好用memset(),其实在上面已经定义了,不需要重复定义了
     GetGUID( strNewGuid, 32 );
     poFeature->SetField( "GUID", strNewGuid ); 
     GuidValue = poFeature->GetFieldAsString( "GUID" );
    }
    
    //把要素插入到set容器中
    vecFeature.push_back( poFeature );
   }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值