首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# MapX 控制項進階操作:標準工具、地圖匯出、自定義測量工具實戰

     編輯:關於C#

標準工具常數完整表

工具常數行為
新增線miAddLineTool向插入圖層新增線要素
新增點miAddPointTool單點新增點要素
新增折線miAddPolyLineTool新增折線要素
新增面miAddRegionTool新增面要素
箭頭miArrowTool選取/移動/縮放標註與可編輯圖層要素
置中miCenterTool單點置中地圖
標註miLabelTool點擊要素建立標註
平移miPanTool拖曳平移地圖
多邊形選取miPolygonSelectTool繪製多邊形選取內部要素
半徑選取miRadiusSelectTool拖曳半徑選取
矩形選取miRectSelectTool拖曳矩形選取
單點選取miSelectTool單點選取要素
符號標註miSymbolTool放置符號標註
文字標註miTextTool放置文字標註
放大miZoomInTool放大地圖
縮小miZoomOutTool縮小地圖

地圖匯出多格式支援

if (axMap1.GeoSet.Length < 1) { MessageBox.Show("未載入地圖"); return; }

SaveFileDialog dlg = new SaveFileDialog
{
    Title = "匯出目前地圖",
    Filter = "BMP|*.bmp|GIF|*.gif|JPEG|*.jpg|PNG|*.png|PSD|*.psd|TIFF|*.tif|WMF|*.wmf"
};

if (dlg.ShowDialog() == DialogResult.OK)
{
    try
    {
        axMap1.ExportSelection = true;
        var fmt = (MapXLib.ExportFormatConstants)dlg.FilterIndex;
        axMap1.ExportMap(dlg.FileName, fmt, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
    }
    catch (Exception ex) { MessageBox.Show(ex.Message); }
}

新增圖層 (TAB 檔)

OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
    axMap1.Layers.Add(ofd.FileName, 0); // 位置索引,C# 必須傳遞
    var li = new MapXLib.LayerInfoClass { Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTab };
    li.AddParameter("AutoCreateDataset", true);
}

查詢要素與圖層資訊

// 列出第 1 圖層所有要素 ID 與名稱
var features = axMap1.Layers[1].AllFeatures;
foreach (MapXLib.Feature f in features)
    listView1.Items.Add(new ListViewItem(new[] { f._FeatureID.ToString(), f.Name }));

// 列出所有圖層名稱
foreach (MapXLib.Layer lyr in axMap1.Layers)
    listView1.Items.Add(lyr._Name);

滑鼠座標轉換 (螢幕 → 地圖)

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

自定義工具:測量距離與面積

// Form_Load 建立自定義工具
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)
{
    var pts = (MapXLib.Points)e.points;
    if (e.toolNum == 99) // 距離
    {
        double d = 0;
        for (int i = 1; i < pts.Count; i++)
            d += axMap1.Distance(pts[i].X, pts[i].Y, pts[i+1].X, pts[i+1].Y);
        this.Text = $"距離: {d}";
    }
    else if (e.toolNum == 98) // 面積
    {
        var factory = axMap1.FeatureFactory;
        var style = axMap1.DefaultStyle;
        this.Text = $"面積: {factory.CreateRegion(pts, style).Area}";
    }
}

// 註冊事件 (若未用設計師)
axMap1.PolyToolUsed += new AxMapXLib.CMapXEvents_PolyToolUsedEventHandler(axMap1_PolyToolUsed);

// 工具列按鈕啟用
private void btnDistance_Click(object sender, EventArgs e) => axMap1.CurrentTool = (MapXLib.ToolConstants)99;
private void btnArea_Click(object sender, EventArgs e) => axMap1.CurrentTool = (MapXLib.ToolConstants)98;

自定義工具型別常數

常數行為
miToolTypePoint單點顯示
miToolTypeLine畫線
miToolTypeCircle畫圓
miToolTypeMarquee選取框
miToolTypePoly畫折線
miToolTypePolygon畫多邊形
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved