第一步:本地地图与鹰眼图载入同一地图
mapControl.Map.Load(MapInfo.Mapping.MapLoader.CreateFromFile(mapFile.File));
mapControlOver.Map.Load(MapInfo.Mapping.MapLoader.CreateFromFile(mapFile.File));
第二步:为mapControl.Map添加viewchang的事件
this.mapControl.Map.ViewChangedEvent += new MapInfo.Mapping.ViewChangedEventHandler(Map_ViewChangedEvent);
第三步:根据mapcontro.Map的viewchange事件调整鹰眼图显示的内容
private void UpdateHawkeyeMap() { try { //如果主图和鹰眼图加载的是同一实例,那么鹰眼图就需要检测是否有效 if (mapControlOver.Map != null) { //加载鹰眼矩形临时表 Table tblRect; tblRect = Session.Current.Catalog.GetTable("TempRectHawkeye"); if (tblRect != null) tblRect.Close(); TableInfo tblInfo; tblInfo = TableInfoFactory.CreateTemp("TempRectHawkeye"); TableSessionInfo tblSessionInfo = new TableSessionInfo(); tblRect = Session.Current.Catalog.CreateTable(tblInfo, tblSessionInfo); FeatureLayer feaLayer = new FeatureLayer(tblRect); mapControlOver.Map.Layers.Insert(0, feaLayer); //实时在鹰眼临时表图上画矩形 tblRect = Session.Current.Catalog.GetTable("TempRectHawkeye"); (tblRect as ITableFeatureCollection).Clear();//清除当前层上的图元 //设置矩形的样式 DRect rect = mapControl.Map.Bounds; FeatureGeometry feageo = new MapInfo.Geometry.Rectangle(mapControl.Map.GetDisplayCoordSys(), rect); SimpleLineStyle simLineStyle = new SimpleLineStyle(new LineWidth(2, MapInfo.Styles.LineWidthUnit.Point), 2, System.Drawing.Color.Red); SimpleInterior simInterior = new SimpleInterior(9, System.Drawing.Color.Gray, System.Drawing.Color.Green, true); CompositeStyle comStyle = new CompositeStyle(new AreaStyle(simLineStyle, simInterior), null, null, null); //将矩形插入到图层中 Feature fea = new Feature(feageo, comStyle); tblRect.InsertFeature(fea); //重新定位鹰眼图的中心 mapControlOver.Map.Center = mapControl.Map.Center; mapControlOver.Map.Layers["TempRectHawkeye"].Invalidate(); //清理对象变量 tblSessionInfo = null; feageo = null; simLineStyle = null; simInterior = null; comStyle = null; fea = null; } } catch (Exception ex) { ExceptionLog.Log("显示鹰眼图错误," + ex.Message); }
第四步:把此函数放在viewchange事件中
void Map_ViewChangedEvent(object sender, MapInfo.Mapping.ViewChangedEventArgs e) { UpdateHawkeyeMap(); }
第五步:为鹰眼图添加点击事件
private void mapControlOver_MouseClick(object sender, MouseEventArgs e) { MoveLocalMap(GetOverviewCoordPt(e.X, e.Y)); } //定位到指定经纬度 private void MoveLocalMap(DPoint dpt) { mapControl.Map.SetView(dpt, mapControl.Map.GetDisplayCoordSys(), mapControl.Map.Zoom); } //鹰眼图坐标转换到经纬度 private DPoint GetOverviewCoordPt(int x, int y) { DPoint dpt = new DPoint(); mapControlOver.Map.DisplayTransform.FromDisplay(new System.Drawing.Point(x, y), out dpt); return dpt; }
至此完成本地地图与鹰眼图的联动