예제 #1
0
        /// <summary>
        /// 从文件夹获取Tin图层
        /// </summary>
        /// <param name="strPath"></param>
        /// <returns></returns>
        public static ILayer GetTinLayer(string strPath)
        {
            if (string.IsNullOrEmpty(strPath) || !Directory.Exists(strPath))
                return null;

            //DirectoryInfo dirInfo = new DirectoryInfo(strPath);
            //string strParent=dirInfo.Parent.FullName;
            //string strName=dirInfo.Name;
            string strParent = Path.GetDirectoryName(strPath);
            string strName = Path.GetFileName(strPath);
            IWorkspaceFactory wsfTin = new TinWorkspaceFactoryClass();
            if (!wsfTin.IsWorkspace(strParent))
                return null;

            try
            {
                IWorkspace wsTin = wsfTin.OpenFromFile(strParent, 0);
                ITin tinTarget = (wsTin as ITinWorkspace).OpenTin(strName);
                ITinLayer lyrTin = new TinLayerClass();
                lyrTin.Dataset = tinTarget;

                return lyrTin;
            }
            catch
            {
                return null;
            }
        }
예제 #2
0
        /// <summary>
        /// Occurs when this command is clicked
        /// </summary>
        public override void OnClick()
        {
            // TODO: Add CmdAddTinLayer.OnClick implementation
            FolderBrowserDialog fdlg = new FolderBrowserDialog();

            //fdlg.SelectedPath = @"C:\Users\Administrator\Desktop\sampleAnalysis\TIN\";
            try
            {
                if (fdlg.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                //FrmFolderDialog dlg = new FrmFolderDialog();
                //dlg.DisplayDialog();
                if (fdlg.SelectedPath != "")
                {
                    // DirectoryInfo dir = Directory.CreateDirectory(dlg.Path);
                    DirectoryInfo     dir     = Directory.CreateDirectory(fdlg.SelectedPath);
                    IWorkspaceFactory pWSFact = new TinWorkspaceFactoryClass();
                    IWorkspace        pWS     = pWSFact.OpenFromFile(dir.Parent.FullName + @"\", 0);
                    ITinWorkspace     pTinWS  = pWS as ITinWorkspace;
                    ITin pTin = pTinWS.OpenTin(dir.Name);
                    //½«TIN±äΪTINͼ²ã
                    ITinLayer pTinLayer = new TinLayerClass();
                    pTinLayer.Dataset = pTin;
                    pTinLayer.Name    = dir.Name;
                    IMapControl2 pMapCtr = (((IToolbarControl)m_hookHelper.Hook).Buddy) as IMapControl2;
                    pMapCtr.Map.AddLayer((ILayer)pTinLayer);
                }
            }
            catch (SystemException ee)
            {
                MessageBox.Show(ee.Message);
            }
        }
예제 #3
0
파일: LayerHelper.cs 프로젝트: zj8487/HyDM
        /// <summary>
        /// 从文件夹获取Tin图层
        /// </summary>
        /// <param name="strPath"></param>
        /// <returns></returns>
        public static ILayer GetTinLayer(string strPath)
        {
            if (string.IsNullOrEmpty(strPath) || !Directory.Exists(strPath))
            {
                return(null);
            }

            //DirectoryInfo dirInfo = new DirectoryInfo(strPath);
            //string strParent=dirInfo.Parent.FullName;
            //string strName=dirInfo.Name;
            string            strParent = Path.GetDirectoryName(strPath);
            string            strName   = Path.GetFileName(strPath);
            IWorkspaceFactory wsfTin    = new TinWorkspaceFactoryClass();

            if (!wsfTin.IsWorkspace(strParent))
            {
                return(null);
            }

            try
            {
                IWorkspace wsTin     = wsfTin.OpenFromFile(strParent, 0);
                ITin       tinTarget = (wsTin as ITinWorkspace).OpenTin(strName);
                ITinLayer  lyrTin    = new TinLayerClass();
                lyrTin.Dataset = tinTarget;

                return(lyrTin);
            }
            catch
            {
                return(null);
            }
        }
예제 #4
0
        private void 建立TINToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ILayer        player    = axMapControl1.get_Layer(0);
            IFeatureLayer pFlayer   = player as IFeatureLayer;
            IFeatureClass pFClass   = pFlayer.FeatureClass;
            IField        pField    = pFClass.Fields.get_Field(pFClass.FindField("Z"));
            ITin          shp2TIN   = Create_TIN(pFClass, pField);
            ITinLayer     pTinLayer = new TinLayerClass();

            pTinLayer.Name    = player.Name;
            pTinLayer.Dataset = shp2TIN;
            axSceneControl1.Scene.AddLayer(pTinLayer as ILayer, true);
            axSceneControl1.Refresh();
        }
예제 #5
0
        /// <summary>
        /// 加载栅格图层
        /// </summary>
        private void AddTinFile()
        {
            this.Cursor = Cursors.WaitCursor;
            IWorkspaceFactory pWorkspaceFactory = new TinWorkspaceFactoryClass();

            IWorkspace    pWorkspace    = pWorkspaceFactory.OpenFromFile(m_Path, 0);
            ITinWorkspace pTinWorkspace = pWorkspace as ITinWorkspace;
            //声明一个pTin变量, 存储所打开的"tin"
            ITin pTin = pTinWorkspace.OpenTin("tin");
            //将TIN变为TIN图层
            ITinLayer pTinLayer = new TinLayerClass();

            pTinLayer.Dataset = pTin;
            pTinLayer.Name    = "TIN";
            //也可以用三维空间AxSceneControl加载
            axSceneControl1.Scene.AddLayer(pTinLayer, true);
            //this.axMapControl1.AddLayer(pTinLayer);
            this.Cursor = Cursors.Default;
        }
예제 #6
0
        public void LoadData(IList ilist_0)
        {
            IEnumDataset      subsets;
            IDataset          j;
            string            str;
            IFeatureClass     dataset;
            IFeatureLayer     cadFeatureLayerClass;
            ITopologyLayer    topologyLayerClass;
            IEnumFeatureClass classes;
            IFeatureClass     m;
            IFeatureClass     n;
            IFeatureLayer     featureLayerClass;
            List <object>     objs = new List <object>();

            foreach (object ilist0 in ilist_0)
            {
                if (ilist0 is IGxDataset)
                {
                    if ((ilist0 as IGxDataset).Type != esriDatasetType.esriDTFeatureDataset)
                    {
                        objs.Add(ilist0);
                    }
                    else
                    {
                        IEnumGxObject children = (ilist0 as IGxObjectContainer).Children;
                        children.Reset();
                        for (IGxObject i = children.Next(); i != null; i = children.Next())
                        {
                            objs.Add(i);
                        }
                    }
                }
                else if (!(ilist0 is IDataset))
                {
                    objs.Add(ilist0);
                }
                else
                {
                    if ((ilist0 as IDataset).Type != esriDatasetType.esriDTFeatureDataset)
                    {
                        continue;
                    }
                    subsets = (ilist0 as IDataset).Subsets;
                    subsets.Reset();
                    for (j = subsets.Next(); j != null; j = subsets.Next())
                    {
                        objs.Add(j);
                    }
                }
            }
            ProcessAssist processAssist = new ProcessAssist();

            processAssist.InitProgress();
            processAssist.SetMaxValue(objs.Count);
            processAssist.SetMessage("正在加载数据,请稍候...");
            processAssist.Start();
            try
            {
                ILayer layer = null;
                IMap   map   = this.GetMap();
                this.list_0 = new List <ILayer>();
                List <string> strs      = new List <string>();
                IEnvelope     envelope  = null;
                IDataset      item      = null;
                IGxDataset    gxDataset = null;
                for (int k = 0; k < objs.Count; k++)
                {
                    string name = "";
                    if (objs[k] is IGxObject)
                    {
                        name = (objs[k] as IGxObject).Name;
                    }
                    else if (objs[k] is IDataset)
                    {
                        name = (objs[k] as IDataset).Name;
                    }
                    bool flag = true;
                    str = string.Format("加载图层[{0}],第{1}/{2}个", name, k + 1, objs.Count);
                    processAssist.Increment(1);
                    processAssist.SetMessage(str);
                    if (objs[k] is IGxLayer)
                    {
                        layer = (objs[k] as IGxLayer).Layer;
                        if (layer is IGeoDataset && !SpatialReferenctOperator.ValideFeatureClass(layer as IGeoDataset))
                        {
                            strs.Add(layer.Name);
                            flag = false;
                        }
                        this.AddLayer(map, layer, ref envelope, flag);
                    }
                    else if (!(objs[k] is IGxAGSObject))
                    {
                        if (objs[k] is IGxDataset)
                        {
                            gxDataset = objs[k] as IGxDataset;
                            item      = gxDataset.Dataset;
                        }
                        else if (ilist_0[k] is IDataset)
                        {
                            item = objs[k] as IDataset;
                        }
                        if (item != null)
                        {
                            if (item is IGeoDataset)
                            {
                                flag = SpatialReferenctOperator.ValideFeatureClass(item as IGeoDataset);
                            }
                            if (item.Type == esriDatasetType.esriDTFeatureClass)
                            {
                                dataset = (IFeatureClass)item;
                                if ((gxDataset as IGxObject).Category.IndexOf("CAD") != -1)
                                {
                                    if (dataset.FeatureType != esriFeatureType.esriFTCoverageAnnotation)
                                    {
                                        cadFeatureLayerClass = new CadFeatureLayerClass();
                                    }
                                    else
                                    {
                                        cadFeatureLayerClass = new CadAnnotationLayerClass();
                                    }
                                    cadFeatureLayerClass.FeatureClass = dataset;
                                    cadFeatureLayerClass.Name         = dataset.AliasName;
                                }
                                else if (dataset.FeatureType == esriFeatureType.esriFTAnnotation)
                                {
                                    cadFeatureLayerClass = new FDOGraphicsLayerClass()
                                    {
                                        FeatureClass = dataset,
                                        Name         = dataset.AliasName
                                    };
                                }
                                else if (dataset.FeatureType != esriFeatureType.esriFTDimension)
                                {
                                    cadFeatureLayerClass = new FeatureLayerClass()
                                    {
                                        FeatureClass = dataset,
                                        Name         = dataset.AliasName
                                    };
                                }
                                else
                                {
                                    cadFeatureLayerClass = new DimensionLayerClass()
                                    {
                                        FeatureClass = dataset,
                                        Name         = dataset.AliasName
                                    };
                                }
                                if (!flag)
                                {
                                    strs.Add(cadFeatureLayerClass.Name);
                                }
                                this.AddLayer(map, cadFeatureLayerClass, ref envelope, flag);
                            }
                            else if (item.Type == esriDatasetType.esriDTCadDrawing)
                            {
                                if ((gxDataset as IGxObject).Category != "CAD绘图")
                                {
                                    IEnumGxObject enumGxObject = (gxDataset as IGxObjectContainer).Children;
                                    enumGxObject.Reset();
                                    for (IGxDataset l = enumGxObject.Next() as IGxDataset; l != null; l = enumGxObject.Next() as IGxDataset)
                                    {
                                        dataset = l.Dataset as IFeatureClass;
                                        if (dataset != null)
                                        {
                                            if (dataset.FeatureType != esriFeatureType.esriFTAnnotation)
                                            {
                                                cadFeatureLayerClass = new CadFeatureLayerClass()
                                                {
                                                    FeatureClass = dataset,
                                                    Name         = dataset.AliasName
                                                };
                                            }
                                            else
                                            {
                                                cadFeatureLayerClass = new FDOGraphicsLayerClass()
                                                {
                                                    FeatureClass = dataset,
                                                    Name         = dataset.AliasName
                                                };
                                            }
                                            flag = true;
                                            if (cadFeatureLayerClass is IGeoDataset)
                                            {
                                                bool flag1 = SpatialReferenctOperator.ValideFeatureClass(cadFeatureLayerClass as IGeoDataset);
                                                flag = flag1;
                                                if (!flag1)
                                                {
                                                    strs.Add(cadFeatureLayerClass.Name);
                                                }
                                            }
                                            this.AddLayer(map, cadFeatureLayerClass, ref envelope, flag);
                                        }
                                    }
                                }
                                else
                                {
                                    ICadLayer cadLayerClass = new CadLayerClass()
                                    {
                                        CadDrawingDataset = gxDataset.Dataset as ICadDrawingDataset,
                                        Name = gxDataset.Dataset.Name
                                    };
                                    if (!flag)
                                    {
                                        strs.Add(cadLayerClass.Name);
                                    }
                                    this.AddLayer(map, cadLayerClass, ref envelope, flag);
                                }
                            }
                            else if (item.Type == esriDatasetType.esriDTFeatureDataset)
                            {
                                subsets = item.Subsets;
                                subsets.Reset();
                                for (j = subsets.Next(); j != null; j = subsets.Next())
                                {
                                    if (j.Type == esriDatasetType.esriDTFeatureClass)
                                    {
                                        dataset = j as IFeatureClass;
                                        if (dataset.FeatureType != esriFeatureType.esriFTAnnotation)
                                        {
                                            cadFeatureLayerClass = new FeatureLayerClass()
                                            {
                                                FeatureClass = dataset,
                                                Name         = dataset.AliasName
                                            };
                                            flag = true;
                                            if (cadFeatureLayerClass is IGeoDataset)
                                            {
                                                bool flag2 = SpatialReferenctOperator.ValideFeatureClass(cadFeatureLayerClass as IGeoDataset);
                                                flag = flag2;
                                                if (!flag2)
                                                {
                                                    strs.Add(cadFeatureLayerClass.Name);
                                                }
                                            }
                                            this.AddLayer(map, cadFeatureLayerClass, ref envelope, flag);
                                        }
                                        else
                                        {
                                            cadFeatureLayerClass = new FDOGraphicsLayerClass()
                                            {
                                                FeatureClass = dataset,
                                                Name         = dataset.AliasName
                                            };
                                            flag = true;
                                            if (cadFeatureLayerClass is IGeoDataset)
                                            {
                                                bool flag3 = SpatialReferenctOperator.ValideFeatureClass(cadFeatureLayerClass as IGeoDataset);
                                                flag = flag3;
                                                if (!flag3)
                                                {
                                                    strs.Add(cadFeatureLayerClass.Name);
                                                }
                                            }
                                            this.AddLayer(map, cadFeatureLayerClass, ref envelope, flag);
                                        }
                                    }
                                    else if (j.Type == esriDatasetType.esriDTTopology)
                                    {
                                        topologyLayerClass = new TopologyLayerClass()
                                        {
                                            Topology = j as ITopology
                                        };
                                        (topologyLayerClass as ILayer).Name = j.Name;
                                        this.AddLayer(map, topologyLayerClass as ILayer, ref envelope, true);
                                    }
                                }
                            }
                            else if (item.Type == esriDatasetType.esriDTTopology)
                            {
                                if (MessageBox.Show(string.Concat("是否将参加拓扑-", item.Name, "-的所有要素添加到地图中"), "添加拓扑层", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)
                                {
                                    classes = (item as IFeatureClassContainer).Classes;
                                    classes.Reset();
                                    for (m = classes.Next(); m != null; m = classes.Next())
                                    {
                                        cadFeatureLayerClass = new FeatureLayerClass()
                                        {
                                            FeatureClass = m,
                                            Name         = m.AliasName
                                        };
                                        flag = true;
                                        if (cadFeatureLayerClass is IGeoDataset)
                                        {
                                            bool flag4 = SpatialReferenctOperator.ValideFeatureClass(cadFeatureLayerClass as IGeoDataset);
                                            flag = flag4;
                                            if (!flag4)
                                            {
                                                strs.Add(cadFeatureLayerClass.Name);
                                            }
                                        }
                                        this.AddLayer(map, cadFeatureLayerClass, ref envelope, flag);
                                    }
                                }
                                topologyLayerClass = new TopologyLayerClass()
                                {
                                    Topology = item as ITopology
                                };
                                (topologyLayerClass as ILayer).Name = item.Name;
                                this.AddLayer(map, topologyLayerClass as ILayer, ref envelope, true);
                            }
                            else if (item.Type == esriDatasetType.esriDTTin)
                            {
                                ITinLayer tinLayerClass = new TinLayerClass()
                                {
                                    Dataset = (ITin)item,
                                    Name    = item.Name
                                };
                                flag = true;
                                if (tinLayerClass is IGeoDataset)
                                {
                                    bool flag5 = SpatialReferenctOperator.ValideFeatureClass(tinLayerClass as IGeoDataset);
                                    flag = flag5;
                                    if (!flag5)
                                    {
                                        strs.Add(tinLayerClass.Name);
                                    }
                                }
                                this.AddLayer(map, tinLayerClass, ref envelope, flag);
                            }
                            else if (item.Type == esriDatasetType.esriDTRasterCatalog)
                            {
                                IGdbRasterCatalogLayer gdbRasterCatalogLayerClass = null;
                                gdbRasterCatalogLayerClass = new GdbRasterCatalogLayerClass();
                                if (gdbRasterCatalogLayerClass.Setup((ITable)(item as IRasterCatalog)))
                                {
                                    bool flag6 = SpatialReferenctOperator.ValideFeatureClass(gdbRasterCatalogLayerClass as IGeoDataset);
                                    flag = flag6;
                                    if (!flag6)
                                    {
                                        strs.Add((gdbRasterCatalogLayerClass as ILayer).Name);
                                    }
                                    this.AddLayer(map, gdbRasterCatalogLayerClass as ILayer, ref envelope, flag);
                                }
                            }
                            else if (!(item.Type == esriDatasetType.esriDTRasterDataset ? false : item.Type != esriDatasetType.esriDTRasterBand))
                            {
                                bool flag7 = true;
                                if (!((IRasterPyramid)item).Present)
                                {
                                    if (this.m_pApp.PyramidPromptType == PyramidPromptType.AlwaysBuildNoPrompt)
                                    {
                                        ((IRasterPyramid)item).Create();
                                    }
                                    else if (this.m_pApp.PyramidPromptType == PyramidPromptType.AlwaysPrompt)
                                    {
                                        DialogResult dialogResult = BuildPyramidSet.Show();
                                        if (dialogResult == DialogResult.Yes)
                                        {
                                            ((IRasterPyramid)item).Create();
                                        }
                                        else if (dialogResult == DialogResult.Cancel)
                                        {
                                            flag7 = false;
                                        }
                                    }
                                }
                                if (flag7)
                                {
                                    IRasterLayer rasterLayerClass = new RasterLayerClass()
                                    {
                                        Cached = true
                                    };
                                    rasterLayerClass.CreateFromDataset((IRasterDataset)item);
                                    rasterLayerClass.Name = item.Name;
                                    bool flag8 = SpatialReferenctOperator.ValideFeatureClass(rasterLayerClass as IGeoDataset);
                                    flag = flag8;
                                    if (!flag8)
                                    {
                                        strs.Add(rasterLayerClass.Name);
                                    }
                                    this.AddLayer(map, rasterLayerClass, ref envelope, flag);
                                }
                            }
                            else if (item.Type == esriDatasetType.esriDTTable)
                            {
                                try
                                {
                                    IStandaloneTableCollection standaloneTableCollection = this.GetMap() as IStandaloneTableCollection;
                                    IPropertySet connectionProperties = item.Workspace.ConnectionProperties;
                                    bool         flag9 = false;
                                    int          num   = 0;
                                    while (true)
                                    {
                                        if (num < standaloneTableCollection.StandaloneTableCount)
                                        {
                                            ITable table = standaloneTableCollection.StandaloneTable[num].Table;
                                            if (!connectionProperties.IsEqual((table as IDataset).Workspace.ConnectionProperties) || !((table as IDataset).Name == item.Name))
                                            {
                                                num++;
                                            }
                                            else
                                            {
                                                flag9 = true;
                                                break;
                                            }
                                        }
                                        else
                                        {
                                            break;
                                        }
                                    }
                                    if (!flag9)
                                    {
                                        standaloneTableCollection.AddStandaloneTable(new StandaloneTableClass()
                                        {
                                            Table = item as ITable
                                        });
                                    }
                                }
                                catch (Exception exception)
                                {
                                    CErrorLog.writeErrorLog(this, exception, "");
                                }
                            }
                            else if (item.Type == esriDatasetType.esriDTGeometricNetwork)
                            {
                                IGeometricNetwork geometricNetwork = item as IGeometricNetwork;
                                if (geometricNetwork != null)
                                {
                                    IEnumFeatureClass classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTSimpleJunction];
                                    classesByType.Reset();
                                    for (n = classesByType.Next(); n != null; n = classesByType.Next())
                                    {
                                        featureLayerClass = new FeatureLayerClass()
                                        {
                                            FeatureClass = n,
                                            Name         = (n as IDataset).Name
                                        };
                                        this.AddLayer(map, featureLayerClass, ref envelope, true);
                                    }
                                    classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTComplexJunction];
                                    classesByType.Reset();
                                    for (n = classesByType.Next(); n != null; n = classesByType.Next())
                                    {
                                        featureLayerClass = new FeatureLayerClass()
                                        {
                                            FeatureClass = n,
                                            Name         = (n as IDataset).Name
                                        };
                                        this.AddLayer(map, featureLayerClass, ref envelope, true);
                                    }
                                    classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTSimpleEdge];
                                    classesByType.Reset();
                                    for (n = classesByType.Next(); n != null; n = classesByType.Next())
                                    {
                                        featureLayerClass = new FeatureLayerClass()
                                        {
                                            FeatureClass = n,
                                            Name         = (n as IDataset).Name
                                        };
                                        this.AddLayer(map, featureLayerClass, ref envelope, true);
                                    }
                                    classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTComplexEdge];
                                    classesByType.Reset();
                                    for (n = classesByType.Next(); n != null; n = classesByType.Next())
                                    {
                                        featureLayerClass = new FeatureLayerClass()
                                        {
                                            FeatureClass = n,
                                            Name         = (n as IDataset).Name
                                        };
                                        this.AddLayer(map, featureLayerClass, ref envelope, true);
                                    }
                                }
                            }
                            else if (item.Type == esriDatasetType.esriDTNetworkDataset)
                            {
                                INetworkLayer networkLayerClass = new NetworkLayerClass()
                                {
                                    NetworkDataset = item as INetworkDataset
                                };
                                this.AddLayer(map, networkLayerClass as ILayer, ref envelope, true);
                                if (MessageBox.Show(string.Concat("是否将参加网络要素集-", item.Name, "-的所有要素添加到地图中"), "添加拓扑层", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes)
                                {
                                    classes = (item as IFeatureClassContainer).Classes;
                                    classes.Reset();
                                    for (m = classes.Next(); m != null; m = classes.Next())
                                    {
                                        cadFeatureLayerClass = new FeatureLayerClass()
                                        {
                                            FeatureClass = m,
                                            Name         = m.AliasName
                                        };
                                        this.AddLayer(map, cadFeatureLayerClass, ref envelope, true);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        IMapServerLayer mapServerLayerClass = new MapServerLayerClass();
                        mapServerLayerClass.ServerConnect((objs[k] as IGxAGSObject).AGSServerObjectName, (objs[k] as IGxAGSObject).DefaultMapName);
                        this.AddLayer(map, mapServerLayerClass as ILayer, ref envelope, false);
                    }
                }
                processAssist.End();
                bool layerCount = this.GetMap().LayerCount > 0;
                if (strs.Count > 0)
                {
                    MessageBox.Show("警告:数据范围不一致。\r\n 一个或多个添加的图层范围与关联的空间坐标系范围不一致。请检查数据问题。存在问题图层信息请查看错误日志!", "管理平台", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string str1 in strs)
                    {
                        if (stringBuilder.Length > 0)
                        {
                            stringBuilder.Append(",");
                        }
                        stringBuilder.Append(str1);
                    }
                    CErrorLog.writeErrorLog(stringBuilder, null, "图层范围不一致!");
                }
                foreach (ILayer list0 in this.list_0)
                {
                    list0.Visible = true;
                }
                if (layerCount && envelope != null)
                {
                    IMap map1 = this.GetMap();
                    ISpatialReference spatialReference = map1.SpatialReference;
                    if ((spatialReference is IUnknownCoordinateSystem || envelope.SpatialReference is IUnknownCoordinateSystem || envelope.SpatialReference == null ? false : spatialReference != null))
                    {
                        envelope.Project(spatialReference);
                    }
                    (map1 as IActiveView).Extent = envelope;
                    (map1 as IActiveView).Refresh();
                }
                if (this.m_pApp != null)
                {
                    this.m_pApp.MapDocumentChanged();
                }
                else if (ApplicationRef.Application != null)
                {
                    ApplicationRef.Application.MapDocumentChanged();
                }
            }
            catch (Exception exception1)
            {
                str = exception1.ToString();
            }
            if (this.onLoadCompleteHand_0 != null)
            {
                this.onLoadCompleteHand_0();
            }
        }
예제 #7
0
        public static ILayer CreateLayer(ICatalogItem catalogItem)
        {
            if (catalogItem == null || catalogItem.Dataset==null)
                return null;

            ILayer lyrNew = null;
            enumCatalogType catalogType = catalogItem.Type;
            switch(catalogType)
            {
                case enumCatalogType.Workpace:
                case enumCatalogType.FeatureDataset:
                case enumCatalogType.Table:
                    return null;

                case enumCatalogType.FeatureClassPoint:
                case enumCatalogType.FeatureClassLine:
                case enumCatalogType.FeatureClassArea:
                case enumCatalogType.FeatureClassAnnotation:
                case enumCatalogType.FeatureClassEmpty:
                case enumCatalogType.FeatureClass3D:
                case enumCatalogType.RasterCatalog:
                    IFeatureLayer lyrFeature= new FeatureLayerClass();
                    lyrFeature.FeatureClass = catalogItem.Dataset as IFeatureClass;
                    lyrNew = lyrFeature;
                    break;

                case enumCatalogType.RasterMosaic:
                case enumCatalogType.RasterSet:
                    IRasterLayer lyrRaster = new RasterLayerClass();
                    lyrRaster.CreateFromDataset(catalogItem.Dataset as IRasterDataset);
                    lyrNew = lyrRaster;
                    break;

                case enumCatalogType.RasterBand:
                    IRasterLayer lyrRasterBand = new RasterLayerClass();
                    IRasterBand rasterBand = catalogItem.Dataset as IRasterBand;
                    IRasterBandCollection colRasterBand = new RasterClass();
                    colRasterBand.Add(rasterBand, 0);
                    lyrRasterBand.CreateFromRaster(colRasterBand as IRaster);

                    lyrNew = lyrRasterBand;
                    break;

                case enumCatalogType.Tin:
                    ITinLayer lyrTin = new TinLayerClass();
                    lyrTin.Dataset = catalogItem.Dataset as ITin;
                    lyrNew = lyrTin;
                    break;

                case enumCatalogType.Terrain:
                    ITerrainLayer lyrTerrain = new TerrainLayerClass();
                    lyrTerrain.Terrain = catalogItem.Dataset as ITerrain;
                    lyrNew = lyrTerrain;
                    break;

                case enumCatalogType.Topology:
                    ITopologyLayer lyrTopology = new TopologyLayerClass();
                    lyrTopology.Topology = catalogItem.Dataset as ITopology;
                    lyrNew = lyrTopology as ILayer;
                    break;
            }

            return lyrNew;
        }
예제 #8
0
        private void method_3(object object_0)
        {
            frmOpenFile file = new frmOpenFile
            {
                Text             = "添加数据",
                AllowMultiSelect = true
            };

            file.AddFilter(new MyGxFilterDatasets(), true);
            if (file.DoModalOpen() == DialogResult.OK)
            {
                IFeatureClass featureClass;
                IFeatureLayer layer;
                System.Windows.Forms.Cursor.Current = Cursors.WaitCursor;
                IArray array = new ArrayClass();
                IArray items = file.Items;
                int    index = 0;
                while (true)
                {
                    if (index >= items.Count)
                    {
                        break;
                    }
                    IGxDataset dataset = items.get_Element(index) as IGxDataset;
                    if (dataset != null)
                    {
                        IDataset dataset2 = dataset.Dataset;
                        if (dataset2 != null)
                        {
                            if (dataset2.Type == esriDatasetType.esriDTFeatureClass)
                            {
                                featureClass = (IFeatureClass)dataset2;
                                if (featureClass.FeatureType == esriFeatureType.esriFTAnnotation)
                                {
                                    layer = new FDOGraphicsLayerClass
                                    {
                                        FeatureClass = featureClass,
                                        Name         = featureClass.AliasName
                                    };
                                }
                                else
                                {
                                    layer = new FeatureLayerClass
                                    {
                                        FeatureClass = featureClass,
                                        Name         = featureClass.AliasName
                                    };
                                }
                                array.Add(layer);
                            }
                            else
                            {
                                IFDOGraphicsLayerFactory factory;
                                if (dataset2.Type == esriDatasetType.esriDTCadDrawing)
                                {
                                    IEnumGxObject children = (dataset as IGxObjectContainer).Children;
                                    children.Reset();
                                    for (IGxDataset dataset3 = children.Next() as IGxDataset;
                                         dataset3 != null;
                                         dataset3 = children.Next() as IGxDataset)
                                    {
                                        featureClass = dataset3.Dataset as IFeatureClass;
                                        if (featureClass.FeatureType == esriFeatureType.esriFTAnnotation)
                                        {
                                            factory = new FDOGraphicsLayerFactoryClass();
                                            layer   =
                                                (IFeatureLayer)
                                                factory.OpenGraphicsLayer(
                                                    (IFeatureWorkspace)featureClass.FeatureDataset.Workspace,
                                                    featureClass.FeatureDataset, featureClass.AliasName);
                                        }
                                        else
                                        {
                                            layer = new FeatureLayerClass
                                            {
                                                FeatureClass = featureClass,
                                                Name         = featureClass.AliasName
                                            };
                                        }
                                        array.Add(layer);
                                    }
                                }
                                else if (dataset2.Type == esriDatasetType.esriDTFeatureDataset)
                                {
                                    IFeatureClassContainer container = (IFeatureClassContainer)dataset2;
                                    index = 0;
                                    while (index < (container.ClassCount - 1))
                                    {
                                        featureClass = container.get_Class(index);
                                        if (featureClass.FeatureType == esriFeatureType.esriFTAnnotation)
                                        {
                                            factory = new FDOGraphicsLayerFactoryClass();
                                            layer   =
                                                (IFeatureLayer)
                                                factory.OpenGraphicsLayer(
                                                    (IFeatureWorkspace)featureClass.FeatureDataset.Workspace,
                                                    featureClass.FeatureDataset, featureClass.AliasName);
                                        }
                                        else
                                        {
                                            layer = new FeatureLayerClass
                                            {
                                                FeatureClass = featureClass,
                                                Name         = featureClass.AliasName
                                            };
                                        }
                                        array.Add(layer);
                                        index++;
                                    }
                                }
                                else if (dataset2.Type == esriDatasetType.esriDTTin)
                                {
                                    ITinLayer unk = new TinLayerClass
                                    {
                                        Dataset = (ITin)dataset2,
                                        Name    = dataset2.Name
                                    };
                                    array.Add(unk);
                                }
                                else if ((dataset2.Type == esriDatasetType.esriDTRasterDataset) ||
                                         (dataset2.Type == esriDatasetType.esriDTRasterBand))
                                {
                                    bool flag = true;
                                    if (!((IRasterPyramid)dataset2).Present)
                                    {
                                        if (ApplicationRef.PyramidPromptType == PyramidPromptType.AlwaysBuildNoPrompt)
                                        {
                                            ((IRasterPyramid)dataset2).Create();
                                        }
                                        else if (ApplicationRef.PyramidPromptType == PyramidPromptType.AlwaysPrompt)
                                        {
                                            switch (BuildPyramidSet.Show())
                                            {
                                            case DialogResult.Yes:
                                                ((IRasterPyramid)dataset2).Create();
                                                break;

                                            case DialogResult.Cancel:
                                                flag = false;
                                                break;
                                            }
                                        }
                                    }
                                    if (flag)
                                    {
                                        RasterLayerClass class3 = new RasterLayerClass
                                        {
                                            Cached = true
                                        };
                                        IRasterLayer layer3 = class3;
                                        layer3.CreateFromDataset((IRasterDataset)dataset2);
                                        layer3.Name = dataset2.Name;
                                        array.Add(layer3);
                                    }
                                }
                                else if (dataset2.Type == esriDatasetType.esriDTTable)
                                {
                                    try
                                    {
                                        IRasterCatalogTable pCatalog = new RasterCatalogTableClass
                                        {
                                            Table = (ITable)dataset2
                                        };
                                        pCatalog.Update();
                                        IRasterCatalogLayer layer4 = new RasterCatalogLayerClass();
                                        layer4.Create(pCatalog);
                                        layer4.Name = dataset2.BrowseName;
                                        array.Add(layer4);
                                    }
                                    catch
                                    {
                                    }
                                }
                            }
                        }
                    }
                    index++;
                }
                int    count  = array.Count;
                ILayer layer5 = null;
                for (index = count - 1; index >= 0; index--)
                {
                    layer5 = array.get_Element(index) as ILayer;
                    if (layer5 is IRasterCatalogLayer)
                    {
                        if (object_0 is IMap)
                        {
                            (object_0 as IMap).AddLayer(layer5);
                        }
                        else if (object_0 is IGroupLayer)
                        {
                            (object_0 as IGroupLayer).Add(layer5);
                        }
                        array.Remove(index);
                        count--;
                    }
                }
                for (index = count - 1; index >= 0; index--)
                {
                    layer5 = array.get_Element(index) as ILayer;
                    if (layer5 is IRasterLayer)
                    {
                        if (object_0 is IMap)
                        {
                            (object_0 as IMap).AddLayer(layer5);
                        }
                        else if (object_0 is IGroupLayer)
                        {
                            (object_0 as IGroupLayer).Add(layer5);
                        }
                        array.Remove(index);
                        count--;
                    }
                }
                for (index = count - 1; index >= 0; index--)
                {
                    layer5 = array.get_Element(index) as ILayer;
                    if (layer5 is ITinLayer)
                    {
                        if (object_0 is IMap)
                        {
                            (object_0 as IMap).AddLayer(layer5);
                        }
                        else if (object_0 is IGroupLayer)
                        {
                            (object_0 as IGroupLayer).Add(layer5);
                        }
                        array.Remove(index);
                        count--;
                    }
                }
                for (index = count - 1; index >= 0; index--)
                {
                    layer5 = array.get_Element(index) as ILayer;
                    if (layer5 is IFeatureLayer)
                    {
                        layer        = layer5 as IFeatureLayer;
                        featureClass = layer.FeatureClass;
                        if ((featureClass.ShapeType == esriGeometryType.esriGeometryPolygon) ||
                            (featureClass.ShapeType == esriGeometryType.esriGeometryEnvelope))
                        {
                            if (object_0 is IMap)
                            {
                                (object_0 as IMap).AddLayer(layer5);
                            }
                            else if (object_0 is IGroupLayer)
                            {
                                (object_0 as IGroupLayer).Add(layer5);
                            }
                            array.Remove(index);
                            count--;
                        }
                    }
                }
                for (index = count - 1; index >= 0; index--)
                {
                    layer5 = array.get_Element(index) as ILayer;
                    if (layer5 is IFeatureLayer)
                    {
                        layer        = layer5 as IFeatureLayer;
                        featureClass = layer.FeatureClass;
                        if (((((featureClass.ShapeType == esriGeometryType.esriGeometryLine) ||
                               (featureClass.ShapeType == esriGeometryType.esriGeometryBezier3Curve)) ||
                              ((featureClass.ShapeType == esriGeometryType.esriGeometryCircularArc) ||
                               (featureClass.ShapeType == esriGeometryType.esriGeometryEllipticArc))) ||
                             (featureClass.ShapeType == esriGeometryType.esriGeometryPath)) ||
                            (featureClass.ShapeType == esriGeometryType.esriGeometryPolyline))
                        {
                            if (object_0 is IMap)
                            {
                                (object_0 as IMap).AddLayer(layer5);
                            }
                            else if (object_0 is IGroupLayer)
                            {
                                (object_0 as IGroupLayer).Add(layer5);
                            }
                            array.Remove(index);
                            count--;
                        }
                    }
                }
                for (index = count - 1; index >= 0; index--)
                {
                    layer5 = array.get_Element(index) as ILayer;
                    if (layer5 is IFeatureLayer)
                    {
                        layer        = layer5 as IFeatureLayer;
                        featureClass = layer.FeatureClass;
                        if ((featureClass.ShapeType == esriGeometryType.esriGeometryMultipoint) ||
                            (featureClass.ShapeType == esriGeometryType.esriGeometryPoint))
                        {
                            if (object_0 is IMap)
                            {
                                (object_0 as IMap).AddLayer(layer5);
                            }
                            else if (object_0 is IGroupLayer)
                            {
                                (object_0 as IGroupLayer).Add(layer5);
                            }
                            array.Remove(index);
                            count--;
                        }
                    }
                }
                for (index = count - 1; index >= 0; index--)
                {
                    layer5 = array.get_Element(index) as ILayer;
                    if (object_0 is IMap)
                    {
                        (object_0 as IMap).AddLayer(layer5);
                    }
                    else if (object_0 is IGroupLayer)
                    {
                        (object_0 as IGroupLayer).Add(layer5);
                    }
                    array.Remove(index);
                }
                System.Windows.Forms.Cursor.Current = Cursors.Default;
            }
        }
예제 #9
0
        public void StandardToolLibrary(string toolName)
        {
            switch (toolName)
            {
            case "AddData":
                m_command = new ControlsAddDataCommandClass();
                break;

            case "New":
                m_command = new CreateNewDocument();
                break;

            case "Open":
                m_command = new ControlsOpenDocCommandClass();
                break;

            case "Save":
                break;

            case "SaveAs":
                m_command = new ControlsSaveAsDocCommandClass();
                break;

            case "CADToVec":
                m_command = new AddCADToFeatures();
                break;

            case "CADToRas":
                m_command = new AddCADToRaster();
                break;
            }
            if (m_command != null)
            {
                m_command.OnCreate(m_mapControl.Object);
                m_command.OnClick();
                m_command = null;
            }

            if (toolName == "Open")
            {
                m_frmMian.ControlsSynchronizer.ReplaceMap(m_mapControl.Map);
            }

            if (toolName == "AddTin")
            {
                FolderBrowserDialog fdlg = new FolderBrowserDialog();
                fdlg.Description = "打开TIN";
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    IWorkspaceFactory wsFac = new TinWorkspaceFactoryClass();
                    if (wsFac.IsWorkspace(System.IO.Path.GetDirectoryName(fdlg.SelectedPath)))
                    {
                        ITinWorkspace tinWS  = wsFac.OpenFromFile(System.IO.Path.GetDirectoryName(fdlg.SelectedPath), 0) as ITinWorkspace;
                        ITinLayer     tinLyr = new TinLayerClass();
                        try
                        {
                            tinLyr.Dataset = tinWS.OpenTin(System.IO.Path.GetFileName(fdlg.SelectedPath));
                            tinLyr.Name    = System.IO.Path.GetFileName(fdlg.SelectedPath);
                            this.m_mapControl.Map.AddLayer((ILayer)tinLyr);
                        }
                        catch
                        {
                            MessageBox.Show("请选择有效的TIN文件!");
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选择有效的TIN文件!");
                        return;
                    }
                }
            }

            if (toolName == "AddDEM")
            {
                FolderBrowserDialog fdlg = new FolderBrowserDialog();
                fdlg.Description = "打开DEM";
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    IWorkspaceFactory wsFac = new RasterWorkspaceFactoryClass();
                    if (wsFac.IsWorkspace(System.IO.Path.GetDirectoryName(fdlg.SelectedPath)))
                    {
                        IRasterWorkspace tinWS  = wsFac.OpenFromFile(System.IO.Path.GetDirectoryName(fdlg.SelectedPath), 0) as IRasterWorkspace;
                        IRasterLayer     rasLyr = new RasterLayerClass();
                        try
                        {
                            rasLyr.CreateFromDataset(tinWS.OpenRasterDataset(System.IO.Path.GetFileName(fdlg.SelectedPath)));
                            this.m_mapControl.Map.AddLayer((ILayer)rasLyr);
                        }
                        catch
                        {
                            MessageBox.Show("请选择有效的DEM文件!");
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选择有效的DEM文件!");
                        return;
                    }
                }
            }
        }
예제 #10
0
        private void 打开TinToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // ITinLayer pTinLayer = GetTINLayer(@".\data\IDW数据\dvtin");

             ITinAdvanced2 pTin = new TinClass();
             pTin.Init(@".\data\IDW数据\dvtin");

             ITinLayer pTinLayer = new TinLayerClass();

             pTinLayer.Dataset = pTin;
             axMapControl1.Map.AddLayer(pTinLayer as ILayer);
        }
예제 #11
0
        //
        //
        //
        public static ILayer openTinLayer(string fullPath)
        {
            ITinWorkspace pTinWorkspace;
            IWorkspace pWS;
            IWorkspaceFactory pWSFact = new TinWorkspaceFactoryClass();
            ITinLayer pTinLayer = new TinLayerClass();
            string pathToWorkspace = System.IO.Path.GetDirectoryName(fullPath);
            string tinName = System.IO.Path.GetFileName(fullPath);
            ITin pTin;

            pWS = pWSFact.OpenFromFile(pathToWorkspace, 0);
            pTinWorkspace = pWS as ITinWorkspace;
            if (pTinWorkspace.get_IsTin(tinName))
            {
                pTin = pTinWorkspace.OpenTin(tinName);
                pTinLayer.Dataset = pTin;
                pTinLayer.ClearRenderers();
                return pTinLayer as ILayer;
            }
            else
            {
                MessageBox.Show("��Ŀ¼������Tin�ļ�");
                return null;
            }
        }
예제 #12
0
파일: ToolLib.cs 프로젝트: chinasio/minegis
        public void ThreeDToolLibrary(string toolName)
        {
            switch (toolName)
            {
                case"3DOpen":
                    m_command = new ControlsSceneOpenDocCommandClass();
                    break;

                case "Navigation":
                    m_command = new ControlsSceneNavigateToolClass();
                    break;

                case"3DZoomIn":
                    m_command = new ControlsSceneZoomInToolClass();
                    break;

                case "3DZoomOut":
                    m_command = new ControlsSceneZoomOutToolClass();
                    break;

                case "3DPan":
                    m_command = new ControlsScenePanToolClass();
                    break;

                case"3DExtent":
                    m_command = new ControlsSceneFullExtentCommandClass();
                    break;

                case"3DSel":
                    m_command = new ControlsSceneSelectGraphicsToolClass();
                    break;

            }
            if (m_command is ITool)
            {
                m_command.OnCreate(m_sceneControl.Object);
                m_sceneControl.CurrentTool = (ITool)m_command;
            }
            if (m_command is ICommand)
            {
                m_command.OnCreate(m_sceneControl.Object);
                m_command.OnClick();
            }
            m_command = null;

            if (toolName == "3DAddTIN")
            {
                FolderBrowserDialog fdlg = new FolderBrowserDialog();
                fdlg.Description = "打开TIN";
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    IWorkspaceFactory wsFac = new TinWorkspaceFactoryClass();
                    if (wsFac.IsWorkspace(System.IO.Path.GetDirectoryName(fdlg.SelectedPath)))
                    {
                        ITinWorkspace tinWS = wsFac.OpenFromFile(System.IO.Path.GetDirectoryName(fdlg.SelectedPath), 0) as ITinWorkspace;
                        ITinLayer tinLyr = new TinLayerClass();
                        try
                        {
                            tinLyr.Dataset = tinWS.OpenTin(System.IO.Path.GetFileName(fdlg.SelectedPath));
                            this.m_sceneControl.Scene.AddLayer((ILayer)tinLyr,false);
                            SetTinAsBase(tinLyr);

                        }
                        catch
                        {
                            MessageBox.Show("请选择有效的TIN文件!");
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选择有效的TIN文件!");
                        return;
                    }

                }
            }

            if (toolName == "3DAddDEM")
            {
                FolderBrowserDialog fdlg = new FolderBrowserDialog();
                fdlg.Description = "打开DEM";
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    IWorkspaceFactory wsFac = new RasterWorkspaceFactoryClass();
                    if (wsFac.IsWorkspace(System.IO.Path.GetDirectoryName(fdlg.SelectedPath)))
                    {
                        IRasterWorkspace tinWS = wsFac.OpenFromFile(System.IO.Path.GetDirectoryName(fdlg.SelectedPath), 0) as IRasterWorkspace;
                        IRasterLayer rasLyr = new RasterLayerClass();
                        try
                        {
                            rasLyr.CreateFromDataset(tinWS.OpenRasterDataset(System.IO.Path.GetFileName(fdlg.SelectedPath)));
                            this.m_sceneControl.Scene.AddLayer((ILayer)rasLyr, false);
                            SetlayerSurface(rasLyr, 1);
                            //this.axSceneControl1.Refresh();
                        }
                        catch
                        {
                            MessageBox.Show("请选择有效的DEM文件!");
                        }

                    }
                    else
                    {
                        MessageBox.Show("请选择有效的DEM文件!");
                        return;
                    }

                }
            }
        }
예제 #13
0
파일: ToolLib.cs 프로젝트: chinasio/minegis
        public void StandardToolLibrary(string toolName)
        {
            switch (toolName)
            {
                case "AddData":
                    m_command = new ControlsAddDataCommandClass();
                    break;
                case"New":
                    m_command = new CreateNewDocument();
                    break;
                case"Open":
                    m_command = new ControlsOpenDocCommandClass();
                    break;
                case"Save":
                    break;
                case"SaveAs":
                    m_command = new ControlsSaveAsDocCommandClass();
                    break;
                case "CADToVec":
                    m_command = new AddCADToFeatures();
                    break;

                case "CADToRas":
                    m_command = new AddCADToRaster();
                    break;
            }
            if(m_command!=null)
            {
                m_command.OnCreate(m_mapControl.Object);
                m_command.OnClick();
                m_command = null;
            }

            if (toolName == "Open")
            {
                m_frmMian.ControlsSynchronizer.ReplaceMap(m_mapControl.Map);
            }

            if (toolName == "AddTin")
            {
                FolderBrowserDialog fdlg = new FolderBrowserDialog();
                fdlg.Description = "打开TIN";
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    IWorkspaceFactory wsFac = new TinWorkspaceFactoryClass();
                    if (wsFac.IsWorkspace(System.IO.Path.GetDirectoryName(fdlg.SelectedPath)))
                    {
                        ITinWorkspace tinWS = wsFac.OpenFromFile(System.IO.Path.GetDirectoryName(fdlg.SelectedPath), 0) as ITinWorkspace;
                        ITinLayer tinLyr = new TinLayerClass();
                        try
                        {
                            tinLyr.Dataset = tinWS.OpenTin(System.IO.Path.GetFileName(fdlg.SelectedPath));
                            tinLyr.Name = System.IO.Path.GetFileName(fdlg.SelectedPath);
                            this.m_mapControl.Map.AddLayer((ILayer)tinLyr);
                        }
                        catch
                        {
                            MessageBox.Show("请选择有效的TIN文件!");
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选择有效的TIN文件!");
                        return;
                    }

                }
            }

            if (toolName == "AddDEM")
            {
                FolderBrowserDialog fdlg = new FolderBrowserDialog();
                fdlg.Description = "打开DEM";
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    IWorkspaceFactory wsFac = new RasterWorkspaceFactoryClass();
                    if (wsFac.IsWorkspace(System.IO.Path.GetDirectoryName(fdlg.SelectedPath)))
                    {
                        IRasterWorkspace tinWS = wsFac.OpenFromFile(System.IO.Path.GetDirectoryName(fdlg.SelectedPath), 0) as IRasterWorkspace;
                        IRasterLayer rasLyr = new RasterLayerClass();
                        try
                        {
                            rasLyr.CreateFromDataset(tinWS.OpenRasterDataset(System.IO.Path.GetFileName(fdlg.SelectedPath)));
                            this.m_mapControl.Map.AddLayer((ILayer)rasLyr);
                        }
                        catch
                        {
                            MessageBox.Show("请选择有效的DEM文件!");
                        }

                    }
                    else
                    {
                        MessageBox.Show("请选择有效的DEM文件!");
                        return;
                    }

                }
            }
        }
예제 #14
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (mLayerCombox.Text == "" || mFeildCombox.Text == "")//判断输入合法性
            {
                MessageBox.Show("没有相应的图层");
                return;
            }
            ITinEdit pTin = new TinClass();
            //寻找Featurelayer
            IFeatureLayer pFeatureLayer =
                mSceneControl.Scene.get_Layer(mLayerCombox.SelectedIndex) as IFeatureLayer;

            if (pFeatureLayer != null)
            {
                IEnvelope     pEnvelope     = new EnvelopeClass();
                IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                IQueryFilter  pQueryFilter  = new QueryFilterClass();
                IField        pField        = null;
                //找字段
                pField = pFeatureClass.Fields.get_Field(pFeatureClass.Fields.FindField(mFeildCombox.Text));
                if (pField.Type == esriFieldType.esriFieldTypeInteger ||
                    pField.Type == esriFieldType.esriFieldTypeDouble ||
                    pField.Type == esriFieldType.esriFieldTypeSingle) //判断类型
                {
                    IGeoDataset pGeoDataset = pFeatureLayer as IGeoDataset;
                    pEnvelope = pGeoDataset.Extent;
                    //设置空间参考系
                    ISpatialReference pSpatialReference;
                    pSpatialReference = pGeoDataset.SpatialReference;
                    //选择生成TIN的输入类型
                    esriTinSurfaceType pSurfaceTypeCount = esriTinSurfaceType.esriTinMassPoint;
                    switch (mTINType.Text)
                    {
                    case "点":
                        pSurfaceTypeCount = esriTinSurfaceType.esriTinMassPoint;
                        break;

                    case "直线":
                        pSurfaceTypeCount = esriTinSurfaceType.esriTinSoftLine;
                        break;

                    case "光滑线":
                        pSurfaceTypeCount = esriTinSurfaceType.esriTinHardLine;
                        break;
                    }
                    //创建TIN
                    pTin.InitNew(pEnvelope);
                    object missing = Type.Missing;
                    //生成TIN
                    pTin.AddFromFeatureClass(pFeatureClass, pQueryFilter, pField, pField, pSurfaceTypeCount, ref missing);
                    pTin.SetSpatialReference(pGeoDataset.SpatialReference);
                    //创建Tin图层并将Tin图层加入到场景中去
                    ITinLayer pTinLayer = new TinLayerClass();
                    pTinLayer.Dataset = pTin as ITin;
                    mSceneControl.Scene.AddLayer(pTinLayer, true);
                }
                else
                {
                    MessageBox.Show("该字段的类型不符合构建TIN的条件");
                }
            }
        }
예제 #15
0
        public static ILayer CreateLayer(ICatalogItem catalogItem)
        {
            if (catalogItem == null || catalogItem.Dataset == null)
            {
                return(null);
            }

            ILayer          lyrNew      = null;
            enumCatalogType catalogType = catalogItem.Type;

            switch (catalogType)
            {
            case enumCatalogType.Workpace:
            case enumCatalogType.FeatureDataset:
            case enumCatalogType.Table:
                return(null);

            case enumCatalogType.FeatureClassPoint:
            case enumCatalogType.FeatureClassLine:
            case enumCatalogType.FeatureClassArea:
            case enumCatalogType.FeatureClassAnnotation:
            case enumCatalogType.FeatureClassEmpty:
            case enumCatalogType.FeatureClass3D:
            case enumCatalogType.RasterCatalog:
                IFeatureLayer lyrFeature = new FeatureLayerClass();
                lyrFeature.FeatureClass = catalogItem.Dataset as IFeatureClass;
                lyrNew = lyrFeature;
                break;

            case enumCatalogType.RasterMosaic:
            case enumCatalogType.RasterSet:
                IRasterLayer lyrRaster = new RasterLayerClass();
                lyrRaster.CreateFromDataset(catalogItem.Dataset as IRasterDataset);
                lyrNew = lyrRaster;
                break;

            case enumCatalogType.RasterBand:
                IRasterLayer          lyrRasterBand = new RasterLayerClass();
                IRasterBand           rasterBand    = catalogItem.Dataset as IRasterBand;
                IRasterBandCollection colRasterBand = new RasterClass();
                colRasterBand.Add(rasterBand, 0);
                lyrRasterBand.CreateFromRaster(colRasterBand as IRaster);

                lyrNew = lyrRasterBand;
                break;

            case enumCatalogType.Tin:
                ITinLayer lyrTin = new TinLayerClass();
                lyrTin.Dataset = catalogItem.Dataset as ITin;
                lyrNew         = lyrTin;
                break;

            case enumCatalogType.Terrain:
                ITerrainLayer lyrTerrain = new TerrainLayerClass();
                lyrTerrain.Terrain = catalogItem.Dataset as ITerrain;
                lyrNew             = lyrTerrain;
                break;

            case enumCatalogType.Topology:
                ITopologyLayer lyrTopology = new TopologyLayerClass();
                lyrTopology.Topology = catalogItem.Dataset as ITopology;
                lyrNew = lyrTopology as ILayer;
                break;
            }

            return(lyrNew);
        }
예제 #16
0
파일: MapHelper.cs 프로젝트: secondii/Yutai
        public static void AddDataset(IBasicMap pMap, IDataset pDataset, string dsName)
        {
            IFeatureLayer fDOGraphicsLayerClass;
            IFeatureClass j;
            IFeatureLayer featureLayerClass;

            if (dsName == null)
            {
                dsName = "";
            }
            switch (pDataset.Type)
            {
            case esriDatasetType.esriDTFeatureDataset:
            {
                IEnumDataset subsets = pDataset.Subsets;
                subsets.Reset();
                for (IDataset i = subsets.Next(); i != null; i = subsets.Next())
                {
                    MapHelper.AddDataset(pMap, i, dsName);
                }
                return;
            }

            case esriDatasetType.esriDTFeatureClass:
            {
                IFeatureClass idataset0 = (IFeatureClass)pDataset;
                if (idataset0.FeatureType == esriFeatureType.esriFTAnnotation)
                {
                    fDOGraphicsLayerClass = new FDOGraphicsLayerClass();
                    try
                    {
                        fDOGraphicsLayerClass.FeatureClass = idataset0;
                        fDOGraphicsLayerClass.Name         = string.Concat(dsName, idataset0.AliasName);
                        pMap.AddLayer(fDOGraphicsLayerClass);
                        return;
                    }
                    catch (Exception exception)
                    {
                        exception.ToString();
                        return;
                    }
                }
                else if (idataset0.FeatureType != esriFeatureType.esriFTDimension)
                {
                    fDOGraphicsLayerClass = new FeatureLayerClass()
                    {
                        FeatureClass = idataset0,
                        Name         = string.Concat(dsName, idataset0.AliasName)
                    };
                    pMap.AddLayer(fDOGraphicsLayerClass);
                    return;
                }
                else
                {
                    fDOGraphicsLayerClass = new DimensionLayerClass()
                    {
                        FeatureClass = idataset0,
                        Name         = string.Concat(dsName, idataset0.AliasName)
                    };
                    pMap.AddLayer(fDOGraphicsLayerClass);
                    return;
                }
                break;
            }

            case esriDatasetType.esriDTPlanarGraph:
            case esriDatasetType.esriDTText:
            case esriDatasetType.esriDTRelationshipClass:
            {
                return;
            }

            case esriDatasetType.esriDTGeometricNetwork:
            {
                IGeometricNetwork geometricNetwork = pDataset as IGeometricNetwork;
                if (geometricNetwork == null)
                {
                    return;
                }
                IEnumFeatureClass classesByType =
                    geometricNetwork.ClassesByType[esriFeatureType.esriFTSimpleJunction];
                classesByType.Reset();
                for (j = classesByType.Next(); j != null; j = classesByType.Next())
                {
                    featureLayerClass = new FeatureLayerClass()
                    {
                        FeatureClass = j,
                        Name         = string.Concat(dsName, (j as IDataset).Name)
                    };
                    pMap.AddLayer(featureLayerClass);
                }
                classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTComplexJunction];
                classesByType.Reset();
                for (j = classesByType.Next(); j != null; j = classesByType.Next())
                {
                    featureLayerClass = new FeatureLayerClass()
                    {
                        FeatureClass = j,
                        Name         = string.Concat(dsName, (j as IDataset).Name)
                    };
                    pMap.AddLayer(featureLayerClass);
                }
                classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTSimpleEdge];
                classesByType.Reset();
                for (j = classesByType.Next(); j != null; j = classesByType.Next())
                {
                    featureLayerClass = new FeatureLayerClass()
                    {
                        FeatureClass = j,
                        Name         = string.Concat(dsName, (j as IDataset).Name)
                    };
                    pMap.AddLayer(featureLayerClass);
                }
                classesByType = geometricNetwork.ClassesByType[esriFeatureType.esriFTComplexEdge];
                classesByType.Reset();
                for (j = classesByType.Next(); j != null; j = classesByType.Next())
                {
                    featureLayerClass = new FeatureLayerClass()
                    {
                        FeatureClass = j,
                        Name         = string.Concat(dsName, (j as IDataset).Name)
                    };
                    pMap.AddLayer(featureLayerClass);
                }
                return;
            }

            case esriDatasetType.esriDTTopology:
            {
                ITopologyLayer topologyLayerClass = new TopologyLayerClass()
                {
                    Topology = pDataset as ITopology
                };
                (topologyLayerClass as ILayer).Name = string.Concat(dsName, pDataset.Name);
                pMap.AddLayer(topologyLayerClass as ILayer);
                return;
            }

            case esriDatasetType.esriDTTable:
            {
                try
                {
                    IRasterCatalogTable rasterCatalogTableClass = new RasterCatalogTable()
                    {
                        Table = (ITable)pDataset
                    };
                    rasterCatalogTableClass.Update();
                    IRasterCatalogLayer rasterCatalogLayerClass = new RasterCatalogLayerClass();
                    rasterCatalogLayerClass.Create(rasterCatalogTableClass);
                    rasterCatalogLayerClass.Name = string.Concat(dsName, pDataset.BrowseName);
                    pMap.AddLayer(rasterCatalogLayerClass);
                    return;
                }
                catch
                {
                    try
                    {
                        IStandaloneTableCollection ibasicMap0 = pMap as IStandaloneTableCollection;
                        IPropertySet connectionProperties     = pDataset.Workspace.ConnectionProperties;
                        bool         flag = false;
                        int          num  = 0;
                        while (true)
                        {
                            if (num < ibasicMap0.StandaloneTableCount)
                            {
                                ITable table = ibasicMap0.StandaloneTable[num].Table;
                                if (
                                    !connectionProperties.IsEqual((table as IDataset).Workspace.ConnectionProperties) ||
                                    !((table as IDataset).Name == pDataset.Name))
                                {
                                    num++;
                                }
                                else
                                {
                                    flag = true;
                                    break;
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (!flag)
                        {
                            ibasicMap0.AddStandaloneTable(new StandaloneTableClass()
                                {
                                    Table = pDataset as ITable
                                });
                        }
                    }
                    catch (Exception exception1)
                    {
                        Logger.Current.Write(exception1.Message, LogLevel.Error, null);
                    }
                    return;
                }
                break;
            }

            case esriDatasetType.esriDTRasterDataset:
            case esriDatasetType.esriDTRasterBand:
            {
                IRasterLayer rasterLayerClass = new RasterLayerClass();
                rasterLayerClass.CreateFromDataset((IRasterDataset)pDataset);
                rasterLayerClass.Name = string.Concat(dsName, pDataset.Name);
                pMap.AddLayer(rasterLayerClass);
                return;
            }

            case esriDatasetType.esriDTTin:
            {
                ITinLayer tinLayerClass = new TinLayerClass()
                {
                    Dataset = (ITin)pDataset,
                    Name    = string.Concat(dsName, pDataset.Name)
                };
                pMap.AddLayer(tinLayerClass);
                return;
            }

            case esriDatasetType.esriDTCadDrawing:
            {
                ICadLayer cadLayerClass = new CadLayerClass()
                {
                    CadDrawingDataset = pDataset as ICadDrawingDataset,
                    Name = pDataset.Name
                };
                pMap.AddLayer(cadLayerClass);
                return;
            }

            default:
            {
                return;
            }
            }
        }
예제 #17
0
        public void ThreeDToolLibrary(string toolName)
        {
            switch (toolName)
            {
            case "3DOpen":
                m_command = new ControlsSceneOpenDocCommandClass();
                break;

            case "Navigation":
                m_command = new ControlsSceneNavigateToolClass();
                break;

            case "3DZoomIn":
                m_command = new ControlsSceneZoomInToolClass();
                break;

            case "3DZoomOut":
                m_command = new ControlsSceneZoomOutToolClass();
                break;

            case "3DPan":
                m_command = new ControlsScenePanToolClass();
                break;

            case "3DExtent":
                m_command = new ControlsSceneFullExtentCommandClass();
                break;

            case "3DSel":
                m_command = new ControlsSceneSelectGraphicsToolClass();
                break;
            }
            if (m_command is ITool)
            {
                m_command.OnCreate(m_sceneControl.Object);
                m_sceneControl.CurrentTool = (ITool)m_command;
            }
            if (m_command is ICommand)
            {
                m_command.OnCreate(m_sceneControl.Object);
                m_command.OnClick();
            }
            m_command = null;

            if (toolName == "3DAddTIN")
            {
                FolderBrowserDialog fdlg = new FolderBrowserDialog();
                fdlg.Description = "打开TIN";
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    IWorkspaceFactory wsFac = new TinWorkspaceFactoryClass();
                    if (wsFac.IsWorkspace(System.IO.Path.GetDirectoryName(fdlg.SelectedPath)))
                    {
                        ITinWorkspace tinWS  = wsFac.OpenFromFile(System.IO.Path.GetDirectoryName(fdlg.SelectedPath), 0) as ITinWorkspace;
                        ITinLayer     tinLyr = new TinLayerClass();
                        try
                        {
                            tinLyr.Dataset = tinWS.OpenTin(System.IO.Path.GetFileName(fdlg.SelectedPath));
                            this.m_sceneControl.Scene.AddLayer((ILayer)tinLyr, false);
                            SetTinAsBase(tinLyr);
                        }
                        catch
                        {
                            MessageBox.Show("请选择有效的TIN文件!");
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选择有效的TIN文件!");
                        return;
                    }
                }
            }

            if (toolName == "3DAddDEM")
            {
                FolderBrowserDialog fdlg = new FolderBrowserDialog();
                fdlg.Description = "打开DEM";
                if (fdlg.ShowDialog() == DialogResult.OK)
                {
                    IWorkspaceFactory wsFac = new RasterWorkspaceFactoryClass();
                    if (wsFac.IsWorkspace(System.IO.Path.GetDirectoryName(fdlg.SelectedPath)))
                    {
                        IRasterWorkspace tinWS  = wsFac.OpenFromFile(System.IO.Path.GetDirectoryName(fdlg.SelectedPath), 0) as IRasterWorkspace;
                        IRasterLayer     rasLyr = new RasterLayerClass();
                        try
                        {
                            rasLyr.CreateFromDataset(tinWS.OpenRasterDataset(System.IO.Path.GetFileName(fdlg.SelectedPath)));
                            this.m_sceneControl.Scene.AddLayer((ILayer)rasLyr, false);
                            SetlayerSurface(rasLyr, 1);
                            //this.axSceneControl1.Refresh();
                        }
                        catch
                        {
                            MessageBox.Show("请选择有效的DEM文件!");
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选择有效的DEM文件!");
                        return;
                    }
                }
            }
        }
예제 #18
0
 public bool GetLayerFormDataset(IDataset pDataset, Collection pLayersColl)
 {
     try
     {
         if (pDataset == null)
         {
             return(false);
         }
         if (pLayersColl == null)
         {
             return(false);
         }
         if (pDataset.Type == esriDatasetType.esriDTFeatureDataset)
         {
             IFeatureLayer          item      = null;
             IFeatureClassContainer container = pDataset as IFeatureClassContainer;
             if (container.ClassCount > 0)
             {
                 int           classIndex = 0;
                 IFeatureClass class2     = null;
                 for (classIndex = 0; classIndex <= (container.ClassCount - 1); classIndex++)
                 {
                     class2 = container.get_Class(classIndex);
                     if (class2.FeatureType == esriFeatureType.esriFTAnnotation)
                     {
                         item = new FDOGraphicsLayerClass() as IFeatureLayer;
                     }
                     else if (class2.FeatureType == esriFeatureType.esriFTCoverageAnnotation)
                     {
                         item = new CoverageAnnotationLayerClass() as IFeatureLayer;
                     }
                     else if (class2.FeatureType == esriFeatureType.esriFTDimension)
                     {
                         item = new DimensionLayerClass() as IFeatureLayer;
                     }
                     else
                     {
                         item = new FeatureLayerClass();
                     }
                     item.FeatureClass = class2;
                     item.Name         = pDataset.Name + " " + class2.AliasName;
                     pLayersColl.Add(item, item.Name, null, null);
                 }
             }
         }
         else if (pDataset.Type == esriDatasetType.esriDTFeatureClass)
         {
             IFeatureLayer layer2 = null;
             IFeatureClass class3 = pDataset as IFeatureClass;
             if (class3.FeatureType == esriFeatureType.esriFTAnnotation)
             {
                 layer2 = new FDOGraphicsLayerClass() as IFeatureLayer;
             }
             else if (class3.FeatureType == esriFeatureType.esriFTCoverageAnnotation)
             {
                 layer2 = new CoverageAnnotationLayerClass() as IFeatureLayer;
             }
             else if (class3.FeatureType == esriFeatureType.esriFTDimension)
             {
                 layer2 = new DimensionLayerClass() as IFeatureLayer;
             }
             else
             {
                 layer2 = new FeatureLayerClass();
             }
             layer2.FeatureClass = class3;
             layer2.Name         = class3.AliasName;
             pLayersColl.Add(layer2, layer2.Name, null, null);
         }
         else if (pDataset.Type == esriDatasetType.esriDTPlanarGraph)
         {
             Interaction.MsgBox("暂时不支持 Planar Graph 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else if (pDataset.Type == esriDatasetType.esriDTGeometricNetwork)
         {
             Interaction.MsgBox("暂时不支持 Geometric Network 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else if (pDataset.Type == esriDatasetType.esriDTTopology)
         {
             Interaction.MsgBox("暂时不支持 Topology 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else if (pDataset.Type == esriDatasetType.esriDTText)
         {
             Interaction.MsgBox("暂时不支持 Text Dataset 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else if (pDataset.Type == esriDatasetType.esriDTTable)
         {
             Interaction.MsgBox("暂时不支持 Table Dataset 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else if (pDataset.Type == esriDatasetType.esriDTRelationshipClass)
         {
             Interaction.MsgBox("暂时不支持 Relationship Class 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else if (pDataset.Type == esriDatasetType.esriDTRasterDataset)
         {
             IRasterDataset rasterDataset = pDataset as IRasterDataset;
             IRasterLayer   layer3        = new RasterLayerClass();
             layer3.CreateFromDataset(rasterDataset);
             layer3.Name = pDataset.Name;
             pLayersColl.Add(layer3, layer3.Name, null, null);
         }
         else if (pDataset.Type == esriDatasetType.esriDTRasterBand)
         {
             Interaction.MsgBox("暂时不支持 Raster Band 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else if (pDataset.Type == esriDatasetType.esriDTTin)
         {
             ITinLayer layer4 = new TinLayerClass {
                 Dataset = pDataset as ITin,
                 Name    = pDataset.Name
             };
             pLayersColl.Add(layer4, layer4.Name, null, null);
         }
         else if (pDataset.Type == esriDatasetType.esriDTCadDrawing)
         {
             Interaction.MsgBox("暂时不支持 Cad Drawing 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else if (pDataset.Type == esriDatasetType.esriDTRasterCatalog)
         {
             Interaction.MsgBox("暂时不支持 Raster Catalog 格式的数据。", MsgBoxStyle.Information, "数据格式不支持");
         }
         else
         {
             Interaction.MsgBox("无法识别的数据格式。", MsgBoxStyle.Information, "数据格式错误");
         }
         return(true);
     }
     catch (Exception exception)
     {
         this.mErrOpt.ErrorOperate(this.mSubSysName, "FunFactory.LayerFun", "GetLayerFormDataset", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", "");
         return(false);
     }
 }
예제 #19
0
        private void 创建TinToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IFeatureClass pFeatureClass = GetFeatureClass(@".\data\IDW数据", "山东20100321");

            IField pField = pFeatureClass.Fields.get_Field(pFeatureClass.FindField("H"));

            ITin pTin = CreateTin(pFeatureClass, pField, @".\data\IDW数据\TinTest");

            ITinLayer pTinLayer = new TinLayerClass();

            pTinLayer.Dataset = pTin;

            axMapControl1.Map.AddLayer(pTinLayer as ILayer);
        }