Пример #1
0
 private void comboBoxToraster_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (comboBoxToraster.Items.Count > 0)
     {
         toraster_Name = comboBoxToraster.SelectedItem.ToString();
         ;
         ILayer     pLayer = GetLayerByName(ref fortraster_Name);
         IWorkspace pSourceWorkspace;
         if (pLayer is IRasterLayer)//读取RasterLayer的路径名和像元大小值
         {
             IRasterLayer pRasterLayer = pLayer as IRasterLayer;
             IDataset     pDataset     = pRasterLayer as IDataset;
             pSourceWorkspace = pDataset.Workspace;
             toraster_Path    = pSourceWorkspace.PathName;
             toraster_Path    = toraster_Path + toraster_Name;
         }
         else if (pLayer is ITinLayer)
         {
             ITinLayer pTinLayer = pLayer as ITinLayer;
             ITin      pTin      = pTinLayer.Dataset;
             IDataset  pDataset  = pTin as IDataset;
             pSourceWorkspace = pDataset.Workspace;
             toraster_Path    = pSourceWorkspace.PathName;
             toraster_Path    = toraster_Path + "\\" + toraster_Name;
         }
         btnSure.Enabled = true;
     }
     else
     {
         btnSure.Enabled = false;
     }
 }
Пример #2
0
        //缩放至图层
        private void ctMenuTFZoomToLayer_Click(object sender, EventArgs e)
        {
            IGeoDataset pGeoDataset = null;

            if (this.TOCRightLayer is IFeatureLayer)
            {
                IFeatureClass pFeatureClass = ((IFeatureLayer)this.TOCRightLayer).FeatureClass;
                pGeoDataset = pFeatureClass as IGeoDataset;
            }
            else if (this.TOCRightLayer is IRasterLayer)
            {
                IRasterLayer pRaterLayer = this.TOCRightLayer as IRasterLayer;
                pGeoDataset = pRaterLayer.Raster as IGeoDataset;
            }
            else if (this.TOCRightLayer is ITinLayer)
            {
                ITinLayer pTinLayer = this.TOCRightLayer as ITinLayer;
                pGeoDataset = pTinLayer.Dataset as IGeoDataset;
            }
            else
            {
                return;
            }
            this.axMapControl1.Extent = pGeoDataset.Extent;
            this.axMapControl1.Refresh();
        }
Пример #3
0
        private void 影像叠加ToolStripMenuItem_Click(object sender, System.EventArgs e)
        {
            ISceneGraph pSceneGraph = this.axSceneControl1.SceneGraph;
            IScene      pScene      = pSceneGraph.Scene;
            ILayer      layer       = pScene.get_Layer(0);
            ITinLayer   tinLayer    = layer as ITinLayer;

            layer = pScene.get_Layer(1);
            IRasterLayer rasterLayer = layer as IRasterLayer;
            ITinAdvanced tinAdvanced;
            ISurface     surface;

            tinAdvanced = tinLayer.Dataset as ITinAdvanced;
            surface     = tinAdvanced.Surface;

            ILayerExtensions layerExtensions = (ILayerExtensions)rasterLayer;
            I3DProperties    i3dProperties   = null;

            for (int i = 0; i < layerExtensions.ExtensionCount; i++)
            {
                if (layerExtensions.get_Extension(i) is I3DProperties)
                {
                    i3dProperties = (I3DProperties)layerExtensions.get_Extension(i);
                }
            }//get 3d properties from extension

            i3dProperties.BaseOption  = esriBaseOption.esriBaseSurface;
            i3dProperties.BaseSurface = surface;
            i3dProperties.Apply3DProperties(rasterLayer);
            pSceneGraph.RefreshViewers();
        }
Пример #4
0
        public ISurface GetSurfaceFromLayer(ILayer ilayer_0)
        {
            ISurface surface = null;

            if (ilayer_0 == null)
            {
                surface = null;
            }
            else if (ilayer_0 is ITinLayer)
            {
                ITinLayer tinLayer = ilayer_0 as ITinLayer;
                surface = (tinLayer.Dataset as ISurface);
            }
            else if (ilayer_0 is IRasterLayer)
            {
                IRasterLayer rasterLayer = ilayer_0 as IRasterLayer;
                if (surface == null)
                {
                    IRasterBandCollection rasterBandCollection = rasterLayer.Raster as IRasterBandCollection;
                    IRasterBand           rasterBand           = rasterBandCollection.Item(0);
                    surface = (new RasterSurface
                    {
                        RasterBand = rasterBand
                    } as ISurface);
                }
            }
            return(surface);
        }
Пример #5
0
        private ISurface method_0(ILayer ilayer_1)
        {
            ISurface surface = null;

            if (ilayer_1 == null)
            {
                return(null);
            }
            if (ilayer_1 is ITinLayer)
            {
                ITinLayer layer = ilayer_1 as ITinLayer;
                return(layer.Dataset as ISurface);
            }
            if (ilayer_1 is IRasterLayer)
            {
                IRasterLayer   layer2   = ilayer_1 as IRasterLayer;
                IRasterBand    band     = (layer2.Raster as IRasterBandCollection).Item(0);
                IRasterSurface surface2 = new RasterSurfaceClass
                {
                    RasterBand = band
                };
                surface = surface2 as ISurface;
            }
            return(surface);
        }
Пример #6
0
        private void 生成等高线ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //获取TIN图层
            ITinLayer pTinLayer           = axSceneControl1.Scene.get_Layer(0) as ITinLayer;
            ITin      pTin                = pTinLayer.Dataset as ITin;
            string    contourFileName     = pTinLayer.Name + "_Contour";
            string    contourFileName_shp = WorkSpaceName + @"/" + contourFileName + ".shp";

            if (System.IO.File.Exists(contourFileName_shp))
            {
                System.IO.File.Delete(contourFileName_shp);
                System.IO.File.Delete(System.IO.Path.ChangeExtension(contourFileName_shp, ".dbf"));
                System.IO.File.Delete(System.IO.Path.ChangeExtension(contourFileName_shp, ".shx"));
            }
            IFeatureClass contourFeatureClass = Create_ContourLine(pTin, WorkSpaceName, contourFileName);
            //添加等高线图层
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();

            pFeatureLayer.FeatureClass = contourFeatureClass;
            IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;

            pGeoFeatureLayer.DisplayAnnotation = true;
            pGeoFeatureLayer.DisplayField      = "Contour";
            pGeoFeatureLayer.Name = contourFileName + "_Contour";
            //设置线样式
            ILineSymbol pLineSymbol = new SimpleLineSymbolClass();

            pLineSymbol.Color = Get_RGBColor(100, 50, 30);
            pLineSymbol.Width = 2;
            ISimpleRenderer pRender = pGeoFeatureLayer.Renderer as ISimpleRenderer;

            pRender.Symbol = pLineSymbol as ISymbol;
            axMapControl1.AddLayer(pFeatureLayer as ILayer);
        }
Пример #7
0
        private void comboBoxOpen_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (comboBoxOpen.Items.Count > 0)
                {
                    label.Text      = "";
                    DrawGeo.Enabled = false;
                    string LayerName = comboBoxOpen.SelectedItem.ToString();
                    ILayer pLayer    = GetLayerByName(ref LayerName);

                    if (pLayer is IRasterLayer)//读取Raster数据的ISurface
                    {
                        IRasterLayer      pRasterLayer = pLayer as IRasterLayer;
                        IGeoDataset       pDataset     = pRasterLayer as IGeoDataset;
                        ISpatialReference psr          = pDataset.SpatialReference;
                        //   ZQ   20110808   为处理地理坐标系与投影坐标系单位的转换
                        if (psr is IProjectedCoordinateSystem)
                        {
                            label.Text = "该数据为地理坐标,计算结果无效仅供参考!";
                        }
                        else if (psr is IGeographicCoordinateSystem)
                        {
                            //m_pMapControlDefault.MapUnits.ToString();
                        }
                        //
                        IRasterSurface pRasterSurface = new RasterSurfaceClass();
                        pRasterSurface.PutRaster(pRasterLayer.Raster, 0);
                        m_SurFace = pRasterSurface as ISurface;
                    }
                    else if (pLayer is ITinLayer)//读取TIN数据的ISurface
                    {
                        ITinLayer         pTinLayer = pLayer as ITinLayer;
                        IGeoDataset       pDataset  = pTinLayer as IGeoDataset;
                        ISpatialReference psr       = pDataset.SpatialReference;

                        if (!(psr is IProjectedCoordinateSystem))
                        {
                            label.Text = "该数据为地理坐标,计算结果无效仅供参考!";
                        }
                        m_SurFace = pTinLayer.Dataset as ISurface;
                    }
                    if (m_SurFace == null)
                    {
                        MessageBox.Show("请选择需要进行分析的DEM数据", "提示!");
                        return;
                    }

                    DrawGeo.Enabled = true;
                }
            }
            catch
            {
                return;
            }
        }
Пример #8
0
 public FrmSymboloTin(AxMapControl pmapcontral, AxTOCControl ptoccontral, AxSceneControl scenecontrol, ITinLayer pLayer, DevComponents.DotNetBar.Bar bar)
 {
     InitializeComponent();
     this.EnableGlass = false;
     pMapContral      = pmapcontral;
     pTocContral      = ptoccontral;
     pTLayer          = pLayer;
     pSceneControl    = scenecontrol;
     bar3             = bar;
 }
Пример #9
0
        public void SetTinLayerHeight(ITinLayer pTinLayer, double tinHeight)
        {
            I3DProperties p3DProps = get3DProps(pTinLayer);

            if (p3DProps != null)
            {
                p3DProps.BaseOption           = esriBaseOption.esriBaseExpression;
                p3DProps.BaseExpressionString = tinHeight.ToString();
                p3DProps.Apply3DProperties(pTinLayer);
            }
        }
Пример #10
0
        private void SetTinAsBase(ITinLayer tinLayer)
        {
            I3DProperties _3DProps = get3DProps(tinLayer);

            if (_3DProps != null)
            {
                _3DProps.BaseOption  = esriBaseOption.esriBaseSurface;
                _3DProps.BaseSurface = tinLayer as IFunctionalSurface;
                _3DProps.Apply3DProperties(tinLayer);
            }
        }
Пример #11
0
 /// <summary>
 /// 获取分析图层及Surfer
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void comboBoxOpen_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (comboBoxOpen.Items.Count > 0)
     {
         string LayerName = comboBoxOpen.SelectedItem.ToString();
         m_Layer = GetLayerByName(ref LayerName);
         if (m_Layer is IRasterLayer)//读取Raster数据的ISurface
         {
             IRasterLayer   pRasterLayer   = m_Layer as IRasterLayer;
             IRasterSurface pRasterSurface = new RasterSurfaceClass();
             pRasterSurface.PutRaster(pRasterLayer.Raster, 0);
             m_Surface = pRasterSurface as ISurface;
         }
         else if (m_Layer is ITinLayer)//读取TIN数据的ISurface
         {
             ITinLayer pTinLayer = m_Layer as ITinLayer;
             m_Surface = pTinLayer.Dataset as ISurface;
         }
         if (m_Surface == null)
         {
             MessageBox.Show("请选择需要进行分析的DEM数据", "提示!");
             return;
         }
         pTool3DLineOfSight.m_Layer   = m_Layer;   //将当前选中的图层传给通视分析工具
         pTool3DLineOfSight.m_SurFace = m_Surface; //将当前获取的Surface传给通视分析工具
         //下面是根据获取的Surface来自动判断是否应用曲率和折射校正
         bool bCurvEnabled;
         bCurvEnabled = false;
         ISurface    pSurface = m_Surface;
         IGeoDataset pGeoDataset;
         if (pSurface is ITin)
         {
             pGeoDataset = pSurface as IGeoDataset;
         }
         else
         {
             IRasterSurface pRasterSurf = pSurface as IRasterSurface;
             pGeoDataset = pRasterSurf.RasterBand.RasterDataset as IGeoDataset;
         }
         ISpatialReference pSpatialReference = pGeoDataset.SpatialReference;
         ILinearUnit       pLinearUnit       = pSpatialReference.ZCoordinateUnit;
         if (pLinearUnit != null)
         {
             if (pSpatialReference is IProjectedCoordinateSystem)//当投影ProjectedCoordinateSystem时使用应用曲率和折射校正
             {
                 bCurvEnabled = true;
             }
         }
         checkBoxCurv.Checked = bCurvEnabled;
     }
 }
Пример #12
0
        private void InsertLayerToTree(IBasicMap pMap, ILayer pLayer, TOCTreeNode pMapNode)
        {
            int num;

            if (pLayer is IGroupLayer)
            {
                for (num = 0; num < (pLayer as ICompositeLayer).Count; num++)
                {
                    this.InsertLayerToTree(pMap, (pLayer as ICompositeLayer).get_Layer(num), pMapNode);
                }
            }
            else
            {
                int         layerOID = 0;
                TOCTreeNode node     = this.GetParentItem(pLayer, pMapNode, ref layerOID);
                if (node == null)
                {
                    node = pMapNode;
                }
                TOCTreeNode pNode = new TOCTreeNodeEx(pLayer.Name, true, true);
                (pNode as TOCTreeNodeEx).OID = layerOID;
                pNode.Checked = pLayer.Visible;
                pNode.Tag     = pLayer;
                node.Nodes.Add(pNode);
                if (pLayer is ITinLayer)
                {
                    ITinLayer layer = pLayer as ITinLayer;
                    for (num = 0; num < layer.RendererCount; num++)
                    {
                        ITinRenderer renderer = layer.GetRenderer(num);
                        TOCTreeNode  node3    = new TOCTreeNodeEx(renderer.Name)
                        {
                            Tag = renderer
                        };
                        pNode.Nodes.Add(node3);
                        this.InsertLegendInfoToTree((ILegendInfo)renderer, pNode);
                    }
                }
                else if (pLayer is IGeoFeatureLayer)
                {
                    IGeoFeatureLayer layer2 = (IGeoFeatureLayer)pLayer;
                    this.InsertLegendInfoToTree((ILegendInfo)layer2.Renderer, pNode);
                }
                else if (pLayer is IRasterLayer)
                {
                    IRasterLayer layer3 = (IRasterLayer)pLayer;
                    this.InsertLegendInfoToTree((ILegendInfo)layer3.Renderer, pNode);
                }
            }
        }
Пример #13
0
        private I3DProperties get3DProps(ITinLayer tinLayer)
        {
            I3DProperties    _3DProps = null;
            ILayerExtensions lyrExt   = tinLayer as ILayerExtensions;

            for (int i = 0; i < lyrExt.ExtensionCount; i++)
            {
                if (lyrExt.get_Extension(i) is I3DProperties)
                {
                    _3DProps = lyrExt.get_Extension(i) as I3DProperties;
                }
            }
            return(_3DProps);
        }
Пример #14
0
        private void comboBoxOpen_SelectedIndexChanged(object sender, EventArgs e)//选择图层并自动设置默认输出像元大小及图层路径
        {
            if (comboBoxOpen.Items.Count > 0)
            {
                txtSave.Text     = "";
                txtCellSize.Text = "0.02";
                fileName         = comboBoxOpen.SelectedItem.ToString();

                ILayer pLayer = GetLayerByName(ref fileName);
                //去除不可用的数据    ZQ  20110907
                if (pLayer.Valid)
                {
                    return;
                }
                IWorkspace pSourceWorkspace;
                if (pLayer is IRasterLayer)//读取RasterLayer的路径名和像元大小值
                {
                    IRasterLayer         pRasterLayer         = pLayer as IRasterLayer;
                    IRaster              pRaster              = pRasterLayer.Raster;
                    IRasterAnalysisProps pRasterAnalysisProps = (IRasterAnalysisProps)pRaster;
                    double pixH = pRasterAnalysisProps.PixelHeight;
                    txtCellSize.Text = Convert.ToString(pixH);
                    IDataset pDataset = pRasterLayer as IDataset;
                    pSourceWorkspace = pDataset.Workspace;
                    filePath         = pSourceWorkspace.PathName;
                    filePath         = filePath + fileName;
                }
                else if (pLayer is ITinLayer)//读取TIN数据的路径信息
                {
                    ITinLayer pTinLayer = pLayer as ITinLayer;
                    ITin      pTin      = pTinLayer.Dataset;
                    IDataset  pDataset  = pTin as IDataset;
                    pSourceWorkspace = pDataset.Workspace;
                    filePath         = pSourceWorkspace.PathName;
                    filePath         = filePath + "\\" + fileName;
                }

                btnSure.Enabled = true;
            }
            else
            {
                btnSure.Enabled = false;
            }
        }
Пример #15
0
        private void comboBoxOpenraster_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBoxOpenraster.Items.Count > 0)
            {
                fileName_raster = comboBoxOpenraster.SelectedItem.ToString();

                ILayer     pLayer = GetLayerByName(ref fileName_raster);
                IWorkspace pSourceWorkspace;
                if (pLayer is IRasterLayer)//读取RasterLayer的路径名和像元大小值
                {
                    IRasterLayer         pRasterLayer         = pLayer as IRasterLayer;
                    IRaster              pRaster              = pRasterLayer.Raster;
                    IRasterAnalysisProps pRasterAnalysisProps = (IRasterAnalysisProps)pRaster;
                    double pixH = pRasterAnalysisProps.PixelHeight;
                    txtCellSize.Text = Convert.ToString(pixH);
                    IDataset pDataset = pRasterLayer as IDataset;
                    pSourceWorkspace = pDataset.Workspace;
                    filePath_raster  = pSourceWorkspace.PathName;
                    filePath_raster  = filePath_raster + fileName_raster;
                }
                else if (pLayer is ITinLayer)
                {
                    ITinLayer pTinLayer = pLayer as ITinLayer;
                    ITin      pTin      = pTinLayer.Dataset;
                    IDataset  pDataset  = pTin as IDataset;
                    pSourceWorkspace = pDataset.Workspace;
                    filePath_raster  = pSourceWorkspace.PathName;
                    filePath_raster  = filePath_raster + "\\" + fileName_raster;
                }

                btnSure.Enabled = true;
            }
            else
            {
                btnSure.Enabled = false;

                btnSure.ForeColor = Color.Black;
            }
        }
Пример #16
0
        private void cmbLayers_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cmbLayers.SelectedIndex == -1)
            {
                return;
            }
            ILayer pLayer = ClsGDBDataCommon.GetLayerFromName(m_pMap, cmbLayers.Text);

            if (pLayer is IRasterLayer)
            {
                m_pRaster = ((IRasterLayer)pLayer).Raster;
            }
            else if (pLayer is ITinLayer)
            {
                ITinLayer pTinlayer = null;
                pTinlayer = pLayer as ITinLayer;
                if (pTinlayer != null)
                {
                    //FrmDEMToTin frm = new FrmDEMToTin();
                    ////ITin tin = frm.DEMToTIN(raster);
                    //ITinLayer tinlayer = new TinLayerClass();
                    //tinlayer.Dataset = tin;
                    //tinlayer.Name = "Mem_RandomTinLayer";
                    //// tinlayer.TipText = "RandomTinLayer";
                    //ITinEdit pTEdit = tin as ITinEdit;
                    FrmTinToDEM frm     = new FrmTinToDEM();
                    ITin        ptin    = pTinlayer.Dataset;
                    IRaster     praster = frm.TINToDEM(ptin);
                    m_pRaster = praster;
                }
            }
            else
            {
                m_pRaster = null;
            }
        }
Пример #17
0
        private void btnok_Click(object sender, EventArgs e)
        {
            try
            {
                ILayer       pLayer    = null;
                IRasterLayer pRlayer   = null;
                ITinLayer    pTinlayer = null;
                ISurface     pSurface  = null;

                for (int i = 0; i < pMapControl.LayerCount; i++)
                {
                    if (pMapControl.get_Layer(i).Name == cmblayer.SelectedItem.ToString())
                    {
                        pLayer = pMapControl.get_Layer(i);
                    }
                }
                if (pLayer is IRasterLayer)
                {
                    pRlayer = pLayer as IRasterLayer;
                    IRasterSurface rasterSurf = new RasterSurfaceClass();
                    rasterSurf.PutRaster(pRlayer.Raster, 0);
                    pSurface = rasterSurf as ISurface;
                }
                else if (pLayer is ITinLayer)
                {
                    pTinlayer = pLayer as ITinLayer;
                    ITin ptin = pTinlayer.Dataset;
                    pSurface = (ISurface)ptin;
                }
                IPolyline pPolyline = pFeature.ShapeCopy as IPolyline;
                IGeometry pProfLine;
                IPoint    m_StartPoint = pPolyline.FromPoint;
                IPoint    m_EndPoint   = pPolyline.ToPoint;
                object    size         = new object();

                pSurface.GetProfile(pPolyline, out pProfLine, ref size);

                IPolyline     pNewLine      = pProfLine as IPolyline;
                double        iii           = pPolyline.Length;
                List <double> ZValue        = new List <double>();
                List <double> DistanceValue = new List <double>();
                DistanceValue.Add(0);
                ZValue.Add(pNewLine.FromPoint.Z);

                for (int i = 1; i < (int)pNewLine.Length; i++)
                {
                    DistanceValue.Add(i);
                    ICurve pCurve;
                    pNewLine.GetSubcurve(0, DistanceValue[i], false, out pCurve);
                    ZValue.Add(pCurve.ToPoint.Z);
                }
                DistanceValue.Add(pNewLine.Length);
                ZValue.Add(pNewLine.ToPoint.Z);

                double    roffset = inoffset.Value / 2;  //右轮偏移
                double    loffset = -inoffset.Value / 2; //左轮偏移
                IPolyline pRLine  = ConstructOffset(pPolyline, roffset);
                IPolyline pLLine  = ConstructOffset(pPolyline, loffset);
                IGeometry pLProfLine;
                IGeometry pRProfLine;
                pSurface.GetProfile(pRLine, out pRProfLine, ref size);
                pSurface.GetProfile(pLLine, out pLProfLine, ref size);
                IPolyline     pRNewline      = pRProfLine as IPolyline;
                IPolyline     pLNewline      = pLProfLine as IPolyline;
                List <double> ZRValue        = new List <double>();
                List <double> ZLValue        = new List <double>();
                List <double> RDistanceValue = new List <double>();
                List <double> LDistanceValue = new List <double>();
                RDistanceValue.Add(0);
                LDistanceValue.Add(0);
                ZRValue.Add(pRNewline.FromPoint.Z);
                ZLValue.Add(pLNewline.FromPoint.Z);
                for (int j = 1; j < (int)pRNewline.Length; j++)
                {
                    RDistanceValue.Add(j);
                    ICurve pCurve;
                    pRNewline.GetSubcurve(0, RDistanceValue[j], false, out pCurve);
                    ZRValue.Add(pCurve.ToPoint.Z);
                }
                RDistanceValue.Add(pRNewline.Length);
                ZRValue.Add(pRNewline.ToPoint.Z);
                for (int k = 1; k < (int)pLNewline.Length; k++)
                {
                    LDistanceValue.Add(k);
                    ICurve pCurve;
                    pLNewline.GetSubcurve(0, LDistanceValue[k], false, out pCurve);
                    ZLValue.Add(pCurve.ToPoint.Z);
                }
                LDistanceValue.Add(pLNewline.Length);
                ZLValue.Add(pLNewline.ToPoint.Z);

                FrmprofileGraph frmgraph = new FrmprofileGraph(ZValue, DistanceValue, pNewLine, ZRValue, RDistanceValue, ZLValue, LDistanceValue);
                frmgraph.ShowDialog();
                frmgraph.ShowInTaskbar = false;
                frmgraph.StartPosition = FormStartPosition.CenterScreen;
                #region ///

                ////用ISurface的 InterpolateShape方法,得到这条直线做剖面后的Geometry,方法说明详见帮助

                //IGeometry OutShape;

                //object size = new object();
                //pSurface.InterpolateShape(pPolyline, out OutShape, ref size);

                ////将结果QI为 PointCollection,QI成功显示结果是直线上单一的几个离散点,InterpolateShape会自动将分析的结果直线上选取六个等分的离散点,以这六个点的值来作曲线图
                //IPointCollection pointCollection = OutShape as IPointCollection;
                //IMAware maware = pointCollection as IMAware;
                //maware.MAware = true;
                //IZAware zaware = pointCollection as IZAware;
                //zaware.ZAware = true;
                //IMSegmentation mseg = pointCollection as IMSegmentation;
                ////设置M的值为距离
                //mseg.SetMsAsDistance(false);

                //IPointCollection newPointColl = new PolylineClass();
                //int count = pointCollection.PointCount;
                //for (int i = 0; i < count; i++)
                //{
                //    IPoint point = pointCollection.get_Point(i);
                //    IPoint newPoint = new PointClass();
                //    newPoint.X = point.M;
                //    newPoint.Y = point.Z;
                //    object missing = Type.Missing;
                //    newPointColl.AddPoint(newPoint, ref missing, ref missing);
                //}

                //#region

                ////IWorkspaceFactory wsFactory = new ShapefileWorkspaceFactoryClass();

                ////IWorkspaceName workspaceName = wsFactory.Create("F:", "temp", null, 0);

                //IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
                //IWorkspaceName workspaceName = workspaceFactory.Create("", "MyWorkspace", null, 0);
                //IName name = workspaceName as IName;
                //IWorkspace workspace = name.Open() as IWorkspace;

                //IFields fields = new FieldsClass();
                //IFieldsEdit fieldsEdit = fields as IFieldsEdit;
                //IField field = new FieldClass();
                //IFieldEdit fieldEdit = field as IFieldEdit;
                //fieldEdit.Name_2 = "OID";
                //fieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
                //fieldsEdit.AddField(field);

                //IGeometryDef geometryDef = new GeometryDefClass();
                //IGeometryDefEdit geometryDefEdit = geometryDef as IGeometryDefEdit;
                //geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
                //ISpatialReference spatialRef = new UnknownCoordinateSystemClass();
                //geometryDefEdit.SpatialReference_2 = (pRlayer as IGeoDataset).SpatialReference;


                //field = new FieldClass();
                //fieldEdit = field as IFieldEdit;
                //fieldEdit.Name_2 = "Shape";
                //fieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                //fieldEdit.GeometryDef_2 = geometryDef;
                //fieldsEdit.AddField(field);

                //IFieldChecker fieldChecker = new FieldCheckerClass();
                //IEnumFieldError enumFieldError = null;
                //IFields validatedFields = null;
                //fieldChecker.ValidateWorkspace = workspace;
                //fieldChecker.Validate(fields, out enumFieldError, out validatedFields);


                //IFeatureClass featureClass = (workspace as IFeatureWorkspace).CreateFeatureClass("test",
                //    validatedFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");

                //IFeatureCursor featureCursor = featureClass.Insert(true);
                //IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
                //featureBuffer.Shape = pFeature as IGeometry;
                //featureCursor.InsertFeature(featureBuffer);
                //featureCursor.Flush();

                //#endregion

                //IFeatureLayer featureLayer = new FeatureLayerClass();
                //featureLayer.FeatureClass = featureClass;
                //featureLayer.Name = featureClass.AliasName;

                //pMapControl.AddLayer(featureLayer as ILayer);
                //pMapControl.Refresh();



                ////建立featureClass,为后面曲线图提供数据

                //IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
                //IWorkspaceName workspaceName = workspaceFactory.Create("", "MyWorkspace", null, 0);
                //IName name = (IName)workspaceName;
                //IWorkspace inmemWor = (IWorkspace)name.Open();

                //IFields fields = new FieldsClass();
                //IFieldsEdit fieldsEdit = fields as IFieldsEdit;
                //IField oidField = new FieldClass();
                //IFieldEdit oidFieldEdit = oidField as IFieldEdit;
                //oidFieldEdit.Name_2 = "OID";
                //oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
                //fieldsEdit.AddField(oidField);

                //IGeometryDef geometryDef = new GeometryDefClass();
                //IGeometryDefEdit geometryDefEdit = geometryDef as IGeometryDefEdit;
                //geometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint;
                //geometryDefEdit.HasM_2 = true;
                //geometryDefEdit.HasZ_2 = true;
                //ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
                //ISpatialReference spatialReference = pMapControl.SpatialReference;//spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
                //ISpatialReferenceResolution spatialReferenceResolution = (ISpatialReferenceResolution)spatialReference; spatialReferenceResolution.ConstructFromHorizon();
                //ISpatialReferenceTolerance spatialReferenceTolerance = (ISpatialReferenceTolerance)spatialReference; spatialReferenceTolerance.SetDefaultXYTolerance();
                //geometryDefEdit.SpatialReference_2 = spatialReference;

                //IField geometryField = new FieldClass();
                //IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField;
                //geometryFieldEdit.Name_2 = "Shape";
                //geometryFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                //geometryFieldEdit.GeometryDef_2 = geometryDef;
                //fieldsEdit.AddField(geometryField);

                //IField mField = new FieldClass();
                //IFieldEdit mFieldEdit = (IFieldEdit)mField;
                //mFieldEdit.Name_2 = "M";
                //mFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                //mFieldEdit.Length_2 = 8;
                //fieldsEdit.AddField(mField);

                //IField zField = new FieldClass();
                //IFieldEdit zFieldEdit = (IFieldEdit)zField;
                //zFieldEdit.Name_2 = "Z";
                //zFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                //zFieldEdit.Length_2 = 8;
                //fieldsEdit.AddField(zField);

                //IFieldChecker fieldChecker = new FieldCheckerClass();
                //IEnumFieldError enumFieldError = null;
                //IFields validatedFields = null;
                //fieldChecker.ValidateWorkspace = inmemWor;
                //fieldChecker.Validate(fields, out enumFieldError, out validatedFields);

                //IFeatureClass featureClass = (inmemWor as IFeatureWorkspace).CreateFeatureClass("test", validatedFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");

                //IFeatureCursor cursor = featureClass.Insert(true);
                //IFeatureBuffer buffer = featureClass.CreateFeatureBuffer();
                //int count = pointCollection.PointCount;
                //for (int i = 0; i < count; ++i)
                //{
                //    IPoint p = pointCollection.get_Point(i);
                //    buffer.Shape = p as IGeometry;
                //    buffer.set_Value(buffer.Fields.FindField("M"), p.M);
                //    buffer.set_Value(buffer.Fields.FindField("Z"), p.Z);
                //    cursor.InsertFeature(buffer);
                //}

                //cursor.Flush();

                ////开始做曲线图

                #endregion
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("该图像不能做剖面分析", "提示", MessageBoxButtons.OK);
            }
        }
Пример #18
0
 private I3DProperties get3DProps(ITinLayer tinLayer)
 {
     I3DProperties _3DProps = null;
     ILayerExtensions lyrExt = tinLayer as ILayerExtensions;
     for (int i = 0; i < lyrExt.ExtensionCount; i++)
     {
         if (lyrExt.get_Extension(i) is I3DProperties)
         {
             _3DProps = lyrExt.get_Extension(i) as I3DProperties;
         }
     }
     return _3DProps;
 }
Пример #19
0
 private void SetTinAsBase(ITinLayer tinLayer)
 {
     I3DProperties _3DProps = get3DProps(tinLayer);
     if (_3DProps != null)
     {
         _3DProps.BaseOption = esriBaseOption.esriBaseSurface;
         _3DProps.BaseSurface = tinLayer as IFunctionalSurface;
         _3DProps.Apply3DProperties(tinLayer);
     }
 }
Пример #20
0
        private void btnSure_Click(object sender, EventArgs e)
        {
            SysCommon.CProgress vProgress = new SysCommon.CProgress("进度条");
            try
            {
                if (comboBoxOpen.Text == "")
                {
                    MessageBox.Show("请选择数据!", "提示!");
                    return;
                }
                if (txtZFactor.Text == "")
                {
                    MessageBox.Show("请设置Z值参数!", "提示!");
                    return;
                }
                if (txtCellSize.Text == "")
                {
                    MessageBox.Show("请设置输出精度参数!", "提示!");
                    return;
                }
                if (txtSave.Text == "")
                {
                    MessageBox.Show("请输入保存文件名!", "提示!");
                    return;
                }
                string Unit;
                if (radioBtnDegree.Checked)
                {
                    Unit = "DEGREE";
                }
                else
                {
                    Unit = "PERCENT";
                }
                //this.Hide();
                //Progress.FormProgress
                vProgress.EnableCancel    = false;//设置进度条
                vProgress.ShowDescription = true;
                vProgress.FakeProgress    = true;
                vProgress.TopMost         = true;
                vProgress.ShowProgress();
                vProgress.SetProgress("正在进行坡度分析");
                ILayer      pLayer      = GetLayerByName(ref fileName);//根据图层名获取图层
                IGeoDataset pGeoDataset = pLayer  as IGeoDataset;
                ISurfaceOp  pSurfaceOp;
                IRasterAnalysisEnvironment pRasterAnalysisEnvironment = new RasterSurfaceOp();
                pSurfaceOp = pRasterAnalysisEnvironment as ISurfaceOp;
                object pObject  = Convert.ToDouble(txtCellSize.Text);
                object pZFactor = Convert.ToDouble(txtZFactor.Text);
                pRasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref pObject);                             //设置输出数据的像元值大小
                IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactoryClass();
                string            OutPath           = System.IO.Path.GetDirectoryName(txtSave.Text);                                          //输出文件存储的目录信息
                string            TempPath          = string.Concat(System.IO.Path.GetDirectoryName(Application.ExecutablePath), "\\Temp\\"); //临时文件存储位置
                if (!Directory.Exists(TempPath))
                {
                    Directory.CreateDirectory(TempPath);// 当路径不存在时创建临时文件存储路径
                }
                IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(TempPath, 0);
                pRasterAnalysisEnvironment.OutWorkspace = pWorkspace;
                IRasterBandCollection pRasterBandCollection;
                string Newfile = System.IO.Path.GetFileName(txtSave.Text);
                if (pGeoDataset is IRasterLayer)
                {
                    IRasterLayer pRasterLayer = pLayer as IRasterLayer;
                    pGeoDataset = (IGeoDataset)pRasterLayer.Raster;

                    if (Unit == "DEGREE")//选择不同单位进行坡度分析
                    {
                        pRasterBandCollection = pSurfaceOp.Slope(pGeoDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopeDegrees, ref pZFactor) as IRasterBandCollection;
                    }
                    else
                    {
                        pRasterBandCollection = pSurfaceOp.Slope(pGeoDataset, esriGeoAnalysisSlopeEnum.esriGeoAnalysisSlopePercentrise, ref pZFactor) as IRasterBandCollection;
                    }
                    pWorkspace = pWorkspaceFactory.OpenFromFile(OutPath, 0);

                    pRasterBandCollection.SaveAs(Newfile, pWorkspace, RasterType); //保存分析结果到固定路径下
                    vProgress.Close();
                    if (MessageBox.Show("坡度分析成功,是否加载分析结果", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        vProgress.ShowProgress();
                        vProgress.SetProgress("正在进行加载结果数据");
                        IRasterWorkspace pRasterWorkspace = pWorkspaceFactory.OpenFromFile(OutPath, 0) as IRasterWorkspace;               // 张琪  20110613
                        IRasterDataset   pRasterDataset   = pRasterWorkspace.OpenRasterDataset(System.IO.Path.GetFileName(txtSave.Text)); //包含扩展名的表面数据集
                        IRasterLayer     pOutRasterLayer  = new RasterLayerClass();
                        pOutRasterLayer.CreateFromDataset(pRasterDataset);
                        m_pCurrentSceneControl.Scene.AddLayer(pOutRasterLayer as ILayer, true);
                        vProgress.Close();
                    }
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(pRasterBandCollection);
                }
                else if (pGeoDataset is ITinLayer)
                {
                    ITinLayer             pTinLayer        = pGeoDataset as ITinLayer;
                    ITinAdvanced          pTinAdvanced     = pTinLayer.Dataset as ITinAdvanced;
                    Cls3DModulsefun       pCls3DModulsefun = new Cls3DModulsefun();
                    IRasterDataset        pRasterDataset;
                    esriRasterizationType pesriRasterizationType;

                    if (Unit == "DEGREE")
                    {
                        pesriRasterizationType = esriRasterizationType.esriDegreeSlopeAsRaster;
                    }
                    else
                    {
                        pesriRasterizationType = esriRasterizationType.esriPercentageSlopeAsRaster;
                    }
                    rstPixelType prstPixelType = rstPixelType.PT_LONG;
                    //TIN数据转换成Raster数据并进行坡度分析(暂时未成功)
                    vProgress.Close();
                    pRasterDataset = pCls3DModulsefun.TinToRaster2(pTinAdvanced, pesriRasterizationType, OutPath, Newfile, prstPixelType, Convert.ToDouble(txtCellSize.Text), pTinAdvanced.Extent, true, RasterType);
                    if (MessageBox.Show("坡度分析成功,是否加载分析结果", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        IRasterLayer pOutRasterLayer = new RasterLayerClass();
                        pOutRasterLayer.CreateFromDataset(pRasterDataset);
                        m_pCurrentSceneControl.Scene.AddLayer(pOutRasterLayer as ILayer, true);
                        if (this.WriteLog)
                        {
                            Plugin.LogTable.Writelog("坡度分析,表面集为:" + comboBoxOpen.Text);
                            Plugin.LogTable.Writelog("输出栅格路径为:" + txtSave.Text);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("目前不支持对当前选择图层的坡度分析功能", "提示!");
                }
                m_pCurrentSceneControl.SceneGraph.RefreshViewers();
                this.Close();
                DeleteFolder(TempPath);//清楚临时文件
            }
            catch
            {
                vProgress.Close();
                this.Close();
                MessageBox.Show("很抱歉,操作失败!", "提示!");
                return;
            }
        }
Пример #21
0
 public void SetTinLayerHeight(ITinLayer pTinLayer, double tinHeight)
 {
     I3DProperties p3DProps = get3DProps(pTinLayer);
     if (p3DProps != null)
     {
         p3DProps.BaseOption = esriBaseOption.esriBaseExpression;
         p3DProps.BaseExpressionString = tinHeight.ToString();
         p3DProps.Apply3DProperties(pTinLayer);
     }
 }
Пример #22
0
        /// <summary>
        /// 获取分析图层及Surfer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboBoxOpen_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (comboBoxOpen.Items.Count > 0)
                {
                    label.Text = "";
                    Cls3DMarkDraw.DeleteAllElementsWithName(m_pCurrentSceneControl.Scene, sRefPlaneName);
                    Cls3DMarkDraw.DeleteAllElementsWithName(m_pCurrentSceneControl.Scene, ContourName);
                    m_pCurrentSceneControl.SceneGraph.RefreshViewers();
                    m_ScenePoly         = null;
                    m_StaPolygon        = null;
                    m_SurFace           = null;
                    txtArea2DSel.Text   = "";
                    txtAreaAbove.Text   = "";
                    txtAreaBelow.Text   = "";
                    txtPara.Text        = "";
                    txtPlaneHeight.Text = "";
                    txtVolumeAbove.Text = "";
                    txtVolumeBelow.Text = "";

                    DrawGeo.Enabled        = false;
                    sldPlaneHeight.Enabled = false;
                    btncount.Enabled       = false;
                    string LayerName = comboBoxOpen.SelectedItem.ToString();
                    ILayer pLayer    = GetLayerByName(ref LayerName);

                    if (pLayer is IRasterLayer)//读取Raster数据的ISurface
                    {
                        IRasterLayer      pRasterLayer = pLayer as IRasterLayer;
                        IGeoDataset       pDataset     = pRasterLayer as IGeoDataset;
                        ISpatialReference psr          = pDataset.SpatialReference;

                        if (!(psr is IProjectedCoordinateSystem))
                        {
                            label.Text = "该数据为地理坐标,计算结果无效仅供参考!";
                        }

                        IRasterSurface pRasterSurface = new RasterSurfaceClass();
                        pRasterSurface.PutRaster(pRasterLayer.Raster, 0);
                        m_SurFace       = pRasterSurface as ISurface;
                        DrawGeo.Enabled = false;
                        m_IsTin         = false;
                    }
                    else if (pLayer is ITinLayer)//读取TIN数据的ISurface
                    {
                        ITinLayer         pTinLayer = pLayer as ITinLayer;
                        IGeoDataset       pDataset  = pTinLayer as IGeoDataset;
                        ISpatialReference psr       = pDataset.SpatialReference;

                        if (!(psr is IProjectedCoordinateSystem))
                        {
                            label.Text = "该数据为地理坐标,计算结果无效仅供参考!";
                        }

                        m_SurFace       = pTinLayer.Dataset as ISurface;
                        m_IsTin         = true;
                        DrawGeo.Enabled = true;
                    }
                    if (m_SurFace == null)
                    {
                        MessageBox.Show("请选择需要进行分析的DEM数据", "提示!");
                        return;
                    }
                    if (m_StaPolygon == null)
                    {
                        if (m_SurFace is ITin)
                        {
                            ITin pTin = m_SurFace as ITin;
                            sldPlaneHeight.Maximum = Convert.ToInt32(pTin.Extent.ZMax);
                            sldPlaneHeight.Minimum = Convert.ToInt32(pTin.Extent.ZMin);
                        }
                        else
                        {
                            IRasterSurface    pRasterSurface   = m_SurFace as IRasterSurface;
                            IRasterStatistics pRasterStatistic = pRasterSurface.RasterBand.Statistics;
                            sldPlaneHeight.Maximum = Convert.ToInt32(pRasterStatistic.Maximum);
                            sldPlaneHeight.Minimum = Convert.ToInt32(pRasterStatistic.Minimum);
                        }
                        double Vale = sldPlaneHeight.Maximum + sldPlaneHeight.Minimum;
                        Vale = Vale / 2;
                        txtPlaneHeight.Text = Vale.ToString();
                        Vale = Convert.ToDouble(txtPlaneHeight.Text);
                        sldPlaneHeight.Value = Convert.ToInt32(Vale);
                    }
                    else
                    {
                        double zrange;
                        zrange = m_StaPolygon.Envelope.ZMax - m_StaPolygon.Envelope.ZMin;
                        sldPlaneHeight.Maximum = Convert.ToInt32(m_StaPolygon.Envelope.ZMax + zrange);
                        sldPlaneHeight.Minimum = Convert.ToInt32(m_StaPolygon.Envelope.ZMin);
                        sldPlaneHeight.Value   = Convert.ToInt32(Math.Round(m_StaPolygon.Envelope.ZMin + (zrange * 0.5)));
                        txtPlaneHeight.Text    = sldPlaneHeight.Value.ToString();
                    }
                    sldPlaneHeight.Enabled = true;
                    btncount.Enabled       = true;
                }
            }
            catch
            {
                return;
            }
        }
Пример #23
0
        public static bool AddDataset(ref IBasicMap pBasicMap, IDatasetName pDatasetName, List <IDataset> m_DatasetCol, bool blnAddData)
        {
            bool functionReturnValue = false;

            functionReturnValue = false;
            ////如果是特征数据集,则添加里边的所有要素类
            IFeatureDataset pFeatDS      = default(IFeatureDataset);
            IEnumDataset    pEnumDataSet = default(IEnumDataset);
            IDataset        pDataset     = default(IDataset);
            IFeatureClass   pFeatCls     = default(IFeatureClass);
            IFeatureLayer   pFeatLayer   = default(IFeatureLayer);
            IName           pName        = default(IName);
            ILayer          pLayer       = default(ILayer);
            ITopologyLayer  pTopoLayer   = default(ITopologyLayer);
            //Dim pEnumLyr As IEnumLayer
            ITinWorkspace              pTinWS            = default(ITinWorkspace);
            IEnumFeatureClass          pEnumFeatCls      = null;
            IRasterCatalogDisplayProps pRasterCatalogPro = default(IRasterCatalogDisplayProps);

            //WHFErrorHandle.clsErrorHandle pfrmError = new WHFErrorHandle.clsErrorHandle();

            if (pDatasetName is IFeatureDatasetName)
            {
                pName   = (IName)pDatasetName;
                pFeatDS = (IFeatureDataset)pName.Open();

                pEnumDataSet = pFeatDS.Subsets;
                pDataset     = pEnumDataSet.Next();

                m_DatasetCol.Add(pDataset);
                if (pDataset == null)
                {
                    return(functionReturnValue);
                }
                ////根据数据集的类型,添加特征数据集中的所有要素类(拓扑,一般的,栅格目录,网络)
                while ((pDataset != null))
                {
                    if (pDataset.Type == esriDatasetType.esriDTFeatureClass)
                    {
                        pFeatLayer = null;
                        if (pFeatLayer == null)
                        {
                            pFeatLayer              = new FeatureLayer();
                            pFeatCls                = (IFeatureClass)pDataset;
                            pFeatLayer.Name         = pFeatCls.AliasName;
                            pFeatLayer.FeatureClass = pFeatCls;
                        }

                        if (pDataset.Type == esriDatasetType.esriDTRasterCatalog)
                        {
                            // Dim pRaster
                        }

                        // pSelectedCln.Add(pFeatLayer)
                    }
                    else if (pDataset.Type == esriDatasetType.esriDTTopology)
                    {
                        pTopoLayer          = new TopologyLayerClass();
                        pTopoLayer.Topology = (ITopology)pDataset;
                        pLayer      = (ILayer)pTopoLayer;
                        pLayer.Name = pDataset.Name;

                        //pSelectedCln.Add(pFeatLayer)
                    }

                    pDataset = pEnumDataSet.Next();
                }
                functionReturnValue = true;


                ////添加拓扑图层
            }
            else if (pDatasetName is ITopologyName)
            {
                ITopology pTopo = null;
                pName               = (IName)pDatasetName;
                pDataset            = (IDataset)pName.Open();
                pTopoLayer          = new TopologyLayerClass();
                pTopoLayer.Topology = (ITopology)pDataset;
                pLayer              = (ILayer)pTopoLayer;
                pLayer.Name         = pDataset.Name;
                m_DatasetCol.Add(pDataset);
                if (blnAddData == true)
                {
                    //pMap.AddLayer pLayer
                    AddLyrToBasicMap(ref pBasicMap, pLayer);
                    //SortLayer(pBasicMap, pLayer)
                }
                //pSelectedCln.Add(pLayer)

                //if (pfrmError.DisplayInformation("要把拓扑里边的所有要素类也添加到当前地图中吗?") == true)
                if (MessageBoxEx.Show("要把拓扑里边的所有要素类也添加到当前地图中吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK)
                {
                    IFeatureClassContainer pFeatClsContainer = default(IFeatureClassContainer);
                    pFeatClsContainer = (IFeatureClassContainer)pTopo;
                    pEnumFeatCls      = pFeatClsContainer.Classes;
                    pFeatCls          = pEnumFeatCls.Next();
                    pFeatLayer        = new FeatureLayer();

                    ////循环拓扑中的每个要素类,并添加到当前地图中
                    while ((pFeatCls != null))
                    {
                        pFeatLayer.FeatureClass = pFeatCls;
                        pFeatLayer.Name         = pFeatCls.AliasName;

                        if (blnAddData == true)
                        {
                            //pMap.AddLayer pFeatLayer
                            AddLyrToBasicMap(ref pBasicMap, pFeatLayer);
                            //SortLayer(pBasicMap, pFeatLayer)
                        }
                        //pSelectedCln.Add(pFeatLayer)

                        pFeatCls = pEnumFeatCls.Next();
                    }
                }
                functionReturnValue = true;
                ////添加网络数据
            }
            else if (pDatasetName is IGeometricNetworkName)
            {
                INetworkCollection pNetworkCollection = default(INetworkCollection);
                IGeometricNetwork  pGeometricNetwork  = default(IGeometricNetwork);
                int      i           = 0;
                int      j           = 0;
                IDataset pGeoDataset = default(IDataset);

                pName       = (IName)pDatasetName;
                pGeoDataset = (IDataset)pName.Open();
                m_DatasetCol.Add(pGeoDataset);
                if (pGeoDataset.Type == esriDatasetType.esriDTGeometricNetwork)
                {
                    ////这里对网络数据进行处理
                    IFeatureClassContainer pFeatureClassContainer = default(IFeatureClassContainer);
                    pGeometricNetwork      = (IGeometricNetwork)pGeoDataset;
                    pFeatureClassContainer = (IFeatureClassContainer)pGeometricNetwork;

                    for (i = 0; i <= pFeatureClassContainer.ClassCount - 1; i++)
                    {
                        pFeatCls                = pFeatureClassContainer.get_Class(i);
                        pFeatLayer              = new FeatureLayer();
                        pFeatLayer.Name         = pFeatCls.AliasName;
                        pFeatLayer.FeatureClass = pFeatCls;

                        if (blnAddData == true)
                        {
                            // pMap.AddLayer pFeatLayer
                            AddLyrToBasicMap(ref pBasicMap, pFeatLayer);
                            //SortLayer(pBasicMap, pFeatLayer)
                        }
                        //pSelectedCln.Add(pFeatLayer)
                    }
                }
                else
                {
                    pFeatDS            = (IFeatureDataset)pGeoDataset;
                    pNetworkCollection = (INetworkCollection)pFeatDS;
                    ////如果是用户选择一个网络技术打开的话,肯定只有一个网络在里边,其实
                    ////可以不需要循环,而用GeometricNetwork(0)代替循环
                    for (j = 0; j <= pNetworkCollection.GeometricNetworkCount - 1; j++)
                    {
                        pGeometricNetwork = pNetworkCollection.get_GeometricNetwork(j);
                        for (i = 0; i <= 3; i++)
                        {
                            switch (i)
                            {
                            case 0:
                                pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTSimpleJunction);
                                break;

                            case 1:
                                pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTSimpleEdge);
                                break;

                            case 2:
                                pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTComplexJunction);
                                break;

                            case 3:
                                pEnumFeatCls = pGeometricNetwork.get_ClassesByType(esriFeatureType.esriFTComplexEdge);
                                break;
                            }
                            pFeatCls = pEnumFeatCls.Next();
                            while ((pFeatCls != null))
                            {
                                pFeatLayer              = new FeatureLayer();
                                pFeatLayer.Name         = pFeatCls.AliasName;
                                pFeatLayer.FeatureClass = pFeatCls;
                                pFeatCls = pEnumFeatCls.Next();

                                if (blnAddData == true)
                                {
                                    //pMap.AddLayer pFeatLayer
                                    AddLyrToBasicMap(ref pBasicMap, pFeatLayer);
                                    //SortLayer(pBasicMap, pFeatLayer)
                                }
                                // pSelectedCln.Add(pFeatLayer)

                                functionReturnValue = true;
                            }
                        }
                    }
                }

                ////添加栅格目录,并设置为显示最新时相
            }
            else if (pDatasetName is IRasterCatalogName)
            {
                pName    = (IName)pDatasetName;
                pDataset = (IDataset)pName.Open();
                m_DatasetCol.Add(pDataset);
                pFeatLayer = new GdbRasterCatalogLayerClass();

                pFeatLayer.FeatureClass = (IFeatureClass)pDataset;
                pFeatLayer.Name         = pDataset.Name;

                //'//如果是SDE的栅格目录
                //If pFeatLayer.DataSourceType = "SDE Raster Catalog" Then

                //    Dim pFeatLayerDef As IFeatureLayerDefinition
                //    pFeatLayerDef = pFeatLayer

                //    '//设置最初显示地图范围内最近时相的数据
                //    pFeatLayerDef.DefinitionExpression = "objectid in (select objectid from" & vbNewLine & _
                //        "(select a.objectid, b.receive_date,rank()" & vbNewLine & _
                //        "over(partition by a.name,a.resolution order by b.receive_date desc) as cid" & vbNewLine & _
                //        "from " & pFeatLayer.Name & " a, sj_t_tense b" & vbNewLine & _
                //        "where a.tense = b.tense" & vbNewLine & "and b.online_state = 1) t2" & vbNewLine & _
                //        "where " & pFeatLayer.Name & ".objectid=t2.objectid and t2.cid = 1)"

                //End If
                ////设置当栅格目录中的图幅在地图上超过16个的时候,以格网来显示,而不显示栅格本身
                pRasterCatalogPro = (IRasterCatalogDisplayProps)pFeatLayer;
                ////不用数量来控制了,而以比例尺来控制
                pRasterCatalogPro.DisplayRasters = 16;
                pRasterCatalogPro.UseScale       = true;
                ////设置一个比例,在此临界栅格数据将会在框架显示与实际栅格显示之间转换
                pRasterCatalogPro.TransitionScale = 50000;

                if (blnAddData == true)
                {
                    //pMap.AddLayer pFeatLayer
                    AddLyrToBasicMap(ref pBasicMap, pFeatLayer);
                    //'SortLayer(pBasicMap, pFeatLayer)
                }
                //pSelectedCln.Add(pFeatLayer)
                functionReturnValue = true;
                // 陈昉  2009-3-22 添加单一的RasterDataset
            }
            else if (pDatasetName is IRasterDatasetName)
            {
                IRasterLayer pRasterLayer = default(IRasterLayer);
                pName    = (IName)pDatasetName;
                pDataset = (IDataset)pName.Open();
                m_DatasetCol.Add(pDataset);
                pRasterLayer = new RasterLayerClass();
                pRasterLayer.CreateFromDataset(pDataset as IRasterDataset);
                pRasterLayer.Name = pDataset.Name;
                AddLyrToBasicMap(ref pBasicMap, pRasterLayer);
                functionReturnValue = true;

                ////添加TIN图层
            }
            else if (pDatasetName is ITinWorkspace)
            {
                pTinWS = (ITinWorkspace)pDatasetName;
                ITinLayer pTinLyr = default(ITinLayer);
                pTinLyr         = new TinLayer();
                pTinLyr.Dataset = pTinWS.OpenTin(pDatasetName.Name);
                pTinLyr.Name    = pDatasetName.Name;

                if (blnAddData == true)
                {
                    //pMap.AddLayer pTinLyr
                    AddLyrToBasicMap(ref pBasicMap, pTinLyr);
                    //SortLayer(pBasicMap, pTinLyr)
                }
                //pSelectedCln.Add(pTinLyr)
                functionReturnValue = true;

                ////添加一般的要素类,未写完。。。。。。
            }
            else
            {
                pName    = (IName)pDatasetName;
                pDataset = (IDataset)pName.Open();
                pFeatCls = (IFeatureClass)pDataset;
                m_DatasetCol.Add(pDataset);
                if (pFeatCls.FeatureType == esriFeatureType.esriFTAnnotation)
                {
                    pFeatLayer = new FDOGraphicsLayerClass();
                }
                else if (pFeatCls.FeatureType == esriFeatureType.esriFTDimension)
                {
                    pFeatLayer = new DimensionLayerClass();
                }
                else
                {
                    pFeatLayer = new FeatureLayer();
                }
                //印骅 20081205 添加"Not"
                if ((pFeatLayer != null))
                {
                    //pFeatLayer.Name = pDataset.Name
                    pFeatLayer.Name         = pFeatCls.AliasName;
                    pFeatLayer.FeatureClass = (IFeatureClass)pDataset;
                }
                if (blnAddData == true)
                {
                    //pMap.AddLayer pFeatLayer

                    AddLyrToBasicMap(ref pBasicMap, pFeatLayer);
                    //SortLayer(pBasicMap, pFeatLayer)
                }
                //pSelectedCln.Add(pFeatLayer)

                functionReturnValue = true;
            }
            return(functionReturnValue);

            //'//添加Coverage图层
            //ElseIf vItem.SmallIcon = "Coverage" Then
            //AddSelectedLayer = ADDCoverageLayer(pMap, pCurrentFilePath.Path, _
            //vItem.Text, pSelectedCln, blnAddData)
        }
Пример #24
0
        private void MapUserIdentify(double mapX, double mapY)
        {
            try
            {
                //axMapControl1.Map.ClearSelection();
                ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = (IMapControl3)axMapControl1.Object;
                IMap        pMap        = axMapControl1.Map;
                IGroupLayer pGroupLayer = new GroupLayer();

                if (pMap.LayerCount == 0)
                {
                    return;
                }
                IEnumLayer pEnumLayer;
                ILayer     pLayer;
                pEnumLayer = pMap.get_Layers(null, true);
                if (pEnumLayer == null)
                {
                    return;
                }
                pEnumLayer.Reset();
                double dCurrScale = m_mapControl.MapScale;
                for (pLayer = pEnumLayer.Next(); pLayer != null; pLayer = pEnumLayer.Next())
                {
                    if (pLayer.Visible)
                    {
                        if (pLayer is IGroupLayer)
                        {
                            continue;
                        }
                        if (pLayer.MinimumScale != 0 && dCurrScale > pLayer.MinimumScale)
                        {
                            continue;
                        }
                        if (pLayer.MaximumScale != 0 && dCurrScale < pLayer.MaximumScale)
                        {
                            continue;
                        }
                        pGroupLayer.Add(pLayer);
                    }
                }

                IPoint pPoint = new ESRI.ArcGIS.Geometry.Point();
                pPoint.X = mapX; pPoint.Y = mapY;
                IIdentifyObj        pIdObj;
                IIdentify           pIdentify = pGroupLayer as IIdentify;
                IArray              pIDArray;
                IFeatureIdentifyObj pFeatIdObj;

                IEnvelope pEnv             = pPoint.Envelope;
                IDisplayTransformation pDT = m_mapControl.ActiveView.ScreenDisplay.DisplayTransformation;
                pEnv.Expand(pDT.VisibleBounds.Width / 200, pDT.VisibleBounds.Height / 200, false);

                pIDArray = pIdentify.Identify(pEnv);

                if (pIDArray == null || pIDArray.Count == 0)
                {
                    return;
                }

                pFeatIdObj = pIDArray.get_Element(0) as IFeatureIdentifyObj;
                pIdObj     = pFeatIdObj as IIdentifyObj;

                IRowIdentifyObject pRowIdentifyObj = pFeatIdObj as IRowIdentifyObject;
                IFeature           pFeature        = pRowIdentifyObj.Row as IFeature;
                if (pFeature != null && pFeature.Shape != null && !pFeature.Shape.IsEmpty)
                {
                    //axMapControl1.FlashShape(pFeature.Shape);
                    axMapControl1.Map.SelectFeature(pIdObj.Layer, pFeature);
                    FlashFeature(axMapControl1, pFeature.Shape);
                }

                //  pIdObj.Flash(m_mapControl.ActiveView.ScreenDisplay);//The Flash method is not supported with ArcGIS Engine, use the IHookActions.DoActions() method with the esriHookActionsFlash for this functionality.
                ILayer pIdentiyLayer = pIdObj.Layer;

                DataTable  pTable      = new DataTable();
                DataColumn pDataColumn = pTable.Columns.Add();
                pDataColumn.ColumnName = "列名";
                pDataColumn            = pTable.Columns.Add();
                pDataColumn.ColumnName = "值";

                DataRow pFirestDataRow = pTable.Rows.Add();
                pFirestDataRow[0] = "所在层";
                pFirestDataRow[1] = pIdentiyLayer.Name;

                if (pIdentiyLayer is IFeatureLayer)
                {
                    IRowIdentifyObject pRowObj = pIdObj as IRowIdentifyObject;
                    //   IRow pRow = pRowObj.Row;

                    IFeature pRow    = pRowObj.Row as IFeature;
                    IFields  pFields = pRow.Fields;

                    for (int i = 0; i < pFields.FieldCount; i++)
                    {
                        IField  pField   = pFields.get_Field(i);
                        DataRow pDataRow = null;

                        /*
                         * switch (pField.Type)
                         * {
                         *  case esriFieldType.esriFieldTypeOID:
                         *      pDataRow = pTable.Rows.Add();
                         *      pDataRow[0] = pField.Name;
                         *      pDataRow[1] = pRow.OID.ToString();
                         *      break;
                         *  case esriFieldType.esriFieldTypeGeometry:
                         *      //pDataRow[0] = "Geometry";
                         *      //pDataRow[1] = QueryShapeType(pField.GeometryDef.GeometryType);;
                         *      break;
                         *  default:
                         *      pDataRow = pTable.Rows.Add();
                         *      pDataRow[0] = pField.Name;
                         *      pDataRow[1] = pRow.get_Value(i).ToString();
                         *      break;
                         * }
                         * * */

                        //////////////////////////////////////////////////
                        string sValue   = pRow.get_Value(i).ToString();
                        string strFName = pField.AliasName.ToUpper();
                        string strUName = strFName.ToUpper();
                        if (strUName == "SHAPE" || strUName == "LENGTH" || strUName == "OBJECTID" || strUName == "ID" || strUName == "FNODE_" || strUName == "TNODE_" || strUName == "LPOLY_" || strUName == "RPOLY_" || strUName == "SDXL_" || strUName == "SDXL_ID" || strUName == "OBJECTID_1" || strUName == "FID")
                        {
                            continue;
                        }
                        else if (strUName == "SHAPE.LEN" || strUName == "SHAPE_LENG")
                        {
                            strFName = "几何长度";
                        }
                        else if (strUName == "SHAPE_AREA" || strUName == "SHAPE.AREA")
                        {
                            strFName = "多边形面积";
                        }
                        else if (strUName == "HEIGHT")
                        {
                            strFName = "高程";
                        }
                        else if (strUName == "NAME")
                        {
                            strFName = "名称";
                        }
                        else if (strUName == "TYPE")
                        {
                            strFName = "类型";
                        }
                        else if (strUName == "SUBTYPE")
                        {
                            strFName = "子类型";
                        }

                        if (strUName == "LENGTH" || strUName == "SHAPE.LEN")
                        {
                            IUnitConverter myUnit = new UnitConverterClass();
                            sValue = Math.Round(myUnit.ConvertUnits((double)pRow.get_Value(i), esriUnits.esriMeters, esriUnits.esriKilometers), 2).ToString();
                            sValue = sValue.ToString() + "千米";
                        }
                        if (strUName == "SHAPE_AREA" || strUName == "SHAPE.AREA")
                        {
                            IGeometry pGeo = pRow.ShapeCopy;
                            pGeo.Project(axMapControl1.Map.SpatialReference);
                            IPolygon pPolygon = (IPolygon)pGeo;
                            IArea    pArea    = (IArea)pPolygon;
                            double   strValue = pArea.Area * 0.000001;
                            //// double strValue = Math.Abs((double)pFeature.get_Value(j)) * 10585;
                            strValue = Math.Round(strValue, 2);
                            sValue   = strValue.ToString() + "平方千米";
                        }
                        esriFieldType tFieldTypy = pField.Type;
                        if (tFieldTypy == esriFieldType.esriFieldTypeGeometry)
                        {
                            sValue = pField.GeometryDef.GeometryType.ToString();
                            sValue = sValue.Substring(12, sValue.Length - 12);
                        }

                        pDataRow    = pTable.Rows.Add();
                        pDataRow[0] = strFName;
                        pDataRow[1] = sValue;

                        //////////////////////////////////////////////////
                    }
                }
                else if (pIdentiyLayer is ITinLayer)
                {
                    ITinLayer   pTinLayer   = (ITinLayer)pIdentiyLayer;
                    ITinSurface pTinSurface = (ITinSurface)pTinLayer.Dataset;
                    if (pTinSurface == null)
                    {
                        return;
                    }
                    ITinSurfaceElement pTinSurfaceElement = pTinSurface.GetSurfaceElement(pPoint);

                    if (pTinSurfaceElement == null)
                    {
                        return;
                    }
                    IFields pFields  = pTinLayer.Dataset.Fields;
                    DataRow pDataRow = null;

                    pDataRow    = pTable.Rows.Add();
                    pDataRow[0] = "高度";
                    pDataRow[1] = pTinSurfaceElement.Elevation.ToString();

                    pDataRow    = pTable.Rows.Add();
                    pDataRow[0] = "坡度";
                    pDataRow[1] = pTinSurfaceElement.SlopeDegrees.ToString();

                    pDataRow    = pTable.Rows.Add();
                    pDataRow[0] = "方向";
                    pDataRow[1] = pTinSurfaceElement.AspectDegrees.ToString();
                }

                if (pIdentiyLayer is IRasterLayer)
                {
                    MessageBox.Show("aa");
                }
                //ShowIndetify(pTable);
                //m_pMainform.ShowIndetify(pTable);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return;
            }
        }