Exemplo n.º 1
0
        private void buttonApply_Click(object sender, EventArgs e)
        {
            IActiveView pActiveView;

            pActiveView = m_MapControl.ActiveView;
            m_MapControl.Map.ClearSelection();
            if (textBoxWhereClause.Text == "")
            {
                MessageBox.Show("Please create query clause!");
                return;
            }
            try
            {
                IQueryFilter pQueryFilter = new QueryFilterClass();
                pQueryFilter.WhereClause = textBoxWhereClause.Text;
                IFeatureSelection pFeatureSelection = this.pFeatureLayer as IFeatureSelection;
                int iSelectedFeaturesCount          = pFeatureSelection.SelectionSet.Count;
                esriSelectionResultEnum selectMethod;
                switch (comboBoxMethod.SelectedIndex)
                {
                case 0: selectMethod = esriSelectionResultEnum.esriSelectionResultNew; break;

                case 1: selectMethod = esriSelectionResultEnum.esriSelectionResultAdd; break;

                case 2: selectMethod = esriSelectionResultEnum.esriSelectionResultSubtract; break;

                case 3: selectMethod = esriSelectionResultEnum.esriSelectionResultAnd; break;

                default: selectMethod = esriSelectionResultEnum.esriSelectionResultNew; break;
                }
                pFeatureSelection.SelectFeatures(pQueryFilter, selectMethod, false);//执行查询

                //如果本次查询后,查询的结果数目没有改变,则认为本次查询没有产生新的结果
                if (pFeatureSelection.SelectionSet.Count == 0)
                {
                    MessageBox.Show("No results!");
                    return;
                }
                //pFeatureSelection.SelectionSet.Count == iSelectedFeaturesCount ||
                IEnumFeature pEnumFeature = m_MapControl.Map.FeatureSelection as IEnumFeature;
                int          nFeatureSize = 0;
                pEnumFeature.Reset();

                IFeature pFeature = pEnumFeature.Next();
                while (pFeature != null)
                {
                    nFeatureSize++;
                    pFeature = pEnumFeature.Next();
                }
                IEnvelope pEnvelope = new EnvelopeClass();

                IFeatureClass pFeatureClass             = pFeatureLayer.FeatureClass;
                double        dScale                    = (this.pFeatureLayer.MinimumScale + this.pFeatureLayer.MaximumScale) / 2;
                ESRI.ArcGIS.Controls.IMapControl3 pMaps = (ESRI.ArcGIS.Controls.IMapControl3)m_MapControl.Object;

                bool bRec = true;
                while (bRec)
                {
                    pEnumFeature.Reset();
                    pFeature = pEnumFeature.Next();
                    int i = 0;
                    while (pFeature != null)//将目标中心显示
                    {
                        pEnvelope = pFeature.Extent;
                        IPoint pCenterPt = new PointClass();
                        pCenterPt.X = (pEnvelope.XMax + pEnvelope.XMin) / 2;
                        pCenterPt.Y = (pEnvelope.YMax + pEnvelope.YMin) / 2;

                        IEnvelope pMapEntent = pActiveView.Extent;
                        pMapEntent.CenterAt(pCenterPt);
                        pActiveView.Extent = pMapEntent;

                        pMaps.MapScale = dScale;
                        pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, pActiveView.Extent);
                        pActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, pActiveView.Extent);
                        Application.DoEvents();
                        MapView.FlashFeature(m_MapControl, pFeature.Shape);//目标闪烁
                        Application.DoEvents();
                        i++;
                        if (nFeatureSize >= 2 && i < nFeatureSize - 1)
                        {
                            this.Visible = false;
                            DialogResult pRes = MessageBox.Show("Is this feature?", "Sure", MessageBoxButtons.YesNoCancel);
                            if (pRes == DialogResult.Yes)
                            {
                                this.Visible = true;
                                return;
                            }
                            else if (pRes == DialogResult.Cancel)
                            {
                                return;
                            }
                        }
                        pFeature = pEnumFeature.Next();
                    }
                    if (nFeatureSize <= 1)
                    {
                        return;
                    }
                    DialogResult pDlgRes = MessageBox.Show("It is already last one, restart?", "Sure", MessageBoxButtons.YesNo);
                    if (pDlgRes == DialogResult.Yes)
                    {
                        continue;
                    }
                    else
                    {
                        return;
                    }
                }

                //for (int i = 0; i < pArray.Count; i++)
                //{
                //    int nOID = (int)pArray.get_Element(i);
                //    pFeature = pFeatureClass.GetFeature(nOID);
                //    pEnvelope = pFeature.Extent;
                //    IPoint pCenterPt = new PointClass();
                //    pCenterPt.X = (pEnvelope.XMax + pEnvelope.XMin) / 2;
                //    pCenterPt.Y = (pEnvelope.YMax + pEnvelope.YMin) / 2;

                //    IEnvelope pMapEntent = pActiveView.Extent;
                //    pMapEntent.CenterAt(pCenterPt);
                //    pActiveView.Extent = pMapEntent;

                //    pMaps.MapScale = dScale;
                //    pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
                //    pActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null);
                //    Application.DoEvents();
                //    MapView.FlashFeature(m_MapControl, pFeature.Shape);
                //    Application.DoEvents();
                //    if (pArray.Count > 1 && i < pArray.Count - 1)
                //    {
                //        if (DevComponents.DotNetBar.MessageBox.Show("是否为这个目标", "确认", MessageBoxButtons.YesNo) == DialogResult.Yes)
                //        {
                //            return;
                //        }
                //    }
                //}


                //double i = MainAxMapControl.Map.SelectionCount;
                //i = Math.Round(i, 0);//小数点后指定为0位数字
                //pMainform.toolStripStatusLabel1.Text = "当前共有" + i.ToString() + "个查询结果";
            }
            catch (Exception ex)
            {
                MessageBox.Show("The clause has errors, please double check!\n" + ex.Message);
                return;
            }
        }
		public override void OnCreate(object hook)
		{
			// The hook for OnCreate is set as a MapControl in frmMain_Load
			m_mapControl = hook as ESRI.ArcGIS.Controls.IMapControl3;
		}
 public override void OnCreate(object hook)
 {
     // The "hook" was set as a MapControl in formMain_Load
     m_mapControl = hook as ESRI.ArcGIS.Controls.IMapControl3;
 }