1
//开始点选查询
IMap pMap;
pMap = axMapControl1.Map as IMap;
//获取点图层
IFeatureLayer pFeatureLayer;
pFeatureLayer = pMap.get_Layer(i) as IFeatureLayer;
IFeatureClass pFeatureClass;
pFeatureClass = pFeatureLayer.FeatureClass;
//获取鼠标点击点
IPoint pPoint;
pPoint = new PointClass();
pPoint.PutCoords(e.mapX, e.mapY);
IGeometry pGeometry;
//定义缓冲区
double db = 2;
ITopologicalOperator pTop;
pTop = pPoint as ITopologicalOperator;
pGeometry = pTop.Buffer(db);
//选取
pMap.SelectByShape(pGeometry, null, false);
pMap.ClearSelection();
//空间过滤运算
ISpatialFilter pSpatialFilter = new SpatialFilterClass();
pSpatialFilter.Geometry = pGeometry;
//设置为不同的要素类型的图层
switch (pFeatureClass.ShapeType)
{
case esriGeometryType.esriGeometryPoint:
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
break;
case esriGeometryType.esriGeometryPolyline:
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses;
break;
case esriGeometryType.esriGeometryPolygon:
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
break;
}
pSpatialFilter.GeometryField = pFeatureClass.ShapeFieldName;
//指针
IFeatureCursor pFeatureCursor;
pFeatureCursor = pFeatureClass.Search(pSpatialFilter, false);
IFeature pFeature;
pFeature = pFeatureCursor.NextFeature();
//开始遍历
while (pFeature != null)
{
//获取要素的字段名和字段值
int n = pFeature.Fields.FieldCount;
string sName;
string sValue;
//这句话的对象需要随着地图的改变而改变。可以是ID,FID 等带有唯一标识身份的 东西。
int index = pFeature.Fields.FindField("ObjectID");
if (index == -1)
return;
IField pField = pFeature.Fields.get_Field(index);
sName = pField.Name;
sValue = pFeature.get_Value(index).ToString();
pDataRow = pDataTable.NewRow();
//之所以这样赋值是为了保证ID的唯一性;
pDataRow["ID"] = lyrName + sValue;
pDataRow["Name"] = sValue;
pDataRow["ParentID"] = lyrName;
pDataTable.Rows.Add(pDataRow);
pFeature = pFeatureCursor.NextFeature();
}
//这个是师兄交的,指针等占内存的东西在用完之后一定要释放;!!!
System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
}
转自 http://blog.csdn.net/htornado/article/details/38846415

本文介绍使用ArcGIS进行缓冲区查询和点选查询的方法。通过ITopologcialOperator和ISpatialFilter接口构建缓冲区并进行空间过滤。同时,展示了如何通过鼠标点击进行点选查询,并根据不同要素类型设置相应的空间关系。
722

被折叠的 条评论
为什么被折叠?



