Form1.Designer.cs
namespace experiment10
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.ToolStripfile = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripOpen = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripClose = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripEx = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripMap = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripPointSel = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripZoomIn = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripZoomOut = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripman = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripViewEntire = new System.Windows.Forms.ToolStripMenuItem();
this.ToolStripget = new System.Windows.Forms.ToolStripMenuItem();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.splitContainer3 = new System.Windows.Forms.SplitContainer();
this.axSuperWkspManager1 = new AxSuperWkspManagerLib.AxSuperWkspManager();
this.axSuperLegend1 = new AxSuperLegendLib.AxSuperLegend();
this.axSuperTopo1 = new AxSuperTopoLib.AxSuperTopo();
this.axSuperMap1 = new AxSuperMapLib.AxSuperMap();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripBtnPointSel = new System.Windows.Forms.ToolStripButton();
this.toolStripBtnZoomIn = new System.Windows.Forms.ToolStripButton();
this.toolStripBtnZoomOut = new System.Windows.Forms.ToolStripButton();
this.toolStripBtnPan = new System.Windows.Forms.ToolStripButton();
this.toolStripBtnViewEntire = new System.Windows.Forms.ToolStripButton();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.axSuperWorkspace1 = new AxSuperMapLib.AxSuperWorkspace();
this.axSuperAnalyst1 = new AxSuperAnalystLib.AxSuperAnalyst();
this.tableLayoutPanel1.SuspendLayout();
this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();
this.splitContainer3.Panel1.SuspendLayout();
this.splitContainer3.Panel2.SuspendLayout();
this.splitContainer3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.axSuperWkspManager1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.axSuperLegend1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.axSuperTopo1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.axSuperMap1)).BeginInit();
this.toolStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.axSuperWorkspace1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.axSuperAnalyst1)).BeginInit();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.menuStrip1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.statusStrip1, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.splitContainer1, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.toolStrip1, 0, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(714, 470);
this.tableLayoutPanel1.TabIndex = 0;
//
// menuStrip1
//
this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripfile,
this.ToolStripMap,
this.ToolStripget});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(714, 28);
this.menuStrip1.TabIndex = 3;
this.menuStrip1.Text = "menuStrip1";
//
// ToolStripfile
//
this.ToolStripfile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripOpen,
this.ToolStripClose,
this.ToolStripEx});
this.ToolStripfile.Name = "ToolStripfile";
this.ToolStripfile.Size = new System.Drawing.Size(51, 24);
this.ToolStripfile.Text = "文件";
//
// ToolStripOpen
//
this.ToolStripOpen.Name = "ToolStripOpen";
this.ToolStripOpen.Size = new System.Drawing.Size(174, 26);
this.ToolStripOpen.Text = "打开工作空间";
this.ToolStripOpen.Click += new System.EventHandler(this.ToolStripOpen_Click);
//
// ToolStripClose
//
this.ToolStripClose.Name = "ToolStripClose";
this.ToolStripClose.Size = new System.Drawing.Size(174, 26);
this.ToolStripClose.Text = "关闭工作空间";
this.ToolStripClose.Click += new System.EventHandler(this.ToolStripClose_Click);
//
// ToolStripEx
//
this.ToolStripEx.Name = "ToolStripEx";
this.ToolStripEx.Size = new System.Drawing.Size(174, 26);
this.ToolStripEx.Text = "退出";
this.ToolStripEx.Click += new System.EventHandler(this.ToolStripEx_Click);
//
// ToolStripMap
//
this.ToolStripMap.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripPointSel,
this.toolStripZoomIn,
this.toolStripZoomOut,
this.toolStripman,
this.toolStripViewEntire});
this.ToolStripMap.Name = "ToolStripMap";
this.ToolStripMap.Size = new System.Drawing.Size(51, 24);
this.ToolStripMap.Text = "地图";
//
// toolStripPointSel
//
this.toolStripPointSel.Name = "toolStripPointSel";
this.toolStripPointSel.Size = new System.Drawing.Size(144, 26);
this.toolStripPointSel.Text = "点选";
this.toolStripPointSel.Click += new System.EventHandler(this.toolStripPointSel_Click);
//
// toolStripZoomIn
//
this.toolStripZoomIn.Name = "toolStripZoomIn";
this.toolStripZoomIn.Size = new System.Drawing.Size(144, 26);
this.toolStripZoomIn.Text = "放大";
this.toolStripZoomIn.Click += new System.EventHandler(this.toolStripZoomIn_Click_1);
//
// toolStripZoomOut
//
this.toolStripZoomOut.Name = "toolStripZoomOut";
this.toolStripZoomOut.Size = new System.Drawing.Size(144, 26);
this.toolStripZoomOut.Text = "缩小";
this.toolStripZoomOut.Click += new System.EventHandler(this.toolStripZoomOut_Click_1);
//
// toolStripman
//
this.toolStripman.Name = "toolStripman";
this.toolStripman.Size = new System.Drawing.Size(144, 26);
this.toolStripman.Text = "漫游";
this.toolStripman.Click += new System.EventHandler(this.toolStripPan_Click);
//
// toolStripViewEntire
//
this.toolStripViewEntire.Name = "toolStripViewEntire";
this.toolStripViewEntire.Size = new System.Drawing.Size(144, 26);
this.toolStripViewEntire.Text = "全幅显示";
this.toolStripViewEntire.Click += new System.EventHandler(this.toolStripViewEntire_Click);
//
// ToolStripget
//
this.ToolStripget.Name = "ToolStripget";
this.ToolStripget.Size = new System.Drawing.Size(111, 24);
this.ToolStripget.Text = "提取面边界线";
this.ToolStripget.Click += new System.EventHandler(this.ToolStripget_Click);
//
// statusStrip1
//
this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
this.statusStrip1.Location = new System.Drawing.Point(0, 450);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(714, 20);
this.statusStrip1.TabIndex = 2;
this.statusStrip1.Text = "statusStrip1";
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(3, 63);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.splitContainer3);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.axSuperMap1);
this.splitContainer1.Size = new System.Drawing.Size(708, 384);
this.splitContainer1.SplitterDistance = 140;
this.splitContainer1.TabIndex = 0;
//
// splitContainer3
//
this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer3.Location = new System.Drawing.Point(0, 0);
this.splitContainer3.Name = "splitContainer3";
this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer3.Panel1
//
this.splitContainer3.Panel1.Controls.Add(this.axSuperWkspManager1);
this.splitContainer3.Panel1.Controls.Add(this.axSuperAnalyst1);
//
// splitContainer3.Panel2
//
this.splitContainer3.Panel2.Controls.Add(this.axSuperLegend1);
this.splitContainer3.Panel2.Controls.Add(this.axSuperTopo1);
this.splitContainer3.Size = new System.Drawing.Size(140, 384);
this.splitContainer3.SplitterDistance = 160;
this.splitContainer3.TabIndex = 0;
//
// axSuperWkspManager1
//
this.axSuperWkspManager1.Dock = System.Windows.Forms.DockStyle.Fill;
this.axSuperWkspManager1.Enabled = true;
this.axSuperWkspManager1.Location = new System.Drawing.Point(0, 0);
this.axSuperWkspManager1.Name = "axSuperWkspManager1";
this.axSuperWkspManager1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axSuperWkspManager1.OcxState")));
this.axSuperWkspManager1.Size = new System.Drawing.Size(140, 160);
this.axSuperWkspManager1.TabIndex = 0;
this.axSuperWkspManager1.LDbClick += new AxSuperWkspManagerLib._DSuperWkspManagerEvents_LDbClickEventHandler(this.axSuperWkspManager1_LDbClick);
//
// axSuperLegend1
//
this.axSuperLegend1.Dock = System.Windows.Forms.DockStyle.Fill;
this.axSuperLegend1.Enabled = true;
this.axSuperLegend1.Location = new System.Drawing.Point(0, 0);
this.axSuperLegend1.Name = "axSuperLegend1";
this.axSuperLegend1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axSuperLegend1.OcxState")));
this.axSuperLegend1.Size = new System.Drawing.Size(140, 220);
this.axSuperLegend1.TabIndex = 0;
//
// axSuperTopo1
//
this.axSuperTopo1.Enabled = true;
this.axSuperTopo1.Location = new System.Drawing.Point(85, 183);
this.axSuperTopo1.Name = "axSuperTopo1";
this.axSuperTopo1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axSuperTopo1.OcxState")));
this.axSuperTopo1.Size = new System.Drawing.Size(32, 32);
this.axSuperTopo1.TabIndex = 1;
//
// axSuperMap1
//
this.axSuperMap1.Dock = System.Windows.Forms.DockStyle.Fill;
this.axSuperMap1.Enabled = true;
this.axSuperMap1.Location = new System.Drawing.Point(0, 0);
this.axSuperMap1.Name = "axSuperMap1";
this.axSuperMap1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axSuperMap1.OcxState")));
this.axSuperMap1.Size = new System.Drawing.Size(564, 384);
this.axSuperMap1.TabIndex = 0;
this.axSuperMap1.DblClick += new System.EventHandler(this.axSuperMap1_DblClick);
this.axSuperMap1.MouseWheelEvent += new AxSuperMapLib._DSuperMapEvents_MouseWheelEventHandler(this.axSuperMap1_MouseWheelEvent);
//
// toolStrip1
//
this.toolStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripBtnPointSel,
this.toolStripBtnZoomIn,
this.toolStripBtnZoomOut,
this.toolStripBtnPan,
this.toolStripBtnViewEntire});
this.toolStrip1.Location = new System.Drawing.Point(0, 30);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(714, 25);
this.toolStrip1.TabIndex = 4;
this.toolStrip1.Text = "toolStrip1";
//
// toolStripBtnPointSel
//
this.toolStripBtnPointSel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripBtnPointSel.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripBtnPointSel.Name = "toolStripBtnPointSel";
this.toolStripBtnPointSel.Size = new System.Drawing.Size(23, 22);
this.toolStripBtnPointSel.Text = "点选";
this.toolStripBtnPointSel.ToolTipText = "点选";
this.toolStripBtnPointSel.Click += new System.EventHandler(this.toolStripPointSel_Click);
//
// toolStripBtnZoomIn
//
this.toolStripBtnZoomIn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripBtnZoomIn.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripBtnZoomIn.Name = "toolStripBtnZoomIn";
this.toolStripBtnZoomIn.Size = new System.Drawing.Size(23, 22);
this.toolStripBtnZoomIn.Text = "放大";
this.toolStripBtnZoomIn.Click += new System.EventHandler(this.toolStripZoomIn_Click_1);
//
// toolStripBtnZoomOut
//
this.toolStripBtnZoomOut.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripBtnZoomOut.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripBtnZoomOut.Name = "toolStripBtnZoomOut";
this.toolStripBtnZoomOut.Size = new System.Drawing.Size(23, 22);
this.toolStripBtnZoomOut.Text = "缩小";
this.toolStripBtnZoomOut.Click += new System.EventHandler(this.toolStripZoomOut_Click_1);
//
// toolStripBtnPan
//
this.toolStripBtnPan.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripBtnPan.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripBtnPan.Name = "toolStripBtnPan";
this.toolStripBtnPan.Size = new System.Drawing.Size(23, 22);
this.toolStripBtnPan.Text = "平移";
this.toolStripBtnPan.Click += new System.EventHandler(this.toolStripPan_Click);
//
// toolStripBtnViewEntire
//
this.toolStripBtnViewEntire.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripBtnViewEntire.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripBtnViewEntire.Name = "toolStripBtnViewEntire";
this.toolStripBtnViewEntire.Size = new System.Drawing.Size(23, 22);
this.toolStripBtnViewEntire.Text = "全屏显示";
this.toolStripBtnViewEntire.Click += new System.EventHandler(this.toolStripViewEntire_Click);
//
// openFileDialog1
//
this.openFileDialog1.FileName = "openFileDialog1";
//
// axSuperWorkspace1
//
this.axSuperWorkspace1.Enabled = true;
this.axSuperWorkspace1.Location = new System.Drawing.Point(0, 0);
this.axSuperWorkspace1.Name = "axSuperWorkspace1";
this.axSuperWorkspace1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axSuperWorkspace1.OcxState")));
this.axSuperWorkspace1.Size = new System.Drawing.Size(32, 32);
this.axSuperWorkspace1.TabIndex = 1;
//
// axSuperAnalyst1
//
this.axSuperAnalyst1.Enabled = true;
this.axSuperAnalyst1.Location = new System.Drawing.Point(49, 89);
this.axSuperAnalyst1.Name = "axSuperAnalyst1";
this.axSuperAnalyst1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axSuperAnalyst1.OcxState")));
this.axSuperAnalyst1.Size = new System.Drawing.Size(32, 32);
this.axSuperAnalyst1.TabIndex = 1;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.ControlLight;
this.ClientSize = new System.Drawing.Size(714, 470);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.axSuperWorkspace1);
this.Name = "Form1";
this.Text = "Form1";
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.splitContainer3.Panel1.ResumeLayout(false);
this.splitContainer3.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit();
this.splitContainer3.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.axSuperWkspManager1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.axSuperLegend1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.axSuperTopo1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.axSuperMap1)).EndInit();
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.axSuperWorkspace1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.axSuperAnalyst1)).EndInit();
this.ResumeLayout(false);
}
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private AxSuperMapLib.AxSuperWorkspace axSuperWorkspace1;
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.SplitContainer splitContainer3;
private AxSuperWkspManagerLib.AxSuperWkspManager axSuperWkspManager1;
private AxSuperLegendLib.AxSuperLegend axSuperLegend1;
private AxSuperTopoLib.AxSuperTopo axSuperTopo1;
private AxSuperMapLib.AxSuperMap axSuperMap1;
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem ToolStripfile;
private System.Windows.Forms.ToolStripMenuItem ToolStripOpen;
private System.Windows.Forms.ToolStripMenuItem ToolStripClose;
private System.Windows.Forms.ToolStripMenuItem ToolStripEx;
private System.Windows.Forms.ToolStripMenuItem ToolStripMap;
private System.Windows.Forms.ToolStripMenuItem toolStripPointSel;
private System.Windows.Forms.ToolStripMenuItem toolStripZoomIn;
private System.Windows.Forms.ToolStripMenuItem toolStripZoomOut;
private System.Windows.Forms.ToolStripMenuItem toolStripman;
private System.Windows.Forms.ToolStripMenuItem toolStripViewEntire;
private System.Windows.Forms.ToolStripMenuItem ToolStripget;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStripButton toolStripBtnPointSel;
private System.Windows.Forms.ToolStripButton toolStripBtnZoomIn;
private System.Windows.Forms.ToolStripButton toolStripBtnZoomOut;
private System.Windows.Forms.ToolStripButton toolStripBtnPan;
private System.Windows.Forms.ToolStripButton toolStripBtnViewEntire;
private AxSuperAnalystLib.AxSuperAnalyst axSuperAnalyst1;
}
}
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using SuperMapLib;
using System.IO;
using SuperTopoLib;
using System.Collections;
namespace experiment10
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ConnectSuperMap()
{//关联SuperMap,SuperWorkspaceManager控件
object objWSHandle = this.axSuperWorkspace1.CtlHandle;
object objSMHandle = this.axSuperMap1.CtlHandle;
axSuperLegend1.Connect(objSMHandle);
this.axSuperMap1.Connect(objWSHandle);
this.axSuperWkspManager1.Connect(objWSHandle);
ReleaseObjects(objWSHandle);
ReleaseObjects(objSMHandle);
}
private void DisConnectSuperMap()
{
axSuperWkspManager1.Disconnect();
axSuperLegend1.Disconnect();
axSuperMap1.Disconnect();
axSuperMap1.Close();
axSuperWorkspace1.Close();
axSuperMap1.Refresh();
}
private void ReleaseObjects(object superObject)
{//释放对象
if (superObject != null)
{
Marshal.ReleaseComObject(superObject);
superObject = null;
}
}
private void ControlState(seAction MapAction)
{//设置工具栏和菜单的状态
toolStripBtnPointSel.Checked = false;
toolStripPointSel.Checked = false;
toolStripBtnZoomOut.Checked = false;
toolStripZoomOut.Checked = false;
toolStripBtnZoomIn.Checked = false;
toolStripZoomIn.Checked = false;
toolStripBtnPan.Checked = false;
if (MapAction == SuperMapLib.seAction.scaSelect)
{
toolStripBtnPointSel.Checked = true;
toolStripPointSel.Checked = true;
}
else if (MapAction == SuperMapLib.seAction.scaZoomOut)
{
toolStripBtnZoomOut.Checked = true;
toolStripZoomOut.Checked = true;
}
else if (MapAction == SuperMapLib.seAction.scaZoomIn)
{
toolStripBtnZoomIn.Checked = true;
toolStripZoomIn.Checked = true;
}
}
private void ToolStripOpen_Click(object sender, EventArgs e)
{
bool blnOpen = false;
string strOpenPath = string.Empty;
this.openFileDialog1.Title = "打开工作空间";
this.openFileDialog1.FileName = "";
this.openFileDialog1.Filter = "工作空间(.smw)|*.smw";
this.openFileDialog1.InitialDirectory = System.IO.Path.GetFullPath(Application.ExecutablePath + @"\..\..\..\..\Data");
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
strOpenPath = this.openFileDialog1.FileName;
this.ConnectSuperMap();//连接工作空间
blnOpen = this.axSuperWorkspace1.Open(strOpenPath, "");//打开工作空间
if (!blnOpen)
{
MessageBox.Show("打开工作空间失败");
return;
}
else
{//设置被选择面对象的风格
soSelection objSelection = axSuperMap1.selection;
soStyle objStyle = objSelection.Style;
objStyle.BrushStyle = 0;
objStyle.PenStyle = 0;
objStyle.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(255, 190, 189)));
objStyle.PenColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(0, 0, 255)));
ReleaseObjects(objStyle);
ReleaseObjects(objSelection);
this.axSuperWkspManager1.Refresh();
axSuperLegend1.Refresh();
}
}
else
{
MessageBox.Show("打开工作空间失败");
return;
}
}
private void ToolStripClose_Click(object sender, EventArgs e)
{
axSuperWkspManager1.Disconnect();
axSuperLegend1.Disconnect();
axSuperMap1.Disconnect();
axSuperMap1.Close();
axSuperWorkspace1.Close();
axSuperWkspManager1.Refresh();
axSuperMap1.Refresh();
}
private void ToolStripEx_Click(object sender, EventArgs e)
{//退出
this.Close();
}
private void toolStripPointSel_Click(object sender, EventArgs e)
{//点选
axSuperMap1.Action = SuperMapLib.seAction.scaSelect;
ControlState(seAction.scaSelect);
}
private void toolStripZoomIn_Click_1(object sender, EventArgs e)
{
//放大
axSuperMap1.Action = SuperMapLib.seAction.scaZoomIn;
ControlState(seAction.scaZoomIn);
}
private void toolStripZoomOut_Click_1(object sender, EventArgs e)
{
//缩小
axSuperMap1.Action = SuperMapLib.seAction.scaZoomOut;
ControlState(seAction.scaZoomOut);
}
private void toolStripPan_Click(object sender, EventArgs e)
{//平移
axSuperMap1.Action = SuperMapLib.seAction.scaPan;
ControlState(seAction.scaPan);
}
private void axSuperWkspManager1_LDbClick(object sender, AxSuperWkspManagerLib._DSuperWkspManagerEvents_LDbClickEvent e)
{
switch (e.nFlag)
{
case SuperMapLib.seSelectedItemFlag.scsDataset:
{//当双击对象为数据集时,将数据集添加到地图窗口
soDataSources objDss = this.axSuperWorkspace1.Datasources;
soDataSource objDs = objDss[e.strParent];
soDatasets objDts = objDs.Datasets;
soDataset objDt = objDts[e.strSelected];
soLayers objLys = axSuperMap1.Layers;
soLayer objLy = objLys.AddDataset(objDt, true);//添加指定数据集到地图窗口中
this.axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
ReleaseObjects(objLy);
ReleaseObjects(objLys);
ReleaseObjects(objDt);
ReleaseObjects(objDs);
ReleaseObjects(objDts);
ReleaseObjects(objDss);
break;
}
case SuperMapLib.seSelectedItemFlag.scsMap:
{//当双击对象为地图时,在地图窗口中显示当前地图
bool bResult;
soLayers objLys2 = axSuperMap1.Layers;
objLys2.RemoveAll();
bResult = axSuperMap1.OpenMap(e.strSelected);
axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
ReleaseObjects(objLys2);
break;
}
case SuperMapLib.seSelectedItemFlag.scsSymbolLib:
{//当双击对象为点符号时,显示点符号编辑器
soResources objResources = this.axSuperWorkspace1.Resources;
soSymbolLib objSymbolLib = objResources.SymbolLib;
objSymbolLib.ShowEditor();
ReleaseObjects(objSymbolLib);
ReleaseObjects(objResources);
break;
}
case SuperMapLib.seSelectedItemFlag.scsLineStyleLib:
{//当双击对象为线符号时,显示线符号编辑器
soResources objResources = this.axSuperWorkspace1.Resources;
soLineStyleLib objLineStyleLib = objResources.LineStyleLib;
objLineStyleLib.ShowEditor();
ReleaseObjects(objLineStyleLib);
ReleaseObjects(objResources);
break;
}
case SuperMapLib.seSelectedItemFlag.scsFillStyleLib:
{//当双击对象为填充符号时,显示填充符号编辑器
soResources objResources = this.axSuperWorkspace1.Resources;
soFillStyleLib objFillLib = objResources.FillStyleLib;
objFillLib.ShowEditor();
ReleaseObjects(objFillLib);
ReleaseObjects(objResources);
break;
}
}
}
private void axSuperMap1_DblClick(object sender, EventArgs e)
{//双击对话框显示对象属性
soSelection objSelection = this.axSuperMap1.selection; //获得选择集;
soRecordset objRd = objSelection.ToRecordset(false); //转化为记录集;
if (objRd == null)
{
MessageBox.Show("请进行地图点选或确认点选对象", "提示");
return;
}
if (objRd.RecordCount > 0)
{
string str = "";
for (int i = 1; i <= objRd.FieldCount; i++)//提取所选对象的属性数据
{
str += objRd.GetFieldInfo(i).Name; //得到属性名
str += ":" + objRd.GetFieldValue(i).ToString() + "\n"; //得到属性值
}
MessageBox.Show(str, "属性");
}
objRd.Close();
ReleaseObjects(objSelection);
ReleaseObjects(objRd);
}
private void axSuperMap1_MouseWheelEvent(object sender, AxSuperMapLib._DSuperMapEvents_MouseWheelEvent e)
{
if (e.zDelta > 0)//当滚轮向上滚动时表示地图放大
{
axSuperMap1.Zoom(2);
axSuperMap1.Refresh();
}
else if (e.zDelta < 0)//当滚轮向下滚动时表示地图缩小
{
axSuperMap1.Zoom(0.5);
axSuperMap1.Refresh();
}
}
private void toolStripViewEntire_Click(object sender, EventArgs e)
{//全幅显示
axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
}
private void ToolStripget_Click(object sender, EventArgs e)
{
soLayers objLys = axSuperMap1.Layers;
objLys.RemoveAll();
axSuperMap1.Refresh();
soDataSources objDSs = axSuperWorkspace1.Datasources;
soDataSource objDs = objDSs[1];
soDatasets objDatasets = objDs.Datasets;
soDataset objDataset = objDatasets["Provinces_S"];
if (objDataset == null)
{
MessageBox.Show("提取面边界线失败!", "提示");
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
return;
}
soDatasetVector objDatasetv = (soDatasetVector)objDataset;
soDataset objDatasete = objDatasets["Provices_S_L"];
if (objDatasete != null)
{
objDs.DeleteDataset("Provices_S_L");
}
bool bExB = axSuperTopo1.ExtractBorder(objDatasetv, objDs, "Provices_S_L", "SmID", true);//拓扑构面
if (bExB)
{
MessageBox.Show("提取面边界线成功!", "提示");
soDataset objDataset1 = objDatasets["Provices_S_L"];
soLayer objLy1 = objLys.AddDataset(objDataset1, true);//添加指定数据集到地图窗口中
soStyle objStyle1 = objLy1.Style;
objStyle1.BrushColor = (uint)ColorTranslator.ToOle(Color.FromArgb(0, 230, 244, 191));
this.axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
axSuperWkspManager1.Refresh();
ReleaseObjects(objLy1);
ReleaseObjects(objStyle1);
ReleaseObjects(objDataset1);
}
else
{
MessageBox.Show("提取面边界线失败!", "提示");
}
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataset);
}
}
}
Form1.Designer.cs(附)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using SuperMapLib;
using System.IO;
using System.Collections;
using SuperTopoLib;
using SuperAnalystLib;
namespace experiment7
{
public partial class Form1 : Form
{
string strOpath = string.Empty;
public soRecordset gobjSelectRd = null;
public soGeoPoint gobjSelectGeoPt = null;
AnalystSetting frmAnalystSetting = null;
PathAnalyst frmPathAnalyst = null;
Layout frmLayout = null;
private soPoints m_Points = null;
private soStyle m_objStyle = null;
private soPoint m_Point = null;
private long ID;
int flag = 0;
int log = 0;
public Form1()
{
InitializeComponent();
}
private void ConnectSuperMap()
{//关联SuperMap,SuperWorkspaceManager控件
object objWSHandle = this.axSuperWorkspace1.CtlHandle;
object objSMHandle = this.axSuperMap1.CtlHandle;
axSuperLegend1.Connect(objSMHandle);
this.axSuperMap1.Connect(objWSHandle);
this.axSuperAnalyst1.Connect(objWSHandle);
this.axSuperWkspManager1.Connect(objWSHandle);
ReleaseObjects(objWSHandle);
ReleaseObjects(objSMHandle);
}
private void DisConnectSuperMap()
{
axSuperAnalyst1.Disconnect();
axSuperWkspManager1.Disconnect();
axSuperLegend1.Disconnect();
axSuperMap1.Disconnect();
axSuperMap1.Close();
axSuperWorkspace1.Close();
axSuperMap1.Refresh();
}
private void ReleaseObjects(object superObject)
{//释放对象
if (superObject != null)
{
Marshal.ReleaseComObject(superObject);
superObject = null;
}
}
private void ControlState(seAction MapAction)
{//设置工具栏和菜单的状态
toolStripPointSel.Checked = false;
toolStripZoomOut.Checked = false;
toolStripZoomIn.Checked = false;
toolStripAutoZoom.Checked = false;
toolStripPan.Checked = false;
if (MapAction == SuperMapLib.seAction.scaSelect)
{
toolStripPointSel.Checked = true;
}
else if (MapAction == SuperMapLib.seAction.scaZoomOut)
{
toolStripZoomOut.Checked = true;
}
else if (MapAction == SuperMapLib.seAction.scaZoomIn)
{
toolStripZoomIn.Checked = true;
}
else if (MapAction == SuperMapLib.seAction.scaZoomFree)
{
toolStripAutoZoom.Checked = true;
}
else if (MapAction == SuperMapLib.seAction.scaPan)
{
toolStripPan.Checked = true;
}
}
private void ToolStripOpenWS_Click(object sender, EventArgs e)
{
bool blnOpen = false;
string strOpenPath = string.Empty;
this.openFileDialog1.Title = "打开工作空间";
this.openFileDialog1.FileName = "";
this.openFileDialog1.Filter = "工作空间(.smw)|*.smw";
this.openFileDialog1.InitialDirectory = System.IO.Path.GetFullPath(Application.ExecutablePath + @"\..\..\..\..\Data");
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
strOpenPath = this.openFileDialog1.FileName;
this.strOpath = strOpenPath;
this.ConnectSuperMap();//连接工作空间
blnOpen = this.axSuperWorkspace1.Open(strOpenPath, "");//打开工作空间
if (!blnOpen)
{
MessageBox.Show("打开工作空间失败");
return;
}
else
{//设置被选择面对象的风格
if (this.axSuperMap1.OpenMap("图斑线@topo"))
{
flag = 0;
log = 0;
ToolStripDataTackle.Enabled = true;
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh();
}
if(this.axSuperMap1.OpenMap("长春市区图"))
{
flag = 0;
log = 0;
mnuBufferQuery.Enabled = true;
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh();
}
if (this.axSuperMap1.OpenMap("土地利用图"))
{
flag = 0;
log = 0;
mnuOverlay.Enabled = true;
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh();
}
if (this.axSuperMap1.OpenMap("Changchun1"))
{
log = 0;
flag = 1;
this.WindowState = System.Windows.Forms.FormWindowState.Normal;
this.frmPathAnalyst = new PathAnalyst(this);
this.mnuNetAnalyst.Enabled = true;
Critical.Enabled = true;
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh();
}
if (this.axSuperMap1.OpenMap("Grid_Analysis"))
{
flag = 0;
log = 1;
mnuGridAnalyst.Enabled = true;
this.axSuperMap1.Layers.AddDataset(axSuperWorkspace1.Datasources[1].Datasets["AWS"], true);
this.axSuperWkspManager1.Refresh();
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh();
this.axSuperLegend1.Refresh();
}
if (this.axSuperMap1.OpenMap("基础地图"))
{
flag = 0;
log = 0;
专题图ToolStripMenuItem1.Enabled = true;
mnuOutputMapAsFile.Enabled = true;
mnuSaveMap.Enabled = true;
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh();
}
if (this.axSuperMap1.OpenMap("2003年各省农林牧渔业总产值绝对数(亿元)"))
{
flag = 0;
log = 0;
布局排版ToolStripMenuItem.Enabled = true;
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh();
}
soSelection objSelection = axSuperMap1.selection;
soStyle objStyle = objSelection.Style;
objStyle.BrushStyle = 0;
objStyle.PenStyle = 0;
objStyle.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(255, 190, 189)));
objStyle.PenColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(0, 0, 255)));
ReleaseObjects(objStyle);
ReleaseObjects(objSelection);
this.axSuperWkspManager1.Refresh();
axSuperLegend1.Refresh();
}
}
else
{
MessageBox.Show("打开工作空间失败");
return;
}
}
private void Form1_Load(object sender, EventArgs e)
{
axSuperMap1.BorderStyle = 1; //设置 SuperMap 控件的边框样式,BorderStyle = 0 时,为无边框;BorderStyle = 1 时,为单线边框
soSelection mapSelection = axSuperMap1.selection;
soStyle selStyle = mapSelection.Style;
selStyle.BrushStyle = 2;
selStyle.BrushColor = 16711680;
selStyle.BrushBackTransparent = true;
ReleaseObjects(mapSelection);
ReleaseObjects(selStyle);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{//退出系统时断开所有连接
axSuperMap1.Close();
axSuperWkspManager1.Disconnect();
axSuperLegend1.Disconnect();
axSuperMap1.Disconnect();
axSuperMap1.Close();
this.axSuperWorkspace1.Close();
axSuperMap1.Refresh();
}
private void ToolStripCloseWS_Click_Click(object sender, EventArgs e)
{//关闭工作空间
if (axSuperMap1.OpenMap("图斑线@topo"))
{
ToolStripDataTackle.Enabled = false;
}
if (axSuperMap1.OpenMap("长春市区图"))
{
mnuBufferQuery.Enabled = false;
}
if (axSuperMap1.OpenMap("土地利用图"))
{
mnuOverlay.Enabled = false;
}
if (axSuperMap1.OpenMap("Changchun1"))
{
mnuNetAnalyst.Enabled = false;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.Critical.Enabled = false;
this.Logistics.Enabled = false;
this.ServiceArea.Enabled = false;
this.ClosestFacility.Enabled = false;
this.TSPPath.Enabled = false;
this.mnuPath.Enabled = false;
}
if (this.axSuperMap1.OpenMap("Grid_Analysis"))
{
mnuGridAnalyst.Enabled = false;
}
if (this.axSuperMap1.OpenMap("基础地图"))
{
专题图ToolStripMenuItem1.Enabled = false;
mnuOutputMapAsFile.Enabled = false;
mnuSaveMap.Enabled = false;
}
布局排版ToolStripMenuItem.Enabled = false;
axSuperWkspManager1.Disconnect();
axSuperLegend1.Disconnect();
axSuperMap1.Disconnect();
axSuperMap1.Close();
axSuperWorkspace1.Close();
axSuperWkspManager1.Refresh();
axSuperMap1.Refresh();
}
private void ToolStripEx(object sender, EventArgs e)
{//退出
this.Close();
}
private void toolStripPointSel_Click(object sender, EventArgs e)
{//点选
axSuperMap1.Action = SuperMapLib.seAction.scaSelect;
ControlState(seAction.scaSelect);
}
private void toolStripZoomIn_Click_1(object sender, EventArgs e)
{
//放大
axSuperMap1.Action = SuperMapLib.seAction.scaZoomIn;
ControlState(seAction.scaZoomIn);
}
private void toolStripZoomOut_Click_1(object sender, EventArgs e)
{
//缩小
axSuperMap1.Action = SuperMapLib.seAction.scaZoomOut;
ControlState(seAction.scaZoomOut);
}
private void toolStripAutoZoom_Click_1(object sender, EventArgs e)
{
//自由缩放
axSuperMap1.Action = SuperMapLib.seAction.scaZoomFree;
ControlState(seAction.scaZoomFree);
}
private void toolStripPan_Click(object sender, EventArgs e)
{
//平移
axSuperMap1.Action = SuperMapLib.seAction.scaPan;
ControlState(seAction.scaPan);
}
private void toolStripViewEntire_Click(object sender, EventArgs e)
{
//全幅显示
axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
}
private void ToolStriprefresh_Click(object sender, EventArgs e)
{
axSuperMap1.Refresh();
}
private void axSuperWkspManager1_LDbClick(object sender, AxSuperWkspManagerLib._DSuperWkspManagerEvents_LDbClickEvent e)
{
switch (e.nFlag)
{
case SuperMapLib.seSelectedItemFlag.scsDataset:
{//当双击对象为数据集时,将数据集添加到地图窗口
if(log == 1)
{
soDataSources objDss = null;
objDss = this.axSuperWorkspace1.Datasources;
soDataSource objDs = objDss[e.strParent];
soDatasets objDts = objDs.Datasets;
soDataset objDt = objDts[e.strSelected];
if (objDt.Type == seDatasetType.scdTabular)
{
soDatasetVector objDv = (soDatasetVector)objDt;
soRecordset objRec = objDv.Query("", false, null, "");
FrmAttibute frmChl = new FrmAttibute(objRec);
frmChl.ShowDialog(this);
Marshal.ReleaseComObject(objRec);
objRec = null;
Marshal.ReleaseComObject(objDv);
objDv = null;
Marshal.ReleaseComObject(objDt);
objDt = null;
Marshal.ReleaseComObject(objDs);
objDs = null;
Marshal.ReleaseComObject(objDts);
objDts = null;
}
else
{
soLayers objLys = this.axSuperMap1.Layers;
if (objLys.Count != 0)
{
objLys.RemoveAll();
}
soLayer objLy = objLys.AddDataset(objDt, true);
this.axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
Marshal.ReleaseComObject(objLy);
objLy = null;
Marshal.ReleaseComObject(objLys);
objLys = null;
Marshal.ReleaseComObject(objDt);
objDt = null;
Marshal.ReleaseComObject(objDs);
objDs = null;
Marshal.ReleaseComObject(objDts);
objDts = null;
Marshal.ReleaseComObject(objDss);
objDss = null;
}
}
else
{
soDataSources objDss = this.axSuperWorkspace1.Datasources;
soDataSource objDs = objDss[e.strParent];
soDatasets objDts = objDs.Datasets;
soDataset objDt = objDts[e.strSelected];
soLayers objLys = axSuperMap1.Layers;
soLayer objLy = objLys.AddDataset(objDt, true);//添加指定数据集到地图窗口中
this.axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
ReleaseObjects(objLy);
ReleaseObjects(objLys);
ReleaseObjects(objDt);
ReleaseObjects(objDs);
ReleaseObjects(objDts);
ReleaseObjects(objDss);
}
break;
}
case SuperMapLib.seSelectedItemFlag.scsMap:
{//当双击对象为地图时,在地图窗口中显示当前地图
bool bResult;
soLayers objLys2 = axSuperMap1.Layers;
objLys2.RemoveAll();
bResult = axSuperMap1.OpenMap(e.strSelected);
axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
ReleaseObjects(objLys2);
break;
}
case SuperMapLib.seSelectedItemFlag.scsSymbolLib:
{//当双击对象为点符号时,显示点符号编辑器
soResources objResources = this.axSuperWorkspace1.Resources;
soSymbolLib objSymbolLib = objResources.SymbolLib;
objSymbolLib.ShowEditor();
ReleaseObjects(objSymbolLib);
ReleaseObjects(objResources);
break;
}
case SuperMapLib.seSelectedItemFlag.scsLineStyleLib:
{//当双击对象为线符号时,显示线符号编辑器
soResources objResources = this.axSuperWorkspace1.Resources;
soLineStyleLib objLineStyleLib = objResources.LineStyleLib;
objLineStyleLib.ShowEditor();
ReleaseObjects(objLineStyleLib);
ReleaseObjects(objResources);
break;
}
case SuperMapLib.seSelectedItemFlag.scsFillStyleLib:
{//当双击对象为填充符号时,显示填充符号编辑器
soResources objResources = this.axSuperWorkspace1.Resources;
soFillStyleLib objFillLib = objResources.FillStyleLib;
objFillLib.ShowEditor();
ReleaseObjects(objFillLib);
ReleaseObjects(objResources);
break;
}
}
}
private void axSuperMap1_DblClick(object sender, EventArgs e)
{//双击对话框显示对象属性
soSelection objSelection = this.axSuperMap1.selection; //获得选择集;
soRecordset objRd = objSelection.ToRecordset(false); //转化为记录集;
if (objRd == null)
{
MessageBox.Show("请进行地图点选", "提示");
return;
}
if (objRd.RecordCount > 0)
{
string str = "";
for (int i = 1; i <= objRd.FieldCount; i++)//提取所选对象的属性数据
{
str += objRd.GetFieldInfo(i).Name; //得到属性名
str += ":" + objRd.GetFieldValue(i).ToString() + "\n"; //得到属性值
}
MessageBox.Show(str, "属性");
}
objRd.Close();
ReleaseObjects(objSelection);
ReleaseObjects(objRd);
}
private void axSuperMap1_MouseWheelEvent(object sender, AxSuperMapLib._DSuperMapEvents_MouseWheelEvent e)
{
if (e.zDelta > 0)//当滚轮向上滚动时表示地图放大
{
axSuperMap1.Zoom(2);
axSuperMap1.Refresh();
}
else if (e.zDelta < 0)//当滚轮向下滚动时表示地图缩小
{
axSuperMap1.Zoom(0.5);
axSuperMap1.Refresh();
}
}
private void axSuperLegend1_Modified(object sender, EventArgs e)
{
axSuperMap1.Refresh();
}
private void ToolStripLineToRegion_Click(object sender, EventArgs e)
{//线数据拓扑构面 如果数据源中已存在DLTB2数据集,请先删除,否则拓扑构面失败
soLayers objLys = axSuperMap1.Layers;
objLys.RemoveAll(); //移除所有数据集
soDataSources objDSs = axSuperWorkspace1.Datasources;
soDataSource objDs = objDSs["topo"];
soDatasets objDatasets = objDs.Datasets;
soDataset objDataset = objDatasets["DLJX"];
if (objDataset == null)
{
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
return;
}
axSuperTopo1.CleanIdenticalVertices = true; //去除冗余点
axSuperTopo1.CleanRepeatedLines = true; //去除重复线
axSuperTopo1.ExtendDangleLines = true; //延伸长悬线
axSuperTopo1.IntersectLines = true; //弧段求交
axSuperTopo1.CleanOvershootDangles = true; //删除短悬线
axSuperTopo1.MergePseudoNodes = true; //合并假结点
axSuperTopo1.MergeRedundantNodes = true; //合并邻近端点
axSuperTopo1.Clean(objDataset); //对一个线或者网络数据集进行弧段求交、去除冗余点、合并邻近点、去除重复线、合并假结点、去除短悬线、长悬线延伸等拓扑处理操作。
bool boolPolygon = axSuperTopo1.BuildPolygons(objDataset, objDs, "DLTB2");//拓扑构面
if (boolPolygon)
{
MessageBox.Show("创建拓扑多边形成功!", "提示");
soDataset objDataset1 = objDatasets["DLTB1"];
soDataset objDatasetR = objDatasets["DLTB2"];
axSuperMap1.OpenMap("图斑线@topo");//重新打开地图
soLayer objLy1 = objLys.AddDataset(objDataset1, true);//添加指定数据集到地图窗口中
soLayer objLy2 = objLys.AddDataset(objDatasetR, true);//添加指定数据集到地图窗口中
soStyle objStyle1 = objLy1.Style;
objStyle1.BrushColor = (uint)ColorTranslator.ToOle(Color.FromArgb(0, 230, 244, 191));
soStyle objStyle2 = objLy2.Style;
objStyle2.BrushColor = (uint)ColorTranslator.ToOle(Color.FromArgb(0, 255, 0, 0));
this.axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
axSuperWkspManager1.Refresh();
ReleaseObjects(objLy1);
ReleaseObjects(objLy2);
ReleaseObjects(objStyle1);
ReleaseObjects(objStyle2);
ReleaseObjects(objDatasetR);
ReleaseObjects(objDataset1);
}
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataset);
}
private void ToolStripCheckRepeatRegion_Click(object sender, EventArgs e)
{//检查重复面
soLayers objLys = axSuperMap1.Layers;
objLys.RemoveAll(); //移除所有图层
soDataSources objDSs = axSuperWorkspace1.Datasources;
soDataSource objDs = objDSs["topo"];
soDatasets objDatasets = objDs.Datasets;
soDataset objDataset = objDatasets["DLTB2"];
if (objDataset == null)
{
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
return;
}
soDataset objDatasetCompare = objDatasets["DLTB1"];
if (objDatasetCompare == null)
{
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataset);
return;
}
soTopoCheck objTopoCheck = new soTopoCheckClass();
soDatasetVector objCheckVector;
soDatasetVector objCompareVector;
soDatasetVector objDatasetVector;
objCheckVector = (soDatasetVector)objDataset;
objCompareVector = (soDatasetVector)objDatasetCompare;
objTopoCheck.PreprocessData = true;
String strVectorName = "errorResult";//下行代码为检查重复面
objDatasetVector = objTopoCheck.CheckTopoErrorEx(objDataset, objDatasetCompare, 3, objDs, strVectorName);
if (objDatasetVector != null)
{
soDataset objDataset1 = objDatasets["DLTB1"];
soDataset objDataset2 = objDatasets["DLTB2"];
soDataset objDatasetR = objDatasets["errorResult"];
axSuperMap1.OpenMap("图斑线@topo");//重新打开地图
soLayer objLy1 = objLys.AddDataset(objDataset1, true);//添加指定数据集到地图窗口中
soLayer objLy2 = objLys.AddDataset(objDataset2, true);//添加指定数据集到地图窗口中
soLayer objLyR = objLys.AddDataset(objDatasetR, true);//添加指定数据集到地图窗口中
soStyle objStyle1 = objLy1.Style;
objStyle1.BrushColor = (uint)ColorTranslator.ToOle(Color.FromArgb(0, 230, 244, 191));
soStyle objStyle2 = objLy2.Style;
objStyle2.BrushColor = (uint)ColorTranslator.ToOle(Color.FromArgb(0, 115, 178, 255));
soStyle objStyle = objLyR.Style;
objStyle.BrushColor = (uint)ColorTranslator.ToOle(Color.Red);
this.axSuperMap1.ViewEntire();
axSuperMap1.Refresh();
axSuperWkspManager1.Refresh();
axSuperLegend1.Refresh();
ReleaseObjects(objLy1);
ReleaseObjects(objLy2);
ReleaseObjects(objLyR);
ReleaseObjects(objStyle1);
ReleaseObjects(objStyle2);
ReleaseObjects(objStyle);
ReleaseObjects(objDatasetR);
ReleaseObjects(objDataset1);
ReleaseObjects(objDataset2);
}
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataset);
ReleaseObjects(objDatasetCompare);
ReleaseObjects(objCheckVector);
ReleaseObjects(objCompareVector);
ReleaseObjects(objDatasetVector);
ReleaseObjects(objTopoCheck);
}
private void ToolStripRemoveRepeatRegion_Click(object sender, EventArgs e)
{//去除重复面
soLayers objLys = axSuperMap1.Layers;
objLys.RemoveAll(); //移除所有图层
soDataSources objDSs = axSuperWorkspace1.Datasources;
soDataSource objDs = objDSs["topo"];
soDatasets objDatasets = objDs.Datasets;
soDataset objDataset = objDatasets["DLTB2"];
if (objDataset == null)
{
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
return;
}
soDataset objDatasetR = objDatasets["errorResult"];
if (objDatasetR == null)
{
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataset);
return;
}
soDatasetVector objDtvE = (soDatasetVector)objDatasetR;//错误结果数据集
soDatasetVector objDtvBeCheck = (soDatasetVector)objDataset;//被处理的数据集
soDataset objDatasetResult = objDs.CreateDataset("Result", seDatasetType.scdRegion, seDatasetOption.scoDefault, null); //新建用于存放结果的数据集
if (objDatasetResult == null)
{
//如果没建成功有可能是数据源里已有这个数据集了
objDatasetResult = objDatasets["Result"];
}
soDatasetVector objDtvResult = (soDatasetVector)objDatasetResult;
soOverlayAnalyst objAnalyst = new soOverlayAnalyst(); //新建叠加分析对象
if (objAnalyst.Erase(objDtvBeCheck, objDtvE, objDtvResult)) //擦除
{
MessageBox.Show("数据集裁剪成功!", "提示");
}
soLayer objLayerR = objLys.AddDataset(objDatasetR, true);
soLayer objLayerResult = objLys.AddDataset(objDatasetResult, true);
soStyle objStyleResult = objLayerResult.Style;
objStyleResult.BrushColor = (uint)ColorTranslator.ToOle(Color.FromArgb(0, 230, 244, 191));
soStyle objStyleR = objLayerR.Style;
objStyleR.BrushColor = (uint)ColorTranslator.ToOle(Color.FromArgb(0, 255, 0, 0));
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
axSuperWkspManager1.Refresh();
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataset);
ReleaseObjects(objDatasetR);
ReleaseObjects(objLayerR);
ReleaseObjects(objLayerResult);
ReleaseObjects(objStyleR);
ReleaseObjects(objLayerResult);
ReleaseObjects(objDtvE);
ReleaseObjects(objDtvBeCheck);
ReleaseObjects(objDatasetResult);
ReleaseObjects(objDtvResult);
ReleaseObjects(objAnalyst);
}
private void ToolStripDataUnion_Click(object sender, EventArgs e)
{//两数据集合并 将Result中的记录追加到DLTB1里
soLayers objLys = axSuperMap1.Layers;
objLys.RemoveAll(); //移除所有图层
soDataSources objDSs = axSuperWorkspace1.Datasources;
soDataSource objDs = objDSs["topo"];
soDatasets objDatasets = objDs.Datasets;
soDataset objDataset = objDatasets["DLTB1"];
if (objDataset == null)
{
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
return;
}
soDataset objDatasetR = objDatasets["Result"];
if (objDatasetR == null)
{
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataset);
return;
}
soDatasetVector objDtvAppend = (soDatasetVector)objDatasetR;
soRecordset objRecordset = objDtvAppend.Query("", true, null, "");
soDatasetVector objDtvBeApppend = (soDatasetVector)objDataset;
if (objDtvBeApppend.Append(objRecordset, true)) //数据集追加
{
MessageBox.Show("数据集追加成功", "提示");
}
soLayer objLayer = objLys.AddDataset(objDataset, true);
soStyle objStyle = objLayer.Style;
objStyle.BrushColor = (uint)ColorTranslator.ToOle(Color.FromArgb(0, 230, 244, 191));
objRecordset.Close();
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
axSuperWkspManager1.Refresh();
ReleaseObjects(objLys);
ReleaseObjects(objDSs);
ReleaseObjects(objDs);
ReleaseObjects(objStyle);
ReleaseObjects(objLayer);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataset);
ReleaseObjects(objDatasetR);
ReleaseObjects(objDtvAppend);
ReleaseObjects(objRecordset);
ReleaseObjects(objDtvBeApppend);
}
private void mnuCreateBuffer_Click(object sender, EventArgs e)
{//创建缓冲区
//设置缓冲区对象的风格
soStyle objStyle = new soStyleClass();
objStyle.BrushStyle = 2;
objStyle.BrushBackTransparent = true;
objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Blue);
objStyle.PenWidth = 5;
objStyle.BrushColor = (uint)ColorTranslator.ToOle(Color.DarkRed);
soTrackingLayer objTrackingLayer = axSuperMap1.TrackingLayer;
soSelection objSelect = axSuperMap1.selection;//获得选择集,选择火炬传递路线
soRecordset objSelectRd = objSelect.ToRecordset(true);//将选择集转化为记录集
objSelectRd.MoveFirst();
soGeoRegion objBufferRegion = null;
objTrackingLayer.ClearEvents();
for (int iRecordCount = 1; iRecordCount <= objSelectRd.RecordCount; iRecordCount++)
{
soGeometry objSelectGeo = objSelectRd.GetGeometry();
if (objSelectGeo.Type == seGeometryType.scgLine)
{
soGeoLine objGeoLine = (soGeoLine)objSelectGeo;
soSpatialOperator objspOper = objGeoLine.SpatialOperator;
//进行缓冲区分析
objBufferRegion = objspOper.Buffer(200, 20);//根据200米范围作查询,光滑系数设置为20
}
if (objBufferRegion != null)
{
soTextPart oTp = new soTextPartClass();
soGeoText oGt = new soGeoTextClass();
soTextStyle oTStyle = new soTextStyleClass();
oTp.Text = "200米警戒范围";
oTp.x = objBufferRegion.CentroidPoint.x;
oTp.y = objBufferRegion.CentroidPoint.y;
oGt.AddPart(oTp);
oTStyle.Align = seTextAlign.sctMiddleCenter;
oTStyle.FontHeight = 200;
oTStyle.Color = (uint)ColorTranslator.ToOle(Color.Red);
oTStyle.Bold = true;
oGt.TextStyle = oTStyle;
objTrackingLayer.AddEvent((soGeometry)oGt, null, "");//将文本添加到跟踪层上显示
objTrackingLayer.AddEvent((soGeometry)objBufferRegion, objStyle, "");//将缓冲范围添加到跟踪层上显示
Marshal.ReleaseComObject(objBufferRegion);
objBufferRegion = null;
Marshal.ReleaseComObject(oTp);
oTp = null;
Marshal.ReleaseComObject(oTStyle);
oTStyle = null;
Marshal.ReleaseComObject(oGt);
oGt = null;
}
Marshal.ReleaseComObject(objSelectGeo);
objSelectGeo = null;
objSelectRd.MoveNext();
}
objTrackingLayer.Refresh();
mnuQuery.Enabled = true;
Marshal.ReleaseComObject(objSelectRd);
objSelectRd = null;
Marshal.ReleaseComObject(objSelect);
objSelect = null;
Marshal.ReleaseComObject(objStyle);
objStyle = null;
Marshal.ReleaseComObject(objTrackingLayer);
objTrackingLayer = null;
}
private void mnuQuery_Click(object sender, EventArgs e)
{//缓冲区查询
soTrackingLayer objTrackingLayer = axSuperMap1.TrackingLayer;
//设置点风格
soStyle objStyle = new soStyleClass();
objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Blue);
objStyle.PenWidth = 20;
objStyle.SymbolSize = 24;
objStyle.SymbolStyle = 66;
soGeoEvent objGeoEv = objTrackingLayer.get_Event(2);
soGeometry objTrackedGeo = objGeoEv.geometry;
soGeoRegion objGeoregion = (soGeoRegion)objTrackedGeo;
soLayers objLys = axSuperMap1.Layers;
//查询政府单位这个图层的信息
soLayer objLy = objLys["Government@changchun"];
soDataset objDt = objLy.Dataset;
soDatasetVector objDtv = (soDatasetVector)objDt;
//进行空间查询,查询所有包含在缓冲区内的政府单位点对象
soRecordset objRd = objDtv.QueryEx((soGeometry)objGeoregion, seSpatialQueryMode.scsContaining, "Code=3");
if (objRd != null)
{
objRd.MoveFirst();
for (int iRecordCount = 1; iRecordCount <= objRd.RecordCount; iRecordCount++)
{
soGeometry oGeo = objRd.GetGeometry();
soTextStyle oTStyl = new soTextStyleClass();
oTStyl.FontHeight = 200;
oTStyl.Align = seTextAlign.sctBottomLeft;
soTextPart oTp = new soTextPartClass();
oTp.Text = "警力:" + objRd.GetFieldValue("Power").ToString() + "人";
soGeoPoint oGp = (soGeoPoint)oGeo;
oTp.x = oGp.x;
oTp.y = oGp.y;
soGeoText oGt = new soGeoTextClass();
oGt.AddPart(oTp);
oGt.TextStyle = oTStyl;
objTrackingLayer.AddEvent(oGeo, objStyle, "");//跟踪层添加点对象
objTrackingLayer.AddEvent((soGeometry)oGt, null, "");//跟踪层添加文本
Marshal.ReleaseComObject(oTStyl);
oTStyl = null;
Marshal.ReleaseComObject(oGeo);
oGeo = null;
Marshal.ReleaseComObject(oGp);
oGp = null;
Marshal.ReleaseComObject(oGt);
oGt = null;
Marshal.ReleaseComObject(oTp);
oTp = null;
objRd.MoveNext();
}
objTrackingLayer.Refresh();
}
else
{
MessageBox.Show("没有符合条件的记录", "提示");
return;
}
Marshal.ReleaseComObject(objRd);
objRd = null;
Marshal.ReleaseComObject(objDtv);
objDtv = null;
Marshal.ReleaseComObject(objDt);
objDt = null;
Marshal.ReleaseComObject(objLy);
objLy = null;
Marshal.ReleaseComObject(objLys);
objLys = null;
Marshal.ReleaseComObject(objGeoregion);
objGeoregion = null;
Marshal.ReleaseComObject(objTrackedGeo);
objTrackedGeo = null;
Marshal.ReleaseComObject(objStyle);
objStyle = null;
Marshal.ReleaseComObject(objGeoEv);
objGeoEv = null;
Marshal.ReleaseComObject(objTrackingLayer);
objTrackingLayer = null;
}
private void AddPointInfo(soGeoPoint objGp, ListView lview)
{
//向listview添加所选对象的相关内容
lview.Items.Add((lview.Items.Count + 1).ToString());
lview.Items[lview.Items.Count - 1].SubItems.Add(objGp.ID.ToString());
lview.Items[lview.Items.Count - 1].SubItems.Add(objGp.x.ToString());
lview.Items[lview.Items.Count - 1].SubItems.Add(objGp.y.ToString());
}
private void axSuperMap1_GeometrySelected(object sender, AxSuperMapLib._DSuperMapEvents_GeometrySelectedEvent e)
{//选择几何对象
if (flag == 1)
{
soSelection objSelect = axSuperMap1.selection;
soStyle objStyle = new soStyle();
objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Red);
objStyle.PenWidth = 40;
objSelect.Style = objStyle;
if (objSelect.Dataset.Type == seDatasetType.scdPoint)
{
this.gobjSelectRd = objSelect.ToRecordset(false);
this.gobjSelectRd.MoveFirst();
m_Point = new soPoint();
this.gobjSelectGeoPt = (soGeoPoint)gobjSelectRd.GetGeometry();
ID = gobjSelectRd.GetID();
AddPointInfo(this.gobjSelectGeoPt, this.frmPathAnalyst.listView1);
Marshal.ReleaseComObject(objSelect);
objSelect = null;
}
else
{
MessageBox.Show("请选择点对象!", "提示");
}
Marshal.ReleaseComObject(objStyle);
objStyle = null;
}
else
{
soSelection objSelect = this.axSuperMap1.selection;
if (objSelect.Count != 0)
{
this.mnuCreateBuffer.Enabled = true;
}
else
{
this.mnuCreateBuffer.Enabled = false;
}
}
}
private void ToolStripclear_Click(object sender, EventArgs e)
{
soTrackingLayer objTrl = axSuperMap1.TrackingLayer;
objTrl.ClearEvents();
objTrl.Refresh();
axSuperMap1.Refresh();
Marshal.ReleaseComObject(objTrl);
objTrl = null;
}
private ArrayList GetPoints(string filePath)
{//读取文本文件,获得坐标点信息
FileStream fileStream = File.OpenRead(filePath);
StreamReader streamReader = new StreamReader(fileStream);
string strTmp = "";
ArrayList arrayList = new ArrayList();
while ((strTmp = streamReader.ReadLine()) != null)
{
//获得坐标
string[] strXY = strTmp.Split(',');
int tmpCount = strXY.Length;
for (int i = 0; i < tmpCount; i++)
{
arrayList.Add(strXY[i]);
}
}
fileStream.Close();
return arrayList;
}
private void StaticRegion(soGeoRegion geoRegion)
{
//对绘制的或者通过读入文本文件中的坐标值构造的面对象进行处理
soStyle regionStyle = new soStyle();
regionStyle.PenColor = 0;
regionStyle.BrushColor = 255;
regionStyle.BrushStyle = 0;
regionStyle.PenStyle = 0;
regionStyle.BrushOpaqueRate = 80;
soTrackingLayer trackLayer = axSuperMap1.TrackingLayer;//跟踪层
trackLayer.ClearEvents();
trackLayer.AddEvent(geoRegion as soGeometry, regionStyle, "");//添加绘制的面到跟踪层
ReleaseObjects(regionStyle);
ReleaseObjects(trackLayer);
soLayers mapLayers = axSuperMap1.Layers;
soLayer mapLayer = mapLayers["地类图斑@某县"];//地类图斑图层
if (mapLayer == null)
{
ReleaseObjects(mapLayers);
MessageBox.Show("请打开土地利用图");
return;
}
soDataset dataSet = mapLayer.Dataset;//地类图斑数据集
soDatasetVector dataSetV = dataSet as soDatasetVector;
soDataSources dataSources = axSuperWorkspace1.Datasources;
soDataSource dataSource = dataSources[1];
string dtName = dataSource.GetUnoccupiedDatasetName("clip");//用clip数据集作为模板创建一个新数据集存储结果,因此结果数据集都以clip开头
soDataset newDt = dataSource.CreateDatasetFrom(dtName, dataSetV);
soDatasetVector newDtV = newDt as soDatasetVector;
string staticInfo = "";
soOverlayAnalyst overlayAnalyt = new soOverlayAnalyst();
bool bClip = overlayAnalyt.Clip(dataSetV, geoRegion, newDtV);//用新绘制或者导入的面对地类图斑进行裁剪
if (bClip == true)
{
soStrings fieldList = new soStrings();
fieldList.Add("DLMC as 地类名称"); //设置查询返回的字段
fieldList.Add("Sum(TBMJ) as 图斑面积"); //统计图斑面积
soRecordset recordSet = newDtV.Query("", false, fieldList, "group by DLMC");//统计裁剪结果中包含的各地类及面积
if (recordSet != null)
{
string strTmp = "";
while (recordSet.IsEOF() == false)
{
strTmp = "地类名称:" + recordSet.GetFieldValue(1).ToString() +
",图斑面积:" + recordSet.GetFieldValue(2).ToString();
staticInfo += strTmp + "\n";
recordSet.MoveNext();
}
}
recordSet.Close();
ReleaseObjects(recordSet);
ReleaseObjects(fieldList);
axSuperWkspManager1.Refresh();
}
else
{
staticInfo = "裁剪失败";
}
ReleaseObjects(mapLayers);
ReleaseObjects(mapLayer);
ReleaseObjects(dataSet);
ReleaseObjects(dataSetV);
ReleaseObjects(dataSources);
ReleaseObjects(dataSource);
ReleaseObjects(newDt);
ReleaseObjects(newDtV);
ReleaseObjects(overlayAnalyt);
axSuperMap1.EnsureVisibleGeometry(geoRegion as soGeometry, 3);
axSuperMap1.Refresh();
MessageBox.Show(staticInfo, "统计结果");//显示分类统计的结果
}
private void mnuOverlayDraw_Click(object sender, EventArgs e)
{//绘制建设用地面对象
axSuperMap1.Action = seAction.scaTrackPolygon;
}
private void mnuOverlayImport_Click(object sender, EventArgs e)
{//导入建设用地
openFileDialog1.Title = "导入坐标文件";
openFileDialog1.Filter = "坐标文件(*.txt)|*.txt";
openFileDialog1.FileName = "";
openFileDialog1.InitialDirectory = Application.StartupPath + @"..\..\..\..\Data\";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog1.FileName;
ArrayList points = GetPoints(filePath);
int pointCount = points.Count / 2;
soPoints tmpPoints = new soPoints();
for (int i = 0; i < pointCount; i++)
{
double dx = Convert.ToDouble(points[i * 2]);
double dy = Convert.ToDouble(points[i * 2 + 1]);
tmpPoints.Add2(dx, dy);//构造点集合,读取的文本文件中的坐标值
}
//tmpPoints.Add(tmpPoints[1]);
soGeoRegion geoRegion = new soGeoRegion();
geoRegion.AddPart(tmpPoints); //构造面对象
StaticRegion(geoRegion); //构造的新面对象
ReleaseObjects(geoRegion);
ReleaseObjects(tmpPoints);
}
}
private void mnuOverlayUnion_Click(object sender, EventArgs e)
{//统计各村土地情况
soLayers mapLayers = axSuperMap1.Layers;
soLayer mapLayerDLTB = mapLayers["地类图斑@某县"];//地类图斑图层
soLayer mapLayerDistrict = mapLayers["行政区@某县"];//行政区图层
if (mapLayerDLTB == null || mapLayerDistrict == null)
{
ReleaseObjects(mapLayers);
MessageBox.Show("请打开土地利用图");
return;
}
soDataset dataSetDLTB = mapLayerDLTB.Dataset;//地类图斑数据集
soDatasetVector dataSetVDLTB = dataSetDLTB as soDatasetVector;
soDataset dataSetDistrict = mapLayerDistrict.Dataset;//行政区数据集
soDatasetVector dataSetVDistrict = dataSetDistrict as soDatasetVector;
soDataSources dataSources = axSuperWorkspace1.Datasources;
soDataSource dataSource = dataSources[1];
soDataset dataSetUnionResult = dataSource.Datasets["UnionResult"]; //一个新建的面数据集作为模板,用于创建一个新的面数据集,保存合并的结果
soDatasetVector dataSetVUnionResult = dataSetUnionResult as soDatasetVector;
string dtNameUnion = dataSource.GetUnoccupiedDatasetName("UnionResult"); //用UnionResult面数据集作为模板创建一个新数据集存储结果,因此结果数据集都以UnionResult开头
soDataset newDtUnion = dataSource.CreateDatasetFrom(dtNameUnion, dataSetVUnionResult);//采用模板创建一个面数据集
soDatasetVector newDtVUnion = newDtUnion as soDatasetVector;
string staticInfo = "与泉村土地利用情况如下:" + "\n"; //统计一个村的情况
soOverlayAnalyst overlayAnalyt = new soOverlayAnalyst(); //叠加分析对象
bool bUnion = overlayAnalyt.Union(dataSetVDLTB, dataSetVDistrict, newDtVUnion, true); //用新绘制或者导入的面对地类图斑进行裁剪
if (bUnion == true)
{
soStrings fieldList = new soStrings();
fieldList.Add("DLMC as 地类名称"); //设置查询返回的字段
fieldList.Add("Sum(TBMJ) as 图斑面积"); //统计各图斑类型的总面积
soRecordset recordSet = newDtVUnion.Query("XZQMC like '与泉村' ", false, fieldList, "group by DLMC");//统计合并结果中“与泉村”这个面包含的各地类类型及面积
if (recordSet != null)
{
string strTmp = "";
while (recordSet.IsEOF() == false)
{
strTmp = "地类类型:" + recordSet.GetFieldValue(1).ToString() +
",图斑面积:" + recordSet.GetFieldValue(2).ToString();
staticInfo += strTmp + "\n";
recordSet.MoveNext();
}
}
recordSet.Close();
ReleaseObjects(recordSet);
ReleaseObjects(fieldList);
axSuperWkspManager1.Refresh();
}
else
{
MessageBox.Show("合并失败");
}
ReleaseObjects(mapLayers);
ReleaseObjects(mapLayerDLTB);
ReleaseObjects(dataSetDLTB);
ReleaseObjects(dataSetVDLTB);
ReleaseObjects(mapLayerDistrict);
ReleaseObjects(dataSetDistrict);
ReleaseObjects(dataSetVDistrict);
ReleaseObjects(dataSources);
ReleaseObjects(dataSource);
ReleaseObjects(newDtUnion);
ReleaseObjects(newDtVUnion);
ReleaseObjects(dataSetUnionResult);
ReleaseObjects(dataSetVUnionResult);
ReleaseObjects(overlayAnalyt);
MessageBox.Show(staticInfo, "统计信息");//显示分类统计的结果
}
private void axSuperMap1_Tracked(object sender, EventArgs e)
{
soGeometry geometry = axSuperMap1.TrackedGeometry;
soGeoRegion geoRegion = geometry as soGeoRegion;
StaticRegion(geoRegion); //绘制的新面对象
ReleaseObjects(geometry);
ReleaseObjects(geoRegion);
}
private void ClearTrackLayer()
{
soTrackingLayer trackLayer = this.axSuperMap1.TrackingLayer;
trackLayer.ClearEvents();
trackLayer.Refresh();
ReleaseObjects(trackLayer);
this.axSuperMap1.Refresh();
}
private void mnuAnalystSetting_Click(object sender, EventArgs e)
{//网络分析环境设置
this.frmAnalystSetting = new AnalystSetting(this);
if (this.frmAnalystSetting.ShowDialog() == DialogResult.OK)
{
TSPPath.Enabled = frmAnalystSetting.ItemEnabled;
Logistics.Enabled = frmAnalystSetting.ItemEnabled;
mnuPath.Enabled = frmAnalystSetting.ItemEnabled;
this.axSuperAnalyst1.NetworkAnalyst.Tolerance = frmAnalystSetting.Tolerance;
this.axSuperAnalyst1.NetworkAnalyst.NetworkSetting.NodeIDField = frmAnalystSetting.NetworkSetting.NodeIDField;
this.axSuperAnalyst1.NetworkAnalyst.NetworkSetting.EdgeIDField = frmAnalystSetting.NetworkSetting.EdgeIDField;
this.axSuperAnalyst1.NetworkAnalyst.NetworkSetting.FTWeightField = frmAnalystSetting.NetworkSetting.FTWeightField; ;
this.axSuperAnalyst1.NetworkAnalyst.NetworkSetting.TFWeightField = frmAnalystSetting.NetworkSetting.TFWeightField;
}
}
private void mnuPath_Click(object sender, EventArgs e)
{ //最佳路径分析
this.frmPathAnalyst = new PathAnalyst(this);
this.frmPathAnalyst.Show();
}
private void TSPPathToolStripMenuItem_Click(object sender, EventArgs e)
{//旅行商分析,先不指定终止点
soNetworkAnalystEx objNetworkAnalyst = this.axSuperAnalyst1.NetworkAnalyst;
objNetworkAnalyst.OutputDatasourceAlias = "result";
soNetworkSetting objNetworkSetting = objNetworkAnalyst.NetworkSetting;
objNetworkSetting.NetworkDataset = (soDatasetVector)this.axSuperWorkspace1.Datasources[1].Datasets["RoadNet"];
System.DateTime now = System.DateTime.Now;
String strNowDate = "" + now.Year + now.Month + now.Day + now.Hour + now.Minute + now.Second + now.Millisecond;
soPathResultSetting objPathResult = new soPathResultSetting();
soLongArray objLongArray = new soLongArrayClass();
soDataSource objDataSource = axSuperWorkspace1.Datasources[1];
soDatasets objDatasets = objDataSource.Datasets;
//旅行商经过的站点,使用网络结点,需历经的 ID 为(5415,4538,4313,3832,4280)
objLongArray.Add(5415);
objLongArray.Add(4538);
objLongArray.Add(4313);
objLongArray.Add(3832);
objLongArray.Add(4280);
//行驶导引表信息
soPathResultInfo objPathInfo = new soPathResultInfo();
objPathResult.PathTableEnabled = true; //创建行驶导引表
string strDtName = "引导表";
objPathResult.PathTableName = strDtName; //设置行驶导引表的名称
objPathResult.RouteDatasetEnabled = true; //创建结果路由数据集
string strpathname = "Path";
objPathResult.RouteDatasetName = strpathname; //结果路由数据集名称
objPathResult.NodeIDsEnabled = true; //获取分析结果路线的结点ID
objPathResult.EdgeIDsEnabled = true; //获取分析结果路线的弧段ID
objPathResult.EdgeNameField = "NameTime"; //行驶导引表中的弧段名称字段
objPathResult.NodeNameField = "NAME_E"; //行驶导引表中的节点名称字段
objPathResult.ResultCostEnabled = true; //输出结果耗费信息
bool bTspResult = objNetworkAnalyst.TSPPathEx2(objLongArray, objPathResult, objPathInfo, false, 10000);
if (bTspResult == true)
{
//oLayers this.axSuperMap1.Layers = this.axSuperMap1.Layers;
soLayer objLy = this.axSuperMap1.Layers[1];
soDataset objDt = objLy.Dataset;
soDatasetVector objDtv = (soDatasetVector)objDt;
soTrackingLayer oTLy;
//设置添加跟踪层上的风格
oTLy = this.axSuperMap1.TrackingLayer;
this.m_objStyle = new soStyle();
this.m_objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Purple);
this.m_objStyle.PenWidth = 8;
this.m_objStyle.SymbolSize = 50;
////获取数据源数据集集合
soDataSources objDss = this.axSuperWorkspace1.Datasources;
soDataSource objDs = objDss[objNetworkAnalyst.OutputDatasourceAlias];
soDatasets objDts = objDs.Datasets;
oTLy.ClearEvents();
/////////////////////////////////////////////////////////////////////////////////
//添加路由结果在跟踪层上
soDataset objPathdt = objDts[strpathname];
soDatasetVector objPathdtv = (soDatasetVector)objPathdt;
if (objPathdtv == null) return;
soRecordset objPathrst = objPathdtv.Query("", true, null, "");
soGeoLineM objGeoLineM = null;
soPointMs objPtMs = null;
soPointM objPtM = null;
soGeoPoint objTempGeopt = new soGeoPointClass();
for (int i = 1; i <= objPathrst.RecordCount; i++)
{
soGeometry objtempgeo = objPathrst.GetGeometry();
objGeoLineM = (soGeoLineM)objtempgeo;
objPtMs = objGeoLineM.GetPartAt(1); //获取线标点串
objPtM = objPtMs[objPtMs.Count]; //取得最后一个线标点
objTempGeopt.x = objPtM.x;
objTempGeopt.y = objPtM.y;
oTLy.AddEvent(objtempgeo, this.m_objStyle, "");
}
oTLy.Refresh(); //刷新跟踪层,刷新工作空间管理器
}
else
{
MessageBox.Show("旅行商分析失败!", "提示");
return;
}
this.axSuperMap1.Action = seAction.scaNull;
}
private void 选择事件点ToolStripMenuItem_Click(object sender, EventArgs e)
{// 设置事件点
axSuperMap1.Action = seAction.scaSelect;
}
private void 查找设施点ToolStripMenuItem_Click(object sender, EventArgs e)
{//进行最近设施点查找
if (ID <= 0)
{
MessageBox.Show("请先设置网络分析站点!", "提示");
return;
}
ClearTrackLayer();
soDataSources objDss = this.axSuperWorkspace1.Datasources;
soDataSource objDs = objDss[1];
soDatasets objDts = objDs.Datasets;
soDataset objDt = objDts["Hospital"];
if (objDt == null) return;
soDatasetVector objFacDtv = (soDatasetVector)objDt;
//获取设施点串
soPoints objFacilitiesPts = new soPointsClass();
soRecordset objFacRst = objFacDtv.Query("", true, null, "");
int nCount = objFacRst.RecordCount;
//取到点对象再将其添加到点串中
while (!objFacRst.IsEOF())
{
soGeometry objFacGeo = objFacRst.GetGeometry();
soGeoPoint objFacGeopt = (soGeoPoint)objFacGeo;
objFacilitiesPts.Add2(objFacGeopt.x, objFacGeopt.y);
objFacRst.MoveNext();
}
soGeoLineMs objGeoLineMs = new soGeoLineMsClass();
soGeoLineM objGeoLineM = new soGeoLineMClass();
soTrackingLayer objTrackLy = null;
soStyle objStyle = new soStyleClass();
objTrackLy = this.axSuperMap1.TrackingLayer;
objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Yellow);
objStyle.PenWidth = 500;
soNetworkAnalystEx objNetworkAnalyst = this.axSuperAnalyst1.NetworkAnalyst;
objNetworkAnalyst.OutputDatasourceAlias = "result";
soNetworkSetting objNetworkSetting = objNetworkAnalyst.NetworkSetting;
objNetworkSetting.NetworkDataset = (soDatasetVector)this.axSuperWorkspace1.Datasources[1].Datasets["RoadNet"];
System.DateTime now = System.DateTime.Now;
String strNowDate = "" + now.Year + now.Month + now.Day + now.Hour + now.Minute + now.Second + now.Millisecond;
//最近设施查找结果信息
soPathResultInfo objPathResInfo = new soPathResultInfoClass();
//最近设施查找结果设置
soPathResultSetting objPathResult = new soPathResultSettingClass();
//创建行驶导引表
objPathResult.PathTableEnabled = true;
string strDtName = "引导表" + strNowDate;
//设置行驶导引表的名称
objPathResult.PathTableName = strDtName;
objPathResult.RouteObjectsEnabled = true;
//创建结果路由数据集
objPathResult.RouteDatasetEnabled = true;
string strpathname = "Path" + strNowDate;
//结果路由数据集名称
objPathResult.RouteDatasetName = strpathname;
//获取分析结果路线的结点ID
objPathResult.NodeIDsEnabled = true;
//获取分析结果路线的弧段ID
objPathResult.EdgeIDsEnabled = true;
//行驶导引表中的弧段名称字段
objPathResult.EdgeNameField = "RoadName";
//行驶导引表中的结点名称字段
objPathResult.NodeNameField = "SmNodeID";
//输出结果耗费信息
objPathResult.ResultCostEnabled = true;
m_Point.x = gobjSelectGeoPt.x;
m_Point.y = gobjSelectGeoPt.y;
//查找的设施点数为3,查找半径为1000米
bool bResult = objNetworkAnalyst.ClosestFacilityEx2(m_Point, objFacilitiesPts, 3, objPathResult, objPathResInfo, true, 1000);
if (bResult)
{
objGeoLineMs = objPathResInfo.ResultRouteObjects;
if (objGeoLineMs != null)
{
MessageBox.Show("查找出的最近路径有:" + objGeoLineMs.Count.ToString() + "条,请放大地图查看!", "查询结果");
int nLinMsCount;
nLinMsCount = objGeoLineMs.Count;
objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Purple);
objStyle.PenWidth = 5;
for (int i = 1; i <= nLinMsCount; i++)
{
//获取到GeoLineMs中的路由对象
objGeoLineM = objGeoLineMs[i];
//将查询得到的路径添加在跟踪层上
objTrackLy.AddEvent((soGeometry)objGeoLineM, objStyle, "最近路径");
objTrackLy.Refresh();
}
}
else
{
MessageBox.Show("获取路由集合对象失败,请检查参数设置是否正确!", "提示");
return;
}
}
else
{
MessageBox.Show("最近设施查找失败,请检查设置的参数是否正确!", "提示");
soError objerror = new soErrorClass();
MessageBox.Show(objerror.LastErrorMsg.ToString(), "错误原因提示");
Marshal.ReleaseComObject(objerror);
objerror = null;
return;
}
this.axSuperMap1.Action = seAction.scaNull;
}
private void 分析ToolStripMenuItem_Click(object sender, EventArgs e)
{//服务区分析
ClearTrackLayer();
soDataSources objDss = this.axSuperWorkspace1.Datasources;
soDataSource objDs = objDss[1];
soNetworkAnalystEx objNetworkAnalyst = axSuperAnalyst1.NetworkAnalyst;
objNetworkAnalyst.OutputDatasourceAlias = "result";
soNetworkSetting objNetworkSetting = objNetworkAnalyst.NetworkSetting;
objNetworkSetting.NetworkDataset = (soDatasetVector)this.axSuperWorkspace1.Datasources[1].Datasets["RoadNet"];
soDoubleArray objDoubleArray = new soDoubleArrayClass();
//给定服务区半径
objDoubleArray.Add(1000);
//定义生成的结果路由数据集的名称
string strServiceLineM = string.Empty;
//定义生成的结果服务区数据集名称
string strServiceArea = string.Empty;
System.DateTime now = System.DateTime.Now;
String strNowDate = "" + now.Year + now.Month + now.Day + now.Hour + now.Minute + now.Second + now.Millisecond;
strServiceLineM = "ServiceLineM" + strNowDate;
strServiceArea = "ServiceRegion" + strNowDate;
m_Points = new soPointsClass();
m_Point = new soPoint();
m_Point.x = gobjSelectGeoPt.x;
m_Point.y = gobjSelectGeoPt.y;
//中心点点串中添加在地图窗口上点击获得到的点
m_Points.Add(m_Point);
bool bResult = objNetworkAnalyst.ServiceAreaEx(m_Points, objDoubleArray, true, false, strServiceLineM, strServiceArea);
if (bResult == true)
{
soDataSources objDatasources = axSuperWorkspace1.Datasources;
soDataSource objDataSource = objDatasources[objNetworkAnalyst.OutputDatasourceAlias];
soDatasets objDatasets = objDataSource.Datasets;
soDataset objDataset = objDatasets[strServiceArea];
if (objDataset != null)
{
soLayers objLys = axSuperMap1.Layers;
objLys.AddDataset(objDataset, true);
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
//以下代码为变量释放
Marshal.ReleaseComObject(objDatasources);
objDatasources = null;
Marshal.ReleaseComObject(objDataSource);
objDataSource = null;
Marshal.ReleaseComObject(objDatasets);
objDatasets = null;
Marshal.ReleaseComObject(objDataset);
objDataset = null;
Marshal.ReleaseComObject(objLys);
objLys = null;
}
}
else
{
MessageBox.Show("服务区分析失败!", "提示");
return;
}
this.axSuperMap1.Action = seAction.scaNull;
}
private void LogisticsToolStripMenuItem_Click(object sender, EventArgs e)
{
ClearTrackLayer();
soDataSource objDataSource = axSuperWorkspace1.Datasources[1];
soDatasets objDatasets = objDataSource.Datasets;
//获取到网路数据集
soDataset objNetDt = objDatasets["RoadNet"];
soDatasetVector objNetDtv = (soDatasetVector)objNetDt;
soLongArray objLongArry = new soLongArrayClass();
SuperAnalystLib.soNetworkAnalystEx analystEx = axSuperAnalyst1.NetworkAnalyst;
analystEx.OutputDatasourceAlias = "result";
//获取配送中心点
soDataset objCenterPointsDt = objDatasets["Point"];
soDatasetVector objCenterPointsDtv = (soDatasetVector)objCenterPointsDt;
soRecordset objCenterPtRst = objCenterPointsDtv.Query("", true, null, "");
int nRstCount = objCenterPtRst.RecordCount;
soPoints objCenterPts = new soPointsClass();
for (int i = 1; i <= nRstCount; i++)
{
soGeometry objTempGeo = objCenterPtRst.GetGeometry();
soGeoPoint objTempGeoPt = (soGeoPoint)objTempGeo;
objCenterPts.Add2(objTempGeoPt.x, objTempGeoPt.y);
objCenterPtRst.MoveNext();
}
//获取配送目的地
soDataset objPointsDt = objDatasets["TransportCompany"];
soDatasetVector objPointsDtv = (soDatasetVector)objPointsDt;
soRecordset objPtRst = objPointsDtv.Query("", true, null, "");
int nCount = objPtRst.RecordCount;
soPoints objPts = new soPointsClass();
for (int j = 1; j <= nCount; j++)
{
soGeometry objTempGeoPt = objPtRst.GetGeometry();
soGeoPoint objTempGeoPoint = (soGeoPoint)objTempGeoPt;
objPts.Add2(objTempGeoPoint.x, objTempGeoPoint.y);
objPtRst.MoveNext();
}
//行驶导引表信息
soPathResultSetting objPathResult = new soPathResultSetting();
soPathResultInfo objPathInfo = new soPathResultInfo();
System.DateTime now = System.DateTime.Now;
String strNowDate = "" + now.Year + now.Month + now.Day + now.Hour + now.Minute + now.Second + now.Millisecond;
objPathResult.PathTableEnabled = true; //创建行驶导引表
string strDtName = "引导表" + strNowDate;
objPathResult.PathTableName = strDtName; //设置行驶导引表的名称
objPathResult.RouteDatasetEnabled = true; //创建结果路由数据集
string strpathname = "Path" + strNowDate;
objPathResult.RouteDatasetName = strpathname; //结果路由数据集名称
objPathResult.NodeIDsEnabled = true; //获取分析结果路线的结点ID
objPathResult.EdgeIDsEnabled = true; //获取分析结果路线的弧段ID
objPathResult.EdgeNameField = "SmID"; //行驶导引表中的弧段名称字段
objPathResult.NodeNameField = "SmID"; //行驶导引表中的节点名称字段
objPathResult.ResultCostEnabled = true; //输出结果耗费信息
//进行物流配送分析
bool bResult = analystEx.Logistics(objCenterPts, objPts, objLongArry, objPathResult, objPathInfo, false);
if (bResult)
{
MessageBox.Show("物流配送分析成");
ClosestFacility.Enabled = frmAnalystSetting.ItemEnabled;
ServiceArea.Enabled = frmAnalystSetting.ItemEnabled;
soStyle style = new soStyleClass();
style.PenColor = (uint)ColorTranslator.ToOle(Color.Black);
style.PenStyle = 0;
style.PenWidth = 10;
soTrackingLayer oTLy = axSuperMap1.TrackingLayer;
//添加路由结果在跟踪层上
soDataSource objDs = axSuperWorkspace1.Datasources[analystEx.OutputDatasourceAlias];
soDatasets objDts = objDs.Datasets;
soDataset objPathdt = objDts[strpathname];
soDatasetVector objPathdtv = (soDatasetVector)objPathdt;
if (objPathdtv == null) return;
soRecordset objPathrst = objPathdtv.Query("", true, null, "");
soGeoLineM objGeoLineM = null;
soGeoPoint objTempGeopt = new soGeoPointClass();
for (int i = 1; i <= objPathrst.RecordCount; i++)
{
soGeometry objtempgeo = objPathrst.GetGeometry();
objGeoLineM = (soGeoLineM)objtempgeo;
this.axSuperMap1.TrackingLayer.AddEvent(objtempgeo, style, "GeoLineM" + i);
objPathrst.MoveNext();
}
oTLy.Refresh(); //刷新跟踪层
}
else
{
MessageBox.Show("分析失败", "提示");
return;
}
this.axSuperMap1.Action = seAction.scaNull;
}
private void 通达点分析ToolStripMenuItem_Click(object sender, EventArgs e)
{//通达点分析
if (ID <= 0)
{
MessageBox.Show("请先设置网络分析站点!", "提示");
return;
}
//清除跟踪层
ClearTrackLayer();
soGeoLineMs objGeoLineMs = new soGeoLineMsClass();
soGeoLineM objGeoLineM = new soGeoLineMClass();
soTrackingLayer objTrackLy = null;
soStyle objStyle = new soStyleClass();
objTrackLy = this.axSuperMap1.TrackingLayer;
//通达点样式
objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.DarkBlue);
objStyle.SymbolStyle = 1;
soNetworkAnalyst objNetworkAnalyst = new soNetworkAnalyst();
soDataset objDt = null;
soLayer objLy = null;
soLayers objLys = this.axSuperMap1.Layers;
for (Int32 i = 1; i < objLys.Count + 1; i++)
{
objLy = objLys[i];
if (objLy.Dataset.Type == seDatasetType.scdNetwork)
{
objDt = objLy.Dataset;
break;
}
}
soDatasetVector objDtv = (soDatasetVector)objDt;
if (objDt != null)
{
soSelection selection = objNetworkAnalyst.FindConnectedNodes(objDtv, (Int32)ID, sePathFindingDirection.scdBoth, 2);
if (selection.Count > 0)
{
MessageBox.Show("查找出的通达点有:" + selection.Count.ToString() + "个", "查询结果");
soRecordset recordset = selection.ToRecordset(true);
if (recordset != null)
{
recordset.MoveFirst();
soGeometry geometry = null;
while (!recordset.IsEOF())
{
geometry = recordset.GetGeometry();
String strTag = String.Format("{0}@{1}", "通达点", recordset.GetID());
objTrackLy.AddEvent(geometry, objStyle, strTag);
recordset.MoveNext();
}
objTrackLy.Refresh();
recordset.Close();
recordset = null;
geometry = null;
}
}
}
else
{
MessageBox.Show("没有找到用于分析的网络数据集!", "提示");
}
}
private void ClearTrackLayertoolStripMenuItem_Click(object sender, EventArgs e)
{
ClearTrackLayer();
}
private void mnuInterPolate_Click(object sender, EventArgs e)
{//空间插值
soSurfaceAnalyst objSurface = null;
soInterpolateOperator objInterpolate = null;
soDataSources objDss = null;
soDataSource objDs = null;
soDatasets objDts = null;
soDataset objDt = null;
soDatasetVector objDtv = null;
soLayers objLys = null;
soLayer objLy = null;
try
{
objLys = axSuperMap1.Layers;
objLys.RemoveAll();
axSuperMap1.Refresh();
//栅格表面分析
objSurface = axSuperAnalyst1.SurfaceAnalyst;//获得表面分析对象
objInterpolate = objSurface.Interpolation;//获得空间插值分析对象
objDss = axSuperWorkspace1.Datasources;
objDs = objDss[1];
objDts = objDs.Datasets;
objDt = objDts["AWS"];
if (objDt == null)
{
return;
}
objDtv = (soDatasetVector)objDt;
string strFieldName = "气温";
string strNewDtRName = "CZRaster";
bool bOKName = objDs.IsAvailableDatasetName(strNewDtRName);
if (!bOKName)
{
bool aa = objLys.RemoveAt("CZRaster@radar");
axSuperMap1.Refresh();
Marshal.ReleaseComObject(objLys);
objLys = null;
objDs.DeleteDataset("CZRaster");
axSuperWkspManager1.Refresh();
}
//设置查找点的查找模式
soSearchRadiusParam objSearchOption = new soSearchRadiusParam();
int iPtCount = 9;
double dRLength = 5;
//设置变长查找,点数为5,最大半径设为0则对全幅范围做插值
objSearchOption.SetVariant(iPtCount, dRLength);
soDatasetRaster objNewRaster = null;
//使用IDW方法插值
objNewRaster = objInterpolate.IDW(objDtv, strFieldName, objSearchOption, 2, objDs, strNewDtRName);
if (objNewRaster != null)
{
MessageBox.Show("IDW插值分析成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
axSuperWkspManager1.Refresh();
objLys = axSuperMap1.Layers;
objLys.RemoveAll();
//添加结果数据图层
objLy = objLys.AddDataset((soDataset)objNewRaster, true);
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
Marshal.ReleaseComObject(objNewRaster);
objNewRaster = null;
Marshal.ReleaseComObject(objLys);
objLys = null;
Marshal.ReleaseComObject(objLy);
objLy = null;
}
else
{
MessageBox.Show("IDW插值分析失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
Marshal.ReleaseComObject(objSearchOption);
objSearchOption = null;
Marshal.ReleaseComObject(objDs);
objDs = null;
Marshal.ReleaseComObject(objDss);
objDss = null;
Marshal.ReleaseComObject(objDtv);
objDtv = null;
Marshal.ReleaseComObject(objDt);
objDt = null;
Marshal.ReleaseComObject(objDts);
objDts = null;
Marshal.ReleaseComObject(objInterpolate);
objInterpolate = null;
Marshal.ReleaseComObject(objSurface);
objSurface = null;
}
catch (System.Exception ex)
{
}
}
private void mnuIsoLine_Click(object sender, EventArgs e)
{//提取等值线
string strDt = "";
double dBase;
double iSmooth;
double dInterval;
soDatasetVector objDv = null;
soDatasetRaster objDataR = null;
//soDataSource objDataScource = null;
soDataSource objDsSr = null;
seSmoothMethod smMethod;
soSurfaceAnalyst objSurAnl = null;
soSurfaceOperator objSurOpe = null;
soLayers objLys = null;
try
{
//设置表面分析对象
objSurAnl = axSuperAnalyst1.SurfaceAnalyst;
objSurOpe = objSurAnl.Surface;
objLys = axSuperMap1.Layers;
objDsSr = axSuperWorkspace1.Datasources[1];
//设置被提取等值线的栅格数据集,即之前插值生成的栅格数据集
objDataR = (soDatasetRaster)objDsSr.Datasets["CZRaster"];
objSurAnl.AnalysisEnvironment.OutputDatasourceAlias = objDsSr.Alias;
//设置光滑方法为磨角法
smMethod = seSmoothMethod.scsmPolish;
if (!objDsSr.IsAvailableDatasetName("IsoLine"))
{
objLys.RemoveAt("IsoLine@radar");
objDsSr.DeleteDataset("IsoLine");
Marshal.ReleaseComObject(objLys);
objLys = null;
axSuperMap1.Refresh();
axSuperWkspManager1.Refresh();
}
//等值间距10
dInterval = 10;
//基准值为栅格数据的最小值
dBase = 18.658669;
//光滑系数为3
iSmooth = 3;
strDt = "IsoLine";
objDv = objSurOpe.IsoLineEx(objDataR, strDt, dInterval, dBase, smMethod, iSmooth, false, true, false);
if (objDv == null)
{
MessageBox.Show("提取等值线失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
Marshal.ReleaseComObject(objDsSr);
objDsSr = null;
Marshal.ReleaseComObject(objDataR);
objDataR = null;
axSuperWkspManager1.Refresh();
return;
}
else
{
MessageBox.Show("提取等值线成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
axSuperMap1.OpenMap("Grid_Analysis");
axSuperMap1.Refresh();
axSuperLegend1.Refresh();
axSuperWkspManager1.Refresh();
Marshal.ReleaseComObject(objDv);
objDv = null;
Marshal.ReleaseComObject(objDataR);
objDataR = null;
Marshal.ReleaseComObject(objDsSr);
objDsSr = null;
Marshal.ReleaseComObject(objSurAnl);
objSurAnl = null;
Marshal.ReleaseComObject(objSurOpe);
objSurOpe = null;
}
}
catch (System.Exception ex)
{
}
}
private void mnuStatisticsEx_Click(object sender, EventArgs e)
{//分带统计
soGridAnalystEx objGridAnalyst;
soStatisticOperator objStatOperator;
soDataSource objds;
soDatasetRaster objValueR; //值栅格
soDataset objZoneDt; //分带数据集
soDatasetRaster objOutR; //统计结果栅格
try
{
objGridAnalyst = axSuperAnalyst1.GridAnalyst;
objStatOperator = objGridAnalyst.Statistics;
objds = axSuperWorkspace1.Datasources[1];
objValueR = objds.Datasets["PDRaster"] as soDatasetRaster;//值栅格
objZoneDt = objds.Datasets["DLTB"];//分带数据集
if (!objds.IsAvailableDatasetName("Stat_Raster"))
{
soLayers objLys = axSuperMap1.Layers;
objLys.RemoveAll();
objds.DeleteDataset("Stat_Raster");
Marshal.ReleaseComObject(objLys);
objLys = null;
axSuperMap1.Refresh();
axSuperWkspManager1.Refresh();
axSuperLegend1.Refresh();
}
if (!objds.IsAvailableDatasetName("Stat_Table"))
{
bool aa = objds.DeleteDataset("Stat_Table");
axSuperWkspManager1.Refresh();
}
//分带统计
objOutR = objStatOperator.OverlayStatisticsEx(objZoneDt, "DLBM", objValueR, seStatisticMode.scsMajority, "Stat_Raster", "Stat_Table", true, objds, objds, true);
if (objOutR == null)
{
MessageBox.Show("分带统计失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
axSuperWkspManager1.Disconnect();
axSuperLegend1.Disconnect();
axSuperMap1.Disconnect();
axSuperMap1.Close();
axSuperWorkspace1.Close();
axSuperWkspManager1.Refresh();
axSuperMap1.Refresh();
this.ConnectSuperMap();//连接工作空间
this.axSuperWorkspace1.Open(strOpath, "");//打开工作空间
if (this.axSuperMap1.OpenMap("Grid_Analysis"))
{
flag = 0;
log = 1;
mnuGridAnalyst.Enabled = true;
this.axSuperMap1.Layers.AddDataset(axSuperWorkspace1.Datasources[1].Datasets["AWS"], true);
this.axSuperWkspManager1.Refresh();
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh();
this.axSuperLegend1.Refresh();
}
MessageBox.Show("分带统计成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
axSuperWkspManager1.Refresh();
}
Marshal.ReleaseComObject(objGridAnalyst);
objGridAnalyst = null;
Marshal.ReleaseComObject(objStatOperator);
objStatOperator = null;
Marshal.ReleaseComObject(objds);
objds = null;
Marshal.ReleaseComObject(objValueR);
objValueR = null;
Marshal.ReleaseComObject(objZoneDt);
objZoneDt = null;
Marshal.ReleaseComObject(objOutR);
objOutR = null;
}
catch (System.Exception ex)
{
}
}
private void mnuLayerStyle_Click(object sender, EventArgs e)
{//采用已有的数据,制作我国主要的商品粮基地地图
//设置面图层/ 文本图层的风格
//首先打开“基础地图”
this.axSuperMap1.OpenMap("基础地图");
this.axSuperMap1.Refresh();
//添加图层
soDataSources objDataSources = this.axSuperWorkspace1.Datasources;
soDataSource objDataSource = objDataSources[1];
soDatasets objDatasets = objDataSource.Datasets;
soDataset objDt = objDatasets["主要商品粮基地"];//根据名称获得专题数据集
soDataset objDtText = objDatasets["商品粮基地注记"];//根据名称获得专题数据集
if (objDt == null)
{
MessageBox.Show("数据源中没有‘主要商品粮基地’面数据集");
ReleaseObjects(objDataSource);
ReleaseObjects(objDatasets);
return;
}
soLayers objLayers = this.axSuperMap1.Layers;
soLayer objLayer = objLayers["主要商品粮基地@China"];//根据图层名称获得专题图层
soLayer objLayerText = objLayers["商品粮基地注记@China"];//根据图层名称获得专题图层
soLayer objLayerMainCities = objLayers["主要城市@China"];
objLayerMainCities.Visible = false; //设置该图层不可见
if (objLayer == null)
{
objLayer = objLayers.AddDataset(objDt, true);//如果该图层不在当前地图窗口中,打开该数据集
}
if (objLayerText == null)
{
objLayerText = objLayers.AddDataset(objDtText, true);//打开数据集
}
//设置面图层的风格
soStyle objStyle = new soStyleClass();
//objStyle.BrushStyle = 1;
objStyle.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(255, 140, 85)));
objStyle.PenColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(255, 0, 128)));
objStyle.PenWidth = 1;
objLayer.Style = objStyle; //设置面图层风格
//设置文本的风格
soDatasetVector objDtVText = (soDatasetVector)objDtText;
bool bEditable = objLayers.SetEditableLayer(objLayerText); //设置文本图层可编辑,才可修改文本风格
soTextStyle objTextStyle = new soTextStyleClass();
objTextStyle.FontName = "黑体"; //字体名称
objTextStyle.Color = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(0, 0, 0)));
objTextStyle.BgColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.Black));
objTextStyle.FixedSize = false;
objTextStyle.FontWidth = 50000; //字体宽度
objTextStyle.FontHeight = 100000;
objTextStyle.Transparent = true;
objTextStyle.Bold = true; //字体加粗
//objTextStyle.Outline = true;
soRecordset objRd = objDtVText.Query("", true, null, "");//查询出所有的文本记录
objRd.MoveFirst();
for (int i = 1; i <= objRd.RecordCount; i++)
{
soGeoText objGeoText = (soGeoText)objRd.GetGeometry();//获得文本几何对象
objGeoText.TextStyle = objTextStyle;//设置文本对象的风格
objRd.Edit(); //锁定记录
objRd.SetGeometry((soGeometry)objGeoText);//设置文本风格
objRd.Update(); //更新数据
objRd.MoveNext();
ReleaseObjects(objGeoText);
}
objRd.Close();
this.axSuperMap1.ViewEntire();
this.axSuperLegend1.Refresh();
ReleaseObjects(objRd);
ReleaseObjects(objTextStyle);
ReleaseObjects(objDtVText);
ReleaseObjects(objStyle);
ReleaseObjects(objLayers);
ReleaseObjects(objLayer);
ReleaseObjects(objDtText);
ReleaseObjects(objDt);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataSource);
ReleaseObjects(objDataSources);
}
private void mnuThemeUnique_Click(object sender, EventArgs e)
{//制作单值专题图,显示中国温度带的划分
//首先打开“基础地图”,叠加“温度带的划分”面数据集
this.axSuperMap1.OpenMap("基础地图");
this.axSuperMap1.Refresh();
//判断并添加‘温度带的划分’面数据集到基础地图上
soDataSources objDataSources = this.axSuperWorkspace1.Datasources;
soDataSource objDataSource = objDataSources[1];
soDatasets objDatasets = objDataSource.Datasets;
soDataset objDt = objDatasets["我国温度带的划分"];
if (objDt == null)
{
MessageBox.Show("数据源中没有‘温度带的划分’面数据集");
ReleaseObjects(objDataSource);
ReleaseObjects(objDatasets);
return;
}
//步骤一:获得单值专题图对象
soLayer objLayer = null;
soThemeUnique objThemeUnique = null;
soLayers objLayers = this.axSuperMap1.Layers;
objLayer = objLayers["我国温度带的划分@China"];//获得专题图层
if (objLayer == null)
{
objLayer = objLayers.AddDataset(objDt, false);//打开数据集
}
objThemeUnique = objLayer.ThemeUnique;//获得单值专题图对象
//步骤二:设置单值专题图中的必须参数
objThemeUnique.Enable = true;//专题图可见
objThemeUnique.Field = "code"; //字段
//类似于添加所有值
objThemeUnique.MakeDefault(); //制作缺省的单值专题图
//步骤三:为每个不同的等级设置风格颜色
soColors objColors = new soColors();
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(182, 189, 243)));
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(218, 192, 224)));
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(153, 210, 115)));
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(253, 235, 151)));
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(254, 194, 105)));
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(236, 157, 70)));
for (int i = 1; i <= objThemeUnique.ValueCount; i++)
{
soStyle objStyle = new soStyleClass();
objStyle.BrushColor = objColors[i]; //填充颜色
objStyle.PenStyle = 1; //设置面的边线风格
objThemeUnique.set_Style(i, objStyle);//设置每个单值的风格
ReleaseObjects(objStyle);
}
this.axSuperMap1.ViewEntire();
this.axSuperMap1.Refresh(); //刷新地图
this.axSuperLegend1.Refresh();
ReleaseObjects(objColors);
ReleaseObjects(objLayer);
ReleaseObjects(objThemeUnique);
ReleaseObjects(objLayers);
ReleaseObjects(objDt);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataSource);
ReleaseObjects(objDataSources);
}
private void mnuThemeLabel_Click(object sender, EventArgs e)
{//制作标签专题图,显示中国各温度带的名称
this.axSuperMap1.OpenMap("我国温度带划分图");//打开已有地图
this.axSuperMap1.Refresh();
//判断并添加‘温度带的划分’面数据集到基础地图上
soDataSources objDataSources = this.axSuperWorkspace1.Datasources;
soDataSource objDataSource = objDataSources[1];
soDatasets objDatasets = objDataSource.Datasets;
soDataset objDt = objDatasets["我国温度带的划分"];
if (objDt == null)
{
MessageBox.Show("数据源中没有‘温度带的划分’面数据集");
ReleaseObjects(objDataSource);
ReleaseObjects(objDatasets);
return;
}
soThemeLabel objThemeLabel = null;
soLayers objLayers = this.axSuperMap1.Layers;
if (objLayers == null) return;
soLayer objLayer = objLayers["我国温度带的划分@China"];//获得专题图层
if (objLayer == null)
{
objLayer = objLayers.AddDataset(objDt, false);//打开数据集
}
objThemeLabel = objLayer.ThemeLabel;//获得标签专题图对象
if (objThemeLabel.Valid) //判断标签专题图是否已经制作
{
String strName = objThemeLabel.Caption;//专题图标题
objLayer.DeleteThematicMap(strName); //如果该图层已经制作标签专题图,则删除
}
soTextStyle objTextStyle = new soTextStyle(); //定义显示的字体风格变量
objTextStyle.FontName = "宋体"; //定义显示的字体风格
objTextStyle.FixedSize = true;
//objTextStyle.FixedTextSize = 80;
objTextStyle.FontWidth = 30;
objTextStyle.FontHeight = 50;
objTextStyle.Outline = true;
objTextStyle.Transparent = true;
objTextStyle.Color = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.Red));
objTextStyle.BgColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.White));
objThemeLabel.Enable = true; //显示标签专题图
objThemeLabel.Field = "Name"; //定义制作标签专题图的字段
objThemeLabel.Caption = "省会名称"; //标签专题图的名称
objThemeLabel.TextStyle = objTextStyle; //标签显示的字体
objThemeLabel.EnableFlow = true; //流动注记
objThemeLabel.OnTop = true; //标签置顶显示
objThemeLabel.IgnoreSmallObject = true;
objThemeLabel.AutoAvoidOverlapped = true;
//objThemeLabel.OffsetX = -60000; //将标签偏移一定的距离
//objThemeLabel.OffsetY = 60000;
this.axSuperMap1.ViewEntire();
this.axSuperLegend1.Refresh();
ReleaseObjects(objTextStyle);
ReleaseObjects(objThemeLabel);
ReleaseObjects(objLayers);
ReleaseObjects(objLayer);
ReleaseObjects(objDt);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataSource);
ReleaseObjects(objDataSources);
}
private void mnuThemeRange_Click(object sender, EventArgs e)
{//制作范围分段专题图,显示中国年降水量分布
//然后添加年降水量线数据集,设置线风格,突出体现分布边界
//添加年降水量文本数据集,显示年降水量值
this.axSuperMap1.OpenMap("基础地图");//首先打开“基础地图”
this.axSuperMap1.Refresh();
//判断并添加‘我国降水量’面数据集到基础地图上
soDataSources objDataSources = this.axSuperWorkspace1.Datasources;
soDataSource objDataSource = objDataSources[1];
soDatasets objDatasets = objDataSource.Datasets;
soDataset objDt = objDatasets["我国年降水量"];
if (objDt == null)
{
MessageBox.Show("数据源中没有‘我国降水量’面数据集");
ReleaseObjects(objDataSource);
ReleaseObjects(objDatasets);
return;
}
soLayers objLayers = this.axSuperMap1.Layers;
if (objLayers == null) return;
soLayer objLayer = objLayers["我国年降水量@China"];//注意区分大小写
if (objLayer == null)
{
objLayer = objLayers.AddDataset(objDt, false);//将‘中国年降水量’面数据集添加到地图窗口中,并置于底层
}
soThemeRange objThemeRange = objLayer.ThemeRange;
if (objThemeRange.Valid) //删除已有的范围分段专题图
{
String strName = objThemeRange.Caption;
objLayer.DeleteThematicMap(strName);
}
soStyle objStyle = new soStyle();
objThemeRange.Enable = true; //显示专题图
objThemeRange.Field = "rainfall"; //字段
objThemeRange.BreakCount = 5; //5个分段点,6段
objThemeRange.Caption = "中国年降水量分布图"; //专题图的标题
objThemeRange.set_BreakValue(1, 50);//分段点的值
objThemeRange.set_BreakValue(2, 200);
objThemeRange.set_BreakValue(3, 400);
objThemeRange.set_BreakValue(4, 800);
objThemeRange.set_BreakValue(5, 1600);
soColors objColors = new soColors(); //设置每个分段的颜色
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(255, 211, 123)));//小于50
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(255, 235, 189)));//50~ -200
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(229, 224, 140)));//200~ 400
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(189, 235, 255)));//400~ 800
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(115, 223, 255))); //800-1600
objColors.Add((uint)ColorTranslator.ToOle(Color.FromArgb(0, 113, 255)));//大于1600
for (int i = 1; i <= 6; i++)
{
objStyle.BrushColor = objColors[i];
objStyle.PenStyle = 4; //将边线的线型设置为空
objThemeRange.set_Style(i, objStyle);
}
objThemeRange.set_ItemCaption(1, "年降水量在50毫米以下"); //设置每个分段的标题
objThemeRange.set_ItemCaption(2, "年降水量50-200毫米");
objThemeRange.set_ItemCaption(3, "年降水量200-400毫米");
objThemeRange.set_ItemCaption(4, "年降水量400-800毫米");
objThemeRange.set_ItemCaption(5, "年降水量800-1600毫米");
objThemeRange.set_ItemCaption(6, "年降水量大于1600毫米");
//下面添加年降水量线数据集,设置线风格
//添加年降水量文本数据集,设置文本风格
soDataset objDtLine = objDatasets["年降水量线"];
soDataset objDtText = objDatasets["我国年降水量注记"];
soLayer objLayerLine = objLayers.AddDataset(objDtLine, true);
soLayer objLayerText = objLayers.AddDataset(objDtText, true);
soStyle objStyle2 = new soStyleClass();
objStyle2.PenColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(231, 0, 173)));
objStyle2.PenWidth = 1;
objLayerLine.Style = objStyle2; //设置年降水量线图层的风格
this.axSuperMap1.ViewEntire(); //全幅显示地图
this.axSuperMap1.Refresh();
this.axSuperLegend1.Refresh();
this.axSuperLegend1.Expand();
ReleaseObjects(objDtLine);
ReleaseObjects(objDtText);
ReleaseObjects(objLayerLine);
ReleaseObjects(objLayerText);
ReleaseObjects(objStyle2);
ReleaseObjects(objColors);
ReleaseObjects(objStyle);
ReleaseObjects(objThemeRange);
ReleaseObjects(objLayer);
ReleaseObjects(objLayers);
ReleaseObjects(objDt);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataSource);
ReleaseObjects(objDataSources);
}
private void mnuThemeDotDensity_Click(object sender, EventArgs e)
{//制作人口密度图,显示中国的人口分布情况;并添加人口分界限
this.axSuperMap1.OpenMap("基础地图");//首先打开“基础地图”
this.axSuperMap1.Refresh();
soThemeDotDensity objThemeDotDensity = null; //点密度专题图对象
soLayers objLayers = this.axSuperMap1.Layers;
soLayer objLayer = objLayers["国家与地区@China"];
if (objLayer == null) //如果图层对象不为空,则制作点密度专题图
{
MessageBox.Show("请将'国家与地区'面数据集添加到地图窗口中");
ReleaseObjects(objLayers);
return;
}
objThemeDotDensity = objLayer.ThemeDotDensity; //取得图层的点密度专题图对象
if (objThemeDotDensity.Valid) // 如果图层已有点密度题图,则栅除
{
String strName = objThemeDotDensity.Caption;//专题图标题
objLayer.DeleteThematicMap(strName);//删除已有的点密度图
}
objThemeDotDensity.DotColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(0, 0, 0)));
objThemeDotDensity.DotSize = 3; //点的大小
objThemeDotDensity.DotValue = 60; //每个点代表的数值
objThemeDotDensity.Field = "Pop_1990"; //制做专题图所用的字段
objThemeDotDensity.Enable = true; //设置点密度专题图可见
//添加我国的人口分界线到地图窗口中
soDataSource objDataSource = this.axSuperWorkspace1.Datasources[1];
soDatasets objDatasets = objDataSource.Datasets;
soDataset objDt = objDatasets["腾冲至黑河"];
soLayer objLayerLine = objLayers.AddDataset(objDt, true); //人口分界线对应的图层
soStyle objStyle = new soStyleClass();
objStyle.PenStyle = 1;
objStyle.PenColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(173, 1, 1)));
objStyle.PenWidth = 4;
objLayerLine.Style = objStyle;
this.axSuperMap1.ViewEntire(); //地图全幅显示
this.axSuperLegend1.Refresh(); //刷新图例
ReleaseObjects(objStyle);
ReleaseObjects(objLayerLine);
ReleaseObjects(objDt);
ReleaseObjects(objDatasets);
ReleaseObjects(objDataSource);
ReleaseObjects(objThemeDotDensity);
ReleaseObjects(objLayer);
}
private void mnuThemeGraph_Click(object sender, EventArgs e)
{//制作统计专题图,显示97/98/98年中国各省份或自治区的GDP值对比
this.axSuperMap1.OpenMap("基础地图");//打开“基础地图”
this.axSuperMap1.Refresh();
soThemeGraph objThemeGraph = null; //分段统计专题图对象
soLayers objLayers = this.axSuperMap1.Layers;
soLayer objLayer = objLayers["国家与地区@China"];
if (objLayer == null)
{
MessageBox.Show("请将’国家与地区‘面数据集添加到地图窗口中");
ReleaseObjects(objLayers);
return;
}
objThemeGraph = objLayer.ThemeGraph; //获得统计专题图对象
if (objThemeGraph.Valid) //如果已经制作了一个统计专题图,先删除
{
String strName = objThemeGraph.Caption;
objLayer.DeleteThematicMap(strName);
}
objThemeGraph.Caption = "97/98/98年中国各地区的GDP值对比"; //定义专题图的名称
objThemeGraph.Enable = true; //是否显示统计专题图
objThemeGraph.AddField("GDP_1997");//添加三个不同年份的GDP字段
objThemeGraph.AddField("GDP_1998");
objThemeGraph.AddField("GDP_1999");
soStyle objStyle = new soStyleClass(); //定义三个扇形的颜色
objStyle.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(200, 147, 67)));
objThemeGraph.set_Style(1, objStyle); //分别为它们设置风格
objStyle.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(191, 79, 71)));
objThemeGraph.set_Style(2, objStyle);
objStyle.BrushColor = System.Convert.ToUInt32(System.Drawing.ColorTranslator.ToOle(Color.FromArgb(60, 170, 135)));
objThemeGraph.set_Style(3, objStyle);
objThemeGraph.GraphType = seGraphType.scpBar; //设置统计专题图的类型
objThemeGraph.set_ItemCaption(1, "GDP_1997"); //设置统计专题图中每个子项的名称
objThemeGraph.set_ItemCaption(2, "GDP_1998");
objThemeGraph.set_ItemCaption(3, "GDP_1999");
objThemeGraph.GraduatedMode = seGraduatedMode.scgSquareRoot;//平方根
objThemeGraph.ShowItemText = true; //显示统计图上的文字标注
objThemeGraph.EnableFlow = false; //不流动显示统计图
objThemeGraph.VisibleScaleMax = 0.00000025; //1 / 40000000
objThemeGraph.OnTop = true; //置顶显示
objThemeGraph.ItemTextFormat = seGraphTextFormat.scgTextPercent;//显示的子项文本
this.axSuperMap1.ViewEntire();//地图全幅显示
this.axSuperLegend1.Refresh(); //刷新图例
ReleaseObjects(objThemeGraph);
ReleaseObjects(objStyle);
ReleaseObjects(objLayers);
ReleaseObjects(objLayer);
}
private void mnuSaveMap_Click(object sender, EventArgs e)
{//另存地图
string strMapName = "newMap";
string strCurrentMinute = System.DateTime.Now.Minute.ToString();
string strCurrentSecond = System.DateTime.Now.Second.ToString();
bool blnSaveMapAs = axSuperMap1.SaveMapAs(strMapName + strCurrentMinute + strCurrentSecond, false);
if (blnSaveMapAs)
{
MessageBox.Show("地图另存成功!", "提示");
axSuperWkspManager1.Refresh();
}
else
{
MessageBox.Show("地图另存失败!", "提示");
}
}
private void mnuOutputMapAsFile_Click(object sender, EventArgs e)
{
String strPicName = string.Empty;
seFileType nImageType = 0;
saveFileDialog1.Filter = "TIFF Files(.tif)|*.tif||";
this.axSuperMap1.OpenMap("我国温度带划分图");
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strPicName = saveFileDialog1.FileName; //设置要输出的影像文件名
nImageType = seFileType.scfTIF; //结果文件的类型
if (this.axSuperMap1.OutputMapToFile(strPicName, nImageType))
{
MessageBox.Show("输出地图为影像文件成功!");
}
else
{
MessageBox.Show("输出地图为影像文件失败!");
}
}
else
{
return;
}
this.axSuperMap1.Refresh();
}
private void 保存工作空间ToolStripMenuItem_Click(object sender, EventArgs e)
{//保存工作空间
bool bIsModified = false;
bIsModified = axSuperWorkspace1.Modified; //工作空间是否有修改
if (bIsModified == true)
{
axSuperWorkspace1.Save();
MessageBox.Show("保存工作空间成功");
return;
}
else
{
MessageBox.Show("工作空间未修改");
return;
}
}
private void 布局排版ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.frmLayout = new Layout(this);
this.frmLayout.Show();
}
}
}