资源描述
C#+ARCGIS ENGINE开发查找地图元素并高亮显示代码1
(2008-12-13 13:02:12)
转载
标签:
杂谈
分类: 程序源代码
这是我帮同学做的一个简单的上机作业,本来是想做查找最短路径和查找地图元素(高亮显示)两个功能的,只是查找最短路径的代码没有填进去,如果哪位朋友需要的话,可以发邮件给我啊(wang_cuntao@)~~
下面是查找地图元素(高亮显示)的主要代码:
//frmMain.cs
// Copyright 2006 ESRI
//
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
//
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
//
// See use restrictions at /arcgis/developerkit/userestrictions.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.NetworkAnalyst;
// This is the main form of the application.
namespace NAEngine
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class frmMain : System.Windows.Forms.Form
{
/// <summary>
/// Required designer variable.
/// </summary>
public IMapControl2 pMapControl;
private System.ComponentModel.Container components = null;
private System.Windows.Forms.Splitter splitter1;
private System.Windows.Forms.ComboBox cmbLayers;
// Context menu objects for NAWindow's context menu
private System.Windows.Forms.ContextMenu contextMenu1;
private System.Windows.Forms.MenuItem miLoadLocations;
private System.Windows.Forms.MenuItem miClearLocations;
// ArcGIS Controls on the form
private ESRI.ArcGIS.Controls.AxMapControl axMapControl1;
private ESRI.ArcGIS.Controls.AxLicenseControl axLicenseControl1;
private ESRI.ArcGIS.Controls.AxToolbarControl axToolbarControl1;
private ESRI.ArcGIS.Controls.AxTOCControl axTOCControl1;
// Listen for context menu on NAWindow
private IEngineNAWindowEventsEx_OnContextMenuEventHandler m_onContextMenu;
// Reference to Network Analyst Environment
private IEngineNetworkAnalystEnvironment m_naEnv;
// Reference to NAWindow. Need to hold on to reference for events to work.
private IEngineNAWindow m_naWindow;
private MenuStrip menuStrip1;
private ToolStripMenuItem oPENToolStripMenuItem;
private Label label1;
private Label label2;
// Menu for our commands on the TOC context menu
private IToolbarMenu m_menuLayer;
public frmMain()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose(bool disposing)
{
ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown();
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain));
this.axMapControl1 = new ESRI.ArcGIS.Controls.AxMapControl();
this.axLicenseControl1 = new ESRI.ArcGIS.Controls.AxLicenseControl();
this.axToolbarControl1 = new ESRI.ArcGIS.Controls.AxToolbarControl();
this.splitter1 = new System.Windows.Forms.Splitter();
this.axTOCControl1 = new ESRI.ArcGIS.Controls.AxTOCControl();
this.contextMenu1 = new System.Windows.Forms.ContextMenu();
this.miLoadLocations = new System.Windows.Forms.MenuItem();
this.miClearLocations = new System.Windows.Forms.MenuItem();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.oPENToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.axMapControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.axLicenseControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.axToolbarControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.axTOCControl1)).BeginInit();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
// axMapControl1
//
this.axMapControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.axMapControl1.Location = new System.Drawing.Point(246, 52);
this.axMapControl1.Name = "axMapControl1";
this.axMapControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axMapControl1.OcxState")));
this.axMapControl1.Size = new System.Drawing.Size(466, 448);
this.axMapControl1.TabIndex = 2;
//
// axLicenseControl1
//
this.axLicenseControl1.Enabled = true;
this.axLicenseControl1.Location = new System.Drawing.Point(797, 0);
this.axLicenseControl1.Name = "axLicenseControl1";
this.axLicenseControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axLicenseControl1.OcxState")));
this.axLicenseControl1.Size = new System.Drawing.Size(32, 32);
this.axLicenseControl1.TabIndex = 1;
//
// axToolbarControl1
//
this.axToolbarControl1.Dock = System.Windows.Forms.DockStyle.Top;
this.axToolbarControl1.Location = new System.Drawing.Point(0, 24);
this.axToolbarControl1.Name = "axToolbarControl1";
this.axToolbarControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axToolbarControl1.OcxState")));
this.axToolbarControl1.Size = new System.Drawing.Size(712, 28);
this.axToolbarControl1.TabIndex = 0;
this.axToolbarControl1.OnMouseDown += new ESRI.ArcGIS.Controls.IToolbarControlEvents_Ax_OnMouseDownEventHandler(this.axToolbarControl1_OnMouseDown);
//
// splitter1
//
this.splitter1.Location = new System.Drawing.Point(243, 52);
this.splitter1.Name = "splitter1";
this.splitter1.Size = new System.Drawing.Size(3, 448);
this.splitter1.TabIndex = 4;
this.splitter1.TabStop = false;
//
// axTOCControl1
//
this.axTOCControl1.Dock = System.Windows.Forms.DockStyle.Left;
this.axTOCControl1.Location = new System.Drawing.Point(0, 52);
this.axTOCControl1.Name = "axTOCControl1";
this.axTOCControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axTOCControl1.OcxState")));
this.axTOCControl1.Size = new System.Drawing.Size(243, 448);
this.axTOCControl1.TabIndex = 1;
this.axTOCControl1.OnMouseDown += new ESRI.ArcGIS.Controls.ITOCControlEvents_Ax_OnMouseDownEventHandler(this.axTOCControl1_OnMouseDown);
//
// contextMenu1
//
this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.miLoadLocations,
this.miClearLocations});
//
// miLoadLocations
//
this.miLoadLocations.Index = 0;
this.miLoadLocations.Text = "Load Locations...";
this.miLoadLocations.Click += new System.EventHandler(this.miLoadLocations_Click);
//
// miClearLocations
//
this.miClearLocations.Index = 1;
this.miClearLocations.Text = "Clear Locations";
this.miClearLocations.Click += new System.EventHandler(this.miClearLocations_Click);
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.oPENToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(712, 24);
this.menuStrip1.TabIndex = 20;
this.menuStrip1.Text = "menuStrip1";
this.menuStrip1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.menuStrip1_ItemClicked);
//
// oPENToolStripMenuItem
//
this.oPENToolStripMenuItem.Name = "oPENToolStripMenuItem";
this.oPENToolStripMenuItem.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
this.oPENToolStripMenuItem.Size = new System.Drawing.Size(65, 20);
this.oPENToolStripMenuItem.Tag = "";
this.oPENToolStripMenuItem.Text = "查找地点";
this.oPENToolStripMenuItem.Click += new System.EventHandler(this.oPENToolStripMenuItem_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(134, 7);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(0, 12);
this.label1.TabIndex = 6;
this.label1.Click += new System.EventHandler(this.label1_Click);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(68, 6);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(293, 12);
this.label2.TabIndex = 21;
this.label2.Text = "(点击查找地图功能之前,请确定已经打开一张地图~)";
//
// frmMain
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(712, 500);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.axLicenseControl1);
this.Controls.Add(this.axMapControl1);
this.Controls.Add(this.splitter1);
this.Controls.Add(this.axTOCControl1);
this.Controls.Add(this.axToolbarControl1);
this.Controls.Add(this.menuStrip1);
this.Location = new System.Drawing.Point(10, 0);
this.MainMenuStrip = this.menuStrip1;
this.Name = "frmMain";
this.Text = "GIS(作者:涛涛)";
this.Load += new System.EventHandler(this.frmMain_Load);
((System.ComponentModel.ISupportInitialize)(this.axMapControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.axLicenseControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.axToolbarControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.axTOCControl1)).EndInit();
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new frmMain());
}
private void frmMain_Load(object sender, System.EventArgs e)
{
pMapControl = (IMapControl2)axMapControl1.Object;
// Add commands to the NALayer context menu
m_menuLayer = new ToolbarMenuClass();
m_menuLayer.AddItem(new LoadLocations(), -1, 0, false, esriCommandStyles.esriCommandStyleTextOnly);
m_menuLayer.AddItem(new RemoveLayer(), -1, 1, false, esriCommandStyles.esriCommandStyleTextOnly);
m_menuLayer.AddItem(new ClearAnalysisLayer(), -1, 2, true, esriCommandStyles.esriCommandStyleTextOnly);
m_menuLayer.AddItem(new NALayerProperties(), -1, 3, true, esriCommandStyles.esriCommandStyleTextOnly);
m_menuLayer.SetHook(axMapControl1);
// Add command for Network Analyst env properties to "Network Analyst" dropdown menu
IToolbarItem item = axToolbarControl1.GetItem(2);
item.Menu.AddItem(new NAProperties(), -1, 1, true, esriCommandStyles.esriCommandStyleTextOnly);
// Initialize naEnv variables
m_naEnv = new EngineNetworkAnalystEnvironmentClass();
m_naEnv.ZoomToResultAfterSolve = false;
m_naEnv.ShowAnalysisMessagesAfterSolve = (int)(esriEngineNAMessageType.esriEngineNAMessageTypeInformative | esriEngineNAMessageType.esriEngineNAMessageTypeWarning);
// Explicitly setup buddy control and initialize NA extension
// so we can get to NAWindow to listen to window events
// This is necessary the various controls are not yet setup and they
// need to be in order to get the NAWindow's events.
axToolbarControl1.SetBuddyControl(axMapControl1);
IExtension ext = m_naEnv as IExtension;
object obj = axToolbarControl1.Object;
ext.Startup(ref obj);
m_naWindow = m_naEnv.NAWindow;
m_onContextMenu = new IEngineNAWindowEventsEx_OnContextMenuEventHandler(OnContextMenu);
((IEngineNAWindowEventsEx_Event)m_naWindow).OnContextMenu += m_onContextMenu;
}
// Show the TOC context menu when an NALayer is right-clicked on
private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e)
{
if (e.button != 2) return;
esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;
IBasicMap map = null;
ILayer layer = null;
object other = null;
object index = null;
//Determine what kind of item has been clicked on
axTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);
// Only implemented a context menu for NALayers. Exit if the layer is anything else.
if ((layer as INALayer) == null)
return;
axTOCControl1.SelectItem(layer);
// Set the layer into the CustomProperty.
// This is used by the other commands to know what layer was right-clicked on
// in the table of contents.
axMapControl1.CustomProperty = layer;
//Popup the correct context menu and update the TOC when it's done.
if (item == esriTOCControlItem.esriTOCControlItemLayer)
{
m_menuLayer.PopupMenu(e.x,e.y,axTOCControl1.hWnd);
ITOCControl toc = axTOCControl1.Object as ITOCControl;
toc.Update();
}
}
public bool OnContextMenu(int x, int y)
{
System.Drawing.Point pt = this.PointToClient(System.Windows.Forms.Cursor.Position);
contextMenu1.Show(this, pt);
return true;
}
private
展开阅读全文