mapx 添加新的永久圖層

 
MapXLayerInfo LayerInfo ;

CMapXFields MapFields ;
    
    
try{

        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 );  
//如果是miLayerInfoTypeTemp,則爲臨時圖層
        LayerInfo.AddParameter("Filespec" , COleVariant("文件名") );
        LayerInfo.AddParameter(
"Name" , COleVariant("圖層名")  );
        LayerInfo.AddParameter(
"Fields", vFields );

        m_ctrlMapX.GetLayers().Add( LayerInfo );
        
    }

    
catch(COleDispatchException* e) {
        e
->ReportError();
        e
->Delete();
    }
 catch(COleException* e) {
        e
->ReportError();
        e
->Delete();
    }
    

說明:來自參考手冊。

miLayerInfoTypeNewTable
參數      /     是否必須/ 說明
FileSpec 是  String:用於新表的 .tab 文件的名稱。
Name      否  String:添加的圖層的名稱。
                                     默認(如未指定)爲 LayerX,其中 X 等於當前在地圖中使用的圖層數+ 1。
Fields      否  Fields 集合:指定表將擁有的列。
                                    圖元如果沒有字段則爲是。
Features 集合:指定用於填充表的列。默認爲 none。
OverwriteFile 否String: 如果爲 1,則由 FileSpec 參數指定的文件將被覆蓋(如果當前存在)。
                                            如果爲 0,則將不覆蓋該文件。
                                            注:所有非 0 的值均將強制覆蓋該文件。

對於  miLayerInfoTypeNewTable:
• 必須使用 Fields 集合或 Features 集合,兩者均可使用。
• 如果只傳遞 Features 集合,則 MapX 將嘗試從 Features 所源自的表來獲取列信息。
• 如果傳遞 Features 和 Fields 集合,則 MapX 將嘗試從 Features 所源自的表來獲取列信息。
• 如果只傳遞 Fields 集合,則檢查用於 miDatasetLayer 類型的 Dataset。在發現之後,則對照miDatasetLayer 中的列來檢查傳入的 Fields。如果 miDatasetLayer Dataset 沒有出現,則只在傳遞入的 Fields 信息上創建表。
• Fields 默認應該爲 Features 集合的源表中發現的列。
發佈了13 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章