Beispiel #1
0
        /// <summary>
        /// 选中并定位到选中行中的所有要素
        /// </summary>
        /// <param name="iColumnIndex"></param>
        /// <param name="iRowIndex"></param>
        private void ShowAllFeature(int iColumnIndex, int iRowIndex)
        {
            if (iRowIndex == -1)
            {
                return;
            }
            int    iOID1        = Convert.ToInt32(DataGridErrs.Rows[iRowIndex].Cells["要素OID1"].Value);
            int    iOID2        = Convert.ToInt32(DataGridErrs.Rows[iRowIndex].Cells["要素OID2"].Value);
            string strSLayer    = DataGridErrs.Rows[iRowIndex].Cells["数据图层1"].Value.ToString();
            string strTLayer    = DataGridErrs.Rows[iRowIndex].Cells["数据图层2"].Value.ToString();
            double d_mapx       = -1;
            double d_mapy       = -1;
            string errFeaGepStr = string.Empty;

            try
            {
                d_mapx = Convert.ToDouble(DataGridErrs.CurrentRow.Cells["定位点X"].FormattedValue.ToString());
                d_mapy = Convert.ToDouble(DataGridErrs.CurrentRow.Cells["定位点Y"].FormattedValue.ToString());
            }
            catch
            {
                d_mapx = 0; d_mapy = 0;
            }
            try
            {
                errFeaGepStr = DataGridErrs.CurrentRow.Cells["错误几何形状"].FormattedValue.ToString();
            }
            catch
            {
                errFeaGepStr = string.Empty;
            }


            ILayer           pSLayer   = ModDBOperator.GetLayer(_MapControl as ESRI.ArcGIS.Controls.IMapControlDefault, strSLayer);
            ILayer           pTLayer   = ModDBOperator.GetLayer(_MapControl as ESRI.ArcGIS.Controls.IMapControlDefault, strTLayer);
            IFeature         pSFeature = null;
            IFeature         pTFeature = null;
            IList <IFeature> vFeaList  = new List <IFeature>();

            if (iOID1 != -1)
            {
                if (pSLayer != null && pSLayer is IFeatureLayer)
                {
                    IFeatureClass pSFeatureClass = (pSLayer as IFeatureLayer).FeatureClass;
                    if (pSFeatureClass == null)
                    {
                        return;
                    }
                    try
                    {
                        pSFeature = pSFeatureClass.GetFeature(iOID1);
                    }
                    catch { return; }
                }
            }
            if (iOID2 != -1)
            {
                if (pTLayer != null && pTLayer is IFeatureLayer)
                {
                    IFeatureClass pTFeatureClass = (pTLayer as IFeatureLayer).FeatureClass;
                    if (pTFeatureClass == null)
                    {
                        return;
                    }
                    try
                    {
                        pTFeature = pTFeatureClass.GetFeature(iOID2);
                    }
                    catch { }
                }
            }
            IGeometry pGeometry = null;

            _MapControl.Map.ClearSelection();
            _MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, _MapControl.ActiveView.Extent);
            if (pTFeature == null)
            {
                if (pSFeature != null)
                {
                    _MapControl.Map.SelectFeature(pSLayer, pSFeature);
                    pGeometry = pSFeature.ShapeCopy;
                }
            }
            else
            {
                if (pSFeature.ShapeCopy.GeometryType == esriGeometryType.esriGeometryPoint && pTFeature.ShapeCopy.GeometryType == esriGeometryType.esriGeometryPoint)
                {
                    object _missing = Type.Missing;

                    IGeometryCollection geometryCollection = new PolylineClass();
                    IPointCollection    pointCollection    = new PathClass();
                    pointCollection.AddPoint(pSFeature.ShapeCopy as IPoint, ref _missing, ref _missing);
                    pointCollection.AddPoint(pTFeature.ShapeCopy as IPoint, ref _missing, ref _missing);
                    geometryCollection.AddGeometry(pointCollection as IGeometry, ref _missing, ref _missing);
                    MakeZAware(geometryCollection as IGeometry);
                    pGeometry = geometryCollection as IGeometry;
                    pGeometry.Project(pSFeature.Shape.SpatialReference);
                }
                else
                {
                    vFeaList.Add(pSFeature); vFeaList.Add(pTFeature);
                    pGeometry = GetLyrUnionPlygon(vFeaList);
                }
                _MapControl.Map.SelectFeature(pTLayer, pTFeature);
            }
            _MapControl.Map.SelectFeature(pSLayer, pSFeature);
            ModDBOperator.ZoomToFeature(_MapControl.Map, pGeometry);
            ShowErrorGeo(d_mapx, d_mapy, errFeaGepStr);
            _MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, _MapControl.ActiveView.Extent);
            //ShowErrState();
        }