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

ПОДПИСЫВАНИЕ ИЗОЛИНИЙ
Автор скрипта - Darsik

Сначала о правилах оформления подписей изолиний. Как гласят правила оформления топокарт, цифровые подписи горизонталей в любом случае должны быть ориентированы своим основанием вниз по склону". Кроме того, рекомендуется, чтобы основание было по возможности ориентировано к низу листа, ну чтобы цифры не стояли вверх тормашками. Ну и конечно, надписи должны стоять в разрывах. Выполнение этих правил, не заложено в штатных средствах ГИС, и каждый оформитель упирается как может. Надписывая горизонтали вручную, по одной надписи зараз, мы можем добиться правильного расположения надписи, но как быть с разрывом? Можно физически удалить часть горизонтали, как многие и делают - это нормально при CAD-черчении, однако мы в ГИС должны помнить, что так нарушается "целостность" слоя горизонталей. Можно закрыть кусочек горизонтали графической маской - прямоугольники ловко строит вокруг текстовых элементов программа LabelMan из коллекции ESRI. Счастливые обладатели ArcMap могут позволить себе автоматическое "гало" вокруг цифр. Однако и маски и гало одноцветные, и смотрятся только на одноцветном фоне. Строить маски под цвет фона? Попадаются и такие скрипты.

Однако общепризнано, что наиболее разумным решением является маскирование участка горизонтали, когда он делается "невидимым" виртуально, по легенде. Создать такие участки поможет скрипт для оформления подписей изолинии в разрыве. Он предназначен для разрезания линий поодиночке, точно в указанном месте, так как все равно автоматическая работа не может обеспечить требования картографии. Атрибутивная таблица слоя должна иметь колонку с высотами.

1. В скрипте нужно уточнить имя колонки с высотами, по умолчанию оно называется "Высота". Указывается также размер режущей "насадки" - по умолчанию 75 единиц.

... aCircle = Circle.Make( p, 75)
theTheme = theView.GetEditableTheme
theFtab = theTheme.GetFTab
theField=theFtab.FindField("Высота")...

2. Скрипт надо откомпилировать и повесить на новый инстремент (Tool) для категории "View" (через Project/Customize). В первой строчке свойств инструмента для "Apply" надо указать название скрипта - он будет срабатывать при каждом нажатии инструментом на горизонталь.

3. Линейная тема должна быть открыта на редактирование.

Далее скрипт режет изолинию в той точке, на которую щелкаешь (точнее, вокруг точки в заданном радиусе). Вырезанный кусочек, естественно, не выбрасывается, а добавляется как новый элемент в тот же шейп-файл. Для этого нового элемента проставляется соответствующее значение высоты. Остальные колонки остаются пустыми. Какую-либо колонку, например, ID, надо сразу заполнить для исходных изолиний единицами, тогда у новых отрезков в колонке ID будут нули. Таким образом, сначала идет ручное разрезание, потом несложно подписать "разрывы" точно в нужном месте уже автоматически, с учетом того, что для них ID=0. По легенде лучше сразу сделать новые кусочки невидимыми, тогда они будут "исчезать на глазах" и процесс станет наглядным.

         

Lalex