Я работаю в ArcMap. У меня есть класс класса объектов (полилиния), в котором есть точки. Для каждой точки я хочу использовать ее для преобразования в геометрию и поместить ее в отдельную таблицу атрибутов слоев; под столбцом поля формы.Ввод переменной IPoint в IGeometry
Я также пытаюсь выполнить другие вычисления в столбце поля Shape в таблице (например, расстояние между точками), и я получаю сообщение об ошибке «Операция была предпринята на пустой геометрии». Это заставляет меня думать, что я не правильно вставляю значение в таблицу. Кроме того, это заставляет меня полагать, что я не правильно выбрасываю или не создаю переменную IGeometry.
Кроме того, когда я пытаюсь посмотреть таблицу атрибутов, он показывает PointZM в столбце поля «Shape», однако при просмотре карты я не вижу никаких точек в Arcmap. Мой код ниже.
IFeatureLayer _SelectedLayer = MultiItemList._CapturedFeatureLayer;
IFeatureClass _SelectedFeatClass = _SelectedLayer.FeatureClass;
IDataset _SelectedFeatureDataset = (IDataset)_SelectedFeatClass;
IWorkspace _SelectedWorkspace = (IWorkspace)_SelectedFeatureDataset.Workspace;
string _SelectedPath = _SelectedWorkspace.PathName;
IFeature _mySelectedFeature = _SelectedFeatClass.GetFeature(0);
IGeometry _theGeometry = _mySelectedFeature.Shape as IGeometry;
IPolyline _PolyLine = (IPolyline)_theGeometry;
IPointCollection _pointsCollection = (IPointCollection)_PolyLine;
if (_pointsCollection.PointCount>=2)
{
IEnumVertex2 _enumVertex = _pointsCollection.EnumVertices as IEnumVertex2;
IPoint _queryVertex = new PointClass();
_enumVertex.Reset();
IPoint _outVertex;
int partIndex;
int vertexIndex;
_enumVertex.Next(out _outVertex, out partIndex, out vertexIndex);
while (_outVertex != null)
{
ITable LeveePointsTable = (ITable)LeveePoints_featureClass;
int ShapeIndex = LeveePointsTasble.FindField("Shape");
IRow LeveePointsRow = LeveePointsTable.CreateRow();
// trying to cast IPoint to IGeometry
IGeomerty _myPoints = (Igeometry)_outVertex
LeveePointsRow.set_Value(ShapeIndex, _MyPoints);
}
}
Любая помощь по этой теме была бы весьма признательна. Заранее спасибо.
Я собираюсь предположить, что вы установили точку останова после этой строки (она не будет компилироваться по крайней мере по трем разным причинам, но, возможно, вы ее перепечатали): 'IGeomerty _myPoints = (Igeometry) _outVertex'. Когда вы это сделали, было ли '_myPoints' пустым? Еще один момент для размышления заключается в том, реализует ли фактический тип выполнения _outVertex «IGeometry». Вы проверили это, да? –
Да, _outVertex (IPoint) реализует IGeometry. С линией: «IGeomerty _myPoints = (Igeometry) _outVertex» Я могу использовать MessageBox, чтобы вывести координату X и Y переменной _outVertex, и она отобразит их. Плюс я не получаю ошибку кастинга в этой строке. Я не инициализировал переменную «_myPoints» ни к чему. Возможно, я должен сначала инициализировать его нулевым. – user1898629
Нет, не инициализируйте '_myPoints' значение null; вы уже инициализируете его '(IGeometry) _outVertex', и это все, что вам нужно. –