📄 form_query.cs
字号:
// if(m_FeatureClass.Fields.get_Field(j).Type==
// ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGeometry)
// continue;
FieldIndex=m_FeatureClass.Fields.FindField(comboBox_Field.Items[j].ToString());
if(FieldIndex==-1) continue;
if(m_FeatureClass.Fields.get_Field(FieldIndex).Type
==ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString) //对string型字段搜索
{
SqlFilter=m_FeatureClass.Fields.get_Field(FieldIndex).Name + " Like '%"
+ comboBox_FeatureName.Text.ToString() + "%'";
FindFeature(comboBox_TargetLayer.SelectedIndex - 1,SqlFilter);
}
// if(m_FeatureClass.Fields.get_Field(FieldIndex).Type
// !=ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString)
// {
// System.Windows.Forms.MessageBox.Show("暂时不能对非字符类型字段进行查找···");
// SqlFilter=m_FeatureClass.Fields.get_Field(FieldIndex).Name + "=" + comboBox_FeatureName.Text.ToString();
// FindFeature(comboBox_TargetLayer.SelectedIndex - 1,SqlFilter);
// }
}
}
else //查找某一字段
{
FieldIndex=m_FeatureClass.Fields.FindField(comboBox_Field.Text);
if(m_FeatureClass.Fields.get_Field(FieldIndex).Type
==ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString) //对string型字段搜索
{
SqlFilter=m_FeatureClass.Fields.get_Field(FieldIndex).Name + " Like '%"
+ comboBox_FeatureName.Text.ToString() + "%'";
FindFeature(comboBox_TargetLayer.SelectedIndex - 1,SqlFilter);
}
if(m_FeatureClass.Fields.get_Field(FieldIndex).Type
!=ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString)
{
System.Windows.Forms.MessageBox.Show("暂时不能对非字符类型字段进行查找···");
return;
// SqlFilter=m_FeatureClass.Fields.get_Field(FieldIndex).Name + "=" + comboBox_FeatureName.Text.ToString();
// FindFeature(comboBox_TargetLayer.SelectedIndex - 1,SqlFilter);
}
}
}
}
private void FindFeature(int LayerIndex,string Sqlstr)
{
IFeatureLayer m_FeatureLayer;
m_FeatureLayer=(IFeatureLayer)m_MapControl.get_Layer(LayerIndex);
IQueryFilter m_Filter;
m_Filter=new QueryFilterClass();
m_Filter.WhereClause=Sqlstr; //sql条件语句
m_FeatureCursor=m_FeatureLayer.Search(m_Filter,true); //要素搜索方法
IFeature m_Feature;
m_Feature=m_FeatureCursor.NextFeature();
listBox_Result.Items.Clear(); //listBox_Result先清空原有记录
while(m_Feature!=null)
{
// if(m_Feature.Shape.GeometryType==esriGeometryType.esriGeometryPoint)
// {
// IGeometry m_Point;
// IPoint m_CenterPoint;
// m_Point=m_Feature.Shape;
// m_CenterPoint=new PointClass();
// m_CenterPoint.X =m_Feature.Extent.XMax;
// m_CenterPoint.Y=m_Feature.Extent.YMax;
//
// IScreenDisplay pDisplay;
// pDisplay=m_MapControl.ActiveView.ScreenDisplay; //闪烁图形
// FlashPoint(pDisplay,m_Point,5,300);
// IEnvelope m_Env;
// m_Env=m_MapControl.ActiveView.Extent; //放大定位
// m_Env.CenterAt(m_CenterPoint);
// m_Env.Expand(0.5,0.5,true);
// m_MapControl.ActiveView.Extent = m_Env;
// m_MapControl.ActiveView.Refresh();
//
// m_MapControl.Map.SelectFeature(m_MapControl.get_Layer(LayerIndex),m_Feature);
// }
listBox_Result.Items.Add(m_Feature.get_Value(3).ToString()); //要素名称(这个暂时没有通用性)
result=true; //找到要素记录
m_Feature=m_FeatureCursor.NextFeature();
}
}
private void FlashPoint(IScreenDisplay pDisplay,IGeometry pGeometry,int nTimer,int time) //闪烁图形
{
ISimpleMarkerSymbol pPointSymbol;
ISymbol pSymbol;
IRgbColor pRGBColor;
pRGBColor=new RgbColorClass();
pRGBColor.Red=255;
pPointSymbol=new SimpleMarkerSymbolClass();
pPointSymbol.Color=pRGBColor;
pSymbol=(ISymbol)pPointSymbol;
pSymbol.ROP2=esriRasterOpCode.esriROPNotXOrPen;
pDisplay.StartDrawing(0,-1);
pDisplay.SetSymbol(pSymbol);
for(int i=0;i< nTimer;i++)
{
pDisplay.DrawPoint(pGeometry);
Thread.Sleep (time);
}
pDisplay.FinishDrawing();
}
private void Form_Query_Load(object sender, System.EventArgs e)
{
comboBox_TargetLayer.Items.Clear();
comboBox_TargetLayer.Items.Add("所有图层");
comboBox_TargetLayer.Text=comboBox_TargetLayer.Items[0].ToString();
for(int i=0;i<=m_MapControl.Map.LayerCount-1;i++)
{
comboBox_TargetLayer.Items.Add(m_MapControl.Map.get_Layer(i).Name);
}
comboBox_Field.Items.Clear();
comboBox_Field.Items.Add("所有字段");
comboBox_Field.Text=comboBox_Field.Items[0].ToString();
IFeatureLayer m_FeatureLayer;
for(int i=0;i<=m_MapControl.Map.LayerCount - 1;i++)
{
m_FeatureLayer=(IFeatureLayer)m_MapControl.Map.get_Layer(i);
IFeatureClass m_FeatureClass;
m_FeatureClass=m_FeatureLayer.FeatureClass;
for(int j=0;j<=m_FeatureClass.Fields.FieldCount - 1;j++)
{
if(m_FeatureClass.Fields.get_Field(j).Type!=ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeOID)
if(m_FeatureClass.Fields.get_Field(j).Type!=
ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGeometry)
for(int k=0;k<=comboBox_Field.Items.Count - 1;k++)
{
if(comboBox_Field.Items.IndexOf(m_FeatureClass.Fields.get_Field(j).Name)<0)
comboBox_Field.Items.Add(m_FeatureClass.Fields.get_Field(j).Name);
}
}
}
}
private void comboBox_FeatureName_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
comboBox_FeatureName.Select(0,comboBox_FeatureName.Text.Length);
}
private void comboBox_TargetLayer_SelectedIndexChanged(object sender, System.EventArgs e)
{
comboBox_Field.Items.Clear();
comboBox_Field.Items.Add("所有字段");
comboBox_Field.Text=comboBox_Field.Items[0].ToString();
IFeatureLayer m_FeatureLayer;
if(comboBox_TargetLayer.SelectedIndex!=0)
{
m_FeatureLayer=(IFeatureLayer)m_MapControl.Map.get_Layer(comboBox_TargetLayer.SelectedIndex - 1);
IFeatureClass m_FeatureClass;
m_FeatureClass=m_FeatureLayer.FeatureClass;
for(int i=0;i<=m_FeatureClass.Fields.FieldCount - 1;i++)
{
if(m_FeatureClass.Fields.get_Field(i).Type!=ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeOID)
if(m_FeatureClass.Fields.get_Field(i).Type!=
ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGeometry)
comboBox_Field.Items.Add(m_FeatureClass.Fields.get_Field(i).Name);
}
}
else
{
for(int i=0;i<=m_MapControl.Map.LayerCount-1;i++)
{
m_FeatureLayer=(IFeatureLayer)m_MapControl.Map.get_Layer(i);
IFeatureClass m_FeatureClass;
m_FeatureClass=m_FeatureLayer.FeatureClass;
for(int j=0;j<=m_FeatureClass.Fields.FieldCount - 1;j++)
{
if(m_FeatureClass.Fields.get_Field(j).Type!=ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeOID)
if(m_FeatureClass.Fields.get_Field(j).Type!=
ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGeometry)
for(int k=0;k<=comboBox_Field.Items.Count - 1;k++)
{
if(comboBox_Field.Items.IndexOf(m_FeatureClass.Fields.get_Field(j).Name)<0)
comboBox_Field.Items.Add(m_FeatureClass.Fields.get_Field(j).Name);
}
}
}
}
}
private void comboBox_FeatureName_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
//回车确定
if(e.KeyChar == (char)Keys.Enter)
{
result=false; //初始化为false,没找到要素状态
GetSQLString(); //生成SQl语句
if(result==true)
{
for(int i =0; i < comboBox_FeatureName.Items.Count;i++) //判断要添加的关键词是否已存在
{
if(comboBox_FeatureName.Items[i].ToString() == comboBox_FeatureName.Text)
return;
}
comboBox_FeatureName.Items.Add(comboBox_FeatureName.Text);
}
else
{
System.Windows.Forms.MessageBox.Show("没有找到指定要素!");
}
}
}
private void button1_Click(object sender, System.EventArgs e) //关闭窗体
{
this.Close();
}
private void comboBox_FeatureName_SelectedIndexChanged(object sender, System.EventArgs e)
{
result=false; //初始化为false,没找到要素状态
GetSQLString(); //生成SQl语句
if(result==true)
{
for(int i =0; i < comboBox_FeatureName.Items.Count;i++) //判断要添加的关键词是否已存在
{
if(comboBox_FeatureName.Items[i].ToString() == comboBox_FeatureName.Text)
return;
}
comboBox_FeatureName.Items.Add(comboBox_FeatureName.Text);
}
else
{
System.Windows.Forms.MessageBox.Show("没有找到指定要素!");
}
}
private void listBox_Result_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//单击记录,浏览定位到该要素
if(result==true)
{
IFeatureCursor m_NewFeatureCursor;
m_NewFeatureCursor=m_FeatureCursor;
IFeature m_Feature;
m_Feature=m_NewFeatureCursor.NextFeature();
while(m_Feature!=null)
{
if(m_Feature.get_Value(3).ToString() == listBox_Result.SelectedItem.ToString()) //要素名称(这个暂时没有通用性)
{
if(m_Feature.Shape.GeometryType==esriGeometryType.esriGeometryPoint)
{
IGeometry m_Point;
IPoint m_CenterPoint;
m_Point=m_Feature.Shape;
m_CenterPoint=new PointClass();
m_CenterPoint.X =m_Feature.Extent.XMax;
m_CenterPoint.Y=m_Feature.Extent.YMax;
IScreenDisplay pDisplay;
pDisplay=m_MapControl.ActiveView.ScreenDisplay; //闪烁图形
FlashPoint(pDisplay,m_Point,5,300);
IEnvelope m_Env;
m_Env=m_MapControl.ActiveView.Extent; //放大定位
m_Env.CenterAt(m_CenterPoint);
m_Env.Expand(0.5,0.5,true);
m_MapControl.ActiveView.Extent = m_Env;
}
m_MapControl.ActiveView.Refresh();
// m_MapControl.Map.SelectFeature(m_MapControl.get_Layer(LayerIndex),m_Feature);
}
m_Feature=m_FeatureCursor.NextFeature();
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -