程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#進行MapX二次開發之控件基本操作

C#進行MapX二次開發之控件基本操作

編輯:關於C#

上篇介紹了MapX的部分基本使用代碼,包括放大、縮小、縮放到初始大小(全圖)、平移、矩形選擇、 圓形選擇、箭頭、打開圖層對話框 、打開ActiveX屬性對話框 、添加符號等基本操作代碼,本篇繼續探 討一些控件的基本操作。

MapX提供的標准工具,不同的工具將會使鼠標能夠完成多種任務。例如 ,如果當前的工具設成 miLabelTool,那麼當單擊鼠標時,會在此特指的地圖對象上放置標簽。鼠標光標 將根據正使用的工具更改形狀。MapX 可用的標准工具列表如下所示:

工具 常量 描述 Add Line MiAddLineTool 向插入圖層添加線圖元 Add Point MiAddPointTool 單擊從而向插入圖層添加點圖元。 Add Polyline MiAddPolyLineTool 添加折線圖元到插入圖層。 Add Region MiAddRegionTool 添加區域圖元到插入圖層。 Arrow MiArrowTool 單擊標題或注釋。並且,它也可用在可編輯的圖層中移動選中的圖元或者改變其大小。 Center MiCenterTool 單擊鼠標使地圖居中顯示。 Label miLabelTool 單擊圖元進行標注。 Pan MiPanTool 拖動地圖並重定位地圖的中心。 Polygon Select MiPolygonSelectTool 單擊鼠標畫多邊形;在多邊形內的對象被選中。 Radius Select MiRadiusSelectTool 拖動鼠標並選中在拖動半徑內的圖元。 Rect Select MiRectSelectTool 拖動鼠標選中在矩形內的圖元。 Select Tool miSelectTool 單擊選擇圖元。 Symbol miSymbolTool 放置符號注釋。 Text miTextTool 放置文本注釋。 Zoom In miZoomInTool 放大。 Zoom Out miZoomOutTool 縮小。

導出地圖為圖片的操作代碼:

if (axMap1.GeoSet.Length <  1)
{
MessageBox.Show("未加載地圖,不能導出!");
return;
}
SaveFileDialog exportFD = new SaveFileDialog();
exportFD.Title = "導出當前 地圖";
exportFD.Filter = "windows bitmap(*.bmp)|*.bmp|GIF (*.GIF) |*.gif|JPEG (*.JPG;JPEG;JPE)|*.JPG|PNG (*.PNG)|*.PNG|PSD (*.PSD)|*.PSD|TIFF (*.TIF) |*.TIF";
if (exportFD.ShowDialog() == DialogResult.OK &&  (exportFD.FileName) != null)
{
try
{
axMap1.ExportSelection =  true;
switch (exportFD.FilterIndex)
{
case 1:
axMap1.ExportMap (exportFD.FileName, MapXLib.ExportFormatConstants.miFormatBMP, axMap1.MapPaperWidth,  axMap1.MapPaperHeight);
break;
case 2:
axMap1.ExportMap(exportFD.FileName,  MapXLib.ExportFormatConstants.miFormatGIF, axMap1.MapPaperWidth,  axMap1.MapPaperHeight);
break;
case 3:
axMap1.ExportMap(exportFD.FileName,  MapXLib.ExportFormatConstants.miFormatJPEG, axMap1.MapPaperWidth,  axMap1.MapPaperHeight);
break;
case 4:
axMap1.ExportMap(exportFD.FileName,  MapXLib.ExportFormatConstants.miFormatPNG, axMap1.MapPaperWidth,  axMap1.MapPaperHeight);
break;
case 5:
axMap1.ExportMap(exportFD.FileName,  MapXLib.ExportFormatConstants.miFormatPSD, axMap1.MapPaperWidth,  axMap1.MapPaperHeight);
break;
case 6:
axMap1.ExportMap(exportFD.FileName,  MapXLib.ExportFormatConstants.miFormatTIF, axMap1.MapPaperWidth,  axMap1.MapPaperHeight);
break;
case 7:
axMap1.ExportMap(exportFD.FileName,  MapXLib.ExportFormatConstants.miFormatWMF, axMap1.MapPaperWidth,  axMap1.MapPaperHeight);
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

添加圖層的操作代碼 

OpenFileDialog openFile = new OpenFileDialog();
if  (openFile.ShowDialog() == DialogResult.OK)
{
axMap1.Layers.Add (openFile.FileName, 0);//默認值為0,C#調用不能省略默認值,圖層的位置
MapXLib.LayerInfo  liinfo;
liinfo = new MapXLib.LayerInfoClass();
liinfo.Type =  MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTab;

liinfo.AddParameter ("AutoCreateDataset", true);
}

查找圖元信息:

MapXLib.Features mX;
mX = this.axMap1.Layers[1].AllFeatures;
this.listView1.Items.Clear();

foreach (MapXLib.Feature mY in mX)
{
ListViewItem mZ = new ListViewItem(mY._FeatureID.ToString());
mZ.SubItems.Add (mY.Name.ToString());
this.listView1.Items.Add(mZ);
}

查找圖層信息 

MapXLib.Layers mX;
mX = this.axMap1.Layers;
this.listView1.Items.Clear();

foreach (MapXLib.Layer mY in mX)
{
ListViewItem mZ = new ListViewItem(mY._Name);
this.listView1.Items.Add(mZ);
}

獲取鼠標移動的坐標

double x = 0;
double y = 0;

axMap1.ConvertCoord(ref e.x, ref  e.y, ref x, ref y,  MapXLib.ConversionConstants.miScreenToMap);
toolStripStatusLabel1.Text =  string.Format("X:{0} Y:{1}", x, y);

放置點工具操作

try
{
MapXLib.Layer mX;
mX = this.axMap1.Layers[1];
mX.Editable = true;
this.axMap1.Layers.InsertionLayer = mX;
this.axMap1.CurrentTool = MapXLib.ToolConstants.miAddPointTool;
}
catch  (Exception ex)
{
MessageBox.Show(ex.Message);
}

MapX自定義工具 的使用:

如果需要一種 MapX 沒有提供的工具欄按鈕,可以使用 Map.CreateCustomTool 方法來 創建自定義工具。創建自定義工具時,需要控制創建工具的“類型”,即:就是要選擇此工具 是否允許用戶單擊,或是單擊並拖動來畫線,或是單擊並拖動來畫矩形等等。也可以選擇使用自定義工具 時顯示的光標。 

下面是自定義測量距離和測量面積的操作代碼 

private void  Form1_Load(object sender, EventArgs e)
{
//記錄地圖的比例合中心點
this.MapZoom = axMap1.Zoom;
this.CenterX = axMap1.CenterX;
this.CenterY =  axMap1.CenterY;

//創建測量距離的
axMap1.CreateCustomTool(99,  MapXLib.ToolTypeConstants.miToolTypePoly, MapXLib.CursorConstants.miCrossCursor,
MapXLib.CursorConstants.miCrossCursor, MapXLib.CursorConstants.miCrossCursor, false);

//創建測量面積的工具
axMap1.CreateCustomTool(98,  MapXLib.ToolTypeConstants.miToolTypePolygon, MapXLib.CursorConstants.miCrossCursor,
MapXLib.CursorConstants.miCrossCursor, MapXLib.CursorConstants.miCrossCursor, false);

}

private void axMap1_PolyToolUsed(object sender,  AxMapXLib.CMapXEvents_PolyToolUsedEvent e)
{
if (e.toolNum == 99)//測量距離
{
MapXLib.Points pts = (MapXLib.Points)e.points;
MapXLib.Point pt1, pt2;
double d = 0.0;

//計算順序兩個點距離,累計得到總距離
for (int i = 1;  i < pts.Count; i++)
{
pt1 = pts[i];
pt2 = pts[i + 1];
d  += axMap1.Distance(pt1.X, pt1.Y, pt2.X, pt2.Y);
}

this.Text = "距 離:" + d.ToString();
}
else if (e.toolNum == 98)//面積
{
MapXLib.Points pts = (MapXLib.Points)e.points;
//偷懶了但是很正確
MapXLib.FeatureFactory dd = axMap1.FeatureFactory;
MapXLib.Style style =  axMap1.DefaultStyle;
this.Text = "面積:" + dd.CreateRegion(pts,  style).Area.ToString();
}
}

private void btnGetDistance_Click(object  sender, EventArgs e)
{
//測量距離
axMap1.CurrentTool =  (MapXLib.ToolConstants)99;
}

private void btnGetArea_Click(object sender,  EventArgs e)
{
//測量面積
axMap1.CurrentTool = (MapXLib.ToolConstants) 98;
}

以上代碼有一個是事件操作,如果沒有采用事件映射的操作,那麼要添加下面 的代碼:

this.axMap1.PolyToolUsed += new AxMapXLib.CMapXEvents_PolyToolUsedEventHandler(this.axMap1_PolyToolUsed);

自定 義工具類型的ToolTypeConstants 描述當創建一個自定義工具時可使用的工具類型。它們描述工具的行為 (例如,miToolTypeLine 使用戶可以畫線;miToolTypeCircle 使用戶可以畫圓等)。自定義工具創建以 後,需要為該工具實際要做的編寫代碼。

常量 行為 miToolTypePoint 在指定位置顯示點。 miToolTypeLine 畫線。 miToolTypeCircle 畫圓。 miToolTypeMarquee 畫選取框,並選在此框中選擇地圖對象。 miToolTypePoly 畫折線。 miToolTypePolygon 畫多邊形。

文章來源:http://www.iqidi.com

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved