1. 程式人生 > >MapObject控制元件使用之圖層製作

MapObject控制元件使用之圖層製作

MapObject控制元件使用之圖層製作<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

作者:張鬆偉

有些時候將一些固定的資料製作成圖層,可以提高程式的速度,而且使用方便。下面我就將對圖層的製作方法進行一下簡單的說明。

假設我們要將一些經緯度座標用點的方式畫在地圖上,那麼我們首先要有儲存經緯度座標的陣列:m_LonArray, m_LatArray,均為CArray<float,float>型。然後我們在CMyView中增加一些成員變數:

CmoDataConnectionpMoCon

;

CMoTableDescdesc;

CMoMapLayerlayer;

CMoPointm_point;

好了,是為建立新圖層增加一個函式的時候了,在檢視類中增加函式:CreateNewLayer()

BOOL CMyView:: CreateNewLayer ()

{

if (!pMoCon.CreateDispatch(TEXT("MapObjects2.DataConnection")))

return FALSE;

if(!desc.CreateDispatch("MapObjects2.TableDesc"))

return FALSE;

VARIANT vt;

vt.vt = VT_BOOL;

vt.boolVal = VARIANT_FALSE;

pMoCon.SetDatabase((LPCTSTR)"E://Demo//經緯度層");//設定圖層儲存目錄

if(!pMoCon.Connect())

return FALSE;

//設定圖層的欄位個數及屬性,這裡設定兩個,一個為Number,一個為Name。表示點的號碼及名稱。

desc.SetFieldCount(2);

desc.SetFieldType(0,moString);

desc.SetFieldName(0,"Number");

desc.SetFieldLength(0,10);

desc.SetFieldType(1,moString);

desc.SetFieldName(1, "Name");

desc.SetFieldLength(1, 10);

//建立新圖層,設定名稱、型別及欄位。

CmoGeoDataSet geoDataset(pMoCon.AddGeoDataset(“經緯度層”, moShapeTypePoint,

(LPDISPATCH)desc, vt, vt);

if (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer")))

return FALSE;

//設定圖層的記錄集

layer.SetGeoDataset(geoDataset);

CMoRecordset recs(layer.GetRecords());

CMoFields fields(recs.GetFields());

for(int i=0; i<m_LonArray.GetSize(); i++)

{

recs.AddNew();

m_point.SetX(m_ LonArray.GetAt(i));

m_point.SetY(m_ LatArray.GetAt(i));

SetValue(fields, "Shape",m_point);

SetValue(fields, "Number",m_Number.GetAt(i));//需定義CStringArray m_Number

SetValue(fields, "Name", m_Chname.GetAt(i));//需定義CStrignArray m_Name

recs.Update();

}

//設定點的顏色,並加入地圖。

layer.GetSymbol().SetColor(moLightYellow);

CMoLayers layers(m_map.GetLayers());

layers.Add(layer);

return TRUE;

}

好了,呼叫一下試試效果吧。

本人水平用限,歡迎大家批評指正。