Arcengine 二次开发得到点shapefile的坐标
做二次开发的时候,想要得到Point shapfile的坐标和相应的属性,也就是Point 的(x,y)和某个属性,在网上查了一些资料,做总结如下
首先,你要确定自己要操作的图层,一般来说,得到当前操作的图层代码如下
//m_hookHelper.FocusMap.LayerCount,m_hookHelper是那个钩子,做二次开发都知道,我这个是 //搞的ICommand for (int i = 0; i < m_hookHelper.FocusMap.LayerCount; i++) { layer = (IFeatureLayer)m_hookHelper.FocusMap.get_Layer(i); //得到特定类型的图层,如果点,线,多边形 if (layer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
{ //layer.Name, 图层的名称; } }
然后呢,需要得到当前图层有哪些字段,并记录下你要操作字段的索引,代码如下
//cLayer 为当前操作的图层 ITable table = cLayer.FeatureClass as ITable; int index = -1; for (int j = 0; j < table.Fields.FieldCount; j++) { //每个字段的名称如下,你要操作哪个字段的,可以记录下 //这个字段的索引 string fname = table.Fields.get_Field(j).Name.ToString(); //记录下你要操作的字段的索引 index = i; }
最后得到当前图层的坐标,以及要操作字段的值
//cLayer为当前图层
IFeatureClass fClass = cLayer.FeatureClass; //这是用来得到坐标的 IFeatureCursor cursor = fClass.Update(null, false); IFeature feature = cursor.NextFeature(); //这是用来得到字段的 ITable table = this.cLayer.FeatureClass as ITable; ICursor pCursor = table.Search(null, false); IRow pRow = pCursor.NextRow(); do { IPoint point = feature.Shape as IPoint; double x, y; point.QueryCoords(out x, out y); // 在这里得到坐标 string type = pRow.get_Value(index).ToString();//在这里得到要操作字段的值 feature = cursor.NextFeature(); pRow = pCursor.NextRow(); } while (feature != null);
这样就可以得到点的坐标和相应的字段了。欢迎批评指正