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(); } }
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); } } }
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() + " 类型"; } }
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(); } } } }
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:"; } }
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 + " 条记录"; } } }
//框选导出图层 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); } }
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("请选择图层"); } }
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("抬升成功", "提示"); }
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); }
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 + " 条记录"; } } } }