Single part self Intersecting polyline how-to

0 голосов
спросил 18 Май, 11 от Dorofeev1 (6,460 баллов) в категории Программные продукты Esri
Столкнулся с проблемой при работе с полилиниями. Когда я пытаюсь программно создать полилинию(из коллекции сегментов или точек), которая пересекает сама себя, ArcGis ее разбивает на отдельные части в местах пересечения.
Если я отрисовываю такую же полилинию вручную, через Editor, то она остается цельной и не разбивается на части.
Подскажите пожалуйста как сделать так, чтобы полилиния оставалась цельной при ее создании программно?
    

4 Ответы

0 голосов
ответил 21 Май, 11 от TDenis (42,620 баллов)
Покажите, как сохраняете?
Какой источник данных, участвует ли класс в топологии или сетях?


var pFeatureLayer = ArcMap.Document.SelectedLayer as IFeatureLayer;
if (pFeatureLayer == null)
    return;

IPointCollection pPointCollection = new PolylineClass();
pPointCollection.AddPoint(new PointClass() { X = 0, Y = -10 });
pPointCollection.AddPoint(new PointClass() { X = 0, Y = 10 });
pPointCollection.AddPoint(new PointClass() { X = 10, Y = 0 });
pPointCollection.AddPoint(new PointClass() { X = -10, Y = 0 });

var pFeature = pFeatureLayer.FeatureClass.CreateFeature();
pFeature.Shape = pPointCollection as IGeometry;
pFeature.Store();
0 голосов
ответил 21 Май, 11 от Dorofeev1 (6,460 баллов)
Сам вопрос уже звучит по-другому. Т.к созданные линии всегда проверялись на ITopologicalOperator.IsSimple() и упрощались по мере надобности. Вызов ITopologicalOperator.Simplify() приводил к разбиению на части.
Меня интересует можно ли создавать заведомо корректную (Simple) геометрию, чтобы не возникали ошибки "Operation cannot be performed on non simple geometry"?

Установка ITopologicalOperator2.IsKonwnSimmple_2=true избавляет от ошибки "Operation cannot be performed on non simple geometry", но при этом порождает другие непонятные глюки.
    
0 голосов
ответил 21 Май, 11 от TDenis (42,620 баллов)
Меня интересует можно ли создавать заведомо корректную (Simple) геометрию, чтобы не возникали ошибки "Operation cannot be performed on non simple geometry"

Ну так и создавайте линии без самопересекающихся или накладывающихся сегментов.
Без всего того, что Simplify() исправляет.


Если создавать те же самые самопересекающиеся линии через интерфейс ArcMap, то нет ни дополнительных точек, ни глюков?
0 голосов
ответил 22 Май, 11 от Dorofeev1 (6,460 баллов)
Да, в ArcMap все нормально. Получается как ни крути нужно генерировать топологически корректную геометрию
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...