做二次开发的时候,想要得到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);
这样就可以得到点的坐标和相应的字段了。欢迎批评指正