本人剛做了有關屬性查詢的一些功能的實現,在這總結一下。
有錯誤之處和不專業之處還希望GIS和AE開發的高手們給以指點。
//******其中第二部分發生了點錯誤,現在已更改***********//
①:據FeatureLayer得到Feature的方法:
代碼如下:
ILayer pLayer;
pLayer = frm1.axMapControl1.Map.get_Layer(LayerBoxEdit.SelectedIndex) as ILayer;//frm1和LayerBoxEdit.SelectedIndex都是變數
IFeatureLayer pFeatureLayer;
pFeatureLayer = pLayer as IFeatureLayer;
if (pFeatureLayer == null)
{
return;
}
IFeatureCursor pFeatureCursor;
pFeatureCursor = pFeatureLayer.Search(null, false);
IFeature pFeature;
pFeature = pFeatureCursor.NextFeature();
②:據FeatureClass得到Feature的方法:
IFeatureLayer pFeatureLayer;
pFeatureLayer = frm1.axMapControl1.Map.get_Layer(0) as IFeatureLayer;
IFeatureClass pFeatureClass;
pFeatureClass = pFeatureLayer.FeatureClass;
IQueryFilter pQueryFilter;
pQueryFilter = new QueryFilterClass();
// pQueryFilter.WhereClause = "";
IFeature pFeature;
for(int j=0;j< pFeatureClass.FeatureCount(pQueryFilter); j++)
{
pFeature = pFeatureClass.GetFeature(j);
}
③:在TreeList中點擊子節點得到Feature的方法:
if (e.Node.HasChildren)
{
return;
}
if (!(e.Node.HasChildren)) //***********//這個存在bug,若節點超過兩級則出錯
{
for (int i = 0; i < this.axMapControl1.LayerCount; i++)
{
//如果父節點名稱和圖層名相同,擷取索引
if (e.Node.ParentNode.GetValue(0).ToString() == this.axMapControl1.get_Layer(i).Name)
{
layerIndex = i;
IFeature pFeature;
pFeature = (this.axMapControl1.get_Layer(layerIndex) as IFeatureLayer).FeatureClass.GetFeature(int.Parse(this.treeList1.FocusedNode.GetValue(0).ToString())); ;
}
}