Exemplo n.º 1
0
        public override void OnMouseDown(int Button, int Shift, int X, int Y)
        {
            // TODO:  Add ToolCreateParallel.OnMouseDown implementation
            if (Button == 1 && (m_pMapCtl = ClsGlobal.GetMapControl(m_hookHelper)) != null)
            {
                IMap   pMap = m_pMapCtl.Map;
                IPoint po   = m_pMapCtl.ToMapPoint(X, Y);
                ISelectionEnvironment pSelectionEnv = new SelectionEnvironmentClass();

                IGeometry geometry = new PolygonClass();
                geometry = m_pMapCtl.TrackRectangle();
                pMap.SelectByShape(geometry, pSelectionEnv, true);
                m_pMapCtl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                IEnumFeatureSetup pSelectionsetup = pMap.FeatureSelection as IEnumFeatureSetup;
                pSelectionsetup.AllFields = true;//这里是关键
                IEnumFeature pFeatureCollection = pSelectionsetup as IEnumFeature;
                IFeature     pF = pFeatureCollection.Next();
                if (pF != null && pF.Shape is IPolyline)
                {
                    FrmParallelLineOffset frm = new FrmParallelLineOffset();
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        IPolyline pPolyline = ConstructOffset(pF.Shape as IPolyline, frm.offset);
                        IFeature  pFeature  = m_FLayer.FeatureClass.CreateFeature();
                        pFeature.Shape = pPolyline;
                        pFeature.Store();
                        m_pMapCtl.Refresh();
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void Map_SearchByShape()
        {
            IMap       pMap             = axMapControl1.Map;
            ISelection pFeatureSelction = pMap.FeatureSelection;

            IEnumFeature      pEnumFeature      = pFeatureSelction as IEnumFeature;
            IEnumFeatureSetup pEnumFeatureSetup = pEnumFeature as IEnumFeatureSetup;

            pEnumFeatureSetup.AllFields = true;
            FeatureAttributeEventArgs FeatureAttributes = new FeatureAttributeEventArgs();
            IArray pFArray = new ArrayClass();

            pEnumFeature.Reset();
            IFeature pFeature = pEnumFeature.Next();

            while (pFeature != null)
            {
                pFArray.Add(pFeature);
                pFeature = pEnumFeature.Next();
            }
            FeatureAttributes.SelectFeatures = pFArray;
            if (SelectFeaturEvent != null)
            {
                SelectFeaturEvent(this, FeatureAttributes);
            }
        }
Exemplo n.º 3
0
        private void MargeForm_Load(object sender, EventArgs e)
        {
            IMap map = mAxMapControl1.Map;
            ISelection selection = map.FeatureSelection;
            IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)selection;
            iEnumFeatureSetup.AllFields = true;
            this.pEnumFeature = (IEnumFeature)iEnumFeatureSetup;
            this.pEnumFeature.Reset();

            IFeature pFeature = pEnumFeature.Next();
            if (pFeature == null) return;
            while (pFeature != null)
            {
                IFeatureLayer pFeatureLayer = mLayer as IFeatureLayer;
                string name = pFeatureLayer.FeatureClass.OIDFieldName;
                if (!pFeature.HasOID)
                {
                    pFeature = pEnumFeature.Next();
                    return;
                }
                int ID = pFeature.OID;
                string sqlWhere = "";
                sqlWhere = name + "=" + ID;

                this.pItems.Add(sqlWhere);
                comboBox1.Items.Add(sqlWhere);
                pFeature = pEnumFeature.Next();


            }

            comboBox1.Text = pItems[0];
        }
Exemplo n.º 4
0
        //给选择的要素,创建表;
        private DataTable CreateDataTable(AxMapControl axMapControl)
        {
            DataTable  datatable = new DataTable("属性表");
            DataRow    row       = null;
            DataColumn column;

            column              = new DataColumn("属性");
            column.ColumnName   = "属性";
            column.AllowDBNull  = true;
            column.Caption      = "属性";
            column.DataType     = System.Type.GetType("System.String");
            column.DefaultValue = " ";
            datatable.Columns.Add(column);

            column              = new DataColumn("值");
            column.ColumnName   = "值";
            column.AllowDBNull  = true;
            column.Caption      = "值";
            column.DataType     = System.Type.GetType("System.String");
            column.DefaultValue = " ";
            datatable.Columns.Add(column);


            IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)axMapControl.Map.FeatureSelection;

            iEnumFeatureSetup.AllFields = true;
            IEnumFeature enumFeature = (IEnumFeature)iEnumFeatureSetup;

            enumFeature.Reset();
            IFeature feature = enumFeature.Next();

            while (feature != null)
            {
                for (int i = 0; i < feature.Fields.FieldCount; i++)
                {
                    string value = string.Empty;
                    if (feature.Fields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                    {
                        value = "polgony";
                    }
                    else if (feature.Fields.get_Field(i).Type == esriFieldType.esriFieldTypeBlob)
                    {
                        value = "Element";
                    }
                    else
                    {
                        value = feature.get_Value(i).ToString();
                    }
                    row    = datatable.NewRow();
                    row[0] = feature.Fields.Field[i].Name;
                    row[1] = value;
                    datatable.Rows.Add(row);
                }
                feature = enumFeature.Next();
            }

            return(datatable);
        }
Exemplo n.º 5
0
        private void Form2_Load(object sender, EventArgs e)
        {
            // 读取选中面实体的各种属性并保存下来
            DataTable         pTable            = new DataTable();
            IMap              pMap              = global.pMap;
            ISelection        selection         = pMap.FeatureSelection;
            IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)selection;

            iEnumFeatureSetup.AllFields = true;
            IEnumFeature enumFeature = (IEnumFeature)iEnumFeatureSetup;

            enumFeature.Reset();

            IFeature feature = enumFeature.Next();

            IFields pFields = feature.Fields;

            //MessageBox.Show(feature.Fields.FieldCount.ToString());
            for (int i = 0; i < pFields.FieldCount; i++)
            {
                string FieldName;
                FieldName = pFields.get_Field(i).AliasName;
                pTable.Columns.Add(FieldName);
            }

            double proArea   = 0;
            double totalCost = 0;
            double vvvalue;

            while (feature != null)
            {
                DataRow row = pTable.NewRow();
                for (int i = 0; i < pFields.FieldCount; i++)
                {
                    string FieldValue = null;
                    FieldValue = Convert.ToString(feature.get_Value(i));
                    row[i]     = FieldValue;
                }
                pTable.Rows.Add(row);

                proArea   += Convert.ToDouble(feature.get_Value(10));
                totalCost += Convert.ToDouble(feature.get_Value(11)) *
                             Convert.ToDouble(feature.get_Value(10)) * Convert.ToDouble(feature.get_Value(12));
                feature = enumFeature.Next();
            }

            vvvalue       = totalCost / proArea;
            textBox1.Text = Convert.ToString(proArea);
            textBox2.Text = Convert.ToString(totalCost);
            textBox3.Text = Convert.ToString(vvvalue);

            dataGridView1.DataSource = pTable;
        }
Exemplo n.º 6
0
        private void Near_Click(object sender, EventArgs e)
        {
            ISelection        selection        = mMapControl.Map.FeatureSelection;
            IEnumFeatureSetup enumFeatureSetup = selection as IEnumFeatureSetup;

            enumFeatureSetup.AllFields = true;
            IEnumFeature enumFeature = enumFeatureSetup as IEnumFeature;

            enumFeature.Reset();
            IFeature feature = enumFeature.Next();
            IPoint   center  = feature.Shape as IPoint;
            AreaNear a       = new AreaNear(mMapControl, center);

            a.Show();
        }
        public static IArray GetSelectedFeatures(AxMapControl mapControl)  //找到选中的要素组
        {
            IArray            pFeatureArray     = new ArrayClass();
            ISelection        pFeatureSelction  = mapControl.Map.FeatureSelection;
            IEnumFeature      pEnumFeature      = pFeatureSelction as IEnumFeature;
            IEnumFeatureSetup pEnumFeatureSetup = pEnumFeature as IEnumFeatureSetup;

            pEnumFeatureSetup.AllFields = true;
            IFeature pFeature = pEnumFeature.Next();

            while (pFeature != null)
            {
                if (!pFeature.Shape.IsEmpty)
                {
                    pFeatureArray.Add(pFeature);
                }
                pFeature = pEnumFeature.Next();
            }
            return(pFeatureArray);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 判断有没有选择要素
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        bool isSelect()
        {
            bool b = true;

            IMap              map               = axMapControl1.Map;
            ISelection        selection         = map.FeatureSelection;
            IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)selection;

            iEnumFeatureSetup.AllFields = true;
            IEnumFeature pEnumFeature = (IEnumFeature)iEnumFeatureSetup;

            pEnumFeature.Reset();

            IFeature pFeature = pEnumFeature.Next();

            if (pFeature == null)
            {
                b = false;
            }
            return(b);
        }
Exemplo n.º 9
0
        }//选择地图要素

        public void getSelectedFeature()
        {
            try
            {
                IMap              map               = axMapControl2.Map;
                ISelection        selection         = map.FeatureSelection;
                IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)selection;
                iEnumFeatureSetup.AllFields = true;
                IEnumFeature enumFeature = (IEnumFeature)iEnumFeatureSetup;
                enumFeature.Reset();
                IFeature feature = enumFeature.Next();
                while (feature != null)
                {
                    string hehe = feature.get_Value(5).ToString();
                    MessageBox.Show(hehe);
                    feature = enumFeature.Next();
                }
            }
            catch (Exception e)
            {
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Occurs when this command is clicked
        /// </summary>
        public override void OnClick()
        {
            IMapControl3 pMapCtr    = (((IToolbarControl)m_hookHelper.Hook).Buddy) as IMapControl3;
            ISelection   pSelection = pMapCtr.Map.FeatureSelection;

            int               i                  = 0;
            IEnumFeature      pEnumFeature       = pSelection as IEnumFeature;
            IEnumFeatureSetup m_EnumFeatureSetup = pEnumFeature as IEnumFeatureSetup;

            m_EnumFeatureSetup.AllFields = true;
            pEnumFeature.Reset();
            IFeature pFeature = pEnumFeature.Next();

            if (pFeature != null)
            {
                while (pFeature != null)
                {
                    i++;
                    pFeature = pEnumFeature.Next();
                }
                if (i == 1)
                {
                    pEnumFeature.Reset();
                    IFeature   mFeature   = pEnumFeature.Next();
                    Frmprofile frmprofile = new Frmprofile(mFeature, pMapCtr);
                    frmprofile.ShowInTaskbar = false;
                    frmprofile.StartPosition = FormStartPosition.CenterScreen;
                    frmprofile.ShowDialog();
                }
                else
                {
                    MessageBox.Show("只能选中一条线路进行剖面分析", "提示", MessageBoxButtons.OK);
                }
            }
            else
            {
                MessageBox.Show("请先选中一条路线", "提示", MessageBoxButtons.OK);
            }
        }
Exemplo n.º 11
0
        private void button2_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                Wmin = 10;
            }
            else
            {
                Wmin = Convert.ToInt32(textBox1.Text);
            }

            if (textBox2.Text == "")
            {
                Wmax = 40;
            }
            else
            {
                Wmax = Convert.ToInt32(textBox2.Text);
            }

            if (Wmin >= Wmax)
            {
                Wmax = Wmin + 10;
            }

            int countTimes = Wmax - Wmin + 1;

            myCost  = new double[countTimes];
            myArea  = new double[countTimes];
            myValue = new double[countTimes];

            AxMapControl mainFormMapControl = (AxMapControl)this.mainForm.Controls.Find("axMapControl1", false)[0];

            for (int i = 0; i < countTimes; i++)
            {
                myCost[i] = 0;
                myArea[i] = 0;

                activeInMapInDataGrid();
                drawBuffer(mainFormMapControl, i + Wmin);//有了选择区

                IMap              pMap              = global.pMap;
                ISelection        selection         = pMap.FeatureSelection;
                IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)selection;
                iEnumFeatureSetup.AllFields = true;
                IEnumFeature enumFeature = (IEnumFeature)iEnumFeatureSetup;
                enumFeature.Reset();

                IFeature feature = enumFeature.Next();
                while (feature != null)
                {
                    myArea[i] += Convert.ToDouble(feature.get_Value(10));
                    myCost[i] += Convert.ToDouble(feature.get_Value(11)) *
                                 Convert.ToDouble(feature.get_Value(10)) * Convert.ToDouble(feature.get_Value(12));
                    feature = enumFeature.Next();
                }

                if (myArea[i] == 0)
                {
                    myValue[i] = 0;
                }
                else
                {
                    myValue[i] = myCost[i] / myArea[i];
                }
            }
            Form4 fff = new Form4();

            fff.Text = "缓冲分析图表";
            fff.ShowDialog();
        }
Exemplo n.º 12
0
        public override void OnDblClick()
        {
            try
            {
                ArcGIS.Common.Editor.Editor.StartEditOperation();
                if (_lineFeedback == null)
                {
                    return;
                }
                _polyline = _lineFeedback.Stop();
                if (_lineFeedback != null)
                {
                    _context.ActiveView.Refresh();
                    _lineFeedback = null;
                }
                if (_polyline == null)
                {
                    return;
                }
                ISelectionEnvironment selectionEnvironment = new SelectionEnvironmentClass();
                selectionEnvironment.CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew;
                _context.FocusMap.SelectByShape(_polyline, selectionEnvironment, false);
                ISelection        selection        = _context.FocusMap.FeatureSelection;
                IEnumFeatureSetup enumFeatureSetup = selection as IEnumFeatureSetup;
                IEnumFeature      enumFeature      = enumFeatureSetup as IEnumFeature;
                if (enumFeature == null)
                {
                    return;
                }
                enumFeature.Reset();
                IFeature feature;
                List <MultiCheQiModel> modelList = new List <MultiCheQiModel>();
                while ((feature = enumFeature.Next()) != null)
                {
                    IFeatureClass featureClass = feature.Class as IFeatureClass;
                    if (featureClass == null)
                    {
                        continue;
                    }
                    IFeatureLayer featureLayer =
                        _multiCheQiConfig.FlagLayerList.FirstOrDefault(
                            c => c.FeatureClass.FeatureClassID == featureClass.FeatureClassID);
                    if (featureLayer == null)
                    {
                        continue;
                    }
                    modelList.Add(new MultiCheQiModel(featureLayer, feature, _multiCheQiConfig.FieldSettingList, _polyline));
                }
                if (modelList.Count <= 0)
                {
                    return;
                }

                _context.ActiveView.ScreenDisplay.StartDrawing(_context.ActiveView.ScreenDisplay.hDC, 0);
                IAnnotationClassExtension annotationClassExtension = _multiCheQiConfig.FlagAnnoLayer.FeatureClass.Extension as IAnnotationClassExtension;
                IElement           headerElement           = CommonHelper.CreateHeaderElements(_multiCheQiConfig, _polyline.ToPoint);
                IFeature           headerFeature           = _multiCheQiConfig.FlagAnnoLayer.FeatureClass.CreateFeature();
                IAnnotationFeature headerAnnotationFeature = headerFeature as IAnnotationFeature;
                headerAnnotationFeature.Annotation = headerElement;
                headerFeature.Store();
                double xLength = headerFeature.Shape.Envelope.Width;
                double yLength = headerFeature.Shape.Envelope.Height;

                IPoint headerPoint = new PointClass();
                headerPoint.X                      = (headerElement.Geometry as IPoint).X - xLength / 2;
                headerPoint.Y                      = (headerElement.Geometry as IPoint).Y + yLength * (modelList.Count + 0.5);
                headerElement.Geometry             = headerPoint;
                headerAnnotationFeature.Annotation = headerElement;
                headerFeature.Store();
                annotationClassExtension.Draw(headerAnnotationFeature, _context.ActiveView.ScreenDisplay, null);
                List <MultiCheQiModel> models   = new List <MultiCheQiModel>(modelList.OrderBy(c => c.Distance));
                List <IElement>        elements = CommonHelper.CreateContentElements(_multiCheQiConfig, models,
                                                                                     headerElement.Geometry as IPoint, headerFeature.Shape.Envelope.Width,
                                                                                     headerFeature.Shape.Envelope.Height);
                foreach (IElement element in elements)
                {
                    IFeature           contentFeature           = _multiCheQiConfig.FlagAnnoLayer.FeatureClass.CreateFeature();
                    IAnnotationFeature contentAnnotationFeature = contentFeature as IAnnotationFeature;
                    contentAnnotationFeature.Annotation = element;
                    contentFeature.Store();
                    annotationClassExtension.Draw(contentAnnotationFeature, _context.ActiveView.ScreenDisplay, null);
                }
                _context.ActiveView.ScreenDisplay.FinishDrawing();

                IPointCollection pointCollection = _polyline as IPointCollection;
                IPoint           point1          = new PointClass();
                point1.X = _polyline.ToPoint.X - xLength;
                point1.Y = _polyline.ToPoint.Y;

                IPoint point2 = new PointClass();
                point2.X = _polyline.ToPoint.X - xLength;
                point2.Y = _polyline.ToPoint.Y + yLength * (modelList.Count + 1);

                pointCollection.AddPoint(point1);
                pointCollection.AddPoint(point2);
                IFeature lineFeature = _multiCheQiConfig.FlagLineLayer.FeatureClass.CreateFeature();
                lineFeature.Shape = pointCollection as IPolyline;
                lineFeature.Store();

                _context.ActiveView.Refresh();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
            finally
            {
                ArcGIS.Common.Editor.Editor.StopEditOperation();
            }
        }
Exemplo n.º 13
0
        private void buttonXDelete_Click(object sender, EventArgs e)
        {
            try
            {
                ISelection pSelection = null;
                // ISelection pSelection
                if (m_SceneCtrl != null)
                {
                    pSelection = m_SceneCtrl.Scene.FeatureSelection;
                }
                if (m_MapCtrl != null)
                {
                    pSelection = m_MapCtrl.Map.FeatureSelection;
                }
                //从Map.FeatureSelection获得ISelection不能读到Feature的其他属性,
                //这是因为从axMapControl1.Map.FeatureSelection QI到IEnumFeature 时,
                //ArcGIS中FeatureSelection默认的时候只存入Feature 的Shape,而不是整个Feature的字段数据。
                //如果要查看其他数据,必须要进行以下转换才可以:
                IEnumFeatureSetup pSelectionsetup = pSelection as IEnumFeatureSetup;
                pSelectionsetup.AllFields = true;//这里是关键
                IEnumFeature pFeatureCollection = pSelectionsetup as IEnumFeature;
                IFeature     pF = pFeatureCollection.Next();
                while (pF != null)
                {
                    if ((pF.Shape is IMultiPatch))
                    {
                        int           OID = pF.OID;
                        IFeatureClass pFC = pF.Table as IFeatureClass;
                        IQueryFilter  pQF = new QueryFilterClass();
                        pQF.WhereClause = "\"OBJECTID\" = " + OID.ToString();
                        IFeatureCursor pFCursor = pFC.Update(pQF, false);
                        IFeature       pFeature = pFCursor.NextFeature();

                        StartEditing(pFeature);
                        //IMultiPatch pMpatch = pFeature.Shape as IMultiPatch;
                        //ITransform3D pTf3D = pMpatch as ITransform3D;

                        //IPoint originPoint = GetMultiPatchCenter(pMpatch);
                        //MakeZAware(originPoint as IGeometry);

                        //pTf3D.Scale3D(originPoint, 0.5, 0.5, 0.5);
                        ////  pTf3D.Move3D(0, 0, doubleInputZIncrement.Value);

                        //pFeature.Shape = pMpatch as IGeometry;
                        pFeature.Delete();
                        //pFeature.Store();
                        //pFCursor.UpdateFeature(pFeature);
                        StopEditing(pFeature);
                        AxMapControl ms = pmapcontrol as AxMapControl;
                        ms.Refresh();
                        //刷新三维视图
                        for (int i = 0; i < m_SceneCtrl.Scene.LayerCount; i++)
                        {
                            ILayer player = m_SceneCtrl.Scene.get_Layer(i);
                            if (player is IFeatureLayer)
                            {
                                IFeatureLayer pFlayer = player as IFeatureLayer;
                                if (pFlayer.FeatureClass.Equals(pFC))
                                {
                                    IActiveView pActiveView = m_SceneCtrl.Scene as IActiveView;
                                    pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFlayer, null);
                                    //ps.Refresh();
                                }
                            }
                        }
                    }
                    pF = pFeatureCollection.Next();
                }
            }
            catch (System.AccessViolationException ee)
            {
                MessageBox.Show(ee.Message);
            }
        }
Exemplo n.º 14
0
        private void buttonXXDecrease_Click(object sender, EventArgs e)
        {
            ISelection pSelection = null;

            // ISelection pSelection
            if (m_SceneCtrl != null)
            {
                pSelection = m_SceneCtrl.Scene.FeatureSelection;
            }
            if (m_MapCtrl != null)
            {
                pSelection = m_MapCtrl.Map.FeatureSelection;
            }

            //从Map.FeatureSelection获得ISelection不能读到Feature的其他属性,
            //这是因为从axMapControl1.Map.FeatureSelection QI到IEnumFeature 时,
            //ArcGIS中FeatureSelection默认的时候只存入Feature 的Shape,而不是整个Feature的字段数据。
            //如果要查看其他数据,必须要进行以下转换才可以:
            IEnumFeatureSetup pSelectionsetup = pSelection as IEnumFeatureSetup;

            pSelectionsetup.AllFields = true;//这里是关键
            IEnumFeature pFeatureCollection = pSelectionsetup as IEnumFeature;
            IFeature     pF = pFeatureCollection.Next();

            while (pF != null)
            {
                if ((pF.Shape is IMultiPatch))
                {
                    int           OID = pF.OID;
                    IFeatureClass pFC = pF.Table as IFeatureClass;
                    IQueryFilter  pQF = new QueryFilterClass();
                    pQF.WhereClause = "\"OBJECTID\" = " + OID.ToString();
                    IFeatureCursor pFCursor = pFC.Update(pQF, false);
                    IFeature       pFeature = pFCursor.NextFeature();

                    //    StartEditing(pFeature);
                    IMultiPatch  pMpatch = pFeature.Shape as IMultiPatch;
                    ITransform3D pTf3D   = pMpatch as ITransform3D;

                    pTf3D.Move3D(doubleInputXIncrement.Value * -1, 0, 0);

                    try
                    {
                        if (!double.IsNaN(Convert.ToDouble(labelXX.Text)))
                        {
                            setXLabel(Convert.ToDouble(labelXX.Text) - doubleInputXIncrement.Value);
                        }
                    }
                    catch (System.Exception ex)
                    {
                    }


                    pFeature.Shape = pMpatch as IGeometry;
                    pFeature.Store();
                    //  StopEditing(pFeature);
                    AxMapControl ms = pmapcontrol as AxMapControl;
                    // ms.Refresh();
                    ms.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, null, null);
                    //刷新三维视图
                    for (int i = 0; i < m_SceneCtrl.Scene.LayerCount; i++)
                    {
                        ILayer player = m_SceneCtrl.Scene.get_Layer(i);
                        if (player is IFeatureLayer)
                        {
                            IFeatureLayer pFlayer = player as IFeatureLayer;
                            if (pFlayer.FeatureClass.Equals(pFC))
                            {
                                IActiveView pActiveView = m_SceneCtrl.Scene as IActiveView;
                                pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFlayer, null);
                                //ps.Refresh();
                            }
                        }
                    }
                }
                pF = pFeatureCollection.Next();
            }
        }
Exemplo n.º 15
0
        // 在地图上点击学校,获取支教信息
        private void axMapControl_Main_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
        {
            // 选择学校
            IMap       pMap       = axMapControl_Main.Map;
            IEnumLayer pEnumLayer = pMap.get_Layers(null, true);

            pEnumLayer.Reset();
            ILayer        pLayer = pEnumLayer.Next();
            IFeatureLayer pFeatureLayer;

            while (pLayer != null)
            {
                if (pLayer.Name == "china")
                {
                    pFeatureLayer            = (IFeatureLayer)pLayer;
                    pFeatureLayer.Selectable = false;
                }
                pLayer = pEnumLayer.Next();
            }

            IGeometry   selectGeometry = null;
            IEnvelope   pEnv;
            IActiveView pActiveView = axMapControl_Main.ActiveView;

            pEnv = axMapControl_Main.TrackRectangle();
            if (pEnv.IsEmpty == true)
            {
                ESRI.ArcGIS.esriSystem.tagRECT r;
                r.bottom = e.y + 5;
                r.top    = e.y - 5;
                r.left   = e.x - 5;
                r.right  = e.x + 5;
                pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4);
                pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference;
            }
            selectGeometry = pEnv as IGeometry;
            axMapControl_Main.Map.ClearSelection();
            axMapControl_Main.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
            axMapControl_Main.Map.SelectByShape(selectGeometry, null, false);
            axMapControl_Main.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

            // 显示信息
            ISelection pselect = pMap.FeatureSelection;

            IEnumFeatureSetup pEnumFeatureSetup = (IEnumFeatureSetup)pselect;

            pEnumFeatureSetup.AllFields = true;
            IEnumFeature pEnumFeature = (IEnumFeature)pEnumFeatureSetup;

            //pEnumFeature.Reset();
            pfeature = pEnumFeature.Next();

            if (pfeature == null)
            {
                return;
            }

            SiteID = (dynamic)pfeature.get_Value(0);
            //GdbDrive Gdp = new GdbDrive();
            Searcher GDs = new Searcher();

            GDs.TableName = "SANexus";
            GDs.idField.Add("SID");
            GDs.idData.Add(SiteID);
            GDs.Fields.Add("TID");
            gdb.Query(ref GDs);

            if (GDs.array.Count < 1)
            {
                MessageBox.Show("该地区无支教活动!");
                return;
            }
            LookUp(GDs.array[0][0]);


            //resultGrid.Rows[0].Cells[0].Value = name;
            //signUpGrid.Rows[0].Cells[0].Value = pfeature.get_Value(2).ToString();
        }
Exemplo n.º 16
0
        //鼠标点击-空间查询
        private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
        {
            //1、高亮

            axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;

            IActiveView pActiveView;
            IPoint      pPoint;
            double      length;

            //获取视图范围
            pActiveView = this.axMapControl1.ActiveView;
            //获取鼠标点击屏幕坐标
            pPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
            //屏幕距离转换为地图距离
            length = ConvertPixelToMapUnits(pActiveView, 2);

            ITopologicalOperator pTopoOperator;
            IGeometry            pGeoBuffer;

            //根据缓冲半径生成空间过滤器
            pTopoOperator = pPoint as ITopologicalOperator;
            pGeoBuffer    = pTopoOperator.Buffer(length);

            ILayer iLayer;

            //iLayer = Tool.GetLayerByName(axMapControl1.get_Layer(0).Name, axMapControl1);
            iLayer = axMapControl1.get_Layer(2);//地图图层编号!!!
            IFeatureLayer iFeatureLayer = (IFeatureLayer)iLayer;

            iFeatureLayer.Selectable = false;//地图不可选择

            IMap pMap = axMapControl1.Map;
            //IGeometry pGeometry = axMapControl1.TrackRectangle();   //获取几何图框范围
            ISelectionEnvironment pSelectionEnv = new SelectionEnvironment(); //新建选择环境
                                                                              /*选择图层*/
            IRgbColor pColor = new RgbColor();

            pColor.Red = 200; pColor.Green = 155; pColor.Blue = 180; //调整高亮显示的颜色
            pSelectionEnv.DefaultColor = pColor;                     //设置高亮显示的颜色
            pMap.SelectByShape(pGeoBuffer, pSelectionEnv, false);    //选择图形SelectByShape方法
                                                                     //高亮后获得ID
                                                                     /*获取ID*/
            ISelection selection = pMap.FeatureSelection;
            /*获取ID*/
            IEnumFeatureSetup enumFeatureSetup = selection as IEnumFeatureSetup; //这里很必要

            /*获取ID*/
            enumFeatureSetup.AllFields = true; //这里很必要
            IEnumFeature enumFeature = enumFeatureSetup as IEnumFeature;

            enumFeature.Reset();
            //feature赋值
            IFeature feature = enumFeature.Next();

            //IFeatureClass pFeatureClass = pFeature.Class as IFeatureClass;

            while (feature != null)
            {
                stringvalue = feature.get_Value(0).ToString();//就可以得到任意字段的值了
                feature     = enumFeature.Next();
            }
            axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
            // Thread.Sleep(2000);



            //2、省份查询


            this.axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;

            //记录查询到的要素名称
            string strNames = "";
            //查询的字段名称
            string strFieldName = "NL_NAME_1";
            //点查询
            //读取shp线
            string   strFielPath       = @"res\RouteShp\" + stringvalue + ".shp";//D:\\NewShp\\line1.shp
            FileInfo fileInfo          = new FileInfo(strFielPath);
            string   fileDirectoryName = fileInfo.DirectoryName;
            string   fileName          = fileInfo.Name;
            //IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();
            IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(fileDirectoryName, 0);
            IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
            IFeatureClass     featureClass     = featureWorkspace.OpenFeatureClass(fileName);
            IFeatureCursor    featureCursor    = featureClass.Search(null, false); //访问要素类的一系列要素 对要素类进行查询返回的一个游标(即指向搜素结果集的一个指针)
            IFeature          feature_q        = featureCursor.NextFeature();      //将游标移动到结果集下一个要素并返回当前要素,这里将返回结果赋值给了pFeature

            while (feature_q != null)
            {
                IGeometry geoMetry = feature_q.Shape;//得到的每个数据
                feature_q = featureCursor.NextFeature();
                //提示框
                strNames = strNames + QuerySpatial(this.axMapControl1, geoMetry, strFieldName);
                //提示框显示提示
                this.lab_info.Text = strNames;
            }

            //3、获取所选路径终点名、花费
            switch (stringvalue)
            {
            case "0":    //七星鲁王宫
                endPointname = "七星鲁王宫";
                cost         = "5542公里";
                break;

            case "1":    //西沙海底墓

                endPointname = "西沙海底墓";
                cost         = "3284公里";
                break;

            case "2":    //秦岭神树

                endPointname = "秦岭神树";
                cost         = "1867公里";
                break;

            case "3":    //西王母宫

                endPointname = "西王母宫";
                cost         = "3433公里";
                break;

            case "4":    //张家鼓楼

                endPointname = "张家鼓楼";
                cost         = "7528公里";
                break;

            default:

                break;
            }


            lab_start.Text   = startPointname;
            lab_end.Text     = endPointname;
            lab_costAll.Text = cost;
        }
Exemplo n.º 17
0
        public override void OnMouseDown(int Button, int Shift, int X, int Y)
        {
            if (Button != (int)Keys.LButton)
            {
                return;
            }
            ILayer layer = m_engineEditor.TargetLayer;

            if (layer == null)
            {
                MessageBox.Show("请先启动编辑!!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            m_activeView = m_hookHelper.ActiveView;
            m_map        = m_hookHelper.FocusMap;
            if (m_map == null || m_activeView == null)
            {
                return;
            }

            IPoint pPoint = m_activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
            ISelectionEnvironment pSelectionEnvironment = new SelectionEnvironmentClass();

            pSelectionEnvironment.PointSelectionMethod = esriSpatialRelEnum.esriSpatialRelWithin;
            m_map.SelectByShape(pPoint as IGeometry, pSelectionEnvironment, false);
            if (m_map.SelectionCount != 2)
            {
                MessageBox.Show("选择的多边形个数应该为2!!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

                return;
            }
            m_activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, m_activeView.Extent);

            bool         deleteInteriorPolygon = false;
            DialogResult pDialogResult         = MessageBox.Show("是否要删除内多边形?", "操作提示", MessageBoxButtons.YesNo);

            if (pDialogResult == DialogResult.Yes)
            {
                deleteInteriorPolygon = true;
            }

            IEnumFeature      pEnumFeature      = m_map.FeatureSelection as IEnumFeature;
            IEnumFeatureSetup pEnumFeatureSetup = pEnumFeature as IEnumFeatureSetup;

            pEnumFeatureSetup.AllFields = true;
            IFeature firstFeature  = pEnumFeature.Next();
            IFeature secondFeature = pEnumFeature.Next();

            IArea     pAreaFirst          = firstFeature.Shape as IArea;
            IArea     pAreaSecond         = secondFeature.Shape as IArea;
            IGeometry pGeometry           = null;
            bool      firstPolygonIsLarge = false;

            IRelationalOperator pRelationalOperator = firstFeature.Shape as IRelationalOperator;

            if (pAreaFirst.Area > pAreaSecond.Area)
            {
                if (pRelationalOperator.Contains(secondFeature.Shape))
                {
                    ITopologicalOperator pTopologicalOperator = firstFeature.Shape as ITopologicalOperator;
                    pGeometry           = pTopologicalOperator.Difference(secondFeature.Shape);
                    firstPolygonIsLarge = true;
                }
            }
            else
            {
                pRelationalOperator = secondFeature.Shape as IRelationalOperator;
                if (pRelationalOperator.Contains(firstFeature.Shape))
                {
                    ITopologicalOperator pTopologicalOperator = secondFeature.Shape as ITopologicalOperator;
                    pGeometry           = pTopologicalOperator.Difference(firstFeature.Shape);
                    firstPolygonIsLarge = false;
                }
            }
            IFeatureClass  featureClass  = firstFeature.Class as IFeatureClass;
            IDataset       dataset       = featureClass as IDataset;
            IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit;

            if (!(workspaceEdit.IsBeingEdited()))
            {
                return;
            }

            workspaceEdit.StartEditOperation();
            if (firstPolygonIsLarge)
            {
                firstFeature.Shape = pGeometry;
                firstFeature.Store();
                if (deleteInteriorPolygon)
                {
                    secondFeature.Delete();
                }
            }
            else
            {
                secondFeature.Shape = pGeometry;
                secondFeature.Store();
                if (deleteInteriorPolygon)
                {
                    firstFeature.Delete();
                }
            }
            workspaceEdit.StopEditOperation();
            m_map.ClearSelection();
            m_activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, m_activeView.Extent);
        }
Exemplo n.º 18
0
        private void drawBuffer(AxMapControl axMapControl1, double roadwidth)
        {
            IGraphicsContainer graphicsCountainer = axMapControl1.ActiveView.GraphicsContainer;

            graphicsCountainer.DeleteAllElements();
            ISelection        pSelection        = axMapControl1.Map.FeatureSelection;
            IEnumFeatureSetup pEnumFeatureSetup = pSelection as IEnumFeatureSetup;

            //IEnumFeature pEumFeatue = (IEnumFeature)pSelection;
            pEnumFeatureSetup.AllFields = true;

            IEnumFeature pEnumFeature = pEnumFeatureSetup as IEnumFeature;

            pEnumFeature.Reset();
            IFeature             pFea                 = pEnumFeature.Next();
            IGeometry            pGeo                 = null;
            ITopologicalOperator pTopo                = null;
            IGeometry            pBuffer              = null;
            double                  m_dDistance       = roadwidth;///////
            IElement                pElement          = null;
            IFillSymbol             pFillSymbol       = null;
            IRgbColor               pRgbColor         = null;
            ISpatialFilter          pSpatialfilter    = null;
            IFeatureLayer           pFeaLayer         = null;
            IFeatureClass           pFeaClass         = null;
            IFeature                pFeature          = null;
            IFeatureCursor          pFeaCursor        = null;
            List <List <IFeature> > pFeatureLayerlist = new List <List <IFeature> >();

            //List < IFeature> pFeaturelist =new List<IFeature>();
            for (int i = 0; i < axMapControl1.LayerCount; i++)
            {
                pFeatureLayerlist.Add(new List <IFeature>());
            }

            while (pFea != null)
            {
                pGeo    = pFea.ShapeCopy;
                pTopo   = pGeo as ITopologicalOperator;
                pBuffer = pTopo.Buffer(m_dDistance);

                pElement          = new PolygonElementClass();
                pElement.Geometry = pBuffer;

                ////    设置缓冲区颜色
                pFillSymbol            = new SimpleFillSymbolClass();
                pRgbColor              = new RgbColorClass();
                pRgbColor.Red          = 255;
                pRgbColor.Green        = 255;
                pRgbColor.Blue         = 153;
                pRgbColor.Transparency = 150;
                pFillSymbol.Color      = pRgbColor;
                (pElement as IFillShapeElement).Symbol = pFillSymbol;
                (axMapControl1.Map as IGraphicsContainer).AddElement(pElement, 0);
                axMapControl1.Refresh();
                pSpatialfilter          = new SpatialFilterClass();
                pSpatialfilter.Geometry = pBuffer;

                for (int i = 0; i < axMapControl1.LayerCount; i++)
                {
                    pFeaLayer = axMapControl1.get_Layer(i) as IFeatureLayer;
                    pFeaClass = pFeaLayer.FeatureClass;
                    // pFeaturelist = new List<IFeature>();

                    if (pFeaLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
                    {
                        pSpatialfilter.SpatialRel    = esriSpatialRelEnum.esriSpatialRelIntersects;
                        pSpatialfilter.GeometryField = pFeaClass.ShapeFieldName;
                        pFeaCursor = pFeaClass.Search(pSpatialfilter, false);

                        pFeature = pFeaCursor.NextFeature();
                        //graphicsCountainer.DeleteAllElements();
                        while (pFeature != null)
                        {
                            //if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
                            {
                                //axMapControl1.Map.SelectFeature(pFeaLayer, pFeature);
                                pFeatureLayerlist[i].Add(pFeature);
                                pFeature = pFeaCursor.NextFeature();
                            }
                        }
                    }
                    // pFeatureLayer.Add(pFeaturelist);

                    /*  switch (pFeaClass.ShapeType)
                     * {
                     *    case esriGeometryType.esriGeometryPoint:
                     *        {
                     *           // pSpatialfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                     *            break;
                     *        }
                     *    case esriGeometryType.esriGeometryPolyline:
                     *        {
                     *            //pSpatialfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                     *            break;
                     *        }
                     *    case esriGeometryType.esriGeometryPolygon:
                     *        {
                     *            pSpatialfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                     *            break;
                     *        }
                     * }*/
                }
                pFea = pEnumFeature.Next();
            }
            axMapControl1.Map.ClearSelection();
            for (int p = 0; p < pFeatureLayerlist.Count; p++)
            {
                for (int j = 0; j < pFeatureLayerlist[p].Count; j++)
                {
                    axMapControl1.Map.SelectFeature(axMapControl1.get_Layer(p), pFeatureLayerlist[p][j]);
                }
            }


            axMapControl1.Refresh();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeaCursor);
        }
Exemplo n.º 19
0
        /// <summary>
        /// 生成缓冲区
        /// </summary>
        public static List <IFeature> createBuffer(AxMapControl axMap, double bufferSize, String targetLayerName, Boolean auto)
        {
            IMap map = axMap.Map;

            ITopologicalOperator topo             = null;
            IElement             element          = null;
            IGeometry            buffer           = null;
            IGeometry            geo              = null;
            ISelection           selection        = null;
            IEnumFeatureSetup    enumFeatureSetup = null;
            IEnumFeature         enumFeature      = null;
            IFillSymbol          fillSymbol       = null;
            IRgbColor            color            = null;

            IFeature       feat          = null;
            IFeature       feature       = null;
            IFeatureLayer  pFeaLayer     = null;
            IFeatureClass  pFeaClass     = null;
            IFeatureCursor featureCursor = null;

            ISpatialFilter spatialfilter = null;

            List <IFeature> features = new List <IFeature>();

            if (map != null)
            {
                (map as IGraphicsContainer).DeleteAllElements();
            }

            ////    获得选中要素
            selection                  = map.FeatureSelection;
            enumFeatureSetup           = selection as IEnumFeatureSetup;
            enumFeatureSetup.AllFields = true;

            enumFeature = enumFeatureSetup as IEnumFeature;
            enumFeature.Reset();
            feat = enumFeature.Next();

            ////    遍历选中要素
            while (feat != null)
            {
                geo    = feat.ShapeCopy;
                topo   = geo as ITopologicalOperator;
                buffer = topo.Buffer(bufferSize);

                element          = new PolygonElementClass();
                element.Geometry = buffer;

                if (!auto)
                {
                    ////    设置缓冲区颜色
                    fillSymbol = new SimpleFillSymbolClass();
                    color      = new RgbColorClass();

                    color.Transparency = 0;
                    fillSymbol.Color   = color;
                    (element as IFillShapeElement).Symbol = fillSymbol;
                    (map as IGraphicsContainer).AddElement(element, 0);
                }


                //////    设置空间过滤器
                spatialfilter          = new SpatialFilterClass();
                spatialfilter.Geometry = buffer;


                pFeaLayer = getLayerByName(axMap.Map, targetLayerName) as IFeatureLayer;
                pFeaClass = pFeaLayer.FeatureClass;

                switch (pFeaClass.ShapeType)
                {
                case esriGeometryType.esriGeometryPoint:
                {
                    spatialfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
                    break;
                }
                    //case esriGeometryType.esriGeometryPolyline:
                    //    {
                    //        spatialfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
                    //        break;
                    //    }
                    //case esriGeometryType.esriGeometryPolygon:
                    //    {
                    //        spatialfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
                    //        break;
                    //    }
                }

                spatialfilter.GeometryField = pFeaClass.ShapeFieldName;
                featureCursor = pFeaClass.Search(spatialfilter, false);
                feature       = featureCursor.NextFeature();


                while (feature != null)
                {
                    features.Add(feature);

                    feature = featureCursor.NextFeature();
                }

                feat = enumFeature.Next();
            }

            IActiveView activeView = map as IActiveView;

            activeView.Refresh();

            return(features);
        }
Exemplo n.º 20
0
        private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
        {
            switch (toolAction)
            {
            case "Drag Zoom In":                                      //判定当前的操作是否为拉框放大

                IEnvelope pEnvelope = axMapControl1.TrackRectangle(); // 调用axMapControl1的矩形框跟踪功能进行拉框操作,
                //将拉框完成后的范围赋值给一个Envelope对象
                //此处,你可以尝试axMapControl1.TrackPolygon(),axMapControl1.TrackCircle(),axMapControl1.TrackLine()等方法的调用,看有什么效果
                if (pEnvelope == null || pEnvelope.IsEmpty || pEnvelope.Height == 0 || pEnvelope.Width == 0) //判定所获取的拉框范围是否无效
                {
                    return;                                                                                  // 拉框范围无效,就直接返回
                }
                axMapControl1.Extent = pEnvelope;                                                            // 给地图窗口的空间范围赋值为刚才拉框的范围
                axMapControl1.ActiveView.Refresh();                                                          //地图刷新
                return;

            case "Drag Zoom Out":                                      //判定当前的操作是否为拉框缩小
                IEnvelope pEnvelope1 = axMapControl1.TrackRectangle(); // 调用axMapControl1的矩形框跟踪功能进行拉框操作,
                //将拉框完成后的范围赋值给一个Envelope对象
                //此处,你可以尝试axMapControl1.TrackPolygon(),axMapControl1.TrackCircle(),axMapControl1.TrackLine()等方法的调用,看有什么效果
                if (pEnvelope1 == null || pEnvelope1.IsEmpty || pEnvelope1.Height == 0 || pEnvelope1.Width == 0)                                                 ////判定所获取的拉框范围是否无效
                {
                    return;                                                                                                                                      //// 拉框范围无效,就直接返回
                }
                IActiveView pActiveView = axMapControl1.ActiveView;                                                                                              // 获取地图视窗对象
                double      mHeight     = pActiveView.Extent.Height * pActiveView.Extent.Height / pEnvelope1.Height;                                             // 根据倍数计算新空间范围高度
                double      mWidth      = pActiveView.Extent.Width * pActiveView.Extent.Width / pEnvelope1.Width;                                                // 根据倍数计算新空间范围宽度
                double      mMinX       = pActiveView.Extent.XMin - (pEnvelope1.XMin - pActiveView.Extent.XMin) * pActiveView.Extent.Width / pEnvelope1.Width;   //计算新空间范围的x的最小值
                double      mMinY       = pActiveView.Extent.YMin - (pEnvelope1.YMin - pActiveView.Extent.YMin) * pActiveView.Extent.Height / pEnvelope1.Height; //计算新空间范围的y的最小值
                double      mMaxX       = mMinX + mWidth;                                                                                                        //计算新空间范围的x的最大值
                double      mMaxY       = mMinY + mHeight;                                                                                                       // 计算新空间范围的y的最大值
                pEnvelope1.PutCoords(mMinX, mMinY, mMaxX, mMaxY);                                                                                                // 给Envelope对象赋值新的空间范围

                //(pActiveView.Extent.XMax-pActiveView.Extent.XMin)*
                axMapControl1.Extent = pEnvelope1;      // 给地图范围赋值为新的空间范围
                axMapControl1.ActiveView.Refresh();     //地图刷新
                return;

            case "Pan":              // 判定是否进行地图平移操作
                axMapControl1.Pan(); //可执行地图平移
                return;

            case "Select Feature Using Point":                                                              //点选要素

                axMapControl1.ActiveView.FocusMap.ClearSelection();                                         // 清空当前地图的选择集;
                axMapControl1.ActiveView.Refresh();
                tagRECT r;                                                                                  //   定义一个tagRECT结构变量,用于存放以当前鼠标为中心的长宽各为10个像素的小矩形
                r.left   = e.x - 5;                                                                         //
                r.right  = e.x + 5;                                                                         //
                r.bottom = e.y - 5;                                                                         //
                r.top    = e.y + 5;                                                                         //
                IEnvelope pEnv = new Envelope() as IEnvelope;                                               // 创建一个Envelope对象,用于接受刚才创建的小矩形范围由屏幕坐标转换为地图坐标的值
                axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4); //把r的屏幕坐标转换为地图坐标,存入Envelope对象中
                pEnv.SpatialReference = axMapControl1.ActiveView.FocusMap.SpatialReference;                 //设定Envelope对象的空间坐标参考与当前地图窗口的坐标一致
                IGeometry pGeo = pEnv as IGeometry;                                                         //接口访问到IGeometry接口
                axMapControl1.Map.SelectByShape(pGeo, null, false);                                         //调用地图控件中map对象的SelectByShape方法,在地图中选择与pGeo相交或包含在其中的地图要素
                //int selCount = axMapControl1.Map.SelectionCount;
                //IEnumFeature pEnumFeature = axMapControl1.Map.FeatureSelection as IEnumFeature;
                //IFeature pFeature = pEnumFeature.Next();
                //while (pFeature != null)
                //{
                //    int index = pFeature.Fields.FindField("GB");
                //    str1 = Convert.ToString(pFeature.get_Value(index));
                //    MessageBox.Show(str1);
                //    //string str2 = pFeature.get_Value(2).ToString();
                //    pFeature = pEnumFeature.Next();
                //}



                ISelection        selection         = axMapControl1.Map.FeatureSelection;
                IEnumFeatureSetup iEnumFeatureSetup = (IEnumFeatureSetup)selection;
                iEnumFeatureSetup.AllFields = true;
                IEnumFeature pEnumFeature = (IEnumFeature)iEnumFeatureSetup;
                pEnumFeature.Reset();
                IFeature pFeature = pEnumFeature.Next();
                if (pFeature != null)
                {
                    int index = pFeature.Fields.FindField("RNAME");
                    //string str1 = pFeature.OID.ToString();
                    if (index != -1)
                    {
                        str1 = pFeature.get_Value(index).ToString();
                    }
                    //MessageBox.Show(str1);
                    //pFeature = pEnumFeature.Next();
                }
                axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);        //

                toolAction = "";
                return;

            case "Select Feature Using Rectangle":                    //矩形选择要素
                IEnvelope pEnvlope2 = axMapControl1.TrackRectangle(); //  进行矩形框的绘制追踪,
                if (pEnvlope2.IsEmpty == true)                        // 若矩形框为空
                {
                    tagRECT r1;
                    r1.left   = e.x - 5;
                    r1.right  = e.x + 5;
                    r1.bottom = e.y - 5;
                    r1.top    = e.y + 5;
                    axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnvlope2, ref r1, 4);
                    pEnvlope2.SpatialReference = axMapControl1.ActiveView.FocusMap.SpatialReference;
                }
                IGeometry pGeo1 = pEnvlope2 as IGeometry;
                axMapControl1.Map.SelectByShape(pGeo1, null, false);
                axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);


                toolAction = "";
                return;


            case "Select Feature Using Circle":                 // 圆形选择要素
                IGeometry pCircl = axMapControl1.TrackCircle(); //圆形绘制
                if (pCircl.IsEmpty == true)
                {
                    return;
                }
                // IGeometry pGeo1 = pEnvlope2 as IGeometry;
                axMapControl1.Map.SelectByShape(pCircl, null, false);
                axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
                toolAction = "";
                return;

            case "Select Feature Using Polygon":                   //多边形选择要素

                IGeometry pPolygon = axMapControl1.TrackPolygon(); // 绘制多边形
                if (pPolygon.IsEmpty == true)
                {
                    return;
                }
                // IGeometry pGeo1 = pEnvlope2 as IGeometry;
                axMapControl1.Map.SelectByShape(pPolygon, null, false);
                axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
                toolAction = "";
                return;

            case "Select Feature Using Polyline":            // 线性选择要素

                IGeometry pLine = axMapControl1.TrackLine(); //绘制线
                if (pLine.IsEmpty == true)
                {
                    return;
                }
                // IGeometry pGeo1 = pEnvlope2 as IGeometry;
                axMapControl1.Map.SelectByShape(pLine, null, false);
                axMapControl1.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
                toolAction = "";
                return;

            case "Draw Polygon":
                IGeometry pPolygon1 = axMapControl1.TrackPolygon();       // 绘制多边形
                if (pPolygon1 == null)
                {
                    return;
                }
                IElement pElement = new PolygonElement();
                pElement.Geometry = pPolygon1;
                IFillShapeElement pPolygonEle = pElement as IFillShapeElement;
                if (pSelectedFillSymbol != null)
                {
                    pPolygonEle.Symbol = pSelectedFillSymbol;
                }

                IGraphicsContainer pGc = axMapControl1.ActiveView.GraphicsContainer;
                pGc.AddElement(pElement, 0);
                IGraphicsContainerSelect pGSelection = pGc as IGraphicsContainerSelect;
                pGSelection.UnselectAllElements();
                pGSelection.SelectElement(pElement);

                toolAction = "";
                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
                return;

            case "Draw Point":
                IPoint pPointMark = new ESRI.ArcGIS.Geometry.Point(); // 创建一个点

                pPointMark.PutCoords(e.mapX, e.mapY);                 //给点赋值为当前鼠标所在位置的地图坐标
                IGeometry pPointGeo = pPointMark as IGeometry;
                IElement  pMElement = new MarkerElement();
                pMElement.Geometry = pPointGeo;
                IMarkerElement pMarkElement = pMElement as IMarkerElement;
                if (pSelectedMarkSymbol != null)
                {
                    pMarkElement.Symbol = pSelectedMarkSymbol;
                }

                IGraphicsContainer pGraphiscont = axMapControl1.ActiveView.GraphicsContainer;
                pGraphiscont.AddElement(pMElement, 0);
                IGraphicsContainerSelect pGS = pGraphiscont as IGraphicsContainerSelect;
                pGS.UnselectAllElements();
                pGS.SelectElement(pMElement);

                toolAction = "";
                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
                return;

            case "Draw Line":
                IGeometry pLineGeo = axMapControl1.TrackLine();       // 绘制Line
                if (pLineGeo == null)
                {
                    return;
                }
                IElement     pElement4 = new LineElement();
                ILineElement pLineEle  = pElement4 as ILineElement;
                if (pSelectedLineSymbol != null)
                {
                    pLineEle.Symbol = pSelectedLineSymbol;
                }

                pElement4.Geometry = pLineGeo;
                IGraphicsContainer pGc4 = axMapControl1.ActiveView.GraphicsContainer;
                pGc4.AddElement(pElement4, 0);
                IGraphicsContainerSelect pGSelection4 = pGc4 as IGraphicsContainerSelect;
                pGSelection4.UnselectAllElements();
                pGSelection4.SelectElement(pElement4);

                toolAction = "";
                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

                return;

            case "Draw Text":
                IRgbColor pColor = new RgbColor();
                pColor.Red   = 150;
                pColor.Green = 150;
                pColor.Blue  = 0;

                ITextSymbol    pTextSymbol = new TextSymbol();
                stdole.StdFont font        = new stdole.StdFont();
                font.Name         = "宋体";
                font.Size         = 20;
                pTextSymbol.Font  = font as stdole.IFontDisp;
                pTextSymbol.Color = pColor;
                pTextSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHALeft;
                pTextSymbol.VerticalAlignment   = esriTextVerticalAlignment.esriTVABaseline;
                pTextSymbol.Text = "This is my First Text";


                IPoint pTextPoint = new ESRI.ArcGIS.Geometry.Point(); // 创建一个点

                pTextPoint.PutCoords(e.mapX, e.mapY);                 //给点赋值为当前鼠标所在位置的地图坐标
                IGeometry pTextGeo = pTextPoint as IGeometry;

                IElement pTElement = new TextElement();
                pTElement.Geometry = pTextGeo;
                ITextElement pTextEle = pTElement as ITextElement;
                pTextEle.Symbol = pTextSymbol;
                pTextEle.Text   = pTextSymbol.Text;

                IGraphicsContainer pGraphisCon = axMapControl1.ActiveView.GraphicsContainer;
                pGraphisCon.AddElement(pTElement, 0);

                IGraphicsContainerSelect pGrhSelection = pGraphisCon as IGraphicsContainerSelect;
                pGrhSelection.UnselectAllElements();
                pGrhSelection.SelectElement(pTElement);

                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

                toolAction = "";
                break;


            case "Select Graphics by using Point":                                                       //通过点击获得GraphicsContainor中的element

                IPoint pPoint = new ESRI.ArcGIS.Geometry.Point();                                        // 创建一个点
                pPoint.PutCoords(e.mapX, e.mapY);                                                        //给点赋值为当前鼠标所在位置的地图坐标
                double                   dist         = axMapControl1.ActiveView.Extent.Width / 15;      //设置以点为圆心的查询的半径
                IGraphicsContainer       pGc1         = axMapControl1.ActiveView.GraphicsContainer;      //获得地图的GraphicsContainor容器
                IEnumElement             pEnumElement = pGc1.LocateElements(pPoint, dist);               //以点为中心点,按照指定半径选择element
                IGraphicsContainerSelect pGSelection1 = pGc1 as IGraphicsContainerSelect;                //获得地图的容器中的图形要素选择集
                if (pEnumElement != null)                                                                //
                {
                    pEnumElement.Reset();                                                                //回到-1位置
                    pGSelection1.UnselectAllElements();                                                  //清空原来选择到的图形要素
                    pGSelection1.SelectElements(pEnumElement);                                           //将新查询到的图形要素添加到GraphicsContainor容器中的图形要素选择集中
                }
                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); //图形要素刷新

                return;
            }
            if (e.button == 2)                                   //若单击鼠标右键
            {
                contextMenuStrip2.Show(axMapControl1, e.x, e.y); //在TOC控件的当前鼠标位置弹出右键菜单
            }
        }
Exemplo n.º 21
0
        public override void OnMouseDown(int Button, int Shift, int X, int Y)
        {
            // TODO:  Add ToolEditFeatures.OnMouseDown implementation
            try
            {
                ISceneControl pSceneCtr = (((IToolbarControl)m_hookHelper.Hook).Buddy) as ISceneControl;
                if (pSceneCtr != null)
                {
                    IPoint po;
                    object owner, obj;
                    pSceneCtr.SceneGraph.Locate(pSceneCtr.SceneViewer, X, Y, esriScenePickMode.esriScenePickGeography, true, out po, out owner, out obj);//po就是得到的点

                    //方法2
                    IHit3DSet pHit3dSet = null;
                    pSceneCtr.SceneGraph.LocateMultiple(pSceneCtr.SceneGraph.ActiveViewer, X, Y, esriScenePickMode.esriScenePickGeography, true, out pHit3dSet);

                    //po = pHit3D.Point;//po就是得到的点

                    //如果想得到某图层元素,可以看看下面代码

                    //  int index = 2;
                    if (pHit3dSet == null)
                    {
                        return;
                    }
                    pHit3dSet.OnePerLayer();
                    IHit3D   pHit3D   = (IHit3D)pHit3dSet.Hits.get_Element(0);
                    IFeature pFeature = (IFeature)pHit3D.Object;
                    if (pFeature == null)
                    {
                        return;
                    }
                    ILayer pLayer = owner as ILayer;
                    if (pLayer == null)
                    {
                        return;
                    }
                    if (pLayer.Name != "Crater" && pLayer.Name != "NonCrater")
                    {
                        return;
                    }
                    IFeatureClass pFeatureClass = ((IFeatureLayer)pLayer).FeatureClass;
                    pSceneCtr.Scene.ClearSelection();
                    pSceneCtr.Scene.SelectFeature(pLayer, pFeature);
                    IActiveView pActiveView = pSceneCtr.Scene as IActiveView;
                    pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pLayer, null);
                    IMultiPatch pMP = pFeature.Shape as IMultiPatch;
                    FrmEditFeatures.setXLabel((pMP.Envelope.XMax + pMP.Envelope.XMin) / 2);
                    FrmEditFeatures.setYLabel((pMP.Envelope.YMax + pMP.Envelope.YMin) / 2);
                }
                IMapControl2 pMapCtr = (((IToolbarControl)m_hookHelper.Hook).Buddy) as IMapControl2;
                if (pMapCtr != null)
                {
                    IMap   pMap = pMapCtr.Map;
                    IPoint po   = pMapCtr.ToMapPoint(X, Y);
                    ISelectionEnvironment pSelectionEnv = new SelectionEnvironmentClass();
                    pMap.SelectByShape(po, pSelectionEnv, true);
                    //for (int i = 0; i < pMap.LayerCount; i++ )
                    //{
                    //    ILayer pLayer = pMap.get_Layer(i);

                    //    if (pLayer.Name == "Crater")
                    //    {
                    //        pMapCtr.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pLayer, null);
                    //    }
                    //    if (pLayer.Name =="NonCrater")
                    //    {
                    //        pMapCtr.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pLayer, null);
                    //    }
                    //}
                    pMapCtr.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                    IEnumFeatureSetup pSelectionsetup = pMap.FeatureSelection as IEnumFeatureSetup;
                    pSelectionsetup.AllFields = true;//这里是关键
                    IEnumFeature pFeatureCollection = pSelectionsetup as IEnumFeature;
                    IFeature     pF = pFeatureCollection.Next();
                    if (pF != null && pF.Shape is IMultiPatch)
                    {
                        IMultiPatch pMP = pF.Shape as IMultiPatch;
                        FrmEditFeatures.setXLabel((pMP.Envelope.XMax + pMP.Envelope.XMin) / 2);
                        FrmEditFeatures.setYLabel((pMP.Envelope.YMax + pMP.Envelope.YMin) / 2);
                    }


                    //ISelection pSelection =pMap.FeatureSelection;
                    ////从Map.FeatureSelection获得ISelection不能读到Feature的其他属性,
                    ////这是因为从axMapControl1.Map.FeatureSelection QI到IEnumFeature 时,
                    ////ArcGIS中FeatureSelection默认的时候只存入Feature 的Shape,而不是整个Feature的字段数据。
                    ////如果要查看其他数据,必须要进行以下转换才可以:
                    //IEnumFeatureSetup pSelectionsetup = pSelection as IEnumFeatureSetup;
                    //pSelectionsetup.AllFields = true;//这里是关键
                    //IEnumFeature pFeatureCollection = pSelectionsetup as IEnumFeature;
                    //IFeature pF = pFeatureCollection.Next();
                    //if (pF != null)
                    //{
                    //    pF.Class
                    //}
                }
            }
            catch (System.Exception ex)
            {
            }
        }