Newer
Older
GHFX_REFACTOR / FrmGHRK.cs
using System;
using System.Diagnostics;
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)
        {
            Debug.WriteLine("FrmGHRK_Load");
            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
                    {
                        #region 地球中显示
                        GSOLayer layer = globeControl1.Globe.Layers.Add(filePath);
                        GSOFeatures features = layer.GetAllFeatures();

                        if (layer != null)
                        {
                            GSODataset dataset = layer.Dataset;
                            if (dataset.GeoReferenceType == EnumGeoReferenceType.Flat)
                            {
                                MessageBox.Show("没有空间参考信息!", "提示");
                                return;
                            }
                        }
                        TreeUtils.AddNodeToManagerNode(layerManagerNode, layer);

                        for (int j = 0; j < layer.GetAllFeatures().Length; j++)
                        {
                            GSOFeature f = layer.GetAt(j);
                            if (f != null)
                                f.Geometry.AltitudeMode = EnumAltitudeMode.RelativeToGround;
                        }

                        GSOSimpleLineStyle3D linestyle = new GSOSimpleLineStyle3D();
                        linestyle.LineColor = Color.FromArgb(255, btnPipelineColor.BackColor);
                        linestyle.LineWidth = 5;
                        layer.Style = linestyle;
                        
                        GSORect2d rd = layer.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);
                        IModelBuilder modelBuilder = new RedLineBuilder();
                        modelBuilder.batchInsert(dataSpace, textBoxLayerName.Text, features, btnPipelineColor.BackColor,"");
                        MessageBox.Show("插入成功!", "提示");
                        this.Close();
                    }
                }
            }

        }

    }
}