/// <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); }
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); } } } }
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; }
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); }
/// <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); }
//根据图层名获取图层 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; } } } }
//通过图层名查找图层 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); }
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); } } } } }
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); }
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(""); }
/// <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; } }
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); }
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); }
//判断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); }
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; } } } }
//在窗体加载时执行本函数,加载所有具有选择要素的图层 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 + " 个要素。"; }
/// <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(); }
//判断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); }
//根据 图幅号 搜索 接合表图层 得到相应的 范围 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); }
//处理图层组内部图层间的顺序号 //如果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); } } } }
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; }
/// <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; }
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); }
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; }
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); } }
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 } } }