概念:
簡單要素類是相同類型簡單要素的集合;是要素分類的概念性表示;是一 種描述地理要素的格式分類。
簡單要素(SFeature):
1.真實世界中的地理對象在地圖上的表示;
2.簡單要素具有幾何和屬性。
簡單要素類(SFeatureCls ):
1.簡單要素類是相同類型簡單要素的集合;
2.簡單要素分類的概念性表示;
3.一種描述地理要素的格式分類;
4.在地理數據庫中具有幾何信息的對象類。
簡單要素類對象接口關係圖
簡單要素類基本操作
組件
mc_basObj7Lib
基本對象定義及管理組件,提供了大量基本對象的定義,比如要素、屬性結構、屬性等。
mc_basXcls7Lib
矢量空間數據管理組件,提供了基本的類和數據集以及相關對象的定義及操作。
注意:在對空間數據進行操作時,必須對以上兩個組件添加引用。
using mc_basObj7Lib;
using mc_basXcls7Lib;
簡單要素類接口:mcSFeatureCls
-
如何打開一個簡單要素類?
第一步:連接數據源:
GDBSvr.Connect("MapGislocal", "","");
第二步:打開數據庫:
GDB = GDBSvr.get_gdb("DevelopDB");//DevelopDB爲數據庫名字
第三步:打開簡單要素類:
SFeatureCls =GDB.get_XClass(meXClsType.meXSFCls) as mcSFeatureCls;
SFeatureCls.Open("Ku6_1s.wl",0); // Ku6_1s.wl爲簡單要素類名稱 -
如何添加一個點簡單要素類?
第一步:連接數據源:
GDBSvr.Connect("MapGislocal", "","");
第二步:打開數據庫:
GDB = GDBSvr.get_gdb("DevelopDB");//DevelopDB爲數據庫名字
第三步:創建一個點簡單要素類
SFeatureCls= GDB.get_XClass(meXClsType.meXSFCls) as mcSFeatureCls;
SFeatureCls.Open("Ku6_1s.wl",0);第四步:構造點幾何類型
Dot.x = 200;Dot.y = 200;
GeoPoints.Append(Dot);第五步:添加點簡單要素類
SFeatureCls.Append(GeoPoints,null, null);
注意:
SFeatureCls.Append( IGeometry geom,mcRecord rcd,IGeomInfo inf)
該方法可以添加點、線、面三種類型的簡單要素類;
第一個參數:幾何形態:點、線、面 ;
第二個參數:屬性記錄 ;
第三個參數:幾何信息(顏色、大小等) 。
前面我們在打開一個點簡單要素類時只設置了第一個參數,如果想要給添加的簡單要素類增加屬性記錄和設置幾何信息,可以通過第二個和第三個參數來實現。
-
如何對簡單要素類進行查詢?
注意:
在MapGISK9中,只用一個方法——Select就可以實現所有常見的查詢功能,是以前版本中的AttSelect、PntSelect、RectSelect、RegSelect等方法的濃縮。此方法繼承了以前
空間查詢的所有思想,並通過與查詢接口IQueryDef 的聯合使用發揮強大的查詢功能。
SFeatureCls.Select( mcQueryDef def, out mcRecordSet rcd );
第一個參數:查詢定義接口,通過對該接口的屬性進行設置可以進行任何查詢;
第二個參數:查詢出的結果集 ;
例如:
mcQueryDef QueryDef = newmcQueryDef();
mcRecordSet RecordSet = null;
//設置屬性查詢條件
QueryDef.Filter = "id>500";
SFeatureCls.Select(QueryDef, out RecordSet);
-
如何顯示一個簡單要素類?
第一步:連接控件
axMapXView1.WorkSpace= axMxWorkSpace1.ToInterface;
第二步:打開簡單要素類
參照"1.如何打開一個簡單要素類?"
第三步:調用XDisplay接口將簡單要素類顯示在MapXView中
Display= axMapXView1.Display;
Display.DisplayXCls(SFeatureCls,RecordSet );
注意:
Display.DisplayXCls( IBasClspXCls, mcRecordSet pXSet)
該方法有兩個參數。
第一個參數傳入類對象(簡單要素類、註記類等);
第二個參數傳入一個記錄集,這個記錄集是對前面的類對象進行查詢得來的。
此方法的意義在於對查詢出來的記錄集中的對象進行顯示。
如果想要顯示所有的對象,結果集設置爲null即可:Display.DisplayXCls(SFeatureCls, null);
以下爲代碼爲Objects參考手冊中DisplayXCls的示例代碼。)
using mc_basXcls7Lib;
using mc_basObj7Lib;
using mapXBase;
//變量定義
mcGDBServer GDBSvr = null; //地理數據庫服務器
mcGDataBase GDB = null; //地理數據庫
mcSFeatureCls SCls = null;
mcRect Rect = null;
mcRect Rect1 = null;
mcQueryDef QueryDef = null;
mcRecordSet RecordSet = null;
IBasCls BasCls = null;
IXDisplay Display = null;
//變量初始化
GDBSvr = new mcGDBServer();
QueryDef = new mcQueryDef();
Rect = new mcRect();
Rect1 = new mcRect();
//連接數據源,打開數據庫
GDBSvr.Connect("MapGislocal", "", "");
GDB = GDBSvr.get_gdb("DevelopDB");
//打開簡單要素類
BasCls = GDB.get_XClass(meXClsType.meXSFCls);
SCls = BasCls as mcSFeatureCls;
SCls.Open("Ku6_1s.wl", 0);
//設置矩形範圍
Rect.xmax = 300;
Rect.xmin = 100;
Rect.ymax = 300;
Rect.ymin = 100;
//空間查詢
QueryDef.set_rect(Rect,meSpaQueryMode.meModeContain);
SCls.Select(QueryDef,out RecordSet);
Display = axMapXView1.Display;
if (Display != null)
{
//獲得mapxview的窗口範圍
Rect1.xmin = 0;
Rect1.ymin = 0;
Rect1.xmax = axMapXView1.Width;
Rect1.ymax = axMapXView1.Height;
//設置設備座標
Display.Transformation.DeviceRect= Rect1;
//設置地圖視圖顯示的邏輯範圍
Display.Transformation.DispRect = SCls.Range;
//設置地圖的邏輯範圍。
Display.Transformation.MapRange = SCls.Range;
//顯示記錄集
Display.StartDraw();
Display.DisplayXCls(SCls, RecordSet);
Display.FinishDraw();
}
//關閉類,數據庫,斷開數據源連接
SCls.Close();
GDB.Close();
GDBServer.DisConnect();