//1 使可以选择对象。
public void SelectPoint() { foreach (Layer currentLayer in m_mapControl.Map.Layers) { Dataset dataset = currentLayer.Dataset; #region //这里必须加dataset!= null 这样可以先判读dataset。 //如果dataset为空。就可以不执行dataset.Name == "EQPoint" //如果不加dataset!=null,如果dataset为空时,执行dataset.Name == "EQPoint"会使程序崩掉 //dataset.Name 要使用对象属性,先要保证对象不为空 #endregion if (dataset != null && dataset.Name == "Point") { currentLayer.IsSelectable = true; } else { currentLayer.IsSelectable = false; } } SetMapAction(Action.Select); //设置为可以选择地图图形对象,select只能点击选择,不能框选 }//2 触发图形对象选择事件,选点----》取点id----》根据点id取有关所有面id---》根据面ID找到
void m_mapControl_GeometrySelected(object sender, GeometrySelectedEventArgs e) { Recordset recordsetSelected = null; //获得选中的点对象。因为设了Acton.select 所以只能选中一个对象 Selection[] arrSelections = m_mapControl.Map.FindSelection(true); if (arrSelections != null && arrSelections.Length != 0) { //把选择集转化为记录集 recordsetSelected = arrSelections[0].ToRecordset(); //要从记录集取数据,就先移到第一行 recordsetSelected.MoveFirst(); if (!recordsetSelected.IsEOF) { //获得选中点 在EQPoint表中第三列值,即linkID Object objSelectedLinkID = recordsetSelected.GetFieldValue(2); string strSelectedLinkID = objSelectedLinkID.ToString(); rs_EQCon = ds_EQCon.Query("ID='" + strSelectedLinkID + "'", CursorType.Static); //获得记录集中所有AAC ArrayList arrlistAAC = new ArrayList(); rs_EQCon.MoveFirst(); while (!rs_EQCon.IsEOF) { object objSelectedAAC = rs_EQCon.GetFieldValue(5); if (!arrlistAAC.Contains(objSelectedAAC)) //如果Arraylist中有的就不加入了 { arrlistAAC.Add(objSelectedAAC.ToString()); } rs_EQCon.MoveNext(); } string strSelectedAAC = FormatArrayList(arrlistAAC); ShowThemeLayer(strSelectedAAC); rs_EQCon.Dispose(); } } recordsetSelected.Dispose(); }private string FormatArrayList(ArrayList arrlist) { StringBuilder strBuilder = new StringBuilder(); strBuilder.Append("("); for (int i = 0; i < arrlist.Count; i++) { strBuilder.Append("'" + arrlist[i].ToString() + "'"); if (i < arrlist.Count - 1) { strBuilder.Append(","); } } strBuilder.Append(")"); return strBuilder.ToString(); }
/// <summary> /// 根据条件筛选出需要的面 /// </summary> private void ShowThemeLayer(string strSelectedAAC) { m_mapControl.Map.Layers.Remove(str_ThemeLayerName); DatasetVector dsvCON = m_workspace.Datasources[0].Datasets["mian"] as DatasetVector; ThemeLabel themeLabel = new ThemeLabel(); themeLabel.LabelExpression = "city"; TextStyle textStyle = new TextStyle(); textStyle.ForeColor = Color.Red; textStyle.FontHeight = 8; textStyle.IsSizeFixed = true; themeLabel.UniformStyle = textStyle; Layer layerCON = m_mapControl.Map.Layers.Add(dsvCON, themeLabel, true); QueryParameter parameter = new QueryParameter(); string strFilter = "mianID in " + strSelectedAAC; parameter.AttributeFilter = strFilter; layerCON.DisplayFilter = parameter; str_ThemeLayerName = layerCON.Name; m_mapControl.Map.Refresh(); }