private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0)
            {
                return;
            }

            GSOFeatureLayer pFeatureLayer = geoLayer as GSOFeatureLayer;

            if (pFeatureLayer != null)
            {
                string featureName = dataGridView1.Rows[e.RowIndex].Cells["编号"].Value.ToString();
                if (featureName == "")
                {
                    return;
                }
                GSOFeatures features = pFeatureLayer.GetFeatureByName(featureName, false);
                GSOFeature  feature  = new GSOFeature();
                for (int j = 0; j < features.Length; j++)
                {
                    if (features[j].Name == featureName)
                    {
                        feature = features[j];
                        if (globeControl1 != null)
                        {
                            globeControl1.Globe.FlyToFeature(feature);
                            globeControl1.Globe.Refresh();
                        }
                    }
                }
            }
        }
        private void cbox_Layers_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbox_Layers.SelectedItem == null)
            {
                return;
            }
            GSOLayer m_layer = globeControl1.Globe.Layers.GetLayerByCaption(cbox_Layers.SelectedItem.ToString().Trim());//获取当前选择的layer图层

            if (m_layer == null)
            {
                return;
            }
            listBox_Field.Items.Clear();
            GSOFeatureLayer flayer = m_layer as GSOFeatureLayer;

            if (flayer == null)
            {
                return;
            }
            sourcefDataset = m_layer.Dataset as GSOFeatureDataset;
            if (sourcefDataset == null)
            {
                return;
            }
            sourcefDataset.Open();
            for (int j = 0; j < sourcefDataset.FieldCount; j++)
            {
                GSOFieldAttr fieldef = sourcefDataset.GetField(j);
                listBox_Field.Items.Add(fieldef.Name);
            }
            //设置当前选择字段为第一个
            listBox_Field.SelectedIndex = 0;
            //将描述信息修改
            label3.Text = "SELECT * FROM " + m_layer.Caption + " WHERE:";
        }
        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0)
            {
                return;
            }

            GSOFeatureLayer pFeatureLayer = geoLayer as GSOFeatureLayer;

            if (pFeatureLayer != null)
            {
                GSOFeature featureFlyTo = dataGridView1.Rows[e.RowIndex].Tag as GSOFeature;
                if (featureFlyTo == null || globeControl1 == null)
                {
                    return;
                }

                if (featureFlyTo.Geometry != null && featureFlyTo.Geometry.Type == EnumGeometryType.GeoPolyline3D)
                {
                    GSOGeoPolyline3D line     = featureFlyTo.Geometry as GSOGeoPolyline3D;
                    double           length   = line.GetSpaceLength(true, 6378137);
                    GSOGeoPolyline3D lineLine = line.GetSegment(0, length / 2);
                    GSOPoint3d       point3d  = lineLine[lineLine.PartCount - 1][lineLine[lineLine.PartCount - 1].Count - 1];

                    globeControl1.Globe.FlyToPosition(point3d, EnumAltitudeMode.Absolute, 0, 45, 5);
                }
                else
                {
                    globeControl1.Globe.FlyToFeature(featureFlyTo, 0, 45, 3);
                }
                globeControl1.Globe.Refresh();
            }
        }
Ejemplo n.º 4
0
        private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                DataGridView.HitTestInfo hittestinfo = dataGridView1.HitTest(e.X, e.Y);
                if (hittestinfo.RowIndex > -1)
                {
                    contextMenuStrip1.Show(dataGridView1, e.X, e.Y);

                    if (layer == null)
                    {
                        return;
                    }

                    GSOFeatureLayer pFeatureLayer = layer as GSOFeatureLayer;
                    if (pFeatureLayer != null)
                    {
                        features = layer.GetFeatureByName(dataGridView1.Rows[hittestinfo.RowIndex].Cells["编号"].Value.ToString(), true);
                        if (features != null)
                        {
                            for (int i = 0; i < features.Length; i++)
                            {
                                m_feature           = features[i];
                                m_feature.HighLight = false;
                            }
                            globeControl1.Globe.Refresh();
                        }
                    }
                }
            }
        }
        private void buttonDelAttribute_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确定要删除该属性字段?", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                try
                {
                    GSOFeatureLayer pFeatureLayer = geoLayer as GSOFeatureLayer;
                    if (pFeatureLayer == null)
                    {
                        return;
                    }
                    GSOFeatureDataset dataset = pFeatureLayer.Dataset as GSOFeatureDataset;

                    dataset.DeleteField(listBoxAttribute.SelectedItem.ToString());

                    if (listBoxAttribute.SelectedItem != null)
                    {
                        listBoxAttribute.Items.Remove(listBoxAttribute.SelectedItem);
                        dataset.SaveAs(@"F:\新建文件夹");
                        MessageBox.Show("删除字段成功!", "提示!");
                    }
                    if (m_globeControl != null)
                    {
                        m_globeControl.Refresh();
                    }
                }
                catch (System.Exception exp)
                {
                    Log.PublishTxt(exp);
                }
            }
        }
        private void buttonAddAttribute_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确定要添加该属性字段?", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                try
                {
                    GSOFeatureLayer pFeatureLayer = geoLayer as GSOFeatureLayer;
                    if (pFeatureLayer == null)
                    {
                        return;
                    }
                    GSOFeatures       feats     = pFeatureLayer.GetAllFeatures();
                    GSOFeatureDataset dateset   = pFeatureLayer.Dataset as GSOFeatureDataset;
                    GSOFieldAttr      fieldattr = new GSOFieldAttr();

                    fieldattr.Name = textBoxAddAttributeName.Text;
                    switch (comboBoxAddAttributeType.SelectedIndex)
                    {
                    case 0:
                        fieldattr.Type  = EnumFieldType.Text;
                        fieldattr.Width = 2000;
                        break;

                    case 1:
                        fieldattr.Type = EnumFieldType.Double;
                        break;

                    case 2:
                        //fieldattr.Type = EnumFieldType.INT16;
                        //fieldattr.Type = EnumFieldType.INT32;
                        fieldattr.Type = EnumFieldType.INT64;
                        break;

                    case 3:
                        fieldattr.Type = EnumFieldType.Date;
                        break;
                    }

                    dateset.AddField(fieldattr);
                    dateset.Save();
                    listBoxAttribute.Items.Add(fieldattr.Name);

                    MessageBox.Show("添加属性字段成功!", "提示!");

                    if (m_globeControl != null)
                    {
                        m_globeControl.Refresh();
                    }
                }
                catch (System.Exception exp)
                {
                    Log.PublishTxt(exp);
                }
            }
        }
Ejemplo n.º 7
0
        private void buttonGetFieldValue_Click(object sender, EventArgs e)
        {
            string fieldName = comboBoxFieldNames.Text.Trim();

            if (fieldName == "")
            {
                MessageBox.Show("请选择字段名称!", "提示");
                return;
            }
            GSOLayer layer = ctl.Globe.Layers.GetLayerByCaption(cmbLayers.Text.Trim());

            if (layer == null)
            {
                MessageBox.Show("请选择图层", "提示");
                return;
            }
            if (layer.Type != EnumLayerType.FeatureLayer)
            {
                MessageBox.Show("当前选中的图层不是模型图层!", "提示");
                return;
            }
            GSOFeatureLayer featureLayer = layer as GSOFeatureLayer;
            List <string>   listValues   = new List <string>();

            for (int i = 0; i < featureLayer.GetAllFeatures().Length; i++)
            {
                GSOFeature feature = featureLayer.GetAt(i);
                if (feature != null)
                {
                    object value = feature.GetValue(fieldName);
                    if (value == null || value.ToString() == "")
                    {
                        continue;
                    }
                    if (listValues.Contains(value.ToString()) == false)
                    {
                        listValues.Add(value.ToString());
                    }
                }
            }
            listViewFieldValues.Items.Clear();
            if (listValues.Count <= 0)
            {
                MessageBox.Show("没有找到不为空的字段值!", "提示");
                return;
            }
            for (int i = 0; i < listValues.Count; i++)
            {
                listViewFieldValues.Items.Add(listValues[i]);
            }
        }
        private void Frm_EditorAttributes_Load(object sender, EventArgs e)
        {
            GSOFeatureLayer gsoFeatureLayer = geoLayer as GSOFeatureLayer;

            if (gsoFeatureLayer == null)
            {
                MessageBox.Show("该数据不是属性数据,属性值为空!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            GSOFeatureDataset flayer = gsoFeatureLayer.Dataset as GSOFeatureDataset;

            for (int i = 0; i < flayer.FieldCount; i++)
            {
                GSOFieldAttr field = flayer.GetField(i);
                listBoxAttribute.Items.Add(field.Name);
                //labelAttributeType.Text = "图层属性类型为:" + field.Type.ToString() + "类型";
            }
        }
        private void listBoxAttribute_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listBoxAttribute.SelectedItem != null)
            {
                GSOFeatureLayer gsoFeatureLayer = geoLayer as GSOFeatureLayer;
                if (gsoFeatureLayer == null)
                {
                    MessageBox.Show("该数据不是属性数据,属性值为空!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                GSOFeatureDataset flayer = gsoFeatureLayer.Dataset as GSOFeatureDataset;

                GSOFieldAttr field = flayer.GetField(listBoxAttribute.SelectedItem.ToString());


                labelAttributeType.Text = "图层属性类型为:" + field.Type.ToString() + " 类型";
            }
        }
Ejemplo n.º 10
0
        private void btn_OK_Click(object sender, System.EventArgs e)
        {
            if (string.IsNullOrEmpty(this.textBox1.Text))
            {
                errorProvider1.SetError(this.textBox1, "请输入升降高度");
                return;
            }
            if (!double.TryParse(this.textBox1.Text, out double height))
            {
                errorProvider1.SetError(this.textBox1, "输入高度不合法,请重新输入数字。");
                return;
            }
            GSOFeatureLayer flayer = _layer as GSOFeatureLayer;
            //获得图层中的所有要素
            GSOFeatures features = flayer.GetAllFeatures();

            for (int i = 0; i < features.Length; i++)
            {
                //遍历所有要素
                GSOFeature feature = features[i];
                if (feature is GSOFeatureFolder)
                {
                    MoveEachFeature(feature as GSOFeatureFolder, height);
                }
                else
                {
                    GSOGeometry geometry = feature.Geometry;
                    if (geometry != null)
                    {
                        //为了显示升降效果,
                        //需要将ClampToGround模式修改为RelativeToGround模式
                        if (geometry.AltitudeMode == EnumAltitudeMode.ClampToGround)
                        {
                            geometry.AltitudeMode = EnumAltitudeMode.RelativeToGround;
                        }
                        //将z轴移动height米
                        geometry.MoveZ(height);
                    }
                }
            }
            _glbControl.Refresh();
        }
        public void SetDataTable()
        {
            this.Shown += new EventHandler(Frm_TableAttribute_Shown);
            GSOFeatureLayer pFeatureLayer = geoLayer as GSOFeatureLayer;

            if (dt != null)
            {
                if (pFeatureLayer != null)
                {
                    dataGridView1.ReadOnly = !geoLayer.Editable;
                }

                dataGridView1.DataSource = dt;

                if (statusStrip1.Items.Count > 0)
                {
                    statusStrip1.Items[0].Text = " 共有 " + dt.Rows.Count + " 条记录";
                }
            }
        }
        private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                DataGridView.HitTestInfo hittestinfo = dataGridView1.HitTest(e.X, e.Y);
                if (hittestinfo.RowIndex > -1)
                {
                    GSOFeatureLayer pFeatureLayer = geoLayer as GSOFeatureLayer;
                    if (pFeatureLayer != null)
                    {
                        contextMenuStrip1.Show(dataGridView1, e.X, e.Y);

                        GSOFeature feature = dataGridView1.Rows[hittestinfo.RowIndex].Tag as GSOFeature;
                        if (feature != null)
                        {
                            m_feature           = feature;
                            m_feature.HighLight = false;
                        }
                        globeControl1.Globe.Refresh();
                    }
                }
            }
        }
Ejemplo n.º 13
0
        private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.RowIndex < 0)
            {
                return;
            }


            GSOFeatureLayer pFeatureLayer = layer as GSOFeatureLayer;

            if (pFeatureLayer != null)
            {
                features = layer.GetFeatureByName(dataGridView1.Rows[e.RowIndex].Cells["编号"].Value.ToString(), true);
                if (features != null)
                {
                    for (int i = 0; i < features.Length; i++)
                    {
                        m_feature = features[i];
                        globeControl1.Globe.FlyToFeature(features[i]);
                    }
                    globeControl1.Globe.Refresh();
                }
            }
        }
        private void cbox_Layers_SelectedIndexChanged(object sender, EventArgs e)
        {
            GSOLayer m_layer = globeControl1.Globe.Layers.GetLayerByCaption(cbox_Layers.SelectedItem.ToString().Trim());//获取当前选择的layer图层

            if (m_layer == null || m_layer.Dataset == null || m_layer.Dataset.DataSource == null)
            {
                return;
            }
            connectParams = Utility.getConnectParamsByDatasourceName(globeControl1, m_layer.Dataset.DataSource.Name);
            if (connectParams == null)
            {
                return;
            }

            listBox_Field.Items.Clear();
            GSOFeatureLayer flayer = m_layer as GSOFeatureLayer;

            sourcefDataset = m_layer.Dataset as GSOFeatureDataset;
            if (sourcefDataset != null)
            {
                sourcefDataset.Open();

                for (int j = 0; j < sourcefDataset.FieldCount; j++)
                {
                    GSOFieldAttr fieldef = sourcefDataset.GetField(j);
                    listBox_Field.Items.Add(fieldef.Name);
                }
                //设置当前选择字段为第一个
                if (listBox_Field.Items.Count > 0)
                {
                    listBox_Field.SelectedIndex = 0;
                }
                //将描述信息修改
                label3.Text = "SELECT * FROM " + sourcefDataset.Name + " WHERE:";
            }
        }
Ejemplo n.º 15
0
        private void btnEnter_Click(object sender, EventArgs e)
        {
            int n = 0;

            layer = globeControl1.Globe.Layers.GetLayerByCaption(cmbPipeShow.Text.Trim());
            GSOFeatureLayer flayer = layer as GSOFeatureLayer;

            if (flayer == null)
            {
                return;
            }
            GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset;

            if (fdataset == null || fdataset.DataSource == null)
            {
                return;
            }
            connectParams = Utility.getConnectParamsByDatasourceName(globeControl1, fdataset.DataSource.Name);
            if (connectParams == null)
            {
                return;
            }
            GSOFeatures feats = flayer.GetAllFeatures();
            string      type  = layer.Caption.Substring(0, 2);
            string      sql   = "select * " + " from " + layer.Caption + "  where";

            for (int i = 0; i < feats.Length; i++)
            {
                GSOFeature f = feats[i];
                if (f.Geometry.Type == EnumGeometryType.GeoPolyline3D)
                {
                    GSOGeoPolyline3D   line  = f.Geometry as GSOGeoPolyline3D;
                    GSOPipeLineStyle3D style = line.Style as GSOPipeLineStyle3D;
                    if (style != null)
                    {
                        GSOPoint3ds pnts = getAllPointInPipeline(line);
                        for (int j = 0; j < pnts.Count; j++)
                        {
                            GSOPoint3d pt = pnts[j];
                            if (Math.Abs(pt.Z) < style.Radius)
                            {
                                n++;
                                sql += "  编号='" + f.Name + "' or ";
                                break;
                            }
                        }
                    }
                }
            }
            if (n > 0)
            {
                sql = sql.Substring(0, sql.Length - 3);
                DataTable dt = new DataTable();
                dt = OledbHelper.QueryTable(sql, connectParams);

                if (dt == null)
                {
                    MessageBox.Show("没有地上管线!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (dt.Columns.Count > 3)
                    {
                        dt.Columns.RemoveAt(0);
                        dt.Columns.RemoveAt(0);
                        dt.Columns.RemoveAt(0);
                    }
                    dataGridView1.ReadOnly   = !layer.Editable;
                    dataGridView1.DataSource = dt;
                    if (statusStrip1.Items.Count > 0)
                    {
                        statusStrip1.Items[0].Text = " 共有 " + dt.Rows.Count + " 条记录";
                    }
                    globeControl1.Globe.Refresh();
                }
            }
            else
            {
                MessageBox.Show("没有地上管线!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                dataGridView1.DataSource = null;
                if (statusStrip1.Items.Count > 0)
                {
                    statusStrip1.Items[0].Text = " 共有 " + 0 + " 条记录";
                }
            }
        }
Ejemplo n.º 16
0
 //框选导出图层
 private void 框选导出图层toolStripMenuItem3_Click(object sender, EventArgs e)
 {
     if (globeControl1.Globe.SelObjectCount <= 0)
     {
         MessageBox.Show("请先选中一个面对象!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
         return;
     }
     List<GSOGeoPolygon3D> list = new List<GSOGeoPolygon3D>();
     GSOLayer newlayer = new GSOFeatureLayer();
     for (int i = 0; i < globeControl1.Globe.SelObjectCount; i++)
     {
         GSOFeature newfeature = new GSOFeature();
         globeControl1.Globe.GetSelectObject(0, out newfeature, out newlayer);
         if (newfeature.Geometry.Type == EnumGeometryType.GeoPolygon3D)
         {
             GSOGeoPolygon3D polygon = (GSOGeoPolygon3D)newfeature.Geometry;
             list.Add(polygon);
         }
     }
     if (list.Count > 0)
     {
         FrmParticalExportLayer exportLayer = new FrmParticalExportLayer(globeControl1, list);
         exportLayer.Show(this);
     }
     else
     {
         MessageBox.Show("请选中一个或者多个面对象!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
     }
 }
Ejemplo n.º 17
0
        private void btnMove_Click(object sender, EventArgs e)
        {
            GSOLayer layer = ctl.Globe.Layers[cmbLayers.SelectedIndex];

            if (layer != null)
            {
                if (layer.Type != EnumLayerType.FeatureLayer)
                {
                    MessageBox.Show("当前选中的图层不是模型图层!", "提示");
                    return;
                }
                if (txtOldLat.Text == "")
                {
                    MessageBox.Show("请选择起点");
                }
                else if (txtNewLat.Text == "")
                {
                    MessageBox.Show("请选择目标点");
                }
                else
                {
                    double daltX = Convert.ToDouble(txtNewLon.Text) - Convert.ToDouble(txtOldLon.Text);
                    double daltY = Convert.ToDouble(txtNewLat.Text) - Convert.ToDouble(txtOldLat.Text);


                    GSOFeatureLayer flayer = layer as GSOFeatureLayer;

                    GSOFeatures features = flayer.GetAllFeatures();
                    for (int i = 0; i < features.Length; i++)
                    {
                        GSOFeature feature = features[i];
                        if (feature is GSOFeatureFolder)
                        {
                            MoveEachFeature(feature as GSOFeatureFolder, daltX, daltY);
                        }
                        else
                        {
                            GSOGeometry g = feature.Geometry;
                            if (g != null)
                            {
                                g.MoveXY(daltX, daltY);
                            }



                            //    switch (feature.Geometry.Type)
                            //    {
                            //        case EnumGeometryType.GeoPolyline3D:
                            //            GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D;
                            //            for (int m = 0; m < line.PartCount; m++)
                            //            {
                            //                for (int j = 0; j < line[m].Count; j++)
                            //                {
                            //                    GSOPoint3d line0 = line[m][j];
                            //                    line0.X += daltX;
                            //                    line0.Y += daltY;
                            //                    line[m][j] = line0;
                            //                }
                            //            }
                            //            break;
                            //        case EnumGeometryType.GeoPolygon3D:
                            //            GSOGeoPolygon3D polygon = feature.Geometry as GSOGeoPolygon3D;
                            //            if (polygon != null)
                            //            {
                            //                polygon.MoveXY(daltX, daltY);
                            //            }
                            //            break;
                            //        case EnumGeometryType.GeoModel:
                            //            GSOGeoModel model = feature.Geometry as GSOGeoModel;
                            //            if (model != null)
                            //            {
                            //                GSOPoint3d pt = model.Position;
                            //                pt.X += daltX;
                            //                pt.Y += daltY;
                            //                model.Position = pt;
                            //            }
                            //            break;
                            //        case EnumGeometryType.GeoFrameAnimation:
                            //            GSOGeoFrameAnimation frameAnimation = feature.Geometry as GSOGeoFrameAnimation;
                            //            if (frameAnimation != null)
                            //            {
                            //                GSOPoint3d pt = frameAnimation.Position;
                            //                pt.X += daltX;
                            //                pt.Y += daltY;
                            //                frameAnimation.Position = pt;
                            //            }
                            //            break;
                            //        default:
                            //            GSOGeometry g = feature.Geometry;
                            //            if (g != null)
                            //            {
                            //                g.MoveXY(daltX, daltY);
                            //            }
                            //            break;
                            //    }
                        }
                    }
                    if (startFeat != null)
                    {
                        startFeat.Delete();
                    }
                    if (endFeat != null)
                    {
                        endFeat.Delete();
                    }
                    ctl.Refresh();
                    //this.Close();
                }
            }
            else
            {
                MessageBox.Show("请选择图层");
            }
        }
Ejemplo n.º 18
0
        private void btnApply_Click(object sender, EventArgs e)
        {
            GSOLayer layer = ctl.Globe.Layers.GetLayerByCaption(cmbLayers.Text.Trim());

            if (layer == null)
            {
                MessageBox.Show("请选择图层", "提示");
                return;
            }
            if (layer.Type != EnumLayerType.FeatureLayer)
            {
                MessageBox.Show("当前选中的图层不是模型图层!", "提示");
                return;
            }
            GSOFeatureLayer flayer   = layer as GSOFeatureLayer;
            GSOFeatures     features = new GSOFeatures();

            if (radioButtonElevateAllFeature.Checked == true)
            {
                features = flayer.GetAllFeatures();
            }
            else if (radioButtonElevatePartFeature.Checked == true)
            {
                string fieldName = comboBoxFieldNames.Text.Trim();
                if (fieldName == "")
                {
                    MessageBox.Show("请选择字段名称!", "提示");
                    return;
                }
                if (listViewFieldValues.SelectedItems.Count <= 0)
                {
                    MessageBox.Show("请选中一个字段值!", "提示");
                    return;
                }
                string fieldValue = listViewFieldValues.SelectedItems[0].Text.Trim();
                features = flayer.GetFeatureByFieldValue(fieldName, fieldValue, true);
            }

            string elevateHeight = txtHeight.Text.Trim();
            double height        = 0;

            if (txtHeight.Text == "" || double.TryParse(elevateHeight, out height) == false)
            {
                MessageBox.Show("请输入正确的调整高度", "提示");
                return;
            }

            for (int i = 0; i < features.Length; i++)
            {
                GSOFeature feature = features[i];
                if (feature is GSOFeatureFolder)
                {
                    MoveEachFeature(feature as GSOFeatureFolder, height);
                }
                else if (feature.Geometry is GSOGeoModel)
                {
                    GSOGeoModel model = feature.Geometry as GSOGeoModel;
                    if (model != null)
                    {
                        GSOPoint3d pt = model.Position;
                        pt.Z          += height;
                        model.Position = pt;
                    }
                }
                else if (feature.Geometry is GSOGeoPolyline3D)
                {
                    GSOGeoPolyline3D templine = feature.Geometry as GSOGeoPolyline3D;
                    if (templine != null)
                    {
                        templine.MoveZ(height);
                        feature.Geometry = templine;
                    }
                }
            }
            ctl.Refresh();
            MessageBox.Show("抬升成功", "提示");
        }
Ejemplo n.º 19
0
        private List <DataTable> CollisionAnalysis()
        {
            List <DataTable> listTable = new List <DataTable>();
            GSOPoint3d       pntIntersect1;
            GSOPoint3d       pntIntersect2;
            int layerCount = listBox1.SelectedItems.Count;

            for (int i = 0; i < layerCount; i++)//遍历所有的图层
            {
                GSOLayer layer1 = globeControl1.Globe.Layers.GetLayerByCaption(listBox1.SelectedItems[i].ToString().Trim());
                if (layer1 != null)
                {
                    DataTable dt = new DataTable();
                    if (layer1.GetAllFeatures().Length > 0)
                    {
                        for (int fieldName = 0; fieldName < layer1.GetAt(0).GetFieldCount(); fieldName++)
                        {
                            GSOFieldDefn field = (GSOFieldDefn)layer1.GetAt(0).GetFieldDefn(fieldName);
                            dt.Columns.Add(field.Name);
                        }
                    }
                    listTable.Add(dt);
                }
            }

            if (listTable.Count > 0 && listTable.Count == layerCount)
            {
                for (int i = 0; i < layerCount; i++)//遍历所有的图层
                {
                    GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(listBox1.SelectedItems[i].ToString().Trim());
                    if (layer.Caption.Contains("管线")) //过滤出管线图层
                    {
                        GSOFeatureLayer   flayer   = layer as GSOFeatureLayer;
                        GSOFeatureDataset fdataset = flayer.Dataset as GSOFeatureDataset;
                        GSOFeatures       feats    = flayer.GetAllFeatures();


                        for (int m = 0; m < feats.Length; m++) //遍历图层中的所有管线
                        {
                            GSOFeature feat = feats[m];

                            GSOGeoPolyline3D line1 = feat.Geometry as GSOGeoPolyline3D;
                            if (line1 == null)
                            {
                                continue;
                            }
                            GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D;
                            if (pipeStyle1 == null)
                            {
                                continue;
                            }
                            for (int j = i; j < layerCount; j++)
                            {
                                GSOLayer        layer2  = globeControl1.Globe.Layers.GetLayerByCaption(listBox1.SelectedItems[j].ToString().Trim());
                                GSOFeatureLayer flayer2 = layer2 as GSOFeatureLayer;
                                if (layer2.Caption.Contains("管线"))
                                {
                                    GSOFeatureDataset fdataset2 = flayer2.Dataset as GSOFeatureDataset;
                                    GSOFeatures       feats2    = flayer2.GetAllFeatures();
                                    for (int n = 0; n < feats2.Length; n++)//遍历图层中的所有管线
                                    {
                                        if (i == j)
                                        {
                                            if (m >= n)
                                            {
                                                continue;
                                            }
                                        }
                                        GSOFeature       feat2 = feats2[n];
                                        GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D;
                                        if (line2 == null)
                                        {
                                            continue;
                                        }
                                        GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D;
                                        if (pipeStyle2 == null)
                                        {
                                            continue;
                                        }
                                        double dHonLen;
                                        double dVerLen;
                                        double dNoIntersectStartRatio = 0;
                                        // 计算两条线的距离和交点,若果失败返回-1
                                        // 若在同一直线上,并且有交点,返回0
                                        // 若不在同一平面,返回最近两点的距离,并且计算最近两点
                                        double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2, out dHonLen, out dVerLen, false, false, dNoIntersectStartRatio);
                                        if (dDist > -1)
                                        {
                                            if (dDist != 0)
                                            {
                                                dDist = dDist - pipeStyle1.Radius - pipeStyle2.Radius;
                                                if (dDist < 0) //发生碰撞,把发生碰撞的管线名称添加到DataTable里
                                                {
                                                    DataRow newRow = listTable[i].NewRow();
                                                    for (int fieldName = 0; fieldName < feats[m].GetFieldCount(); fieldName++)
                                                    {
                                                        newRow[fieldName] = feats[m].GetValue(fieldName);
                                                    }
                                                    if (newRow != null)
                                                    {
                                                        listTable[i].Rows.Add(newRow);
                                                    }

                                                    DataRow newRow1 = listTable[j].NewRow();
                                                    for (int fieldName = 0; fieldName < feats2[n].GetFieldCount(); fieldName++)
                                                    {
                                                        newRow1[fieldName] = feats2[n].GetValue(fieldName);
                                                    }
                                                    if (newRow != null)
                                                    {
                                                        listTable[j].Rows.Add(newRow1);
                                                    }
                                                    //newRow["编号1"] = layer.Caption + "-" + feats[m].ID;
                                                    //newRow["编号2"] = layer2.Caption + "-" + feats2[n].ID;
                                                    //dt.Rows.Add(newRow);
                                                }
                                            }
                                        }
                                        line2.ReleaseInnerPointer();
                                        feat2.ReleaseInnerPointer();
                                    }
                                    feats2.ReleaseInnerPointer();
                                }
                            }
                            line1.ReleaseInnerPointer();
                            feat.ReleaseInnerPointer();
                        }
                        feats.ReleaseInnerPointer();
                    }
                }
            }
            return(listTable);
        }
Ejemplo n.º 20
0
        private void radioButtonElevatePartFeature_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButtonElevatePartFeature.Checked == true)
            {
                string layerCaption = cmbLayers.Text.Trim();
                if (layerCaption == "")
                {
                    radioButtonElevateAllFeature.Checked = true;
                    MessageBox.Show("请先选择图层!", "提示");
                    return;
                }
                GSOLayer layer = ctl.Globe.Layers.GetLayerByCaption(layerCaption);
                if (layer == null)
                {
                    radioButtonElevateAllFeature.Checked = true;
                    MessageBox.Show("请先选择图层!", "提示");
                    return;
                }

                GSOFeatureLayer featureLayer = layer as GSOFeatureLayer;
                if (featureLayer == null)
                {
                    radioButtonElevateAllFeature.Checked = true;
                    MessageBox.Show("图层不是矢量图层!", "提示");
                    return;
                }
                if (featureLayer.GetAllFeatures().Length <= 0)
                {
                    radioButtonElevateAllFeature.Checked = true;
                    MessageBox.Show("图层中的要素个数为0个!", "提示");
                    return;
                }
                for (int i = 0; i < featureLayer.GetAllFeatures().Length; i++)
                {
                    GSOFeature feature = featureLayer.GetAt(i);
                    if (feature != null)
                    {
                        if (feature.GetFieldCount() <= 0)
                        {
                            radioButtonElevateAllFeature.Checked = true;
                            MessageBox.Show("图层中的字段个数为0个!", "提示");
                            return;
                        }
                        for (int j = 0; j < feature.GetFieldCount(); j++)
                        {
                            GSOFieldDefn field = (GSOFieldDefn)feature.GetFieldDefn(j);
                            if (field != null)
                            {
                                comboBoxFieldNames.Items.Add(field.Name);
                            }
                        }
                        break;
                    }
                }

                radioButtonElevateAllFeature.Checked = false;
                panel1.Enabled = true;
            }
            else
            {
                panel1.Enabled = false;
                radioButtonElevateAllFeature.Checked = true;
            }
        }
        public void SetDataTable()
        {
            this.Shown += new EventHandler(Frm_TableAttribute_Shown);
            GSOFeatureLayer   pFeatureLayer   = geoLayer as GSOFeatureLayer;
            GSOFeatureDataset pFeatureDataset = pFeatureLayer.Dataset as GSOFeatureDataset;

            if (pFeatureLayer == null || pFeatureDataset == null)
            {
                MessageBox.Show("该数据不是属性数据,属性表为空!", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                isShow = false;
                return;
            }
            else
            {
                GSOFeatures feats = m_features;// pFeatureLayer.GetAllFeatures();
                GSOFeature  feat  = feats[0];

                countLog = 0;
                GetReallyFeature(feats);
                try
                {
                    dataGridView1.Columns.Clear();
                    dataGridView1.Rows.Clear();
                    for (int j = 0; j < pFeatureDataset.FieldCount; j++)
                    {
                        GSOFieldAttr field = pFeatureDataset.GetField(j);
                        dataGridView1.Columns.Add(field.Name, field.Name);
                    }
                    for (int i = 0; i < feats.Length; i++)
                    {
                        feat = feats[i];
                        if (feat == null)
                        {
                            continue;
                        }
                        int rowIndex = dataGridView1.Rows.Add();
                        dataGridView1.Rows[rowIndex].Tag = feat;
                        for (int j = 0; j < feat.GetFieldCount(); j++)
                        {
                            GSOFieldDefn field      = (GSOFieldDefn)feat.GetFieldDefn(j);
                            object       fieldValue = feat.GetValue(j);
                            if (fieldValue != null)
                            {
                                dataGridView1.Rows[rowIndex].Cells[j].Value = fieldValue.ToString();
                            }
                        }
                    }

                    dataGridView1.ReadOnly             = !pFeatureLayer.Editable;
                    this.编辑ToolStripMenuItem.BackColor = geoLayer.Editable == true ? Color.Orange : Color.Transparent;

                    if (statusStrip1.Items.Count > 0)
                    {
                        if (dataGridView1.Rows.Count >= countLog)
                        {
                            statusStrip1.Items[0].Text = " 共有 " + dataGridView1.Rows.Count + " 条记录";
                        }
                        else
                        {
                            statusStrip1.Items[0].Text = " 共有 " + countLog + " 条记录";
                        }
                    }
                }
                catch (System.Exception exp)
                {
                    Log.PublishTxt(exp);
                    if (statusStrip1.Items.Count > 0)
                    {
                        statusStrip1.Items[0].Text = " 共有 " + 0 + " 条记录";
                    }
                }
            }
        }