標準工具常數完整表
| 工具 | 常數 | 行為 |
| 新增線 | 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 | 畫多邊形 |