Newer
Older
EMS_REFACTOR / FrmGHRK.cs
nn-203 on 26 Jul 2017 9 KB first commit
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using GeoScene.Data;
using GeoScene.Engine;
using GeoScene.Globe;

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 = 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)
        {
            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 == "")
            {
                MessageBox.Show("请选择要导入的矢量数据", "提示");
            }
            else
            {
                if (pipelineTypeCbo.Text == "")
                {
                    MessageBox.Show("请选择管线类型", "提示");
                }
                else
                {
                    if (textBoxLayerName.Text == "")
                    {
                        MessageBox.Show("请输入管线名称!", "提示");
                    }
                    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(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, features, btnPipelineColor.BackColor);

                        Close();
                    }
                }
            }

        }





    }
}