添加图层,并设置属性值的代码

本文介绍了一个用于地图应用程序中添加基本资源的功能实现。该工具允许用户通过点击地图来指定资源的位置,并将这些信息保存到数据库中。同时,文章还详细描述了如何创建新的图层和数据集,以及如何在图层上添加符号化的特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void CAddBasicResourceTool::OnMouseDownMap(short Button, short Shift, float X, float Y)
{
 
 CMapXFeature ftr;
 
 CMapXStyle style;

 CMapXLayerInfo LayerInfo ;
 
 CMapXFields MapFields ;

 CMapXDataset ds ;

 CMapXLayer layer ;

 int C_ID ;

 COleVariant VT_Layer ;

 TB_ResourceShare * tb_ResourceShare = NULL ;
 
 if ( !m_pView ) return ;
 
 float screenX,screenY ;
 double mapX,mapY ;
 
 screenX = X;
 
 screenY = Y; 
 
 CHtMapX & m_MapX = m_pView->GetMapX() ;
 
 
 if ( m_MapX.GetCurrentTool() == MAP_ADDBASICRESOURCE_TOOL ) {
   
  m_MapX.ConvertCoord(&screenX,&screenY,&mapX,&mapY,miScreenToMap);

  CAddResourceDlg dlgAddResource(m_pView) ;

  if ( dlgAddResource.DoModal() == IDC_BTN_SUBMIT ) {
   
   //ÔÚÕâÀïÏòÊý¾Ý¿âÀïÃæÌí¼ÓÊý¾Ý
   tb_ResourceShare = dlgAddResource.GetResourceShare() ;
   tb_ResourceShare->F_Coord_X = mapX ;
   tb_ResourceShare->F_Coord_Y = mapY ;

   CMainFrame * m_pMainFrame = (CMainFrame *)AfxGetMainWnd() ;

   if ( ( C_ID = m_pMainFrame->g_AdoTool.AddOneRecord( *tb_ResourceShare ) ) < 0 ) {
    MessageBox( NULL , "Ôö¼Óʧ°Ü" , "",MB_OK);
    return;
   }
   TRACE("Äú½«ÒªÌí¼ÓÒ»¸öµã");
   
  }
  else
   return ;

 
 try{
   
   if (ftr.CreateDispatch(ftr.GetClsid())){
    
    ftr = m_MapX.GetFeatureFactory().CreateSymbol() ;
    
    style = ftr.GetStyle() ;
    
    style.SetSymbolBitmapName("CAR1-32.BMP");
    
    style.SetSymbolBitmapSize( 32 );
    
    style.SetSymbolBitmapTransparent( TRUE ) ;
    
    ftr.SetStyle( style ) ;
    
    ftr.GetPoint().Set( mapX , mapY ) ;
    
    if ( !m_MapX.LayerExist( LAYER_BASICRESOURCE ) ) {   

     LayerInfo.CreateDispatch( LayerInfo.GetClsid() ) ;
     MapFields.CreateDispatch( MapFields.GetClsid() );
     
     MapFields.AddIntegerField( "C_ID" , TRUE ) ;
     MapFields.AddStringField( "Name" , 32 ) ;
     
     COleVariant vFields;
     vFields.vt = VT_DISPATCH ;
     vFields.pdispVal = MapFields;
     vFields.pdispVal->AddRef();
     
     LayerInfo.SetType( miLayerInfoTypeNewTable );
     LayerInfo.AddParameter("Filespec" , COleVariant(m_pLayerFilePath) );
     LayerInfo.AddParameter("Name" , COleVariant(LAYER_BASICRESOURCE)  );
     LayerInfo.AddParameter("Fields", vFields );
     
     layer = m_MapX.GetLayers().Add( LayerInfo );

     VT_Layer.vt = VT_DISPATCH ;
     VT_Layer.pdispVal = layer ;
     VT_Layer.pdispVal->AddRef();

     ds = m_MapX.GetDatasets().Add( miDataSetLayer , VT_Layer , DS_BASICRESOURCE )  ;
     
     ((CMainFrame *)AfxGetMainWnd())->GetEnargEyeForm()->ListMapxLayers(&m_MapX);
 
    }

    layer = m_MapX.GetLayers().Item( LAYER_BASICRESOURCE ) ;

    layer.SetEditable(TRUE);
    
    VT_Layer.vt = VT_DISPATCH ;
    VT_Layer.pdispVal = layer ;
    VT_Layer.pdispVal->AddRef();

    ds = m_MapX.GetDatasets().Item( DS_BASICRESOURCE )  ;

    CMapXFeature feature = m_MapX.GetLayers().Item( LAYER_BASICRESOURCE ).AddFeature( ftr ) ;
    
    char sCID[10];
    itoa( C_ID , sCID , 10 ) ;

/*    这一种方法也可以,但本人不喜欢

    layer.SetKeyField("C_ID");
    feature.SetKeyValue( sCID ) ;
    feature.Update();

    layer.SetKeyField("Name");
    feature.SetKeyValue( tb_ResourceShare->SV_Name );    
    feature.Update();
*/
    
    COleVariant VTFeature;
    VTFeature.vt = VT_DISPATCH ;
    VTFeature.pdispVal = feature.m_lpDispatch;
    VTFeature.pdispVal->AddRef();

    CMapXRowValues RowValues = ds.GetRowValues( VTFeature ) ;
    RowValues.Item("C_ID").SetValue( COleVariant(sCID) ) ;
    RowValues.Item("Name").SetValue( COleVariant(tb_ResourceShare->SV_Name) ) ;
    feature.Update( TRUE , RowValues );  //这一句很重要,一定要这样写,不然写不进数据
   
   }
  }
  catch(COleDispatchException* e) {
   e->ReportError();
   e->Delete();
  } catch(COleException* e) {
   e->ReportError();
   e->Delete();
  }    
 } 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值