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;
}
好了,呼叫一下試試效果吧。
本人水平用限,歡迎大家批評指正。