using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace taihu2
{
public partial class Form3 : Form
{
MainForm pMF;
public Form3(MainForm _pMF)
{
InitializeComponent();
pMF = _pMF;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox2.Items.Clear();
listBox1.Items.Clear();
IMap pMap = pMF.axMapControl1.Map;
ILayer pLayer = pMap.get_Layer(comboBox1.SelectedIndex);
IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
if (comboBox1.SelectedIndex == 0)
{
comboBox2.Items.Add("测站名称");
comboBox2.Items.Add("东经");
comboBox2.Items.Add("北纬");
comboBox2.Items.Add("雨量");
}
else if (comboBox1.SelectedIndex == 1)
{
comboBox2.Items.Add("测站名称");
comboBox2.Items.Add("东经");
comboBox2.Items.Add("北纬");
}
else
{
for (int i = 3; i < 12; i++)
{
comboBox2.Items.Add(pFeatureClass.Fields.get_Field(i).Name);
}
}
comboBox2.SelectedIndex = 0;
}
//选择属性改变
string fieldname = "";
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
listBox1.Items.Clear();
ILayer pLayer = pMF.axMapControl1.Map.get_Layer(comboBox1.SelectedIndex);
IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
IFeature pFearure;
IFeatureCursor pFCur;
pFCur = pFeatureLayer.FeatureClass.Search(null, false);
pFearure = pFCur.NextFeature();
while (pFearure != null)
{
if (comboBox1.SelectedIndex != 2)
{
if (comboBox2.SelectedItem.ToString() == "雨量")
{
fieldname = "YULIANG";
}
else if (comboBox2.SelectedItem.ToString() == "测站名称")
{
fieldname = "STNM";
}
else if (comboBox2.SelectedItem.ToString() == "东经")
{
if (comboBox1.SelectedIndex == 1)
{
fieldname = "LONITUDE";
}
else
{
fieldname = "LONGITUDE";
}
}
else if (comboBox2.SelectedItem.ToString() == "北纬")
{
if (comboBox2.SelectedIndex == 0)
{
fieldname = "LATITYDE";
}
else
{
fieldname = "LATITUDE";
}
}
else
{
fieldname = comboBox2.SelectedItem.ToString();
}
}
else
{
fieldname = comboBox2.SelectedItem.ToString();
}
int dex = pFCur.FindField(fieldname);
string item = pFearure.get_Value(dex).ToString();
listBox1.Items.Add(item);
pFearure = pFCur.NextFeature();
}
Distinct(listBox1.Items);
}
private void button1_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem != null)
{
listBox2.Items.Clear();
string item1 = listBox1.SelectedItem.ToString();
string item2 = comboBox2.SelectedItem.ToString();
ILayer pLayer = pMF.axMapControl1.Map.get_Layer(comboBox1.SelectedIndex);
IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
IFeature pFearure;
IFeatureCursor pFCur;
IQueryFilter pQF = new QueryFilter();
if (item2 == "测站名称" || item2 == "水资源三级" || item2 == "水功能一级" || item2 == "水功能二级" || item2 == "行政区划" || item2 == "水质类别")
{
pQF.WhereClause = fieldname + "='" + item1 + "'";
}
else
{
pQF.WhereClause = fieldname + "=" + item1;
}
//MessageBox.Show(comboBox2.SelectedItem.ToString());
//MessageBox.Show(listBox1.SelectedItem.ToString());
pFCur = pFeatureLayer.FeatureClass.Search(pQF, false);
pFearure = pFCur.NextFeature();
while (pFearure != null)
{
if (comboBox1.SelectedIndex == 2)
{
listBox2.Items.Add(comboBox1.SelectedItem.ToString() + "-" + pFearure.get_Value(6).ToString());
}
else
{
listBox2.Items.Add(comboBox1.SelectedItem.ToString() + "-" + pFearure.get_Value(4).ToString());
}
pFearure = pFCur.NextFeature();
}
}
}
private void button2_Click(object sender, EventArgs e)
{
if (listBox2.SelectedItem != null)
{
int n = 0;
string str = listBox2.SelectedItem.ToString();
string[] s = str.Split(new char[] { '-' });
string inf = "";
if (s[0] == "雨量站") n = 0;
else
{
if (s[0] == "水文站") n = 1;
else n = 2;
}
IMap pMap = pMF.axMapControl1.Map;
pMap.ClearSelection();
IActiveView pActiveView = pMap as IActiveView;
IFeatureLayer pFL = pMap.get_Layer(n) as IFeatureLayer;
IFeatureClass pFC = pFL.FeatureClass;
IQueryFilter queryFilter = new QueryFilter();
IFeatureCursor featureCursor;
IFeature pFeature;
if (n == 2) queryFilter.WhereClause = "测站名称='" + s[1] + "'";
else queryFilter.WhereClause = "STNM ='" + s[1] + "'";
featureCursor = pFC.Search(queryFilter, false);
pFeature = featureCursor.NextFeature();
pMap.SelectFeature(pFL, pFeature);
pMF.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
switch (n)
{
case 0: inf = "雨量站信息:" + "\r\n" + "测站名称:" + pFeature.get_Value(4) + "\r\n" + "东经:" + pFeature.get_Value(5) + "\r\n" + "北纬:" + pFeature.get_Value(6) + "\r\n" + "雨量:" + pFeature.get_Value(8); break;
case 1: inf = "水文站信息:" + "\r\n" + "测站名称:" + pFeature.get_Value(4) + "\r\n" + "东经:" + pFeature.get_Value(5) + "\r\n" + "北纬:" + pFeature.get_Value(6); break;
case 2: inf = "水质站信息:" + "\r\n" + "测站名称:" + pFeature.get_Value(6) + "\r\n" + "东经:" + pFeature.get_Value(7) + "\r\n" + "北纬:" + pFeature.get_Value(8) + "\r\n" + "水资源三级:" + pFeature.get_Value(3) + "\r\n" + "水功能一级:" + pFeature.get_Value(4) + "\r\n" + "水功能二级:" + pFeature.get_Value(5) + "\r\n" + "行政区划:" + pFeature.get_Value(9) + "\r\n" + "代表河长:" + pFeature.get_Value(10) + "\r\n" + "水质类别:" + pFeature.get_Value(11); break;
}
IPoint point = pFeature.Shape as IPoint;
point.Project(pMF.axMapControl1.Map.SpatialReference);
pMF.axMapControl1.CenterAt(point);
pMF.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
textBox1.Text = inf;
}
else
{
MessageBox.Show("未选择测站");
}
}
private void button3_Click(object sender, EventArgs e)
{
pMF.axMapControl1.Map.ClearSelection();
pMF.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
this.Close();
}
private void Form3_FormClosed(object sender, FormClosedEventArgs e)
{
pMF.axMapControl1.Map.ClearSelection();
pMF.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
}
//去除重复项
private void Distinct(ListBox.ObjectCollection items)
{
for (int i = 0; i < items.Count; i++)
{
for (int j = i + 1; j < items.Count; j++)
{
if (items[i].Equals(items[j])) { items.Remove(items[j]); }
}
}
}