Как определить, является ли геометрия многочастной? - PullRequest
2 голосов
/ 09 февраля 2012

Название в основном говорит обо всем. В моем случае у меня есть ломаная линия, и я должен выяснить, является ли она многочастной или одночастной.

В целом весь Интернет (поиск через Google) и, в частности, онлайн-материалы ESRI, оказались довольно нейтральными по этой теме. Была некоторая надежда здесь . Соответствующий экстракт скопирован ниже:

Вы можете определить количество путей в полилинии или колец в Многоугольник, используя свойства PathCount или RingCount соответственно. Используйте перегруженные методы GetPoint, чтобы получить копию Point на конкретное положение в конкретном пути или кольце. Следующий код пример перебирает все точки в полилинии, multiPathLine с использованием членов PathCount, PointCount и GetPoint:

// Iterate through all points in all paths.
for (int i = 0; i < multiPathLine.PathCount; i++)
{
    for (int j = 0; j < multiPathLine.PointCount(i); j++)
    {
        multiPathLine.GetPoint(i, j);
    }
}

Как ни крути это обещание, нигде на этой длинной, длинной странице они не сообщают потенциальному разработчику о типе multiPathLine. Поэтому я отправился на поиски неуловимого свойства PathCount, но оно так и не нашлось.

1 Ответ

5 голосов
/ 09 февраля 2012

Решение на самом деле очень простое: просто приведите вашу полилинию к IGeometryCollection и проверьте ее GeometryCount свойство. Если оно больше 1, то это геометрия, состоящая из нескольких частей.

Это работает не только с полилиниями, но и с полигонами и точками.

static bool IsMultiPart(this IGeometry geometry)
{
    var geometryCollection = geometry as IGeometryCollection;
    return geometryCollection != null && geometryCollection.GeometryCount > 1;
}
...