private void iQueryByLayerToolStripMenuItem_Click(object sender, EventArgs e) { Stopwatch myWatch = Stopwatch.StartNew(); //从MapControl中获取的点图层 IFeatureLayer pointFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer; IFeatureSelection pointFeatureSelection = pointFeatureLayer as IFeatureSelection; //从MapControl中获取的面图层 IFeatureLayer polygonFeatureLayer = axMapControl1.get_Layer(1) as IFeatureLayer; //构建QueryByLayer IQueryByLayer queryByLayer = new QueryByLayerClass(); queryByLayer.FromLayer = pointFeatureLayer; queryByLayer.ByLayer = polygonFeatureLayer; queryByLayer.LayerSelectionMethod = esriLayerSelectionMethod.esriLayerSelectCompletelyWithin; //该参数需要设置 queryByLayer.UseSelectedFeatures = false; ISelectionSet selectionSet = queryByLayer.Select(); pointFeatureSelection.SelectionSet = selectionSet; int count = pointFeatureSelection.SelectionSet.Count; axMapControl1.Refresh(); myWatch.Stop(); string time = myWatch.Elapsed.TotalSeconds.ToString(); MessageBox.Show("The selected point count is " + count.ToString() + "! and " + time + " Seconds"); }
private long SpatialSelect(string sSedCoreLayer, string sSounderLayer, double dblRange, esriUnits eEsriUnitsContant) { IMxDocument pmxdoc = ArcMap.Document as IMxDocument; IMap pmap = pmxdoc.FocusMap; IFeatureSelection pFSel = FindLayer(pmap, sSedCoreLayer) as IFeatureSelection; //pFSel.Clear(); IQueryByLayer pQBLayer = new QueryByLayerClass(); pQBLayer.ByLayer = FindLayer(pmap, sSounderLayer) as IFeatureLayer; pQBLayer.FromLayer = pFSel as IFeatureLayer; pQBLayer.BufferDistance = dblRange; pQBLayer.BufferUnits = eEsriUnitsContant; pQBLayer.ResultType = esriSelectionResultEnum.esriSelectionResultAdd; pQBLayer.LayerSelectionMethod = esriLayerSelectionMethod.esriLayerSelectIntersect; pQBLayer.UseSelectedFeatures = true; pFSel.SelectionSet = pQBLayer.Select(); return(pFSel.SelectionSet.Count); }
private void selectFeatures() { IQueryByLayer _qrBl = new QueryByLayerClass(); int method=cbxMethod.SelectedIndex; switch (method) { case 0: _method = esriLayerSelectionMethod.esriLayerSelectIntersect; break; case 1: _method = esriLayerSelectionMethod.esriLayerSelectContainedBy; break; case 2: _method = esriLayerSelectionMethod.esriLayerSelectContains; break; default: _method = esriLayerSelectionMethod.esriLayerSelectIntersect; break; } int selectLayer = cbxSelectLayer.SelectedIndex; _byLayer = _mapControl.get_Layer(selectLayer); int resultType=cbxResultType.SelectedIndex; switch (resultType) { case 0: _resultType = esriSelectionResultEnum.esriSelectionResultNew; break; case 1: _resultType = esriSelectionResultEnum.esriSelectionResultAdd; break; case 2: _resultType = esriSelectionResultEnum.esriSelectionResultSubtract; break; case 3: _resultType = esriSelectionResultEnum.esriSelectionResultAnd; break; case 4: _resultType = esriSelectionResultEnum.esriSelectionResultXOR; break; default: _resultType = esriSelectionResultEnum.esriSelectionResultNew; break; } if (chkUseSelected.CheckState == CheckState.Unchecked) { _useSelected = false; } else { _useSelected = true; } bool re = false; try { re = double.TryParse(txtBuffer.Text, out _buffer); } catch { } if (!re) { _buffer = 0; } int unit = cbxUnit.SelectedIndex; switch (unit) { case 0: _bufferUnit = esriUnits.esriCentimeters; break; case 1: _bufferUnit = esriUnits.esriDecimeters; break; case 2: _bufferUnit = esriUnits.esriMeters; break; case 3: _bufferUnit = esriUnits.esriKilometers; break; default: _bufferUnit = esriUnits.esriMeters; break; } _qrBl.ByLayer = (IFeatureLayer)_byLayer; _qrBl.LayerSelectionMethod = _method; _qrBl.ResultType = _resultType; _qrBl.UseSelectedFeatures = _useSelected; _qrBl.BufferDistance = _buffer; _qrBl.BufferUnits = _bufferUnit; foreach (object o in lstInputLayer.SelectedItems) { int index = lstInputLayer.Items.IndexOf(o); _fromLayer = _mapControl.get_Layer(index); _qrBl.FromLayer = (IFeatureLayer)_fromLayer; ISelectionSet selectionSet; IFeatureSelection featureSelection; try { selectionSet = _qrBl.Select(); featureSelection = (IFeatureSelection)_fromLayer; featureSelection.SelectionSet = selectionSet; //MessageBox.Show("line 255 count=" + selectionSet.Count); } catch(Exception ex) { //MessageBox.Show("line 257 SelectByLocation, ex=" + ex); continue; } } _mapControl.ActiveView.Refresh(); }
ISelectionSet ISpatialAlgrorithm.Execute() { SdeConnection conn = new SdeConnection(); ISdeConnectionInfo sdeConn = conn as ISdeConnectionInfo; IFeatureWorkspace fw = (IFeatureWorkspace)sdeConn.Workspace; ITnFeatureClassName fcName = new TnFeatureClassName(sdeConn.Workspace); ITnTableName tblName = new TnTableName(sdeConn.Workspace); IFeatureClass xaFeatureClass = fw.OpenFeatureClass(fcName.FC_RANH_XA_POLY.NAME); IFeatureLayer xaFeatureLayer = new FeatureLayerClass(); xaFeatureLayer.FeatureClass = xaFeatureClass; IFeatureClass duongFeatureClass = fw.OpenFeatureClass(fcName.FC_DUONG.NAME); IFeatureLayer duongFeatureLayer = new FeatureLayerClass(); duongFeatureLayer.FeatureClass = duongFeatureClass; //IQueryFilter qrf = new QueryFilterClass(); //qrf.WhereClause = string.Format("{0}='{1}'", fcName.FC_RANH_XA_POLY.MA_XA, 5); //ISelectionSet xaSelectionSet = xaFeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionOnlyOne, sdeConn.Workspace); //IFeatureSelection xaFeatureSelection = (IFeatureSelection)xaFeatureLayer; //xaFeatureSelection.SelectionSet = xaSelectionSet; //if (this._fromLayer == null || this._byLayer == null) //{ // return null; //} //this._resultSelectionSet=this._queryByLayer.Select(); //IFeatureLayer f=new FeatureLayerClass(); //f.FeatureClass=this._frmFc; //IFeatureLayer b=new FeatureLayerClass(); //b.FeatureClass = this._byFc; //IFeatureSelection fs = (IFeatureSelection)this._byLayer; //MessageBox.Show(fs.SelectionSet.Count.ToString()); IQueryByLayer qrbl = new QueryByLayerClass(); qrbl.FromLayer = duongFeatureLayer; qrbl.ByLayer = xaFeatureLayer; qrbl.LayerSelectionMethod = esriLayerSelectionMethod.esriLayerSelectIntersect; qrbl.ResultType = esriSelectionResultEnum.esriSelectionResultNew; qrbl.UseSelectedFeatures = true; ISelectionSet sl = qrbl.Select(); MessageBox.Show("Line 125 AlgTimDuong:"+sl.Count.ToString()); //MessageBox.Show(xaFeatureLayer.FeatureClass.AliasName); try { //this._resultSelectionSet = this._queryByLayer.Select(); //this._resultSelectionSet =qrbl.Select(); //MessageBox.Show(string.Format("line 120 AlgrithmTimDuong, so luong duong:{0}", this._resultSelectionSet.Count)); } catch(Exception e) { MessageBox.Show(e.ToString()); } //this._resultSelectionSet = sls; //Dang bi loi cho nay this._resultFeatureSelection = (IFeatureSelection)this._resultLayer; this._resultFeatureSelection.SelectionSet = this._resultSelectionSet; return this._resultSelectionSet; }
public void EvaluateQuery() { if (this._expr == "") { return; } //SelectLayerByLocation SelectByLocation; Geoprocessor gp = new Geoprocessor(); string[] exprArr = Regex.Split(_expr, ExpressionKeyWords.Then); //MessageBox.Show(_expr); if (exprArr.Length == 0 || exprArr == null) { MessageBox.Show("ko co expr"); return; } try { //_selectFLayer.Name = _selectFLayer.FeatureClass.AliasName; //_byFLayer.Name = _byFLayer.FeatureClass.AliasName; //_selectLayer = (ILayer)_selectFLayer; //_byLayer = (ILayer)_byFLayer; //string selectLyrFile = string.Format("{0}/{1}", sysTempPath.TempPath, "selectLayer.lyr"); //string byLyrFile = string.Format("{0}/{1}", sysTempPath.TempPath, "byLayer.lyr"); //dataManager.SaveToLayerFile(_selectLayer, selectLyrFile); //dataManager.SaveToLayerFile(_byLayer, byLyrFile); foreach (string s in exprArr) { //MessageBox.Show("close"); Expression e = new Expression(s.Trim()); e.Parameters[ExpressionParameters.Intersect] = ExpressionParameters.Intersect; e.Parameters[ExpressionParameters.NewSelection] = ExpressionParameters.NewSelection; e.Parameters[ExpressionParameters.AndSelection] = ExpressionParameters.AndSelection; e.Parameters[ExpressionParameters.ContainedBy] = ExpressionParameters.ContainedBy; e.Parameters[ExpressionParameters.SubtractSelection] = ExpressionParameters.SubtractSelection; //MessageBox.Show(e.Parameters.Count.ToString()); //foreach (string k in e.Parameters.Keys) //{ // MessageBox.Show(k); // e.Parameters[k] = k; //} //e.EvaluateParameter += delegate(string name, ParameterArgs args) //{ // if (name == "INTERSECT") // args.Result = "INTERSECT"; // if (name == "NEW_SELECTION") // args.Result = "NEW_SELECTION"; // if (name == "SUBSET_SELECTION") // args.Result = "SUBSET_SELECTION"; //}; //e.EvaluateParameter += delegate(string name, ParameterArgs args) //{ // if (name == "NEW_SELECTION") // args.Result = "NEW_SELECTION"; //}; //e.EvaluateParameter += delegate(string name, ParameterArgs args) //{ // if (name == "SUBSET_SELECTION") // args.Result = "SUBSET_SELECTION"; //}; e.EvaluateFunction += delegate(string name, FunctionArgs args) { //ham chonglop co 3 tham so: selectMethod,resultType,distance //ham chontheothuoctinh co 2 tham so: resultType,dieukien if (name == ExpressionFunctions.ChonThuaTheoDuong) { IQueryByLayer _qrBl = new QueryByLayerClass(); _qrBl.FromLayer = _thuaFl; _qrBl.ByLayer = _duongFl; _qrBl.LayerSelectionMethod = (esriLayerSelectionMethod)GeoprocessorConstant.GetSelectionMethod(args.Parameters[0].Evaluate().ToString()); _qrBl.ResultType = (esriSelectionResultEnum)GeoprocessorConstant.GetSelectionResult(args.Parameters[1].Evaluate().ToString()); _qrBl.UseSelectedFeatures = true; double buf; bool re = double.TryParse(args.Parameters[2].Evaluate().ToString(), out buf); if (!re) { buf = 0; } _qrBl.BufferDistance = buf; //can them config gia tri nay //MessageBox.Show(string.Format("line 227 Evaluation thua={0},duong={1},buf={2}", _thuaFl.FeatureClass.AliasName,_duongFl.FeatureClass.AliasName,buf)); ISelectionSet thuaSelectionSet=null; try { thuaSelectionSet = _qrBl.Select(); IFeatureSelection fs = (IFeatureSelection)_thuaFl; fs.SelectionSet = thuaSelectionSet; //MessageBox.Show(string.Format("line 225 Evaluation {0}, {1}", buf, thuaSelectionSet.Count)); } catch (Exception ex) { //MessageBox.Show(String.Format("line 244 Evaluation, ex={0}", ex)); } //!ko xai duoc cha noi SelectLayerByLocation //MessageBox.Show(thuaSelectionSet.Count.ToString()); /* SelectByLocation = new SelectLayerByLocation(); SelectByLocation.in_layer = _selectFLayer; SelectByLocation.select_features = _byFLayer; //SelectByLocation.out_layer_or_view = selectLyrFile; SelectByLocation.overlap_type = "INTERSECT";//args.Parameters[0].Evaluate().ToString(); SelectByLocation.selection_type = "NEW_SELECTION"; //args.Parameters[1].Evaluate().ToString(); SelectByLocation.search_distance = 1;// args.Parameters[2].Evaluate(); IFeatureSelection fls = (IFeatureSelection)_byFLayer; MessageBox.Show(fls.SelectionSet.Count.ToString()); runTool(gp, SelectByLocation, null); MessageBox.Show(fs.SelectionSet.Count.ToString()); * */ args.Result = 1; } else if (name == ExpressionFunctions.ChonThuaTheoHemChinh) { IQueryByLayer _qrBl = new QueryByLayerClass(); _qrBl.FromLayer = _thuaFl; _qrBl.ByLayer = _hemchinhFl; _qrBl.LayerSelectionMethod = (esriLayerSelectionMethod)GeoprocessorConstant.GetSelectionMethod(args.Parameters[0].Evaluate().ToString()); _qrBl.ResultType = (esriSelectionResultEnum)GeoprocessorConstant.GetSelectionResult(args.Parameters[1].Evaluate().ToString()); _qrBl.UseSelectedFeatures = true; double buf; bool re = double.TryParse(args.Parameters[2].Evaluate().ToString(), out buf); if (!re) { buf = 0; } _qrBl.BufferDistance = buf; //can them config gia tri nay ISelectionSet thuaSelectionSet=null; try { thuaSelectionSet = _qrBl.Select(); IFeatureSelection fs = (IFeatureSelection)_thuaFl; fs.SelectionSet = thuaSelectionSet; } catch { } args.Result = 1; } else if (name == ExpressionFunctions.ChonThuaTheoTtXa) { IQueryByLayer _qrBl = new QueryByLayerClass(); _qrBl.FromLayer = _thuaFl; _qrBl.ByLayer = _ttXaFl; _qrBl.LayerSelectionMethod = (esriLayerSelectionMethod)GeoprocessorConstant.GetSelectionMethod(args.Parameters[0].Evaluate().ToString()); _qrBl.ResultType = (esriSelectionResultEnum)GeoprocessorConstant.GetSelectionResult(args.Parameters[1].Evaluate().ToString()); _qrBl.UseSelectedFeatures = true; double buf; bool re = double.TryParse(args.Parameters[2].Evaluate().ToString(), out buf); if (!re) { buf = 0; } _qrBl.BufferDistance = buf; //can them config gia tri nay ISelectionSet thuaSelectionSet = null; try { thuaSelectionSet = _qrBl.Select(); IFeatureSelection fs = (IFeatureSelection)_thuaFl; fs.SelectionSet = thuaSelectionSet; } catch { } args.Result = 1; } else if (name == "ChonTheoThuocTinh") { SdeConnection conn = new SdeConnection(); ISdeConnectionInfo sdeConn = (ISdeConnectionInfo)conn; IQueryFilter qrf = new QueryFilterClass(); qrf.WhereClause = args.Parameters[0].Evaluate().ToString(); ISelectionSet sls = _thuaFl.FeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, sdeConn.Workspace); IFeatureSelection fs = (IFeatureSelection)_thuaFl; fs.SelectionSet = sls; //MessageBox.Show("chonthuoctinh: "+args.Parameters[0].Evaluate().ToString()); args.Result = 1; } else if (name == "Where") { args.Parameters[0].Parameters["dorong"] = "dorong"; //MessageBox.Show(args.Parameters[0].Evaluate().ToString()); args.Result = args.Parameters[0].Evaluate().ToString(); } }; //Debug.Assert(1 == (int)e.Evaluate()); e.Evaluate(); } } catch (Exception e1) { MessageBox.Show(e1.ToString()); } }
public bool EvaluateCalculating() { bool result = false; if (this._expr == "") { return false; } Expression e = new Expression(_expr); _fw = (IFeatureWorkspace)_sdeConn.Workspace; e.Parameters["INTERSECT"] = "INTERSECT"; e.Parameters["NEW_SELECTION"] = "NEW_SELECTION"; e.Parameters["AND_SELECTION"] = "AND_SELECTION"; e.Parameters["CONTAINED_BY"] = "CONTAINED_BY"; e.Parameters["SUBTRACT_SELECTION"] = "SUBTRACT_SELECTION"; e.Parameters[_fcName.FC_DUONG.DO_RONG] = _fcName.FC_DUONG.DO_RONG; e.Parameters[_fcName.FC_THUA.DIEN_TICH] = _fcName.FC_THUA.DIEN_TICH; e.EvaluateFunction += delegate(string name, FunctionArgs args) { if (name == "VongLap") { IFeatureLayer fl=null; try { fl = (IFeatureLayer)args.Parameters[0].Evaluate(); } catch(Exception e1) { args.Result = null; } //args.Parameters["doituonglap"] IFeatureSelection fsl=(IFeatureSelection)fl; IFeatureClass fc=fl.FeatureClass; MessageBox.Show(string.Format("line 323 Evaluation selectionset={0}", fsl.SelectionSet.Count)); int len = args.Parameters.Length; IDictionary<string,IFeature> dic=new Dictionary<string,IFeature>(); if(len==3) { dic=(IDictionary<string,IFeature>)args.Parameters[2].Evaluate(); MessageBox.Show(string.Format("line 346 Evaluation lenght={0}", dic.Count)); } if (len >= 2) { IEnumIDs eIds = fsl.SelectionSet.IDs; int id; IFeature ft; //MessageBox.Show(string.Format("line 353 Evaluation ids={0}", int numid = fsl.SelectionSet.Count; for (int i = 0; i < numid; i++) { id = eIds.Next(); if (id != -1) { //MessageBox.Show(string.Format("line 357 Evaluation name={0}, id={1}", fc.AliasName, id)); int id_img = 0; ft = fc.GetFeature(id); try { dic.Remove(string.Format("{0}_{1}", fc.AliasName, id)); } catch { } finally { dic.Add(string.Format("{0}_{1}", fc.AliasName, id), ft); } //args.Parameters["doituonglapcon"] = ft; args.Parameters[1].Parameters["doituonglap"] = dic; args.Parameters[1].Evaluate(); id_img = id; //MessageBox.Show(string.Format("line 373 Evaluation id={0}", id)); //ft=fc.GetFeature(id); //MessageBox.Show(string.Format("line 348 Evaluation maduong={0}", ft.get_Value(ft.Fields.FindField("maduong")))); } else { eIds.Reset(); i = 0; } } } } else if (name == "test") { IDictionary<string, IFeature> dic = (IDictionary<string, IFeature>)args.Parameters[0].Evaluate(); //MessageBox.Show(string.Format("line 371 Evaluation lenght={0}", dic.Count)); //IFeature ft = (IFeature)args.Parameters[0].Evaluate();//dic["sde.SDE.thixa_duong"]; //MessageBox.Show(string.Format("line 360 Evaluation maduong={0}", ft.get_Value(ft.Fields.FindField("maduong")))); args.Result = 1; } else if (name == "ChonThuaTheoDuong") { IQueryByLayer _qrBl = new QueryByLayerClass(); _qrBl.FromLayer = _thuaFl; _qrBl.ByLayer = _duongFl; _qrBl.LayerSelectionMethod = (esriLayerSelectionMethod)GeoprocessorConstant.GetSelectionMethod(args.Parameters[0].Evaluate().ToString()); _qrBl.ResultType = (esriSelectionResultEnum)GeoprocessorConstant.GetSelectionResult(args.Parameters[1].Evaluate().ToString()); _qrBl.UseSelectedFeatures = true; double buf; bool re = double.TryParse(args.Parameters[2].Evaluate().ToString(), out buf); if (!re) { buf = 0; } _qrBl.BufferDistance = buf; //can them config gia tri nay ISelectionSet thuaSelectionSet = null; try { thuaSelectionSet = _qrBl.Select(); IFeatureSelection fs = (IFeatureSelection)_thuaFl; fs.SelectionSet = thuaSelectionSet; } catch { } args.Result = 1; } else if (name == "ChonThuaTheoHemChinh") { IQueryByLayer _qrBl = new QueryByLayerClass(); _qrBl.FromLayer = _thuaFl; _qrBl.ByLayer = _hemchinhFl; _qrBl.LayerSelectionMethod = (esriLayerSelectionMethod)GeoprocessorConstant.GetSelectionMethod(args.Parameters[0].Evaluate().ToString()); _qrBl.ResultType = (esriSelectionResultEnum)GeoprocessorConstant.GetSelectionResult(args.Parameters[1].Evaluate().ToString()); _qrBl.UseSelectedFeatures = true; double buf; bool re = double.TryParse(args.Parameters[2].Evaluate().ToString(), out buf); if (!re) { buf = 0; } _qrBl.BufferDistance = buf; //can them config gia tri nay ISelectionSet thuaSelectionSet = null; try { thuaSelectionSet = _qrBl.Select(); IFeatureSelection fs = (IFeatureSelection)_thuaFl; fs.SelectionSet = thuaSelectionSet; } catch { } args.Result = 1; } else if (name == "ChonDuong") { IQueryFilter qrf = new QueryFilterClass(); qrf.WhereClause = args.Parameters[0].Evaluate().ToString(); ISelectionSet sls = _duongFl.FeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, _sdeConn.Workspace); IFeatureSelection fs = (IFeatureSelection)_duongFl; fs.SelectionSet = sls; //MessageBox.Show("chonthuoctinh: "+args.Parameters[0].Evaluate().ToString()); args.Result = _duongFl; } else if (name == "ChonThua") { IQueryFilter qrf = new QueryFilterClass(); qrf.WhereClause = args.Parameters[0].Evaluate().ToString(); ISelectionSet sls = _thuaFl.FeatureClass.Select(qrf, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, _sdeConn.Workspace); IFeatureSelection fs = (IFeatureSelection)_thuaFl; fs.SelectionSet = sls; //MessageBox.Show("chonthuoctinh: "+args.Parameters[0].Evaluate().ToString()); args.Result = _thuaFl; } }; try { result = (bool)e.Evaluate(); } catch(Exception e1) { result = false; } return result; }
private long SpatialSelect(string sSedCoreLayer, string sSounderLayer, double dblRange, esriUnits eEsriUnitsContant) { IMxDocument pmxdoc = ArcMap.Document as IMxDocument; IMap pmap = pmxdoc.FocusMap; IFeatureSelection pFSel = FindLayer(pmap, sSedCoreLayer) as IFeatureSelection; //pFSel.Clear(); IQueryByLayer pQBLayer = new QueryByLayerClass(); pQBLayer.ByLayer = FindLayer(pmap, sSounderLayer) as IFeatureLayer; pQBLayer.FromLayer = pFSel as IFeatureLayer; pQBLayer.BufferDistance = dblRange; pQBLayer.BufferUnits = eEsriUnitsContant; pQBLayer.ResultType = esriSelectionResultEnum.esriSelectionResultAdd; pQBLayer.LayerSelectionMethod = esriLayerSelectionMethod.esriLayerSelectIntersect; pQBLayer.UseSelectedFeatures = true; pFSel.SelectionSet = pQBLayer.Select(); return pFSel.SelectionSet.Count; }