Стрелки ЛЭП.mbx

(C) Дмитрий Мазуров, Западно-Сибирский филиал ФГУП "Госземкадастрсъемка" (dima_maz@mail.ru)

				Введение.
	Программа предназначена для рисования условных знаков ЛЭП низкого и высокого напряжения, а также линий связи. На текущий момент программа умеет работать только с ЛЭП на столбах, фермы она не понимает. Ясное дело, столбы должны сидет в узлах ЛЭП. Хотя допускается отклонение в 10 см (здесь и далее предполагается, что координаты карты ЛЭП - метры). Программа умеет рисовать стрелки символами и полилиниями. Форма полилинейных стрелок соответствует условным знакам Геокосмоса для АвтоКАДа. Расстояние от столба до острия такой стрелки  в плане задается. Форма символьных стрелок выбирается пользователем.

				Порядок работы.
	При запуске программы в меню "Программы" появляется команда "Расставить стрелки на ЛЭП...". По этой команде появляется главный диалог программы, позволяющий задать все параметры. По нажатию кнопки все параметры кроме таблиц сохраняются и запускается процесс рисования стрелок. Соответственно, при открытии диалога сохраненные параметры загружаются. 

				 Параметры.
	Таблица ЛЭП - вписываем или выбираем открытую таблицу, содержащую ЛЭП оформленные в виде полилиний, линий или дуг. Таблица ЛЭП может содержать не только ЛЭП, но и, например, столбы, растяжки и пр. Для отличия ЛЭП от других линий, например растяжек, используется специальное условие (см. Условие выборки ЛЭП).
	Таблица столбов - вписываем или выбираем открытую таблицу, содержащую столбы оформленные в виде точечных объектов. Таблица столбов может содержать не только столбы. Для отличия столбов от других точечных объектов используется специальное условие (см. Условие выборки столбов). Если при выборе таблицы ЛЭП графа таблица столбов пуста, то она (графа) заполняется именем выбранной таблицы ЛЭП.
	Таблица стрелок - вписываем или выбираем открытую таблицу, в которую программа будет помещать стрелки. Таблица уже может содержать какие-либо объекты, поэтому предусмотрено присвоение семантики новоиспеченным объектам(см. Установка семантики стрелок).
	Масштаб 1: - знаменатель масштаба. Размер стрелок в карте делается таким, чтобы их размеры в плане заданного масштаба были стандартными.
	Тип стрелок - выбираем как рисовать стрелки, полилиниями или символами.
	Тип ЛЭП и стиль стрелок - выбираем форму стрелок (низковольтные/высоковольтные) и стиль оформления . Если выбран тип стрелок "полилиния", то это стиль линий, если "символ" - стиль символа для каждого типа ЛЭП.  Стрелка в стиле символа должна быть направлена вправо и начинаться в центре точечного объекта, в шрифте "MapLep" есть такие стрелки.
	Условие выборки ЛЭП - часть where оператора select для выбора ЛЭП. Слово where включать не нужно. Для тех, кто в танке, объясняю - это тоже самое, что нужно вписать в графу "с условием:" диалога SQL-запрос (меню "Запрос"), для выборки ЛЭП. Пример: 
Название="Линии_ВЛЭП_6_кВ"

	Условие выборки столбов - то же для столбов. Пример:
Название="Опора"
	Установка семантики стрелок - часть set оператора update SQL. Соответствующего диалога в MapInfo не предусмотрено. Есть команда "Таблица|Обновить колонку", но она соответствует лишь частному случаю оператора update. Судьба тех, кто в танке, висит на волоске :). А ничего сложного, в общем-то, нет. Чем объяснять, лучше приведу пример из жизни: 

ID= RowId, Наименование= "Усл. зн."

Что сие означает? А очень просто: в таблице стрелок есть столбцы ID и Наименование. ID задуман как  порядковый номер объекта. В MapInfo к номеру строки можно обращаться по имени RowId (это, типа, скрытый столбец). Учтите, что удаленные строки тоже нумеруются. Далее, запятая - разделитель. Столбец Наименование устанавливаем в значение "Усл. зн.". Таким образом, все стрелки у нас будут пронумерованы и помечены как условный знак, чтобы отличаться от уже имеющихся в таблице объектов.

	Длина стрелки(мм) - (только для стрелок-полилиний) длина стрелки в плане. Длина стрелок на местности = (Длина стрелки в плане(мм))*(Знаменатель масштаба)/1000. Это на плоскости. А на сфере длина будет несколько меньше.

	Рисовать "древко" стрелки - (только для стрелок-полилиний) нужно ли рисовать линию от начала стрелки (от столба) до её острия.

				Принцип работы программы.
	Программа выбирает ЛЭП из таблицы ЛЭП, столбы из таблицы столбов и работает только с ними. Проходит по каждому полигону каждой ЛЭП. На каждом узле проверяет, есть ли в 10 см столб. Если есть, пытается посадить стрелки на смежные ребра. Если длина ребра не меньше, чем длина стрелки, стрелка помещается в таблицу стрелок. Устанавливается семантика для новой стрелки. Если стрелки рисуются полилиниями, каждая их часть (большая и малая "галочка", древко) рисуется отдельной полилинией.