一、PIE.Net開發環境及目錄說明
1. 開發環境
- 確保Win7系統已安裝SP1
- 安裝Visual Studio2013(支持VS2010/2012/2013/2015)
- 安裝PIESDK.exe二次開發包
2. 【SDK】安裝后目錄說明
1) Bin>>開發包
2) Config>>配置文件
3) Data>>坐標系投影及數據映射表
4) Document>>幫助文件
5) Language>>語言國際化
6) Res>>按鈕圖標及鼠標Cursor樣式
7) Sample>>實例文件
8) Style>>符號庫文件
9) Template>>制圖模板
二、PIE.NET_SDK二次開發實例
Tool(工具插件):適用於與地圖或制圖組件有交互的插件,只需繼承自BaseTool(繼承自BaseCommand),根據功能需要可重寫OnMouseDown、OnMouseMove等方法,如:拉框放大、探針、畫多邊形等。
Command(命令插件):與地圖無交互,只需繼承自BaseCommand,重寫OnClick方法,如:全圖、居中放大、前一視圖等。
1. WinForm插件調用
(1)新建Visual C#的Windows 窗體應用程序,選擇新建→項目,選擇Visual C #的Windows窗體應用程序,設置.Net Framework4以及工程名稱“MapManager”和位置。

(2)設置Debug和Release環境,新建選擇x86平台。
(3)配置PIE.NET_SDK:在MapManager.csproj的同級目錄下新建“APPDebug”文件夾,修改生成輸出路徑位置為../ APPDebug/Bin。
(4)代碼編寫
A:工具箱里MapControl、TOCControl控件拖拽綁定
添加窗體,初始化綁定MapControl、TOCControl控件代碼:
tocControl1.SetBuddyControl(mapControl1);
窗體運行顯示如下:
B:選擇工程引用,根據自己開發的插件功能需求進行選擇, 瀏覽本機已經安裝位置的【Bin】目錄下添加類庫,單擊確定即可。
C:調用
以地圖拉框放大(Tool)和全圖(Command)為例
/// <summary>
/// 拉框放大
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton_MapZoomIn_Click(object sender, EventArgs e)
{
ITool tool = new MapZoomInTool();
ICommand command = tool as ICommand;
command.OnCreate(mapControl1);
mapControl1.CurrentTool = tool;
}
/// <summary>
/// 全圖
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton_FullExtent_Click(object sender, EventArgs e)
{
ICommand cmd = new FullExtentCommand();
cmd.OnCreate(mapControl1);
cmd.OnClick();
}
2. 插件代碼實現
新建插件.cs類
以地圖拉框放大(Tool)為例

以全圖顯示(Command)為例
構造函數中的定義可個性化定制,控制實際的顯示名稱、提示和圖片(m_Image),鼠標樣式放置在構造函數里設置,如鼠標事件里需要改變鼠標樣式,再在鼠標事件里控制即可。
設置Cursor符號cur樣式
(1)構造函數
public ZoomIn()
{
this.Caption = "拉框放大"; (Caption屬性)
this.Name = "MapZoomIn"; (名稱)
this.ToolTip = "拉框放大地圖"; (提示)
this.Checked = false; (插件是否選擇)
this.Enabled = false; (插件是否可用) (鼠標樣式在構造函數)
this.Cursor = new Cursor(new System.IO.MemoryStream(Properties.Resources.ZoomIn));
}
(2)創建插件對象
public override void OnCreate(object hook)
{
base.OnCreate(hook);
m_ActiveView = m_HookHelper.ActiveView; (當前激活視圖獲取)
}
(3)單擊方法
public override void OnClick()
{
if (!this.Enabled) return;
}
(4)鼠標事件
以拉框放大為例:鼠標按下時獲取拉框,並給地圖設置范圍變化、刷新。
/// <summary>
/// 鼠標按下
/// </summary>
/// <param name="sender">觸發對象</param>
/// <param name="e">鼠標事件參數</param>
public override void OnMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button != System.Windows.Forms.MouseButtons.Left) return; //判斷左鍵
m_ActiveView.Extent = (m_HookHelper.GetContent() as IMapControl).TrackRectangle();
m_ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}
