Mo在c中的使用Word格式文档下载.docx
- 文档编号:20890188
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:14
- 大小:17.95KB
Mo在c中的使用Word格式文档下载.docx
《Mo在c中的使用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Mo在c中的使用Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
layer.Symbol.Color=ConvertColorToMapSymbolColor(Color.Red);
//layer中的颜色与C#定义不同,使用了自定义的方法转换
layer.Symbol.Size=1;
//图层线宽或点的粗细度
layer.Visible=true;
//图层是否可视
axMap1.Layers.Add(layer);
//这个方法实际上是Insert(0,layer),所以后面加载的地图在图层中的下标更小,显示级别更高(同区域,会由更高的级别覆盖低级别的图元)
//自定义转换颜色方法
privateUInt32ConvertColorToMapSymbolColor(Colorcolor)
{
returnConvert.ToUInt32(color.R+color.G*256+color.B*256*256);
}
3.各种操作
a.放大
//设置当前操作的图标
//(是为了后面MouseDownEvent事件区分当前操作是放大、缩小、平移、选择等。
//可以不设置,用其他变量记录也可以,主要是让操作人容易看清当前的操作状态)
axMap1.MousePointer=MapObjects2.MousePointerConstants.moZoomIn;
privatevoidaxMap1_MouseDownEvent(objectsender,AxMapObjects2._DMapEvents_MouseDownEvente)
switch(axMap1.MousePointer)
caseMapObjects2.MousePointerConstants.moZoomIn:
//选择放大到的区域
MapObjects2.Rectanglerect=axMap1.TrackRectangle();
if(rect==null||rect.Width<
0.00005||rect.Height<
0.00005)
//如果选择区域很小,可以认为是单击、点选。
就在当前范围下,放大1.5倍(1/1.5=0.6667)
rect=axMap1.Extent;
rect.ScaleRectangle(0.6667);
//当选择的区域设置为当前显示区域
axMap1.Extent=rect;
break;
case....
b.缩小
缩小与放大相似
axMap1.MousePointer=MapObjects2.MousePointerConstants.moZoomOut;
case...
caseMapObjects2.MousePointerConstants.moZoomOut:
{
rect.ScaleRectangle(1.5);
//缩小为原来的2/3(1/(2/3)=3/2=1.5)
}
else
//计算缩小率
doubledRate=axMap1.Extent.Width/rect.Width*10;
rect.ScaleRectangle(dRate);
axMap1.Extent=rect;
break;
c.平移、拖动
axMap1.MousePointer=MapObjects2.MousePointerConstants.moPan;
caseMapObjects2.MousePointerConstants.moPan:
axMap1.Pan();
d.选择图元
axMap1.MousePointer=MapObjects2.MousePointerConstants.moDefault;
caseMapObjects2.MousePointerConstants.moDefault:
MapObjects2.RectangletrackRect=axMap1.TrackRectangle();
//获取当前选择的图层(只在一层图层中查)
MapObjects2.MapLayerlayer=axMap.Layers.Item(currentLayerIndex)asMapObjects2.MapLayer;
;
//获取的图元集合=>
selectRecs
MapObjects2.RecordsetselectRecs;
//根据不同的图层类型(点、线、面),有不同的查找方式
switch(layer.shapeType)
caseMapObjects2.ShapeTypeConstants.moShapeTypePoint:
caseMapObjects2.ShapeTypeConstants.moShapeTypePolygon:
selectRecs=layer.SearchShape(trackRect,MapObjects2.SearchMethodConstants.moAreaIntersect,string.Empty);
caseMapObjects2.ShapeTypeConstants.moShapeTypeLine:
default:
selectRecs=layer.SearchByDistance(trackRect,axMap1.ToMapDistance(1.5F),string.Empty);
e.获取图层属性字段列表
MapObjects2.TableDesctableDesc;
tableDesc=layer.Records.TableDesc;
for(shortk=0;
k<
tableDesc.FieldCount;
k++)
fieldname=tableDesc.get_FieldName(k);
e.通过图层属性数据查找数据
stringexpression;
field=layer.Records.Fields.Item(<
地图属性的字段>
);
switch(field.Type)
caseMapObjects2.FieldTypeConstants.moLong:
caseMapObjects2.FieldTypeConstants.moDouble:
expression=string.Format("
{0}={1}"
<
属性值>
caseMapObjects2.FieldTypeConstants.moString:
{0}='
{1}'
"
expression=string.Empty;
if(expression==string.Empty)
continue;
MapObjects2.Recordsetrecs=layer.SearchExpression(expression);
f.高亮显示选择的图元
privatevoidhighlightLayerRecordset(stringfieldName,MapObjects2.MapLayerlayer,MapObjects2.RecordsetselectRecs,intlayerIndex)
//MapObjects2.GroupRenderer是定义一组颜色相同的图元列表。
同一个图层允许有多个颜色显示定义组。
//这里是利用GroupRenderer定义一组高亮显示的图元列表
MapObjects2.GroupRenderergRen=(MapObjects2.GroupRenderer)layer.Renderer;
MapObjects2.GroupRendererrenColor;
if(gRen==null)
gRen=newMapObjects2.GroupRenderer();
gRen.DrawBackground=true;
layer.Renderer=gRen;
if(gRen.Count==0)
renColor=newMapObjects2.GroupRenderer();
gRen.Add(renColor);
renColor=(MapObjects2.GroupRenderer)gRen.get_Renderer(0);
//先清除原来选择的图元的选择颜色
for(shorti=Convert.ToInt16(renColor.Count-1);
i>
=0;
i--)
renColor.Remove(i);
objectv;
intselectCount=selectRecs.Count;
//有时候MapObjects2.Recordset对象的Count的值是-1,但实际上有数据
if(selectCount<
=0)
selectCount=0;
selectRecs.MoveFirst();
while(selectRecs.EOF==false)
selectCount++;
selectRecs.MoveNext();
MapObjects2.ValueMapRenderervmRen=newMapObjects2.ValueMapRenderer();
MapObjects2.Symbolsym;
vmRen.UseDefault=false;
vmRen.SymbolType=layer.Symbol.SymbolType;
//与图层相同的样式类型:
点、线、面
vmRen.Field=fieldName
vmRen.ValueCount=Convert.ToInt16(selectCount);
//初设图元个数
intindex=0;
while(selectRecs.EOF==false)
v=selectRecs.Fields.Item(fieldName).Value;
try
if(v.ToString()=="
)
vmRen.set_Value(Convert.ToInt16(index),v.ToString());
sym=vmRen.get_Symbol(Convert.ToInt16(index));
sym.Size=layer.Symbol.Size;
sym.Color=ConvertColorToMapSymbolColor(Color.Yellow);
//设置为黄色
index++;
finally
//有时候,在上面循环中会将一些不需要的图元排除,这里可以再次重设
vmRen.ValueCount=Convert.ToInt16(index);
if(vmRen.ValueCount>
0)
renColor.Add(vmRen);
axMap1.RefreshLayer(Convert.ToInt16(layerIndex));
h.闪烁图元3秒
///<
summary>
///闪烁图元3秒
/summary>
paramname="
symbols"
>
图元列表<
/param>
toCenter"
是否自动将图元的区域移到中心区域位置显示<
privatevoidFlashShape(MapObjects2.MapLayerlayer,ArrayListsymbols,booltoCenter)
MapObjects2.RectangleshapeExtent=null;
objectshape=null;
shape=symbols[0];
#region//将面型(多边形)图元合并为一个面型图元
MapObjects2.Polygonp;
p=shapeasMapObjects2.Polygon;
for(inti=1;
i<
symbols.Count;
i++)
p=p.Union(symbols[i],axMap1.FullExtent)asMapObjects2.Polygon;
shape=p;
//得到合并后的新图元的区域,是为了后面将当前新图元居中显示用
shapeExtent=p.Extent;
#endregion
#region//合并线性图元
MapObjects2.LineL;
L=shapeasMapObjects2.Line;
L=L.Union(symbols[i],axMap1.FullExtent)asMapObjects2.Line;
shape=L;
shapeExtent=L.Extent;
MapObjects2.Pointsp;
p=shapeasMapObjects2.Points;
//点没有宽度,所以将设为全图的2%大小
shapeExtent=newMapObjects2.Rectangle();
shapeExtent.Left=p.Extent.Center.X-axMap1.FullExtent.Width/100;
shapeExtent.Right=p.Extent.Center.X+axMap1.FullExtent.Width/100;
shapeExtent.Top=p.Extent.Center.Y+axMap1.FullExtent.Height/100;
shapeExtent.Bottom=p.Extent.Center.Y-axMap1.FullExtent.Height/100;
if(shape!
=null)
if(toCenter)
//放大至少达到当前范围的5%
MapObjects2.RectanglerectExtent=axMap1.Extent;
doublefactor,factorX,factorY;
factorX=(shapeExtent.Width)*20/(rectExtent.Width);
factorY=(shapeExtent.Height)*20/(rectExtent.Height);
factor=(factorX>
factorY)?
factorX:
factorY;
if(factor<
1&
&
factor>
rectExtent.ScaleRectangle(factor);
//居中
doubledeltaX,deltaY;
deltaX=(shapeExtent.Center.X)-(rectExtent.Center.X);
deltaY=(shapeExtent.Center.Y)-(rectExtent.Center.Y);
if(rectExtent.IsPointIn(shapeExtent.Center)==false)
rectExtent.Offset(deltaX,deltaY);
axMap1.Extent=rectExtent;
axMap1.Refresh();
//合并的图元闪烁3秒
axMap1.FlashShape(shape,3);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mo 中的 使用