-
C#教程之C#+MO实现一个道路编辑软件(刚开始)
//**********************************************************
//******主窗口程序
//********************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace IRND_DPT
{
public partial class frmMain : Form
{
IRND_DPT.layerVariable pubLayerVariable = new layerVariable ();
public frmMain()
{
InitializeComponent();
}
//添加图层
private void tlbAddLayer_Click(object sender, EventArgs e)
{
IRND_DPT.OpenFile AddFile = new OpenFile();
AddFile.OpenShapeFiles(CD1,axMap1 );
object refMap = (object)this.axMap1;
bool refTrue = true;
short refShort = 0;
axlegend1.setMapSource(ref refMap);
axlegend1.ShowAllLegend();
axlegend1.LoadLegend(ref refTrue);
axlegend1.set_Active(ref refShort, true);
axMap1.Refresh();
axlegend1.Refresh();
//AddFile(CD1, axMap1);
}
//删除图层
private void toolStripButton4_Click(object sender, EventArgs e)
{
if (pubLayerVariable.MapLayerIndex >= 0)
{
for (int i = 0; i <= axMap1.Layers.Count - 1; i++)
{
axMap1.Layers.Remove(pubLayerVariable.MapLayerIndex);
break;
}
bool refTrue = true;
axMap1.Refresh();
axlegend1.LoadLegend(ref refTrue);
}
}
private void axlegend1_AfterSetLayerVisible(object sender,AxSampleLegendControl.__legend_AfterSetLayerVisibleEvent e)
{
axMap1.Refresh();
}
private void axlegend1_LayerDblClick(object sender, AxSampleLegendControl.__legend_LayerDblClickEvent e)
{
}
private void axlegend1_MouseDownEvent(object sender, AxSampleLegendControl.__legend_MouseDownEvent e)
{
if (e.index >= 0)
{
MapObjects2.MapLayer layer= (MapObjects2.MapLayer )axMap1.Layers.Item(e.index );
pubLayerVariable.MapLayerName = layer.Name;
pubLayerVariable.MapLayerIndex = e.index;
}
axMap1.TrackingLayer.Refresh(true, axMap1.Extent);
}
//放大
private void tlb_ZoomIn_Click(object sender, EventArgs e)
{
axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomIn;
}
//缩小
private void tlb_ZoomOut_Click(object sender, EventArgs e)
{
axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomOut;
}
//漫游
private void tlb_Pan_Click(object sender, EventArgs e)
{
axMap1.MousePointer = MapObjects2.MousePointerConstants.moPan;
}
//全图
private void tbl_Full_Click(object sender, EventArgs e)
{
axMap1.Extent = axMap1.FullExtent;
axMap1.MousePointer = MapObjects2.MousePointerConstants.moArrow;
}
//逐渐放大
private void tbl_SmallIn_Click(object sender, EventArgs e)
{
MapObjects2.Rectangle r = axMap1.Extent;
r.ScaleRectangle(0.9);
axMap1.Extent = r;
}
//逐渐缩小
private void tbl_SmallOut_Click(object sender, EventArgs e)
{
MapObjects2.Rectangle r = axMap1.Extent;
r.ScaleRectangle(1.1);
axMap1.Extent = r;
}
//选择查询
private void tbl_Identify_Click(object sender, EventArgs e)
{
axMap1.MousePointer = MapObjects2.MousePointerConstants.moIdentify;
}
//属性浏览
private void toolStripButton2_Click(object sender, EventArgs e)
{
if (pubLayerVariable.MapLayerIndex >= 0 & pubLayerVariable.MapLayerName != null)
{
MapObjects2.MapLayer lyr = (MapObjects2.MapLayer )axMap1.Layers.Item(pubLayerVariable.MapLayerName);
IRND_DPT.frmBrowseAttr frmBrowset = new frmBrowseAttr();
frmBrowset.IniListview(lyr);
frmBrowset.ShowDialog(this);
}
}
//地图响应事件
private void axMap1_MouseDownEvent(object sends, AxMapObjects2._DMapEvents_MouseDownEvent e)
{
MapObjects2.Rectangle rect;
MapObjects2.Point curp;
MapObjects2.MapLayer lyr;
MapObjects2.Recordset rest;
switch (axMap1.MousePointer)
{
//放大
case MapObjects2.MousePointerConstants.moZoomIn:
{
rect = axMap1.TrackRectangle();
if (rect.Width == 0 || rect.Height == 0)
{
rect = axMap1.Extent;
rect.ScaleRectangle(0.5);
}
axMap1.Extent = rect;
break;
}
//缩小
case MapObjects2.MousePointerConstants.moZoomOut:
{
MapObjects2.Rectangle Tempr;
Tempr = axMap1.Extent;
rect = axMap1.TrackRectangle();
double NewSR;
if (rect.Width != 0 || rect.Height != 0)
{
if (axMap1.Extent.Width / rect.Width > axMap1.Extent.Height / rect.Height)
{
NewSR = axMap1.Extent.Height / rect.Height;
}
else
{
NewSR = axMap1.Extent.Width / rect.Width;
}
Tempr.ScaleRectangle(NewSR);
}
else
{
Tempr.ScaleRectangle(2.0);
}
axMap1.Extent = Tempr;
break;
}
//漫游
case MapObjects2.MousePointerConstants.moPan:
{
axMap1.Pan();
break;
}
//选择查询
case MapObjects2.MousePointerConstants.moIdentify:
{
if (pubLayerVariable.MapLayerIndex >= 0 && pubLayerVariable.MapLayerName != "")
{
rect = axMap1.TrackRectangle();
lyr = (MapObjects2.MapLayer)axMap1.Layers.Item(pubLayerVariable.MapLayerIndex);
if (rect.Width == 0)
{
curp = axMap1.ToMapPoint(e.x, e.y);
rest = lyr.SearchByDistance(curp, (double)axMap1.ToMapDistance((float)Screen.PrimaryScreen.WorkingArea.X * 5), "");
}
else
{
rest = lyr.SearchShape(rect, MapObjects2.SearchMethodConstants.moAreaIntersect, "");
}
if (rest.EOF!=true)
{
axMap1.FlashShape(rest.Fields.Item("shape").Value, 2);
IRND_DPT.frmIdentify FunctionClass = new frmIdentify();
////FunctionClass.Close();
FunctionClass.CurRecordSet(rest);
FunctionClass.IniTvFeat(rest, lyr.Name);
FunctionClass.IniLvwAttr(rest);
FunctionClass.Show(this);
}
}
break;
}
}
}
////////
///////////////////////////////////////////////////////////////////////////////////////////////
}
}
//*************************************************
//********属性查询
//************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace IRND_DPT
{
public partial class frmIdentify : Form
{
MapObjects2.Recordset mrs;
public frmIdentify()
{
InitializeComponent();
}
private void frmIdentify_Load(object sender, System.EventArgs e)
{
lvwAttr.View = View.Details;
lvwAttr.Columns.Add("字段",50,HorizontalAlignment.Left );
lvwAttr.Columns.Add ("值",50,HorizontalAlignment.Center );
}
//
private void tvFeat_NodeMouseClick(object sender, System.Windows.Forms.TreeNodeMouseClickEventArgs e)
{
string ID;
ListViewItem Item;
//if (e.Node.Parent == null) { return; }
lvwAttr.Items.Clear();
ID = e.Node.Text;
mrs.MoveFirst();
while (mrs.EOF != true)
{
if (ID == mrs.Fields.Item("FeatureID").ValueAsString)
{
for (short fld = 1; fld < mrs.TableDesc.FieldCount; fld++)
{
Item = lvwAttr.Items.Add(mrs.TableDesc.get_FieldName(fld));
Item.SubItems.Add(mrs.Fields.Item(Item.Text).ValueAsString);
}
lvwAttr.Refresh();
break;
}
mrs.MoveNext();
}
}
public void CurRecordSet(MapObjects2.Recordset vNewValue)
{
mrs = vNewValue;
}
public void IniLvwAttr(MapObjects2.Recordset rst)
{
TreeNode n=null ;
ListViewItem Item;
string ID;
lvwAttr.Items.Clear();
if (tvFeat.Nodes.Count >= 2)
{
int i = 0;
foreach (TreeNode tn in tvFeat.Nodes)
{
i=i+1;
if (i == 2)
{
n = tn;
break;
}
}
if (n.Text != null)
{
rst.MoveFirst();
ID = rst.Fields.Item("FeatureID").ValueAsString;
while (rst.EOF != true)
{
if (ID == n.Text)
{
for (short fld = 1; fld < rst.TableDesc.FieldCount; fld++)
{
Item = lvwAttr.Items.Add(rst.TableDesc.get_FieldName(fld));
Item.SubItems.Add(rst.Fields.Item(Item.Text).ValueAsString);
}
lvwAttr.Refresh();
break;
}
}
}
}
}
//将选择的记录集加入到树型控件中进行显示
public void IniTvFeat(MapObjects2.Recordset moRs_in, string lyrName_in)
{
TreeNode n;
string ID;
if (moRs_in.EOF != true)
{
moRs_in.MoveFirst();
tvFeat.Nodes.Clear();
n = tvFeat.Nodes.Add(lyrName_in);
n=n.Parent;
while (moRs_in.EOF != true)
{
ID = moRs_in.Fields.Item("FeatureID").ValueAsString;
n= tvFeat.Nodes.Add(ID);
moRs_in.MoveNext();
}
}
}
///////zuihou////////////////////////////////////////////////////////////////////////////
}
}
//*************************************************************
//************加载图层函数
//*************************************************************
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace IRND_DPT
{
class OpenFile
{
//功能说明:
// 从公共对话框中提取文件名,然后调用不同的子模块处理不同的文件加入图层的问题(支持打开多个文件)
public void OpenShapeFiles(OpenFileDialog comopenfile,AxMapObjects2.AxMap map)
{
try
{
string strShape, strCov, strCAD, strVPF, strImage, strMilImage;
//将过滤器设置为可支持的文件
strShape = "ESRI ShapeFiles(*.shp)|*.shp";
strCov = "ESRI Coverages(*.adf,*.tat,*.pat,*.rat)|aat.adf;pat.adf;nat.adf;txt.adf;*.tat;*.pat;*.rat";
strCAD = "AutoCAD File (*.dwg,*.dxf)|*.dwg;*.dxf";
strImage ="All Image(*.bmp,*.dib,*.tif,*.jpg,*.jff,*.bil,*.bip,*.bsq,*.gis,*.lan,*.rlc,*.sid,*.sun,*.rs,*.ras,*.svf,*.img,*.gif)|*.bmp,*.dib,*.tif,*.jpg,*.jff,*.bil,*.bip,*.bsq,*.gis,*.lan,*.rlc,*.sid,*.sun,*.rs,*.ras,*.svf,*.img,*.gif";
comopenfile.CheckFileExists = true;
//设置过滤
comopenfile.Filter = strShape + "|" + strCov + "|" + strCAD + "|" + strImage ;
comopenfile.Title = "添加图层";
//允许选择多个文件,并允许长文件名
comopenfile.Multiselect = true;
if (comopenfile.ShowDialog() == DialogResult.OK)
{
foreach (string strFilename in comopenfile.FileNames)
{
string sPath = strFilename.Substring(0, strFilename.LastIndexOf("\\") + 1);
string sFile = strFilename.Substring(strFilename.LastIndexOf("\\") + 1, strFilename.Length - strFilename.LastIndexOf("\\") - 1);
string nametype = sFile.Substring(sFile.LastIndexOf(".") + 1, sFile.Length - sFile.LastIndexOf(".") - 1);
open_file(sPath, sFile, nametype, map);
}
}
}
catch
{
MessageBox.Show("图层添加有错!");
}
}
//功能说明:
// 测试文件类型,一便调用不同的子模块.处理不同图层加入的问题
private void open_file(string Path,string filename,string filetype,AxMapObjects2.AxMap mapobject)
{
string LayerName = filename.Substring(0, filename.LastIndexOf("."));
switch (filetype)
{
case "shp":
shpAdd(Path, filename, mapobject, LayerName, true);
break;
}
}
//功能说明:
//添加shape格式的文件
public void shpAdd(string databasepath, string filename,AxMapObjects2.AxMap mapobject, string LayerName, bool Hide)
{
MapObjects2.DataConnection dCon=new MapObjects2.DataConnection() ;
// MapObjects2.GeoDataset gSet=new MapObjects2.GeoDataset ();
MapObjects2.MapLayer newLayer = new MapObjects2.MapLayer();
long i=0;
try
{
dCon.Database = databasepath;
if (dCon.Connect())
{
MapObjects2.GeoDataset gSet = dCon.FindGeoDataset(filename);
if (gSet == null)
{
return ;
}
else
{
//查看当前是否有重复的图层名,以确保所有的图层名都是唯一的
if (FindMapLayerName(mapobject,LayerName)==true )
{
string tempstr = LayerName;
while (FindMapLayerName(mapobject, tempstr + "-" + i)==true )
{
i++;
}
LayerName = LayerName + "-" + i;
}
newLayer.GeoDataset = gSet;
if (Hide)
{
newLayer.Visible = true;
}
else
{
newLayer.Visible = false;
}
//使用默认颜色和样式设置图层
switch (newLayer.shapeType)
{
case MapObjects2.ShapeTypeConstants.moShapeTypePoint :
newLayer.Symbol.Color=11513775;
newLayer.Symbol.Size=5;
break;
case MapObjects2.ShapeTypeConstants .moShapeTypeLine :
newLayer.Symbol.Color = 11513775;
newLayer.Symbol.Size = 1;
break;
case MapObjects2.ShapeTypeConstants.moShapeTypePolygon :
newLayer.Symbol.SymbolType = 0;
newLayer.Symbol.Style = 8;
newLayer.Symbol.Color = 12566463;
newLayer.Symbol.Outline = true;
newLayer.Symbol.OutlineColor = (int)MapObjects2.ColorConstants.moBlack;
break;
}
mapobject.Layers.Add (newLayer);
newLayer.Name = LayerName;
newLayer.Tag=databasepath + filename ;
}
}
}
catch
{
// MessageBox("加载图层出错!");
}
}
//功能说明:
// 查找map中的图层AxMapObjects2.AxMap mapobject,string LayerName
public bool FindMapLayerName(AxMapObjects2.AxMap mapobject, string LayerName)
{
for (int i=0;i<mapobject.Layers.Count ;i++)
{
if (mapobject.Layers.Item(i).ToString() ==LayerName )
{
return true;
}
}
return false ;
}
}
}
//******主窗口程序
//********************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace IRND_DPT
{
public partial class frmMain : Form
{
IRND_DPT.layerVariable pubLayerVariable = new layerVariable ();
public frmMain()
{
InitializeComponent();
}
//添加图层
private void tlbAddLayer_Click(object sender, EventArgs e)
{
IRND_DPT.OpenFile AddFile = new OpenFile();
AddFile.OpenShapeFiles(CD1,axMap1 );
object refMap = (object)this.axMap1;
bool refTrue = true;
short refShort = 0;
axlegend1.setMapSource(ref refMap);
axlegend1.ShowAllLegend();
axlegend1.LoadLegend(ref refTrue);
axlegend1.set_Active(ref refShort, true);
axMap1.Refresh();
axlegend1.Refresh();
//AddFile(CD1, axMap1);
}
//删除图层
private void toolStripButton4_Click(object sender, EventArgs e)
{
if (pubLayerVariable.MapLayerIndex >= 0)
{
for (int i = 0; i <= axMap1.Layers.Count - 1; i++)
{
axMap1.Layers.Remove(pubLayerVariable.MapLayerIndex);
break;
}
bool refTrue = true;
axMap1.Refresh();
axlegend1.LoadLegend(ref refTrue);
}
}
private void axlegend1_AfterSetLayerVisible(object sender,AxSampleLegendControl.__legend_AfterSetLayerVisibleEvent e)
{
axMap1.Refresh();
}
private void axlegend1_LayerDblClick(object sender, AxSampleLegendControl.__legend_LayerDblClickEvent e)
{
}
private void axlegend1_MouseDownEvent(object sender, AxSampleLegendControl.__legend_MouseDownEvent e)
{
if (e.index >= 0)
{
MapObjects2.MapLayer layer= (MapObjects2.MapLayer )axMap1.Layers.Item(e.index );
pubLayerVariable.MapLayerName = layer.Name;
pubLayerVariable.MapLayerIndex = e.index;
}
axMap1.TrackingLayer.Refresh(true, axMap1.Extent);
}
//放大
private void tlb_ZoomIn_Click(object sender, EventArgs e)
{
axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomIn;
}
//缩小
private void tlb_ZoomOut_Click(object sender, EventArgs e)
{
axMap1.MousePointer = MapObjects2.MousePointerConstants.moZoomOut;
}
//漫游
private void tlb_Pan_Click(object sender, EventArgs e)
{
axMap1.MousePointer = MapObjects2.MousePointerConstants.moPan;
}
//全图
private void tbl_Full_Click(object sender, EventArgs e)
{
axMap1.Extent = axMap1.FullExtent;
axMap1.MousePointer = MapObjects2.MousePointerConstants.moArrow;
}
//逐渐放大
private void tbl_SmallIn_Click(object sender, EventArgs e)
{
MapObjects2.Rectangle r = axMap1.Extent;
r.ScaleRectangle(0.9);
axMap1.Extent = r;
}
//逐渐缩小
private void tbl_SmallOut_Click(object sender, EventArgs e)
{
MapObjects2.Rectangle r = axMap1.Extent;
r.ScaleRectangle(1.1);
axMap1.Extent = r;
}
//选择查询
private void tbl_Identify_Click(object sender, EventArgs e)
{
axMap1.MousePointer = MapObjects2.MousePointerConstants.moIdentify;
}
//属性浏览
private void toolStripButton2_Click(object sender, EventArgs e)
{
if (pubLayerVariable.MapLayerIndex >= 0 & pubLayerVariable.MapLayerName != null)
{
MapObjects2.MapLayer lyr = (MapObjects2.MapLayer )axMap1.Layers.Item(pubLayerVariable.MapLayerName);
IRND_DPT.frmBrowseAttr frmBrowset = new frmBrowseAttr();
frmBrowset.IniListview(lyr);
frmBrowset.ShowDialog(this);
}
}
//地图响应事件
private void axMap1_MouseDownEvent(object sends, AxMapObjects2._DMapEvents_MouseDownEvent e)
{
MapObjects2.Rectangle rect;
MapObjects2.Point curp;
MapObjects2.MapLayer lyr;
MapObjects2.Recordset rest;
switch (axMap1.MousePointer)
{
//放大
case MapObjects2.MousePointerConstants.moZoomIn:
{
rect = axMap1.TrackRectangle();
if (rect.Width == 0 || rect.Height == 0)
{
rect = axMap1.Extent;
rect.ScaleRectangle(0.5);
}
axMap1.Extent = rect;
break;
}
//缩小
case MapObjects2.MousePointerConstants.moZoomOut:
{
MapObjects2.Rectangle Tempr;
Tempr = axMap1.Extent;
rect = axMap1.TrackRectangle();
double NewSR;
if (rect.Width != 0 || rect.Height != 0)
{
if (axMap1.Extent.Width / rect.Width > axMap1.Extent.Height / rect.Height)
{
NewSR = axMap1.Extent.Height / rect.Height;
}
else
{
NewSR = axMap1.Extent.Width / rect.Width;
}
Tempr.ScaleRectangle(NewSR);
}
else
{
Tempr.ScaleRectangle(2.0);
}
axMap1.Extent = Tempr;
break;
}
//漫游
case MapObjects2.MousePointerConstants.moPan:
{
axMap1.Pan();
break;
}
//选择查询
case MapObjects2.MousePointerConstants.moIdentify:
{
if (pubLayerVariable.MapLayerIndex >= 0 && pubLayerVariable.MapLayerName != "")
{
rect = axMap1.TrackRectangle();
lyr = (MapObjects2.MapLayer)axMap1.Layers.Item(pubLayerVariable.MapLayerIndex);
if (rect.Width == 0)
{
curp = axMap1.ToMapPoint(e.x, e.y);
rest = lyr.SearchByDistance(curp, (double)axMap1.ToMapDistance((float)Screen.PrimaryScreen.WorkingArea.X * 5), "");
}
else
{
rest = lyr.SearchShape(rect, MapObjects2.SearchMethodConstants.moAreaIntersect, "");
}
if (rest.EOF!=true)
{
axMap1.FlashShape(rest.Fields.Item("shape").Value, 2);
IRND_DPT.frmIdentify FunctionClass = new frmIdentify();
////FunctionClass.Close();
FunctionClass.CurRecordSet(rest);
FunctionClass.IniTvFeat(rest, lyr.Name);
FunctionClass.IniLvwAttr(rest);
FunctionClass.Show(this);
}
}
break;
}
}
}
////////
///////////////////////////////////////////////////////////////////////////////////////////////
}
}
//*************************************************
//********属性查询
//************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace IRND_DPT
{
public partial class frmIdentify : Form
{
MapObjects2.Recordset mrs;
public frmIdentify()
{
InitializeComponent();
}
private void frmIdentify_Load(object sender, System.EventArgs e)
{
lvwAttr.View = View.Details;
lvwAttr.Columns.Add("字段",50,HorizontalAlignment.Left );
lvwAttr.Columns.Add ("值",50,HorizontalAlignment.Center );
}
//
private void tvFeat_NodeMouseClick(object sender, System.Windows.Forms.TreeNodeMouseClickEventArgs e)
{
string ID;
ListViewItem Item;
//if (e.Node.Parent == null) { return; }
lvwAttr.Items.Clear();
ID = e.Node.Text;
mrs.MoveFirst();
while (mrs.EOF != true)
{
if (ID == mrs.Fields.Item("FeatureID").ValueAsString)
{
for (short fld = 1; fld < mrs.TableDesc.FieldCount; fld++)
{
Item = lvwAttr.Items.Add(mrs.TableDesc.get_FieldName(fld));
Item.SubItems.Add(mrs.Fields.Item(Item.Text).ValueAsString);
}
lvwAttr.Refresh();
break;
}
mrs.MoveNext();
}
}
public void CurRecordSet(MapObjects2.Recordset vNewValue)
{
mrs = vNewValue;
}
public void IniLvwAttr(MapObjects2.Recordset rst)
{
TreeNode n=null ;
ListViewItem Item;
string ID;
lvwAttr.Items.Clear();
if (tvFeat.Nodes.Count >= 2)
{
int i = 0;
foreach (TreeNode tn in tvFeat.Nodes)
{
i=i+1;
if (i == 2)
{
n = tn;
break;
}
}
if (n.Text != null)
{
rst.MoveFirst();
ID = rst.Fields.Item("FeatureID").ValueAsString;
while (rst.EOF != true)
{
if (ID == n.Text)
{
for (short fld = 1; fld < rst.TableDesc.FieldCount; fld++)
{
Item = lvwAttr.Items.Add(rst.TableDesc.get_FieldName(fld));
Item.SubItems.Add(rst.Fields.Item(Item.Text).ValueAsString);
}
lvwAttr.Refresh();
break;
}
}
}
}
}
//将选择的记录集加入到树型控件中进行显示
public void IniTvFeat(MapObjects2.Recordset moRs_in, string lyrName_in)
{
TreeNode n;
string ID;
if (moRs_in.EOF != true)
{
moRs_in.MoveFirst();
tvFeat.Nodes.Clear();
n = tvFeat.Nodes.Add(lyrName_in);
n=n.Parent;
while (moRs_in.EOF != true)
{
ID = moRs_in.Fields.Item("FeatureID").ValueAsString;
n= tvFeat.Nodes.Add(ID);
moRs_in.MoveNext();
}
}
}
///////zuihou////////////////////////////////////////////////////////////////////////////
}
}
//*************************************************************
//************加载图层函数
//*************************************************************
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace IRND_DPT
{
class OpenFile
{
//功能说明:
// 从公共对话框中提取文件名,然后调用不同的子模块处理不同的文件加入图层的问题(支持打开多个文件)
public void OpenShapeFiles(OpenFileDialog comopenfile,AxMapObjects2.AxMap map)
{
try
{
string strShape, strCov, strCAD, strVPF, strImage, strMilImage;
//将过滤器设置为可支持的文件
strShape = "ESRI ShapeFiles(*.shp)|*.shp";
strCov = "ESRI Coverages(*.adf,*.tat,*.pat,*.rat)|aat.adf;pat.adf;nat.adf;txt.adf;*.tat;*.pat;*.rat";
strCAD = "AutoCAD File (*.dwg,*.dxf)|*.dwg;*.dxf";
strImage ="All Image(*.bmp,*.dib,*.tif,*.jpg,*.jff,*.bil,*.bip,*.bsq,*.gis,*.lan,*.rlc,*.sid,*.sun,*.rs,*.ras,*.svf,*.img,*.gif)|*.bmp,*.dib,*.tif,*.jpg,*.jff,*.bil,*.bip,*.bsq,*.gis,*.lan,*.rlc,*.sid,*.sun,*.rs,*.ras,*.svf,*.img,*.gif";
comopenfile.CheckFileExists = true;
//设置过滤
comopenfile.Filter = strShape + "|" + strCov + "|" + strCAD + "|" + strImage ;
comopenfile.Title = "添加图层";
//允许选择多个文件,并允许长文件名
comopenfile.Multiselect = true;
if (comopenfile.ShowDialog() == DialogResult.OK)
{
foreach (string strFilename in comopenfile.FileNames)
{
string sPath = strFilename.Substring(0, strFilename.LastIndexOf("\\") + 1);
string sFile = strFilename.Substring(strFilename.LastIndexOf("\\") + 1, strFilename.Length - strFilename.LastIndexOf("\\") - 1);
string nametype = sFile.Substring(sFile.LastIndexOf(".") + 1, sFile.Length - sFile.LastIndexOf(".") - 1);
open_file(sPath, sFile, nametype, map);
}
}
}
catch
{
MessageBox.Show("图层添加有错!");
}
}
//功能说明:
// 测试文件类型,一便调用不同的子模块.处理不同图层加入的问题
private void open_file(string Path,string filename,string filetype,AxMapObjects2.AxMap mapobject)
{
string LayerName = filename.Substring(0, filename.LastIndexOf("."));
switch (filetype)
{
case "shp":
shpAdd(Path, filename, mapobject, LayerName, true);
break;
}
}
//功能说明:
//添加shape格式的文件
public void shpAdd(string databasepath, string filename,AxMapObjects2.AxMap mapobject, string LayerName, bool Hide)
{
MapObjects2.DataConnection dCon=new MapObjects2.DataConnection() ;
// MapObjects2.GeoDataset gSet=new MapObjects2.GeoDataset ();
MapObjects2.MapLayer newLayer = new MapObjects2.MapLayer();
long i=0;
try
{
dCon.Database = databasepath;
if (dCon.Connect())
{
MapObjects2.GeoDataset gSet = dCon.FindGeoDataset(filename);
if (gSet == null)
{
return ;
}
else
{
//查看当前是否有重复的图层名,以确保所有的图层名都是唯一的
if (FindMapLayerName(mapobject,LayerName)==true )
{
string tempstr = LayerName;
while (FindMapLayerName(mapobject, tempstr + "-" + i)==true )
{
i++;
}
LayerName = LayerName + "-" + i;
}
newLayer.GeoDataset = gSet;
if (Hide)
{
newLayer.Visible = true;
}
else
{
newLayer.Visible = false;
}
//使用默认颜色和样式设置图层
switch (newLayer.shapeType)
{
case MapObjects2.ShapeTypeConstants.moShapeTypePoint :
newLayer.Symbol.Color=11513775;
newLayer.Symbol.Size=5;
break;
case MapObjects2.ShapeTypeConstants .moShapeTypeLine :
newLayer.Symbol.Color = 11513775;
newLayer.Symbol.Size = 1;
break;
case MapObjects2.ShapeTypeConstants.moShapeTypePolygon :
newLayer.Symbol.SymbolType = 0;
newLayer.Symbol.Style = 8;
newLayer.Symbol.Color = 12566463;
newLayer.Symbol.Outline = true;
newLayer.Symbol.OutlineColor = (int)MapObjects2.ColorConstants.moBlack;
break;
}
mapobject.Layers.Add (newLayer);
newLayer.Name = LayerName;
newLayer.Tag=databasepath + filename ;
}
}
}
catch
{
// MessageBox("加载图层出错!");
}
}
//功能说明:
// 查找map中的图层AxMapObjects2.AxMap mapobject,string LayerName
public bool FindMapLayerName(AxMapObjects2.AxMap mapobject, string LayerName)
{
for (int i=0;i<mapobject.Layers.Count ;i++)
{
if (mapobject.Layers.Item(i).ToString() ==LayerName )
{
return true;
}
}
return false ;
}
}
}
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式