1、Mo在c中的使用1. 将MapObject 2.1的控件加入控件TabTools中 选择 COM Components=MapObjects 2.1 Map Control, 加进来后是 AxMapObject2.AxMap控件 2. 加载地图 MapObjects2.MapLayer layer; /图层MapObjects2.GeoDataset gds; / 图层对应的数据MapObjects2.DataConnection m_db = new MapObjects2.DataConnection(); / 图层集连接 / 打开 图层集连接:设置 .shp 文件所在的目录路径m_db.
2、Database = IconApplication.Instance.GetMapPath(); m_db.Connect(); / 查找图层:sample1.shp 地图(如果没有找到,则为空)gds = m_db.FindGeoDataset(sample1); / 将图层加载到 AxMapObject2.AxMap 控件中 = axMap1layer = new MapObjects2.MapLayer();layer.GeoDataset = gds; layer.Symbol.Color = ConvertColorToMapSymbolColor(Color.Red); / la
3、yer中的颜色与C#定义不同,使用了自定义的方法转换layer.Symbol.Size = 1; / 图层线宽 或 点的粗细度layer.Visible = true; / 图层是否可视axMap1.Layers.Add(layer); / 这个方法实际上是 Insert(0, layer),所以后面加载的地图在图层中的下标更小,显示级别更高(同区域,会由更高的级别覆盖低级别的图元) / 自定义转换颜色方法private UInt32 ConvertColorToMapSymbolColor(Color color)return Convert.ToUInt32(color.R + color
4、.G * 256 + color.B * 256 * 256); 3. 各种操作 a. 放大 / 设置当前操作的图标/ (是为了后面 MouseDownEvent 事件区分当前操作是放大、缩小、平移、选择等。/ 可以不设置,用其他变量记录也可以,主要是让操作人容易看清当前的操作状态)axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomIn; private void axMap1_MouseDownEvent(object sender, AxMapObjects2._DMapEvents_MouseDownEvent e
5、)switch (axMap1.MousePointer)case MapObjects2.MousePointerConstants.moZoomIn:/ 选择放大到的区域MapObjects2.Rectangle rect = 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
6、.6667); / 当选择的区域设置为 当前显示区域axMap1.Extent = rect; break;case . b. 缩小 缩小与放大相似 axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomOut; private void axMap1_MouseDownEvent(object sender, AxMapObjects2._DMapEvents_MouseDownEvent e)switch (axMap1.MousePointer) case . case MapObjects2.MousePointer
7、Constants.moZoomOut: MapObjects2.Rectangle rect = axMap1.TrackRectangle();if (rect = null | rect.Width 0.00005 | rect.Height selectRecs MapObjects2.Recordset selectRecs; / 根据不同的图层类型(点、线、面),有不同的查找方式 switch (layer.shapeType) case MapObjects2.ShapeTypeConstants.moShapeTypePoint: case MapObjects2.ShapeT
8、ypeConstants.moShapeTypePolygon: selectRecs = layer.SearchShape(trackRect, MapObjects2.SearchMethodConstants.moAreaIntersect, string.Empty); break; case MapObjects2.ShapeTypeConstants.moShapeTypeLine: default: selectRecs = layer.SearchByDistance(trackRect, axMap1.ToMapDistance(1.5F), string.Empty);
9、break; break; e. 获取图层属性字段列表 MapObjects2.TableDesc tableDesc;tableDesc = layer.Records.TableDesc;for (short k = 0; k tableDesc.FieldCount; k+) fieldname = tableDesc.get_FieldName(k); e. 通过图层属性数据查找数据 string expression;field = layer.Records.Fields.Item( );switch (field.Type) case MapObjects2.FieldTypeC
10、onstants.moLong: case MapObjects2.FieldTypeConstants.moDouble: expression = string.Format(0=1, , ); break; case MapObjects2.FieldTypeConstants.moString: expression = string.Format(0=1, , ); break; default: expression = string.Empty; break; if (expression = string.Empty) continue; MapObjects2.Records
11、et recs = layer.SearchExpression(expression); f. 高亮显示选择的图元 private void highlightLayerRecordset(string fieldName, MapObjects2.MapLayer layer, MapObjects2.Recordset selectRecs, int layerIndex) / MapObjects2.GroupRenderer 是定义一组颜色相同的图元列表。同一个图层允许有多个颜色显示定义组。 / 这里是利用 GroupRenderer 定义一组高亮显示的图元列表 MapObjects
12、2.GroupRenderer gRen = (MapObjects2.GroupRenderer)layer.Renderer; MapObjects2.GroupRenderer renColor; if( gRen = null ) gRen = new MapObjects2.GroupRenderer(); gRen.DrawBackground = true; layer.Renderer = gRen; if( gRen.Count = 0 ) renColor = new MapObjects2.GroupRenderer(); gRen.Add(renColor); else
13、 renColor = (MapObjects2.GroupRenderer)gRen.get_Renderer(0); / 先清除原来选择的图元的选择颜色 for (short i = Convert.ToInt16(renColor.Count - 1); i = 0; i-) renColor.Remove(i); object v; int selectCount = selectRecs.Count; / 有时候 MapObjects2.Recordset 对象的 Count 的值是 -1,但实际上有数据 if (selectCount 0) renColor.Add(vmRen);
14、 axMap1.RefreshLayer(Convert.ToInt16(layerIndex); h. 闪烁图元3秒/ / 闪烁图元3 秒/ / 图元列表/ 是否自动将 图元的区域 移到 中心区域位置 显示private void FlashShape(MapObjects2.MapLayer layer, ArrayList symbols, bool toCenter) MapObjects2.Rectangle shapeExtent = null; object shape = null; shape = symbols0; switch (layer.shapeType) case
15、 MapObjects2.ShapeTypeConstants.moShapeTypePolygon: #region / 将面型(多边形)图元 合并为 一个面型图元 MapObjects2.Polygon p; p = shape as MapObjects2.Polygon; for (int i = 1; i symbols.Count; i+) p = p.Union(symbolsi, axMap1.FullExtent) as MapObjects2.Polygon; shape = p; / 得到合并后的新图元的区域,是为了后面将当前新图元居中显示用 shapeExtent =
16、p.Extent; break; #endregion case MapObjects2.ShapeTypeConstants.moShapeTypeLine: #region / 合并线性图元 MapObjects2.Line L; L = shape as MapObjects2.Line; for (int i = 1; i factorY) ? factorX : factorY; if (factor 0) rectExtent.ScaleRectangle(factor); / 居中 double deltaX, 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);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1