日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#进行MapX二次开发之鹰眼实现

發布時間:2025/4/16 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#进行MapX二次开发之鹰眼实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鷹眼一般是指GIS應用中,系統有兩個一大一小的圖,小圖提供快速定位地圖位置的功能,這個是在GIS中應用比較廣泛的一個功能,在Google地圖中,右下角也有一個小圖框,也是指的鷹圖。如下圖所示。

??

在本次介紹的例子中,左邊是主地圖,右邊是小地圖,即鷹眼。

鷹眼要實現下面幾個功能:

1。 主地圖變化時,鷹眼也要做出相應的位置變化,以便更好展示位置所在。

2。鷹眼地圖移動到任何一個位置,主地圖也要做相關聯的位置變化,以實現地圖的粗略定位。

3。主地圖實現鼠標滾輪的變化支持。

首先我們先設置主地圖的鼠標滾輪支持,先在主地圖上設置MouseWheelSupprot屬性為miFullMousewheelSupport。該值是表示地圖視圖支持滾輪的操作?;蛘吣阍诖a中添加下面的代碼實現滾輪支持。

?

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二次开发之鹰眼实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。