using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; using GeoScene.Engine; using GeoScene.Globe; using System.IO; namespace Cyberpipe { public partial class FrmGHRK : Office2007Form { GSOGlobeControl globeControl1; string filePath = ""; TreeNode layerManagerNode; public FrmGHRK(GSOGlobeControl _globeControl1,TreeNode _layerManagerNode) { globeControl1 = _globeControl1; layerManagerNode=_layerManagerNode; InitializeComponent(); } /// <summary> /// 窗体LOAD事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmGHRK_Load(object sender, EventArgs e) { string pipelinetype = Utility.pipelinetype; string[] pipelinetypes = pipelinetype.Split(','); for (int i = 0; i < pipelinetypes.Length; i++) { pipelineTypeCbo.Items.Add(pipelinetypes[i]); } pipelineTypeCbo.Items.Add("燃气"); pipelineTypeCbo.Items.Add("热力"); pipelineTypeCbo.Items.Add("共同沟"); } /// <summary> /// 打开矢量数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonXLayerPath_Click(object sender, EventArgs e) { OpenFileDialog fdl = new OpenFileDialog(); fdl.Filter = "矢量数据(*.shp)|*.shp"; fdl.FileName="导入规划数据"; fdl.Multiselect = false; if (fdl.ShowDialog() == DialogResult.OK) { textBoxLayer.Text = fdl.FileName; filePath = fdl.FileName; textBoxLayerName.Text = System.IO.Path.GetFileNameWithoutExtension(fdl.FileName); } } private void btnPipelineColor_Click(object sender, EventArgs e) { colorDialog1.Color = btnPipelineColor.BackColor; if (colorDialog1.ShowDialog() == DialogResult.OK) { btnPipelineColor.BackColor = colorDialog1.Color; } } private void pipelineTypeCbo_SelectedIndexChanged(object sender, EventArgs e) { if (pipelineTypeCbo.Text == "给水") { btnPipelineColor.BackColor = Color.FromArgb(0, 0, 255); } else if (pipelineTypeCbo.Text == "供电") { btnPipelineColor.BackColor = Color.FromArgb(255, 100, 150); } else if (pipelineTypeCbo.Text == "雨水") { btnPipelineColor.BackColor = Color.FromArgb(230, 120, 0); } else if (pipelineTypeCbo.Text == "污水") { btnPipelineColor.BackColor = Color.FromArgb(128, 64, 0); } else if (pipelineTypeCbo.Text == "天然气") { btnPipelineColor.BackColor = Color.FromArgb(215, 0, 64); } else if (pipelineTypeCbo.Text == "共通") { btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); } else if (pipelineTypeCbo.Text == "电通") { btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); } else if (pipelineTypeCbo.Text == "有线电视") { btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); } else if (pipelineTypeCbo.Text == "监控") { btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); } else if (pipelineTypeCbo.Text == "交通信号") { btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); } else if (pipelineTypeCbo.Text == "路灯") { btnPipelineColor.BackColor = Color.FromArgb(255, 0, 150); } else if (pipelineTypeCbo.Text == "通讯") { btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); } else if (pipelineTypeCbo.Text == "热力") { btnPipelineColor.BackColor = Color.FromArgb(255, 0, 0); } else if (pipelineTypeCbo.Text == "燃气") { btnPipelineColor.BackColor = Color.FromArgb(200, 0, 100); } else if (pipelineTypeCbo.Text == "共同沟") { btnPipelineColor.BackColor = Color.FromArgb(0, 0, 255); } else { btnPipelineColor.BackColor = Color.FromArgb(0, 0, 0); } } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } private void btnOK_Click(object sender, EventArgs e) { GSODataSource dataSpace = globeControl1.Globe.DataManager.OpenOracleDataSource(Utility.ghdbip.Trim() + "/" + Utility.ghdbname.Trim(), "", "", Utility.ghdbuser, Utility.ghdbpwd); if (textBoxLayer.Text.ToString() == "") { MessageBox.Show("请选择要导入的矢量数据", "提示"); return; } else { if (pipelineTypeCbo.Text.ToString() == "") { MessageBox.Show("请选择管线类型", "提示"); return; } else { if (textBoxLayerName.Text.ToString() == "") { MessageBox.Show("请输入管线名称!", "提示"); return; } else { string fileName = Path.GetFileName(filePath); if (fileName.IndexOf(".dxf") != -1) { string lprjfilepath = Path.GetDirectoryName(filePath) + "\\" + Path.GetFileNameWithoutExtension(filePath) + ".lprj"; //复制lprj FileInfo OFInfo = new FileInfo(lprjfilepath);//获取目标文件所在的路径 FileInfo SFInfo = new FileInfo(Application.StartupPath + "\\lprj\\sz.lprj"); if (!OFInfo.Exists) { SFInfo.CopyTo(lprjfilepath, true);//将文件复制到指定的路径中 } } /* else if (fileName.IndexOf(".shp") != -1) { string lprjfilepath = Path.GetDirectoryName(filePath)+"\\"+ Path.GetFileNameWithoutExtension(filePath) + ".prj"; //复制lprj FileInfo OFInfo = new FileInfo(lprjfilepath);//获取目标文件所在的路径 FileInfo SFInfo = new FileInfo(Application.StartupPath + "\\lprj\\sz.prj"); //SFInfo.CopyTo(lprjfilepath, true);//将文件复制到指定的路径中 } */ #region 地球中显示 GSOLayer layer = globeControl1.Globe.Layers.Add(filePath); if (layer != null) { GSODataset dataset = layer.Dataset; if (dataset.GeoReferenceType == EnumGeoReferenceType.Flat) { MessageBox.Show("没有空间参考信息!", "提示"); return; } TreeNode node = new TreeNode(); node.Tag = layer; node.Text = layer.Dataset.Caption; node.ImageIndex = 0; node.SelectedImageIndex = 0; node.Checked = layer.Visible; // 注意用insert不要用add,因为后加入的图层在上层 //layerManagerNode.Nodes.Add(node); layerManagerNode.Nodes.Insert(0, node); for (int j = 0; j < layer.GetAllFeatures().Length; j++) { GSOFeature f = layer.GetAt(j); if (f != null) { f.Geometry.AltitudeMode = EnumAltitudeMode.RelativeToGround; } } } layerManagerNode.Expand(); // //GSOLayer lyr = globeControl1.Globe.Layers.GetLayerByCaption(textBoxLayerName.Text.ToString());filePath GSOLayer lyr = globeControl1.Globe.Layers.GetLayerByCaption(System.IO.Path.GetFileNameWithoutExtension(filePath)); GSOSimpleLineStyle3D linestyle = new GSOSimpleLineStyle3D(); linestyle.LineColor = Color.FromArgb(255, btnPipelineColor.BackColor); linestyle.LineWidth = 1; lyr.Style = linestyle; GSOFeatures features = lyr.GetAllFeatures(); GSORect2d rd = lyr.LatLonBounds; GSOPoint2d rdcenter = rd.Center; globeControl1.Globe.JumpToPosition(new GSOPoint3d(rdcenter.X, rdcenter.Y, 0), EnumAltitudeMode.Absolute, 500); globeControl1.Globe.Layers.MoveTo(0, globeControl1.Globe.Layers.Count - 1); globeControl1.Refresh(); #endregion //插入数据库 CreateLine.batchInsert(dataSpace, textBoxLayerName.Text.ToString(), features, btnPipelineColor.BackColor); this.Close(); } } } } } }