НА ГЛАВНУЮ СТРАНИЦУ

КАК ПОСТРОИТЬ ПОЛИГОНЫ ИЗ ЛИНИЙ

Понятно, как сделать один или несколько смежных полигонов, разрезая штатными инструментами основной блок или причленяясь к нему. Но как быть, если линии уже готовы, и их много, и хочется сразу? В ArcINFO это делает команда Build, в ArcView придется подключить дополнительные инструменты. Но сначала об основах этого дела, о том, как оно происходит. Если линии нарисованы идеально, с притягиванием, если они точно смыкаются в узлах пересечений, то алгоритм построения достаточно прост.

Инструменты для такого случая выглядят очень лаконично. Таковы, например, "Polylines to Polygons 2.3" из коллекции ESRI, или скрипт А. Никонова из коллекции Dataplus. Таким инструментам нужно только указать слой с исходными линиями, и полигоны будут сделаны. Относительно каждого из них ведь двух мнений быть не может! Однако в общем случае линии бывают нарисованы вот как:

То есть с некоторыми излишками-перехлестами, например, как возле А и Б. Еще бывают недорисованные до конца линии, "недолёты", как видно возле В. Однако, если немного подумать, то для программы ведь нет разницы между перелетами и недолетами... Это мы видим разницу с нашего "птичьего полета", а внутри для алгоритма все равно, по какой причине полигон не замкнут. В любом алгоритме случаи А, Б и В объединяют, называя "висячими узлами" (dangling nodes). Любая мало-мальски развитая программа сначала должна избавится от висячих узлов, хотя бы путем простого удаления, отрезания лишних кусков линий. И только потом можно строить полигоны. Впрочем, обычно такая чистка начинается путем пересечения всех линий друг с другом, дальше уже удалять лишнее и строить легче.

На таких принципах основаны известные программы Santi Tools и Edit Tools, которые хорошо справляются с задачей. Модуль SantiTools можно скачать здесь. Установив его, вы найдете в меню команду Build - это именно то, что нужно. Выберите вариант "No Fuzzy Tolerance" (почему - об этом потом), линии будут пересечены без вашего участия и полигоны будут построены. Кроме того, есть очень удобная команда Intersect, где полигоны создаются путем разрезания одного исходного пирога, словно ножом, линиями-разрезами, вот так:

Модуль работает хорошо, прорезая в том числе и замкнутые линии. Не забудьте отменить выделение, чтобы сработали все режущие линии, а не только выбранные.

Edit Tools можно скачать здесь в версии 3.6. Работает он неплохо, и теперь создавать полигоны в нем можно без ограничений.

Имейте в виду, что и Santi Tools, и Edit Tools в последних версиях пытаются устранять и недолеты. Однако не стоит этим обольщаться... Почему? Дотягивать недолеты задача куда более интеллектуальная и неоднозначная, чем обрезать "чохом" все висячие узлы. Ее куда логичнее решать вручную, а еще лучше построить свою методику так, чтобы вообще недолетов не возникало - это ведь зависит от аккуратности операторов, верно? И уж по крайней мере, если без них никак не получается, тщательно проверяйте после любой автоматики - ведь притянуть недотянутую линию программа может куда угодно в сторону, куда ей ближе покажется, а это не всегда туда, куда вам нужно. К тому же поиск места притягивания недолета идет медленно, напрягает ресурсы. Чтобы ускорить работу, ограничивают радиус поиска места притягивания, это называется допуск - "Tolerance". Для простого алгоритма работы с удалением всех висячих узлов Tolerance не актуальна, как можно сообразить - ставьте ее в ноль, как рекомендовалось выше для Santi Tools. Однако надо признаться, все вышеописанные средства очень чувствительны и к сложности полигонов, и к объему данных. На больших файлах они здорово тормозят, а на сложных перекрученных полигонах могут и заткнуться. Этого почти не происходит c ArcINFO, и древнейшие команды "Build" и "Split" пользуются заслуженным уважением до сих пор.

Как делать полигоны в ArcMap? Нужные средства там есть, в Toolbox, например. Однако для их работы требуется опять-таки ArcINFO или хотя бы ArcEditor. Строить полигоны "бесплатно" поможет GeoWizards - потомок EdiTools. Скачать его можно на сайте автора, там же есть подробная инструкция по работе с модулем.

Вот и все. Стройных Вам построений!

Lalex.