C#进行MapX二次开发之鹰眼实现
生活随笔
收集整理的這篇文章主要介紹了
C#进行MapX二次开发之鹰眼实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
鷹眼一般是指GIS應用中,系統有兩個一大一小的圖,小圖提供快速定位地圖位置的功能,這個是在GIS中應用比較廣泛的一個功能,在Google地圖中,右下角也有一個小圖框,也是指的鷹圖。如下圖所示。
??
在本次介紹的例子中,左邊是主地圖,右邊是小地圖,即鷹眼。
鷹眼要實現下面幾個功能:
1。 主地圖變化時,鷹眼也要做出相應的位置變化,以便更好展示位置所在。
2。鷹眼地圖移動到任何一個位置,主地圖也要做相關聯的位置變化,以實現地圖的粗略定位。
3。主地圖實現鼠標滾輪的變化支持。
首先我們先設置主地圖的鼠標滾輪支持,先在主地圖上設置MouseWheelSupprot屬性為miFullMousewheelSupport。該值是表示地圖視圖支持滾輪的操作。或者你在代碼中添加下面的代碼實現滾輪支持。
?
axMap1.MousewheelSupport?=?MapXLib.MousewheelSupportConstants.miFullMousewheelSupport;然后在MapViewChanged的事件中添加和鷹圖關聯的操作?
????????private?void?axMap1_MapViewChanged(object?sender,?EventArgs?e)????????{
????????????MapXLib.Feature?tempFea;//聲明Feature變量
????????????MapXLib.Style?tempStyle?=?new?MapXLib.Style();//聲明Style變量
????????????Double?Xmin,?Xmax,?Ymin,?Ymax;
????????????RegionPoint?Pmin,?Pmax;
????????????//矩形邊框還沒有創建時?
????????????if(Portal.gc.MainDialog.EagleAnoLayer.AllFeatures.Count?==?0)
????????????{
????????????????//設置矩形邊框樣式?
????????????????tempStyle.RegionPattern?=?MapXLib.FillPatternConstants.miPatternNoFill;//設置Style的矩形內部填充樣式
????????????????tempStyle.RegionBorderWidth?=?2;//設置Style的矩形邊框寬度
????????????????//在圖層創建大小為Map1的邊界的Rectangle對象?
????????????????tempFea?=?Portal.gc.MainDialog.EagleMap.FeatureFactory.CreateRegion(Portal.gc.MainDialog.MainMap.CtlBounds,?tempStyle);
????????????????Portal.gc.MainDialog.EagleFea?=?Portal.gc.MainDialog.EagleAnoLayer.AddFeature(tempFea,?Missing.Value);//添加矩形邊框
????????????????return;
????????????}
????????????else
????????????{
????????????????//否則,根據Map1的視野變化改變矩形邊框的大小和位置
????????????????Xmin?=?Portal.gc.MainDialog.MainMap.CtlBounds.XMin;
????????????????Xmax?=?Portal.gc.MainDialog.MainMap.CtlBounds.XMax;
????????????????Ymin?=?Portal.gc.MainDialog.MainMap.CtlBounds.YMin;
????????????????Ymax?=?Portal.gc.MainDialog.MainMap.CtlBounds.YMax;
????????????????MapXLib.Points?feaPoint?=?Portal.gc.MainDialog.EagleFea.Parts[1];
????????????????feaPoint.RemoveAll();?//除去已有的矩形邊框的頂點
????????????????//添加大小和位置已變化的矩形邊框的四個頂點
????????????????feaPoint.AddXY(Xmin,?Ymin,?Missing.Value);
????????????????feaPoint.AddXY(Xmax,?Ymin,?Missing.Value);
????????????????feaPoint.AddXY(Xmax,?Ymax,?Missing.Value);
????????????????feaPoint.AddXY(Xmin,?Ymax,?Missing.Value);
????????????????Portal.gc.MainDialog.EagleFea.Update(Missing.Value,?Missing.Value);//更新顯示
????????????????if?(Portal.gc.MainDialog.MainMap.Zoom?<?3)?
????????????????{???//如果放大到實際比例的1/2倍以上,則啟動局部刷新線程
????????????????????Pmin.x?=?Xmin;
????????????????????Pmin.y?=?Ymin;
????????????????????Pmax.x?=?Xmax;
????????????????????Pmax.y?=?Ymax;
????????????????}
????????????????else?
????????????????{???//否則,停止局部刷新線程???????????????
????????????????????Pmin.x?=?0;
????????????????????Pmin.y?=?0;
????????????????????Pmax.x?=?0;
????????????????????Pmax.y?=?0;
????????????????}
????????????????if(fsFlag?==?0)
????????????????{
????????????????????oldZoom?=?Portal.gc.MainDialog.MainMap.Zoom;
????????????????????oldCenterX?=?(Xmin?+?Xmax)?/?2;
????????????????????oldCenterY?=?(Ymin?+?Ymax)?/?2;
????????????????}????????????????
????????????}
????????}
?
其中我們注意到了操作小圖的地代碼,是添加一個矩形圖來表示大圖的當前視點。如下面的代碼:
tempFea?=?Portal.gc.MainDialog.EagleMap.FeatureFactory.CreateRegion(Portal.gc.MainDialog.MainMap.CtlBounds,?tempStyle);????????????????Portal.gc.MainDialog.EagleFea?=?Portal.gc.MainDialog.EagleAnoLayer.AddFeature(tempFea,?Missing.Value);//添加矩形邊框?
?
?在小圖中,為了能夠單擊鼠標就可以定位到主地圖位置上,我們需要處理鼠標單擊的時間,如代碼
?? ? ? ?private?void?axMap1_MouseDownEvent(object?sender,?AxMapXLib.CMapXEvents_MouseDownEvent?e)????????{
????????????double?MapX?=?0;//定義x坐標變量
????????????double?MapY?=?0;//定義y坐標變量
????????????//把屏幕坐標轉換為地圖坐標
????????????axMap1.ConvertCoord(ref?e.x,?ref?e.y,?ref?MapX,?ref?MapY,?MapXLib.ConversionConstants.miScreenToMap);
????????????//設置主圖的中心x坐標和y坐標
????????????Portal.gc.MainDialog.MainMap.CenterX?=?MapX;
????????????Portal.gc.MainDialog.MainMap.CenterY?=?MapY;
?? ? ? ?}?
?這樣基本上就能夠實現兩個地圖之間的視圖關聯,從而更好定位地圖的位置,如果為了鷹圖更友好和更方便操作,也可以通過在主圖變化的時候,繪制出更好的圖形來展現主圖的當前位置。
總結
以上是生活随笔為你收集整理的C#进行MapX二次开发之鹰眼实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英语词汇
- 下一篇: 第三章 学习ICE 3.0--Slice