Example #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="map"></param>
 /// <param name="layerName"></param>
 /// <returns></returns>
 private IFeatureLayer GetFeatureLayerByName(IMap map, String layerName)
 {
     // 对地图中的图层进行遍历
     for (int i = 0; i < map.LayerCount; i++)
     {
         // 如果该地图为图层组类型,则分别对包含的每个图层进行遍历操作
         if (map.get_Layer(i) is GroupElement)
         {
             // 使用ImopositeLayer接口进行遍历操作
             ICompositeLayer compositeLayer = currentMap.get_Layer(i) as ICompositeLayer;
             for (int j = 0; j < compositeLayer.Count; j++)
             {
                 if (layerName == compositeLayer.get_Layer(j).Name)
                 {
                     return(compositeLayer.get_Layer(i) as IFeatureLayer);
                 }
             }
         }
         else
         {
             if (map.get_Layer(i).Name == layerName)
             {
                 return(map.get_Layer(i) as IFeatureLayer);
             }
         }
     }
     return(null);
 }
Example #2
0
        private void LoopGetWorkspacePathName(ICompositeLayer layer, ref List <string> workspaceList)
        {
            ICompositeLayer cplayer  = layer as ICompositeLayer;
            IFeatureClass   fc       = null;
            ILayer          tmpLayer = null;
            string          tmp_ws   = "";

            for (int j = 0; j < cplayer.Count; j++)
            {
                tmpLayer = cplayer.get_Layer(j);
                if (tmpLayer is ICompositeLayer)
                {
                    LoopGetWorkspacePathName(tmpLayer as ICompositeLayer, ref workspaceList);
                }
                else if (tmpLayer is IFeatureLayer && (tmpLayer as IFeatureLayer).FeatureClass != null)
                {
                    fc     = (cplayer.get_Layer(j) as IFeatureLayer).FeatureClass;
                    tmp_ws = (fc as IDataset).Workspace.PathName;
                    if (workspaceList.Contains(tmp_ws) == false)
                    {
                        workspaceList.Add(tmp_ws);
                    }
                }
            }
        }
Example #3
0
 public FormQuery(FormMainOperation formMainOperation)
 {
     InitializeComponent();
     m_FrmMainOper = formMainOperation;
     m_pCurMap     = m_FrmMainOper(OperationType.GetMap) as IMap;
     for (int i = 0; i < m_pCurMap.LayerCount; i++)
     {
         ILayer pCurLayer = m_pCurMap.get_Layer(i);
         if (pCurLayer is GroupLayer)
         {
             ICompositeLayer curComLayer = pCurLayer as ICompositeLayer;
             for (int j = 0; j < curComLayer.Count; j++)
             {
                 CbBox_TargetLayer.Items.Add(curComLayer.get_Layer(j).Name);
                 CbBox_SourceLayer.Items.Add(curComLayer.get_Layer(j).Name);
             }
         }
         else
         {
             CbBox_TargetLayer.Items.Add(m_pCurMap.get_Layer(i).Name);
             CbBox_SourceLayer.Items.Add(m_pCurMap.get_Layer(i).Name);
         }
     }
     if (CbBox_TargetLayer.Items.Count > 0)
     {
         pSelectedFeatureLayer           = m_pCurMap.get_Layer(0) as IFeatureLayer;
         CbBox_TargetLayer.SelectedIndex = 0;
         CbBox_SourceLayer.SelectedIndex = 0;
     }
     CbBox_SelectionSetOperationType.SelectedIndex = 0;
 }
Example #4
0
        private IFeatureLayer LoopGetFeatureLayerByLayerName(ICompositeLayer layer, string LayerName)
        {
            ICompositeLayer cplayer = layer as ICompositeLayer;
            IFeatureLayer   fLayer  = null;

            for (int j = 0; j < cplayer.Count; j++)
            {
                if (cplayer.get_Layer(j) is ICompositeLayer)
                {
                    fLayer = LoopGetFeatureLayerByLayerName(cplayer.get_Layer(j) as ICompositeLayer, LayerName);
                    if (fLayer != null)
                    {
                        return(fLayer);
                    }
                }
                else if (cplayer.get_Layer(j) is IFeatureLayer && (cplayer.get_Layer(j) as IFeatureLayer).FeatureClass != null)
                {
                    fLayer = cplayer.get_Layer(j) as IFeatureLayer;
                    if (fLayer.Name.ToUpper() == LayerName.ToUpper())
                    {
                        return(fLayer);
                    }
                }
            }
            return(null);
        }
Example #5
0
 /// <summary>
 /// 在地图中根据图层名称获得矢量图层。
 /// </summary>
 /// <param name="map">当前地图</param>
 /// <param name="layerName">图层名称</param>
 /// <returns>IFeatureLayer接口的矢量图层对象</returns>
 private IFeatureLayer GetFeatureLayerByName(IMap map, string layerName)
 {
     //对地图中的图层进行遍历
     for (int i = 0; i < map.LayerCount; i++)
     {
         //如果该图层为图层组类型,则分别对所包含的每个图层进行操作
         if (map.get_Layer(i) is GroupLayer)
         {
             //使用ICompositeLayer接口进行遍历操作
             ICompositeLayer compositeLayer = map.get_Layer(i) as ICompositeLayer;
             for (int j = 0; j < compositeLayer.Count; j++)
             {
                 //如果图层名称为所要查询的图层名称,则返回IFeatureLayer接口的矢量图层对象
                 if (compositeLayer.get_Layer(j).Name == layerName)
                 {
                     return((IFeatureLayer)compositeLayer.get_Layer(j));
                 }
             }
         }
         //如果图层不是图层组类型,则直接进行判断
         else
         {
             if (map.get_Layer(i).Name == layerName)
             {
                 return((IFeatureLayer)map.get_Layer(i));
             }
         }
     }
     return(null);
 }
Example #6
0
        //根据图层名获取图层
        public static ILayer GetLayerByName(IMap map, string layerName)
        {
            if (map == null || layerName == "")
            {
                return(null);
            }
            ILayer          layer          = null;
            ICompositeLayer compositeLayer = null;

            for (int i = 0; i < map.LayerCount; i++)
            {
                layer = map.get_Layer(i);
                if (layer is ICompositeLayer || layer is GroupLayer)
                {
                    compositeLayer = layer as ICompositeLayer;
                    for (int j = 0; j < compositeLayer.Count; j++)
                    {
                        if (compositeLayer.get_Layer(j).Name == layerName)
                        {
                            return(compositeLayer.get_Layer(j));
                        }
                    }
                }
                else
                {
                    if (layer.Name == layerName)
                    {
                        return(layer);
                    }
                }
            }
            return(null);
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBoxFields.Items.Clear();
            listBoxValues.Items.Clear();

            IField field;   //设置临时变量存储使用IField接口的对象

            for (int i = 0; i < currentMap.LayerCount; i++)
            {
                if (currentMap.get_Layer(i) is GroupLayer)
                {
                    ICompositeLayer compositeLayer = currentMap.get_Layer(i) as ICompositeLayer;
                    for (int j = 0; j < compositeLayer.Count; j++)
                    {
                        //判断图层的名称是否与comboBoxLayerName控件中选择的图层名称相同
                        if (compositeLayer.get_Layer(j).Name == comboBox1.SelectedItem.ToString())
                        {
                            //如果相同则设置为整个窗体所使用的IFeatureLayer接口对象
                            currentFeatureLayer = compositeLayer.get_Layer(j) as IFeatureLayer;
                            break;
                        }
                    }
                }
                else
                {
                    //判断图层的名称是否与comboBoxLayerName中选择的图层名称相同
                    if (currentMap.get_Layer(i).Name == comboBox1.SelectedItem.ToString())
                    {
                        //如果相同则设置为整个窗体所使用的IFeatureLayer接口对象
                        currentFeatureLayer = currentMap.get_Layer(i) as IFeatureLayer;
                        break;
                    }
                }
            }
        }
Example #8
0
 //通过图层名查找图层
 private IFeatureLayer GetFEaturreByName(IMap pmap, string layerName)
 {
     //遍历地图中的图层
     for (int i = 0; i < pmap.LayerCount; i++)
     {
         if (pmap.get_Layer(i) is GroupLayer)
         {
             ICompositeLayer pCompositeLayer = pmap.get_Layer(i) as ICompositeLayer;
             for (int j = 0; j < pCompositeLayer.Count; j++)
             {
                 if (pCompositeLayer.get_Layer(j).Name == layerName)
                 {
                     return((IFeatureLayer)pCompositeLayer.get_Layer(j));
                 }
             }
         }
         else
         {
             if (pmap.get_Layer(i).Name == layerName)
             {
                 return((IFeatureLayer)pmap.get_Layer(i));
             }
         }
     }
     return(null);
 }
Example #9
0
        private void LoopGetLayerNameOfWorkSpace(ICompositeLayer layer, ref List <string> fcNameList, string WorkSpacePath)
        {
            ICompositeLayer cplayer  = layer as ICompositeLayer;
            ILayer          tmplayer = null;
            IFeatureClass   fc       = null;
            string          fcName   = "";
            string          tmp_ws   = "";

            for (int j = 0; j < cplayer.Count; j++)
            {
                tmplayer = cplayer.get_Layer(j);
                if (tmplayer is ICompositeLayer)
                {
                    LoopGetLayerNameOfWorkSpace(tmplayer as ICompositeLayer, ref fcNameList, WorkSpacePath);
                }
                else if (tmplayer is IFeatureLayer && (tmplayer as IFeatureLayer).FeatureClass != null)
                {
                    fcName = (cplayer.get_Layer(j) as IFeatureLayer).Name;
                    fc     = (cplayer.get_Layer(j) as IFeatureLayer).FeatureClass;
                    tmp_ws = (fc as IDataset).Workspace.PathName;
                    if (tmp_ws == WorkSpacePath)
                    {
                        if (fcNameList.Contains(fcName) == false)
                        {
                            fcNameList.Add(fcName);
                        }
                    }
                }
            }
        }
Example #10
0
        private IFeatureClass LoopGetFeatureClass(ICompositeLayer layer, string featureClassName)
        {
            ICompositeLayer cplayer = layer as ICompositeLayer;
            IFeatureClass   fc      = null;

            for (int j = 0; j < cplayer.Count; j++)
            {
                if (cplayer.get_Layer(j) is ICompositeLayer)
                {
                    fc = LoopGetFeatureClass(cplayer.get_Layer(j) as ICompositeLayer, featureClassName);
                    if (fc != null)
                    {
                        return(fc);
                    }
                }
                if (cplayer.get_Layer(j) is IFeatureLayer && (cplayer.get_Layer(j) as IFeatureLayer).FeatureClass != null)
                {
                    fc = (cplayer.get_Layer(j) as IFeatureLayer).FeatureClass;
                    if (this.GetDataSetName(fc).ToUpper() == featureClassName.ToUpper())
                    {
                        return(fc);
                    }
                }
            }
            return(null);
        }
Example #11
0
        private string LoopGetLayerName(ICompositeLayer layer, string featureClassName)
        {
            string          LayerName = "";
            ICompositeLayer cplayer   = layer;

            for (int j = 0; j < cplayer.Count; j++)
            {
                if (cplayer.get_Layer(j) is ICompositeLayer)
                {
                    LayerName = LoopGetLayerName(cplayer.get_Layer(j) as ICompositeLayer, featureClassName);
                    if (LayerName != "")
                    {
                        return(LayerName);
                    }
                }
                else if (cplayer.get_Layer(j) is IFeatureLayer)
                {
                    IFeatureLayer fLayer = cplayer.get_Layer(j) as IFeatureLayer;
                    if ((fLayer != null) &&
                        (fLayer.FeatureClass != null) &&
                        (fLayer.FeatureClass.FeatureType == esriFeatureType.esriFTSimple ||
                         fLayer.FeatureClass.FeatureType == esriFeatureType.esriFTAnnotation) &&
                        this.GetDataSetName(fLayer.FeatureClass).ToUpper() == featureClassName.ToUpper())
                    {
                        return(fLayer.Name);
                    }
                }
            }
            return("");
        }
Example #12
0
 /// <summary>
 /// 添加图层到COMBOX
 /// </summary>
 /// <param name="pMapControl"></param>
 /// <param name="cbxLayerName"></param>
 public static void AddDataToCom(IMap pMapControl, ComboBoxItem cbxLayerName)
 {
     for (int i = 0; i < pMapControl.LayerCount; i++)
     {
         ILayer pLayer = pMapControl.get_Layer(i);
         if (pLayer is IGroupLayer)
         {
             ICompositeLayer pCompositeLayer = pLayer as ICompositeLayer;
             for (int j = 0; j < pCompositeLayer.Count; j++)
             {
                 if (pCompositeLayer.get_Layer(j) is IFeatureLayer)
                 {
                     cbxLayerName.Items.Add(pCompositeLayer.get_Layer(j).Name);
                 }
             }
         }
         else
         {
             if (pLayer is IFeatureLayer)
             {
                 cbxLayerName.Items.Add(pMapControl.get_Layer(i).Name);
             }
         }
     }
     if (cbxLayerName.Items.Count != 0)
     {
         cbxLayerName.SelectedIndex = 0;
     }
 }
Example #13
0
        private static ILayer funReturnLayerByLayerName(IMapControl3 mainMap, string strLayerName)
        {
            ILayer pLayer = null;
            ILayer pL     = null;

            for (int i = 0; i < mainMap.LayerCount; i++)
            {
                pL = mainMap.get_Layer(i);
                if (pL is IGroupLayer)
                {
                    ICompositeLayer pGL = pL as ICompositeLayer;
                    for (int j = 0; j < pGL.Count; j++)
                    {
                        if (pGL.get_Layer(j).Name == strLayerName)
                        {
                            pLayer = pGL.get_Layer(j);
                        }
                    }
                }
                if (pL.Name == strLayerName)
                {
                    pLayer = pL;
                }
            }
            return(pLayer);
        }
Example #14
0
        private ILayer GetLayerForCompositeLayer(ILayer layer, string lyrName)
        {
            ILayer          pLayer    = null;
            ICompositeLayer pComLayer = (ICompositeLayer)layer;

            for (int i = 0; i < pComLayer.Count; i++)
            {
                if (pComLayer.get_Layer(i) is ICompositeLayer)
                {
                    pLayer = GetLayerForCompositeLayer(pComLayer.get_Layer(i), lyrName);
                    if (pLayer != null)
                    {
                        return(pLayer);
                    }
                }
                else
                {
                    if (pComLayer.get_Layer(i).Name.Equals(lyrName, StringComparison.OrdinalIgnoreCase))
                    {
                        pLayer = pComLayer.get_Layer(i);
                        return(pLayer);
                    }
                }
            }
            return(pLayer);
        }
Example #15
0
        //判断layer是否在当前地图
        private ILayer isExistLayer(IMap inMap, string strLayerName)
        {
            ILayer res = null;

            for (int i = 0; i < inMap.LayerCount; i++)
            {
                ILayer pLayer = inMap.get_Layer(i);
                if (pLayer is IGroupLayer)
                {
                    ICompositeLayer pCLayer = pLayer as ICompositeLayer;
                    for (int j = 0; j < pCLayer.Count; j++)
                    {
                        if (pCLayer.get_Layer(j).Name == strLayerName)
                        {
                            res = pCLayer.get_Layer(j);

                            break;
                        }
                    }
                }
                else//不是grouplayer
                {
                    if (pLayer.Name == strLayerName)
                    {
                        res = pLayer;

                        break;
                    }
                }
            }
            return(res);
        }
Example #16
0
 private void comboBoxLayerName_SelectedIndexChanged(object sender, EventArgs e)
 {
     for (int i = 0; i < currentMap.LayerCount; i++)
     {
         if (currentMap.get_Layer(i) is GroupLayer)
         {
             ICompositeLayer compositeLayer = currentMap.get_Layer(i) as ICompositeLayer;
             for (int j = 0; j < compositeLayer.Count; j++)
             {
                 //判断图层的名称是否与comboBoxLayerName控件中选择的图层名称相同
                 if (compositeLayer.get_Layer(j).Name == comboBoxLayerName.SelectedItem.ToString())
                 {
                     //如果相同则设置为整个窗体所使用的IFeatureLayer接口对象
                     currentFeatureLayer = compositeLayer.get_Layer(j) as IFeatureLayer;
                     break;
                 }
             }
         }
         else
         {
             //判断图层的名称是否与comboBoxLayerName中选择的图层名称相同
             if (currentMap.get_Layer(i).Name == comboBoxLayerName.SelectedItem.ToString())
             {
                 //如果相同则设置为整个窗体所使用的IFeatureLayer接口对象
                 currentFeatureLayer = currentMap.get_Layer(i) as IFeatureLayer;
                 break;
             }
         }
     }
 }
Example #17
0
        //在窗体加载时执行本函数,加载所有具有选择要素的图层
        private void FormSelection_Load(object sender, EventArgs e)
        {
            this.StartPosition = FormStartPosition.CenterScreen;
            IFeatureLayer featureLayer; //设置临时变量存储当前矢量图层
            string        layerName;    //设置临时变量存储当前图层的名称
            TreeNode      treeNode;     //设置临时变量存储当前树节点的信息

            //对Map中的每个图层进行判断并加载图层名称
            for (int i = 0; i < currentMap.LayerCount; i++)
            {
                if (currentMap.get_Layer(i) is IFeatureLayer)
                {
                }
                else
                {
                    break;
                }
                //如果该图层为图层组类型,则分别对所包含的每个图层进行操作
                if (currentMap.get_Layer(i) is GroupLayer)
                {
                    //使用ICompositeLayer接口进行遍历操作
                    ICompositeLayer compositeLayer = currentMap.get_Layer(i) as ICompositeLayer;
                    for (int j = 0; j < compositeLayer.Count; j++)
                    {
                        //得到图层的名称
                        layerName = compositeLayer.get_Layer(j).Name;
                        //得到矢量图层对象的IFeatureLayer接口
                        featureLayer = (IFeatureLayer)compositeLayer.get_Layer(j);
                        //如果该图层选择集中的要素不为空,则在TreeView控件中添加一个树节点
                        if (((IFeatureSelection)featureLayer).SelectionSet.Count > 0)
                        {
                            //新建一个树节点,将图层名称作为树节点的名称
                            treeNode = new TreeNode(layerName);
                            //利用树节点的Tag属性,存储当前图层的IFeatureLayer接口信息
                            treeNode.Tag = featureLayer;
                            //将新建的树节点添加到TreeView控件中的根节点下
                            treeViewLayers.TopNode.Nodes.Add(treeNode);
                        }
                    }
                }
                // 如果图层不是图层组类型,则同样在TreeView控件中的根节点下添加节点
                else
                {
                    layerName    = currentMap.get_Layer(i).Name;
                    featureLayer = (IFeatureLayer)currentMap.get_Layer(i);
                    if (((IFeatureSelection)featureLayer).SelectionSet.Count > 0)
                    {
                        treeNode     = new TreeNode(layerName);
                        treeNode.Tag = featureLayer;
                        treeViewLayers.TopNode.Nodes.Add(treeNode);
                    }
                }
            }
            //添加完节点后将根节点展开以显示所有的图层
            treeViewLayers.TopNode.Expand();
            //通过IMap接口的SelectionCount属性可以获取被选择要素的数量
            labelMapSelectionCount.Text = "当前地图共选择了 " + currentMap.SelectionCount + " 个要素。";
        }
Example #18
0
        /// <summary>
        /// 更新所有数据事件
        /// </summary>
        public void UpdateData()
        {
            IFeatureLayer featureLayer; //设置临时变量存储当前矢量图层
            string        layerName;    //设置临时变量存储当前图层的名称
            TreeNode      treeNode;     //设置临时变量存储当前树节点的信息


            //首先清空DataGridView中的行和列
            dataGridView.Columns.Clear();
            dataGridView.Rows.Clear();
            treeViewLayers.TopNode.Nodes.Clear();  // 清空树节点

            //对Map中的每个图层进行判断并加载图层名称
            for (int i = 0; i < currentMap.LayerCount; i++)
            {
                //如果该图层为图层组类型,则分别对所包含的每个图层进行操作
                if (currentMap.get_Layer(i) is GroupLayer)
                {
                    //使用ICompositeLayer接口进行遍历操作
                    ICompositeLayer compositeLayer = currentMap.get_Layer(i) as ICompositeLayer;
                    for (int j = 0; j < compositeLayer.Count; j++)
                    {
                        //得到图层的名称
                        layerName = compositeLayer.get_Layer(j).Name;
                        //得到矢量图层对象的IFeatureLayer接口
                        featureLayer = (IFeatureLayer)compositeLayer.get_Layer(j);
                        //如果该图层选择集中的要素不为空,则在TreeView控件中添加一个树节点
                        if (((IFeatureSelection)featureLayer).SelectionSet.Count > 0)
                        {
                            //新建一个树节点,将图层名称作为树节点的名称
                            treeNode = new TreeNode(layerName);
                            //利用树节点的Tag属性,存储当前图层的IFeatureLayer接口信息
                            treeNode.Tag = featureLayer;
                            //将新建的树节点添加到TreeView控件中的根节点下
                            treeViewLayers.TopNode.Nodes.Add(treeNode);
                        }
                    }
                }
                //如果图层不是图层组类型,则同样在TreeView控件中的根节点下添加节点
                else
                {
                    layerName    = currentMap.get_Layer(i).Name;
                    featureLayer = (IFeatureLayer)currentMap.get_Layer(i);
                    if (((IFeatureSelection)featureLayer).SelectionSet.Count > 0)
                    {
                        treeNode     = new TreeNode(layerName);
                        treeNode.Tag = featureLayer;
                        treeViewLayers.TopNode.Nodes.Add(treeNode);
                    }
                }
            }
            //添加完节点后将根节点展开以显示所有的图层
            treeViewLayers.TopNode.Expand();
            //通过IMap接口的SelectionCount属性可以获取被选择要素的数量
            labelMapSelectionCount.Text = "当前地图共选择了 " + currentMap.SelectionCount + " 个要素。";
        }
        //在图层名称下拉框控件中所选择图层发生改变时触发事件,执行本函数
        private void comboBoxLayerName_SelectedIndexChanged(object sender, EventArgs e)
        {
            //首先将字段列表和字段值列表清空
            listBoxFields.Items.Clear();
            listBoxValues.Items.Clear();

            IField field;   //设置临时变量存储使用IField接口的对象

            for (int i = 0; i < currentMap.LayerCount; i++)
            {
                if (currentMap.get_Layer(i) is GroupLayer)
                {
                    ICompositeLayer compositeLayer = currentMap.get_Layer(i) as ICompositeLayer;
                    for (int j = 0; j < compositeLayer.Count; j++)
                    {
                        //判断图层的名称是否与comboBoxLayerName控件中选择的图层名称相同
                        if (compositeLayer.get_Layer(j).Name == comboBoxLayerName.SelectedItem.ToString())
                        {
                            //如果相同则设置为整个窗体所使用的IFeatureLayer接口对象
                            currentFeatureLayer = compositeLayer.get_Layer(j) as IFeatureLayer;
                            break;
                        }
                    }
                }
                else
                {
                    //判断图层的名称是否与comboBoxLayerName中选择的图层名称相同
                    if (currentMap.get_Layer(i).Name == comboBoxLayerName.SelectedItem.ToString())
                    {
                        //如果相同则设置为整个窗体所使用的IFeatureLayer接口对象
                        currentFeatureLayer = currentMap.get_Layer(i) as IFeatureLayer;
                        break;
                    }
                }
            }

            //使用IFeatureClass接口对该图层的所有属性字段进行遍历,并填充listBoxFields控件
            for (int i = 0; i < currentFeatureLayer.FeatureClass.Fields.FieldCount; i++)
            {
                //根据索引值获取图层的字段
                field = currentFeatureLayer.FeatureClass.Fields.get_Field(i);
                //排除SHAPE字段,并在其它字段名称前后添加字符"和字符"
                if (field.Name.ToUpper() != "SHAPE")
                {
                    listBoxFields.Items.Add("\"" + field.Name + "\"");
                }
            }

            //更新labelwhere控件中的图层名称信息
            labelwhere.Text = currentFeatureLayer.Name + " WHERE:";

            //将显示where语句的文本框内容清空
            textBoxWhere.Clear();
        }
Example #20
0
        //判断layer是否在当前地图
        public static ILayer isExistLayer(IMap inMap)
        {
            string strLayerName = "";

            try
            {
                strLayerName = getLayerName();
            }
            catch
            {
            }
            ILayer res = null;

            for (int i = 0; i < inMap.LayerCount; i++)
            {
                ILayer pLayer = inMap.get_Layer(i);
                if (pLayer is IGroupLayer)
                {
                    ICompositeLayer pCLayer = pLayer as ICompositeLayer;
                    for (int j = 0; j < pCLayer.Count; j++)
                    {
                        IFeatureLayer pFLayer = pCLayer.get_Layer(j) as IFeatureLayer;
                        //added by chulili 20110729 错误保护
                        if (pFLayer == null)
                        {
                            continue;
                        }
                        if ((pFLayer.FeatureClass as IDataset).Name == strLayerName)
                        {
                            res = pCLayer.get_Layer(j);

                            break;
                        }
                    }
                }
                else//不是grouplayer
                {
                    IFeatureLayer pFLayer = pLayer as IFeatureLayer;
                    //added by chulili 20110729 错误保护
                    if (pFLayer == null)
                    {
                        continue;
                    }
                    if ((pFLayer.FeatureClass as IDataset).Name == strLayerName)
                    {
                        res = pLayer;

                        break;
                    }
                }
            }

            return(res);
        }
Example #21
0
        //根据 图幅号 搜索 接合表图层 得到相应的 范围
        private IGeometry getExtentByTFNO(string inTFNO, IMap inMap, bool isLScale, string strLayerName)
        {
            IGeometry psGeometry = null;

            for (int i = 0; i < inMap.LayerCount; i++)
            {
                ILayer pLayer = inMap.get_Layer(i);
                if (pLayer is IGroupLayer)
                {
                    ICompositeLayer pCLayer = pLayer as ICompositeLayer;
                    for (int j = 0; j < pCLayer.Count; j++)
                    {
                        string dName = ((pCLayer.get_Layer(j) as IFeatureLayer).FeatureClass as IDataset).Name;
                        if (dName.Contains("."))
                        {
                            dName = dName.Split('.')[1];
                        }
                        if (dName != strLayerName)
                        {
                            continue;
                        }

                        IFeatureLayer pFLayer = pCLayer.get_Layer(j) as IFeatureLayer;
                        psGeometry = getExtentFromFL(pFLayer, inTFNO, isLScale);
                        if (psGeometry != null)
                        {
                            break;
                        }
                    }
                }
                else//不是grouplayer
                {
                    string dName = ((pLayer as IFeatureLayer).FeatureClass as IDataset).Name;
                    if (dName.Contains("."))
                    {
                        dName = dName.Split('.')[1];
                    }
                    if (dName != strLayerName)
                    {
                        continue;
                    }
                    IFeatureLayer pFLayer = pLayer as IFeatureLayer;
                    psGeometry = getExtentFromFL(pFLayer, inTFNO, isLScale);
                    if (psGeometry != null)
                    {
                        break;
                    }
                }
            }
            return(psGeometry);
        }
Example #22
0
        //处理图层组内部图层间的顺序号
        //如果map中后一个图层的顺序号小于前一个图层,则后一个顺序号修改为前一个顺序号+0.01(为避免重复)
        private void DealLayerOrderIDofGroupLayer(IGroupLayer pGroupLayer)
        {
            if (pGroupLayer == null)
            {
                return;
            }
            ICompositeLayer pComLayer = pGroupLayer as ICompositeLayer;

            if (pComLayer != null)
            {
                if (pComLayer.Count == 0)
                {
                    return;
                }
                //先处理第一个图层
                ILayer pLayer     = pComLayer.get_Layer(0);
                string strOrderid = GetOrderIDofLayer(pLayer);
                double dOrderid   = -1;
                if (!strOrderid.Equals(""))
                {
                    dOrderid = double.Parse(strOrderid);
                }
                if (dOrderid < 0)
                {
                    SetOrderIDofLayer(pLayer, 0.01);
                }
                for (int i = 0; i < pComLayer.Count - 1; i++)
                {
                    ILayer pLayeri      = pComLayer.get_Layer(i);
                    ILayer pLayerj      = pComLayer.get_Layer(i + 1);
                    string strOrderID_i = GetOrderIDofLayer(pLayeri);
                    string strOrderID_j = GetOrderIDofLayer(pLayerj);
                    double dOrderID_i   = -1;
                    double dOrderID_j   = -1;
                    if (!strOrderID_i.Equals(""))
                    {
                        dOrderID_i = double.Parse(strOrderID_i);
                    }
                    if (!strOrderID_j.Equals(""))
                    {
                        dOrderID_j = double.Parse(strOrderID_j);
                    }
                    //如果后一个图层顺序号小于前一个,则重新设置后一个图层顺序号
                    if (dOrderID_j < dOrderID_i)
                    {
                        dOrderID_j = dOrderID_i + 0.01;//+0.01是为了防止顺序号重复,原本顺序号都是整型
                        SetOrderIDofLayer(pLayerj, dOrderID_j);
                    }
                }
            }
        }
Example #23
0
        private void FrmLayerExtract_Load(object sender, EventArgs e)
        {
            int num = 0;

            for (int i = 0; i < _map.LayerCount; i++)
            {
                if (_map.get_Layer(i).Visible)
                {
                    if (_map.get_Layer(i) is IGroupLayer)
                    {
                        ICompositeLayer pCompositeLayer = (ICompositeLayer)_map.get_Layer(i);
                        for (int j = 0; j < pCompositeLayer.Count; j++)
                        {
                            if (pCompositeLayer.get_Layer(j).Visible)
                            {
                                //注记层,不提取
                                if (pCompositeLayer.get_Layer(j) is IAnnotationLayer | pCompositeLayer.get_Layer(j) is GdbRasterCatalogLayer | pCompositeLayer.get_Layer(j) is IRasterLayer)
                                {
                                    continue;
                                }
                                IFeatureLayer pFeatLayer = pCompositeLayer.get_Layer(j) as IFeatureLayer;
                                num++;
                                dgvChoose.Rows.Add(num, pFeatLayer.Name);
                                choseLayer.Add(pFeatLayer);
                            }
                        }
                    }
                    else
                    {
                        if (_map.get_Layer(i) is IAnnotationLayer | _map.get_Layer(i) is GdbRasterCatalogLayer | _map.get_Layer(i) is IRasterLayer)
                        {
                            continue;
                        }
                        IFeatureLayer pFeatLayer = _map.get_Layer(i) as IFeatureLayer;
                        num++;
                        dgvChoose.Rows.Add(num, pFeatLayer.Name);
                        choseLayer.Add(pFeatLayer);
                    }
                }
            }

            //初始化文件类型下拉框
            this.cmbFileStyle.Items.Add("File GeoDatabase");
            this.cmbFileStyle.Items.Add("SHP File");
            this.cmbFileStyle.Items.Add("Personal GeoDatabase");

            this.cmbFileStyle.SelectedIndex = 0;
            this.cmbFileStyle.DropDownStyle = ComboBoxStyle.DropDownList;
            this.txtFileRoute.Enabled       = false;
        }
Example #24
0
        /// <summary>
        /// 获取地图中指定名称的存储元素的Graphics图层,找不到则返回Null
        /// (通过graphicslayer as IGraphicsContainer来增删改查元素,参考:https://www.cnblogs.com/bobird/articles/3169592.html)
        /// </summary>
        /// <param name="map">地图</param>
        /// <param name="layerName">图层名</param>
        /// <returns></returns>
        public static IGraphicsLayer GetGraphicsLayer(this IMap map, string layerName)
        {
            ICompositeGraphicsLayer compositeGrapLayer = map.BasicGraphicsLayer as ICompositeGraphicsLayer;
            ICompositeLayer         compositeLayer     = compositeGrapLayer as ICompositeLayer;

            for (int i = 0; i < compositeLayer.Count; i++)
            {
                if (compositeLayer.get_Layer(i).Name.Equals(layerName))
                {
                    return(compositeLayer.get_Layer(i) as IGraphicsLayer);
                }
            }
            return(null);
        }
        //窗体加载时执行本函数
        private void FormSurfaceFeatureCheck_Load(object sender, EventArgs e)
        {
            IFeatureLayer featureLayer; //设置临时变量存储矢量图层对象

            //将当前图层列表清空
            comLyr.Items.Clear();
            layersHashtable.Clear();
            //清空图层列表
            for (int i = 0; i < checkedListBoxLyr.Items.Count; i++)
            {
                checkedListBoxLyr.Items.Clear();
            }

            string layerName;   //设置临时变量存储图层名称

            //对Map中的每个图层进行判断并加载名称
            for (int i = 0; i < currentMap.LayerCount; i++)
            {
                //如果该图层为图层组类型,则分别对所包含的每个图层进行操作
                if (currentMap.get_Layer(i) is GroupLayer)
                {
                    //使用ICompositeLayer接口进行遍历操作
                    ICompositeLayer compositeLayer = currentMap.get_Layer(i) as ICompositeLayer;
                    for (int j = 0; j < compositeLayer.Count; j++)
                    {
                        //将图层的名称添加到comLyr控件中
                        layerName = compositeLayer.get_Layer(j).Name;
                        //对应的矢量要素
                        featureLayer = (IFeatureLayer)compositeLayer.get_Layer(j);
                        comLyr.Items.Add(layerName);

                        //在哈希表中添加一项,包括图层名称和图层对象
                        layersHashtable.Add(layerName, featureLayer);
                    }
                }
                //如果图层不是图层组类型,则直接添加名称
                else
                {
                    layerName    = currentMap.get_Layer(i).Name;
                    featureLayer = (IFeatureLayer)currentMap.get_Layer(i);

                    comLyr.Items.Add(layerName);
                    layersHashtable.Add(layerName, featureLayer);
                }
            }

            //将comLyr控件的默认选项设置为第一个图层的名称
            comLyr.SelectedIndex = 0;
        }
Example #26
0
 private void method_2(ICompositeLayer icompositeLayer_0)
 {
     for (int i = 0; i < icompositeLayer_0.Count; i++)
     {
         ILayer layer = icompositeLayer_0.get_Layer(i);
         if (layer is IFeatureLayer)
         {
             if ((layer as IFeatureLayer).FeatureClass != null)
             {
                 if (this.method_5(layer))
                 {
                     IFeatureLayer layer2 = layer as IFeatureLayer;
                     if ((layer2 as IFeatureSelection).SelectionSet.Count > 0)
                     {
                         this.cboSourceLayer.Properties.Items.Add(new LayerObject(layer));
                     }
                 }
                 else
                 {
                     this.cboSourceLayer.Properties.Items.Add(new LayerObject(layer));
                 }
             }
         }
         else if (layer is IGroupLayer)
         {
             this.method_2(layer as ICompositeLayer);
         }
     }
 }
        private ILayer GetLayerByName(string sName, IMap pmap)
        {
            ILayer pLayer;

            for (int i = 0; i < pmap.LayerCount; i++)
            {
                pLayer = pmap.get_Layer(i);
                if (pLayer is ICompositeLayer)
                {
                    ICompositeLayer pCLayer = pLayer as ICompositeLayer;
                    for (int j = 0; j < pCLayer.Count; j++)
                    {
                        pLayer = pCLayer.get_Layer(j);
                        if (pLayer is IFeatureLayer)
                        {
                            if (pLayer.Name == sName)
                            {
                                return(pLayer);
                            }
                        }
                    }
                }
                else if (pLayer is IFeatureLayer)
                {
                    if (pLayer.Name == sName)
                    {
                        return(pLayer);
                    }
                }
            }
            return(null);
        }
Example #28
0
        private void _UpdateButtons()
        {
            if (cbxFromLayer.SelectedValue is IFeatureLayer &&
                cbxToLayer.SelectedValue is IFeatureLayer &&
                cbxFromField.SelectedValue is string &&
                cbxToField.SelectedValue is string)
            {
                btnAdd.Enabled = true;
            }
            else
            {
                btnAdd.Enabled = false;
            }

            bool          enableRemove = false;
            IFeatureLayer fromLayer    = cbxFromLayer.SelectedValue as IFeatureLayer;

            if (fromLayer != null)
            {
                ICompositeGraphicsLayer basicGraphicsLayer = (ICompositeGraphicsLayer)_document.FocusMap.BasicGraphicsLayer;
                string          graphicsLayerName          = _GetGraphicsLayerName(fromLayer.FeatureClass);
                ICompositeLayer compositeLayer             = (ICompositeLayer)basicGraphicsLayer;
                for (int i = 0; i < compositeLayer.Count; i++)
                {
                    if (compositeLayer.get_Layer(i).Name == graphicsLayerName)
                    {
                        enableRemove = true;
                        break;
                    }
                }
            }
            btnRemove.Enabled = enableRemove;
        }
Example #29
0
        private void _CheckLayer(ILayer layer, List <ComboBoxItem> featureLayers)
        {
            bool layerUsed = false;

            if (layer is IGroupLayer && layer is ICompositeLayer)
            {
                ICompositeLayer groupLayer = (ICompositeLayer)layer;
                int             layerCount = groupLayer.Count;
                for (int i = 0; i < layerCount; i++)
                {
                    ILayer subLayer = groupLayer.get_Layer(i);
                    _CheckLayer(subLayer, featureLayers);
                }
            }
            else if (layer is IFeatureLayer)
            {
                if (((IFeatureLayer)layer).FeatureClass != null)
                {
                    featureLayers.Add(new ComboBoxItem()
                    {
                        Name = layer.Name, Value = layer
                    });
                    layerUsed = true;
                }
            }

            if (!layerUsed)
            {
//                UrbanDelineationExtension.ReleaseComObject(layer);
            }
        }
Example #30
0
        private void Loop(ICompositeLayer cpsLayers, int ParentTreeLevel, ref List <CustomLayer> List_cl)
        {
            ParentTreeLevel += 3;
            ILayer Layer = null;

            for (int j = 0; j < cpsLayers.Count; j++)
            {
                Layer = cpsLayers.get_Layer(j);
                if (Layer is ICompositeLayer)
                {
                    #region 添加图层组到下拉列表中
                    CustomLayer itemCps = new CustomLayer(Layer);
                    itemCps.TreeLevel = ParentTreeLevel;
                    List_cl.Add(itemCps);
                    #endregion
                    //子图层
                    Loop(Layer as ICompositeLayer, ParentTreeLevel, ref List_cl);
                }
                else
                {
                    #region 添加图层到下拉列表中
                    CustomLayer item = new CustomLayer(Layer);
                    item.TreeLevel = ParentTreeLevel;
                    List_cl.Add(item);
                    #endregion
                }
            }
        }