MapObject控件使用之图层制作
2004-05-29 15:55
495 查看
MapObject控件使用之图层制作
作者:张松伟
zswking@163.com
有些时候将一些固定的数据制作成图层,可以提高程序的速度,而且使用方便。下面我就将对图层的制作方法进行一下简单的说明。
假设我们要将一些经纬度坐标用点的方式画在地图上,那么我们首先要有保存经纬度坐标的数组:m_LonArray, m_LatArray,均为CArray<float,float>型。然后我们在CMyView中增加一些成员变量:
CmoDataConnection pMoCon;
CMoTableDesc desc;
CMoMapLayer layer;
CMoPoint m_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;
}
好了,调用一下试试效果吧。
本人水平用限,欢迎大家批评指正。
作者:张松伟
zswking@163.com
有些时候将一些固定的数据制作成图层,可以提高程序的速度,而且使用方便。下面我就将对图层的制作方法进行一下简单的说明。
假设我们要将一些经纬度坐标用点的方式画在地图上,那么我们首先要有保存经纬度坐标的数组:m_LonArray, m_LatArray,均为CArray<float,float>型。然后我们在CMyView中增加一些成员变量:
CmoDataConnection pMoCon;
CMoTableDesc desc;
CMoMapLayer layer;
CMoPoint m_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;
}
好了,调用一下试试效果吧。
本人水平用限,欢迎大家批评指正。
相关文章推荐
- MapObject 控件的使用之加入图层(作者/张松伟)
- Android使用shape制作圆形控件及添加弹跳动画
- 使用事件来制作登陆验证控件
- 使用c#制作的一个树形下拉控件
- C# windows service 时间控件使用及安装包制作
- 强悍!使用Flash和Silverlight制作控件
- Android使用shape制作圆形控件及添加弹跳动画
- 使用activeskin控件制作VB和易语言的皮肤的视频教程
- 使用静态文本控件制作超链接
- 关于 asp.net 中的用户控件的制作与使用方法。
- 使用zTree控件制作的表格形式的树形+数据菜单
- 使用sencha-touch控件制作布局的平板电脑界面
- Android使用shape制作圆形控件及添加弹跳动画
- C#如何使用webbrowser控件制作一个简易的IE浏览器(菜鸟级)
- 在VC中使用VB制作的控件
- Android使用shape制作圆形控件及添加弹跳动画
- 如何在ASP.NET中制作Web用户自定义控件,并在aspx页面中使用它的方法和属性?
- 使用C#开发ActiveX控件 控件开发、制作CAB包、签名、部署
- MapObject控件的使用之加入图层
- 方便winform中的数据验证,制作一个使用正则表达式验证数据的复合控件