- •Географические и земельноинформационные системы
- •Содержание
- •Введение
- •1. Общие сведения о геоинформатике
- •1.1. Понятие о геоинформатике
- •1.2. Метод геоинформатики
- •1.3. Связь геоинформатики с другими науками и технологиями
- •1.4. Краткий исторический очерк развития гис
- •2. Структура информационных систем
- •2.1. Общие положения
- •2.2. Техническое обеспечение
- •2.3. Математическое и программное обеспечение
- •2.4. Организационно-правовое обеспечение
- •2.5. Обеспечение персоналом
- •Контрольные вопросы
- •3. Классификация информационных систем
- •3.1. Классификация по структурированности
- •3.2. Классификация по уровням управления
- •3.3. Классификация по характеру использования информации
- •3.4. Классификация по сфере назначения
- •3.5. Классификация по степени автоматизации
- •Контрольные вопросы
- •4. Пользование системой, обработка и защита данных.
- •4.1. Языки общения пользователя с системой
- •4.2. Информационные технологии обработки данных
- •4.3. Целостность и защита данных
- •Контрольные вопросы
- •5. Программные средства реализации информационных систем
- •5.1. Программные продукты и их характеристики
- •5.2. Системное программное обеспечение
- •5.3. Краткая характеристика существующих операционных систем
- •5.4. Сервисное и программное обеспечение
- •5.5. Прикладные программные продукты
- •Контрольные вопросы
- •6.Системы управления базами данных (субд)
- •6.1.Организация хранения данных в эвм.
- •6.2. Концептуальная модель данных
- •6.3. Понятие о модели данных
- •6.4. Сетевая модель данных
- •6.5. Иерархическая модель данных
- •6.6. Реляционная модель данных
- •6.7. Система управления базами данных
- •6.8. Уровни представления о предметной области
- •6.9. Проектирование баз данных
- •6.9.1. Инфологическое проектирование.
- •Обзор предметной области
- •Определение объектов
- •Выделение объектов и атрибутов по сообщениям
- •Объекты и атрибуты
- •Формализация процессов
- •Перечень запросных связей
- •6.9.2. Даталогическое проектирование
- •6.10. Язык описания данных
- •6.11. Системы счисления, принятые в пк. Ascii и ansi-коды.
- •6.12. Хранение данных на физическом уровне системы
- •6.13. Ведение баз данных
- •6.14. Понятие об объективно-ориентированных моделях данных
- •6.15. Понятие о базах знаний и экспертных системах
- •Контрольные вопросы
- •7. Компьютерные сети и мировые информационные ресурсы
- •7.1. Общие положения
- •7.2. Передача информации
- •7.3. Локальная сеть компьютеров
- •7.4. Объединение локальных сетей компьютеров
- •7.5. Модель взаимодействия и протоколы компьютерных сетей
- •7.6. Мировая глобальная компьютерная сеть Internet
- •7.7. Всемирная информационная сеть
- •7.8. Поиск информационных ресурсов в Интернете
- •Контрольные вопросы
- •8. Стандартизация технического, программного и информационного обеспечения информационных систем
- •8.1. Общие положения о стандартизации и сертификации
- •8.2. Процесс стандартизации
- •8.3. Международный уровень стандартизации
- •8.4. Классификация информации
- •Контрольные вопросы
- •9. Общие сведения о географических и земельно-информационных системах
- •9.1. Понятие о географических и земельно-информационных системах
- •9.2. Классификация гис и зис
- •9.3. Структура гис и зис
- •Контрольные вопросы
- •10. Представление информации в гис и зис
- •10.1. Описание пространственных объектов в гис
- •10.2. Измерение информации
- •10.3. Типы данных и их источники
- •10.4. Векторное представление пространственных объектов
- •10.5. Растровое (матричное) представление пространственных объектов
- •10.6. Сжатие растровых данных
- •10.7. Векторно-растровые преобразования
- •10.8. Векторное и растровое описание трехмерных объектов
- •10.9. Моделирование рельефа
- •10.10. Обработка данных в гис
- •10.11.Форматы пространственных данных.
- •Область данных
- •Контрольные вопросы
- •11. Картографическая основа гис
- •11.1. Общие принципы создания картографической основы гис
- •11.2. Административный и планшетный принципы организации гис
- •11.3. Технология создания картографической основы
- •11.4. Построение условных знаков.
- •11.5. Классификация условных знаков.
- •Контрольные вопросы
- •12. Место геоинформационных систем в информационном обеспечении земельного кадастра
- •12.1. Специализированные гис в земельном кадастре
- •Справочники гис по базам геодезических данных
- •12.2. Применение гис для создания земельно-информационной системы (зис)
- •12.3. Качество гис
- •Контрольные вопросы
- •13.Создание гео – и земельноинформационной системы в среде маpinfo
- •13.2. Работа с точечными объектами .
- •13.2.1Создание нового слоя точечных объектов .
- •13.2.2. Графический способ создания точечных объектов .
- •1.3. Создание последующих слоев карты. Линейные объекты.
- •13.4. Создание слоя площадных объектов
- •13.5.Создание рабочего набора слоев
- •13.6.Заполнение баз данных(таблиц) слоев
- •13.7. Расположение надписей на картах .
- •13.8. Работа с растровыми изображениями.
- •13.9. Создание графических объектов на базе растровых изображений.
- •13.10.Реализация запросов в гис.
- •13.11. Создание тематических карт.
- •13.12.Алгоритмический язык MapBasic.
- •13.12.1.Структура программы языка.
- •13.12.2.Типы данных.
- •13.12.3. Простые операторы языка MapBasic.
- •13.12.4. Управляющие операторы и циклы языка MapBasic .
- •Do Case (выражение)
- •13.12. 5. Процедуры и функции.
- •13.13. Предложения по составлению программы на языке MapBasic.
- •'Ввод данных
- •1.14. Понятие об интегрированной среде MapBasic .
- •1.15. Особенности языка MapBasic в среде Windows.
- •13.16.Практическое применение гис MapInfo в кадастровых целях Постановка задачи.
- •Решение задачи по порядку.
- •Карта → Создать тематическую карту
- •14. Cоздание гео-и земельноинформационной системы в среде GeoMediaProfessional.
- •14.1. Общие положения, включение и графический интерфейс GeoMedia.
- •14.2. Организация окна карты.
- •14.3.Организация слоев.
- •В нашем случае рекомендуется задавать Rectangular Grid.
- •Войти в окно Feature Class Definition и выделить в нем нужный слой, нажать Edit(рис.14.11).
- •14.5.Заполнение баз данных слоев точечных, линейных, площадных объектов и подписей.
- •14.5.1.Точечные объекты. Ввести команду
- •Ввести точки по следующим координатам
- •View →Fit All (по аналогии с Microstation)(рис.14.18).
- •Для временного закрытия системы вводится команда
- •14.5.2.Линейные объекты
- •14.5.3.Площадные объекты
- •14.5.4. Подписи
- •14.5.5. Редактирование слоев
- •Масштабирование производится по команде
- •14.6.Осуществление запросов к системе.
- •14.7.Построение карты на растровой основе.
- •14.7.1.Создание рабочего набора и его вызов Выполнив команду
- •14.7.2.Организация окна карты.
- •14.7.3. Организация слоев.
- •Выводим слой на экран по команде
- •14.7.4.Привязка растрового изображения
- •По команде
- •Для обзора привязанного растра ввести команду
- •14.7.5.Пример создания карты на основе растра.
- •14.8.Создание тематических кадастровых карт в среде GeoMediaProfessional
- •Постановка задачи
- •Решение задачи.
- •15. Создание гео-и земельноинформационной системы в среде ArcView
- •15.1. Общие положения, включение и графический интерфейс ArcView
- •15.2.Построение точечных объектов карты.
- •2.2.1. Определение проекции карты.
- •2.2.2. Создание новой темы
- •15.2.3. Создание таблицы атрибутов и координат картографируемых точек
- •Редактирование(Edit)→Добавить запись(Add Record).
- •15.2.4. Вычерчивание объектов на карте
- •15.2.5. Редактирование карты. А) Изменение условного знака.
- •Б)Изменение записи
- •15.3. Построение линейных объектов карты графическим способом.
- •15.3.1.Создание новой линейной темы.
- •2.3.2.Создание таблицы атрибутов линейных объектов и вычерчивание темы.
- •2.4. Построение линейных объектов карты по координатам их точек.
- •15.5.Построение площадных(полигональных) объектов карты графическим способом.
- •15.5. Расположение подписей на карте.
- •2.6.Компоновка карты
- •15.7.Осуществление запросов системе
- •Б). Составление экспликации земель в автоматизированном режиме
- •В). Выделение буферных зон (зонирование территории)
- •Г). Формирование однородных эколого-технологических участков
- •15.8.2. Размещение посевов сеольскохозяйственных культур по рабочим участкам а). Теоретические вопросы размещения посевов сельскохозяйственных культур
- •Б).Размещение посевов сельскохозяйственных культур в программе
- •16. Создание геоинформационной системы в среде ObjectLand
- •16.1. Общие замечания.
- •16.2. Создание географической основы гис по слоям точечных, линейных , площадных и текстовых объектов
- •16.2.1.Создание гбд и ее компонентов
- •Гбд → Создать.
- •Правка→ Добавить
- •Площадные объекты.
- •Объект→Добавить→Площадной
- •Тема→Закрыть.
- •17.Создание геоинформационной системы в среде программы Panorama
- •17.1.Общие замечания
- •17.2. Составление цифровой карты на векторной основе.
- •17.2.1. Установление лимитов чертежа.
- •17.3 Установка пользовательской системы координат
- •17. 2.1.Определение слоев чертежа (плана)
- •17.2.2. Послойное построение чертежа по координатам
- •5. В появившемся окне «Создание объекта» вводим координаты начала и конца первой дороги (рис.17.10). Нажимаем Сохранить.
- •17.2.3.Действия со слоями
- •17.2.4.Подписывание чертежа
- •17.2.5. Удаление объектов
- •17.2.6. Выполнение измерительных действий на плане
- •17.2.7. Взаимодействие с внешними приложениями. Хранение карты.
- •17.3. Построение карты на растровой основе
- •17.3.1. Организация окна карты
- •17.3.2. Построение математической модели и заполнение паспорта данных
- •17.3.3. Привязка растрового изображения
- •17.3.4. Пример создания карты на растровой основе
- •18.Создание гео-и земельноинформационных систем на основе системы автоматизированного проектирования (сапр) AutoCad
- •18.1.Графический интерфейс AutoCad.
- •18.2. Создание цифровой карты ( плана) послойно по координатам точек объектов.
- •18.2.1. Установка единиц измерений.
- •18.2.2.Определение пользовательской системы координат (пск).
- •18.2.3. Установка лимитов чертежа.
- •18.2.4. Определение слоев чертежа.
- •18.2.5. Послойное построение чертежа по координатам.
- •Вид(View) →Масштаб(Zoom)→Увеличить(In)
- •18.2.6. Действия со слоями
- •18. 2.7.Подписывание чертежа
- •Формат(Format)→Cтиль текста(Text Style).
- •18.3.Синхронизация карты (чертежа)с базами данных других систем
- •18.3.1. Создание базы данных в среде Access.
- •Пуск→Программы→ Microsoft Office → Microsoft Office Access 2003
- •18.3.2.Конфигурирование источника данных.
- •Инструменты(Tools)→dbConnect
- •18.3.3.Подключение базы данных к чертежу
- •18.3.4.Создание шаблона связи базы данных с чертежом.
- •18.3.5.Создание и просмотр связей
- •18.3.Выполнение измерительных действий на карте(чертеже)
- •18.3.1.Определение координат точек.
- •3. Наводится квадратный маркер на точку. В момент получения на экране сообщения «Конечная точка»(EndPoint)(рис.18.64) нажать левую клавишу мыши.
- •18.3.2. Определение площади
- •18.3.4.Решение обратной геодезической задачи
- •18.5.Заполнение базы данных в AutoCad
- •18.6.Сохранение чертежа
- •18.7.Реализация запросов в среде AutoCad.
- •18.8. Реализация других возможностей картографирования
- •18.8.1.Создание точечных объектов.
- •18.8.2.Создание замкнутых областей.
- •18.9.Взаимодействие AutoCad с другими приложениями
- •18.9.1.Экспорт в dxf-формат
- •18.9.2. Импорт в MapInfo
- •18.10. Возможности использования растровой основы в системе AutoCad для картографирования. Построение тематической кадастровой карты в среде Autodesk Map.
- •18.10.1. Построение карты на растровой основе в интерактивном режиме.
- •18.10.2. Построение тематической карты в среде Autodesk Map
- •19. Создание цифровых планов в среде microstation
- •19.1.Графический интерфейс microstation(ms).
- •19.2.Создание цифрового плана послойно по координатам точечных, линейных и площадных объектов
- •19.2.1. Установка единиц измерений.
- •19.2.2.Определение системы координат и лимитов чертежа.
- •19.2.3 . Определение слоев плана.
- •Установки(Settings)→Слои(Level) →Показать(Manager)
- •19.2.4. Вычерчивание слоев
- •19.2.5. Подписывание чертежа.
- •19.2.6.Действия со слоями.
- •19.2.6.1.Отключение слоев
- •19.2.6.2. Сортировка слоев
- •Сорт.(Sort)→ По имени(By Name).
- •19.2.6.3. Иные стандартные действия со слоями.
- •19.3.Выполнение измерительных действий на плане.
- •19.3.1. Определение координат точечных объектов.
- •19.3.2.Определение длины объекта.
- •19.3.3.Определение площади объекта.
- •19.3.4. Заполнение слоя Подписи
- •19.3.5. Редактирование чертежа. А) Заливка замкнутых полигонов.
- •Б)Редактирование подписей в слоях.
- •19.4.Создание цифровых карт на основе растра. Особенности работы в MicroStation v8.1
- •20.Картографирование в системе крупномасштабного картографирования AutoKa-pc(apc)
- •20.1. Общие положения.
- •20.2 Графический интерфейс системы AutoKa-pc
- •20.3. Запуск системы AutoKa-pc и создание Рабочей базы данных.
- •20.4. Создание карты на основе векторной информации о точечных, линейных и площадных объектах.
- •20.4.1. Создание файла результата.
- •Архив→Администратор→Открыть∕Создать
- •20.4.2.Редактирование стиля черчения.
- •Б)Линейные объекты
- •Архив→Стиль черчения→Редактироовать.
- •В)Площадные объекты.
- •Архив→Стиль черчения→Редактироовать.
- •Г) Подписи
- •20.4.3. Построение слоя точечных объектов.
- •Создать →Ввод координат
- •Вычертить все.
- •20.4.4. Построение слоя линейных объектов.
- •Создать →Ввод координат
- •20.4.5.Построение слоя замкнутых полигонов (площадных объектов).
- •Создать →Ввод координат
- •20.4.6. Построение слоя подписей.
- •20.5. Редактирование карты. Фильтрация информации.
- •А) Создание фильтра.
- •Архив→Фильтр→Создать
- •Б)Фильтрация.
- •Фильтр→Вычертить все
- •20.6.Объединение баз данных
- •Архив→ Вид→ Вид экрана
- •Архив→ Вид→ Вид экрана
- •20.7. Создание цифровых карт на основе растра.
- •20.7.1.Просмотр растра.
- •Архив →Растр→ Открыть
- •20.7.4.Определение алгоритма( формулы) афинного преобразования
- •Расчет→Преобразования→Способ
- •20.7.6.Вычерчивание объектов на карте и удаление растра.
- •Установки →Мера углов
- •Расчет→Теодолитный ход
- •20.8.3. Решение других расчетных задач в среде AutoKa.
- •Расчет →съемка/Теодолитная…
- •20.9. Основные принципы создания макросов.
- •20.11. Связь системы AutoKa-pc с другими системами.
- •20.12. Вывод результатов в форме отчета.
- •20.13.Передача данных съёмки из регистраторов в систему АutoKa-pc
- •7. Cоздание цифровых планов в среде credo.Ter
- •7.1.Создание слоев объектов.
- •Данные →Слои
- •7.2. Построение точечных объектов.
- •7.3. Построение линейных объектов.
- •Данные →Слои
- •Ситуация→ Точечные объекты
- •Создать точку.
- •Ситуация →Линейные объекты,
- •Туз→Дороги.
- •7.4. Построение площадных объектов.
- •Создать.
- •7.5. Создание текстовых объектов
- •7.8.Создание цифровой модели местности на основе растра
- •7.8.1.Загрузка растра
- •7.9.1.Создание точечных объектов.
- •7.9.2. Создание линейных объектов.
- •Чертеж→Блок текста → Блок тип 4(рис.7.31)
- •Настройка→ Цвет для изображения(рис.7.34)
- •7.9.3. Создание площадных объектов
- •Ситуация → Обмеры →Обмер(рис. 7.44).
- •7.9.3.2. Способ параллелограмма и перпендикуляров.
- •Чертеж → Текст→Создать(рис. 7.58)
- •Ситуация→измерения → Площадь s (рис. 7.60)
- •7.10.Создание Цифровой модели рельефа(цмр) на основе Растра
- •7.10.1. Общие установки
- •Настройка →Параметры ввода/вывода→ Шаг горизонталей
- •Настройка
- •Рельеф →Точка→Создать(рис.7.66)
- •Точки по сплайну(рис. 7.68)
- •Рельеф→Точка → Изменить
- •7.10.3. Создание поверхности методом триангуляции.
- •Рельеф →Поверхность→ Создать(рис.7.75)
- •7.10.4. Создание поверхности методом структурных линий
- •Настройка
- •Рельеф →Контур рельефа→Создать(рис. 7.92)
- •Рельеф→Поверхность → Создать
- •Рельеф→Поверхность→ Создать
- •7.11.Трансформирование растра.
- •Трансформация→Список опорных точек
- •Трансформация→ Трансформировать
- •8.1.Определение проекта и его параметров.
- •Просмотр→ИнфоТочки
- •8.4.Построение линейных объектов.
- •8.5.Построение полигональных(площадных) объектов
- •9.1. 1. Процедура Sub
- •9.1.2. Процедуры Function
- •9.2. Создание переменных. Типы переменных
- •9.3. Понятие об объектах 9.3.1. Использование свойств объекта
- •9.3.2. Использование методов объекта
- •9.3.3. Объявление объектных переменных
- •9.3.4. Использование объектов в выражениях
- •9.4.2. Выбор между ветвями с помощью If …Then …Else
- •9.4.3. Использование If …Then …ElseIf
- •9.4.4. Применение инструкции Select Case
- •9.5. Циклы
- •9.5.1. Конструкция Do … Loop
- •9.5.2. Конструкция For … Next
- •9.5.3. Конструкция For Each…Next
- •9.6. Массивы
- •9.6.1. Объявление массивов фиксированной длины
- •9.6.2. Динамические массивы
- •9.7. Типы данных, определяемые пользователем
- •9.7.1. Объявление нового типа
- •10. Создание макросов в AutoCad
- •10.1. Программа для привязки растра
- •10.2. Вычерчивание точек
- •10.3. Вычерчивание линий
- •10.4. Вычерчивание дуги
- •10.5. Добавление текста
- •10.6. Запись координат точек в таблицу ms Excel
- •10.7. Чтение координат точек из таблицы ms Excel
- •10.8. Запись координат точек в текстовый файл
- •10.9. Чтение координат точек из текстового файла
- •10.10. Копирование координат точек в буфер обмена
- •10.11. Создание собственных диалоговых окон
- •10.12. Создание кнопок панели инструментов с закрепленными за ними процедурами vba
- •10.13. Добавление нового меню
- •Литература
9.7. Типы данных, определяемые пользователем
В VBA имеется возможность создавать дополнительные типы данных, так называемые определяемые пользователем типы, которые вы сможете использовать в своих процедурах и функциях. Определяемый пользователем тип дает возможность представить несколько связанных между собой элементов данных как одно целое. Эту единицу данных можно затем передавать в качестве аргумента функции или получать в виде ее результата. Определяемые пользователем типы данных создаются и используются, чтобы упростить некоторые задачи программирования и уменьшить общее число переменных в программе. Они облегчают хранение и обработку сложных групп данных.
9.7.1. Объявление нового типа
Перед тем как описать и применить переменные нового типа, вначале необходимо этот тип определить. Его можно сконструировать из стандартных типов данных VBA: Byte, Integer, Long, Single, Currency, Double, String, Date, Boolean, Variant. В создаваемые типы можно также включить массивы и уже определенные ранее типы.
Общий синтаксис для определения нового типа таков:
Type VarName
elementName As type
[ElementName As type]
[ElementName As type]
….
End Type
VarName и ElementName представляют собой любой идентификатор, соответствующий правилам VBA. Type представляет собой любое имя типа данных VBA.
Ниже представлен пример программы, которая вычисляет длину вектора.
1: Type coordinates
2: X As Double
3: Y As Double
4: End Type
5: Function Dist(N1 As coordinates, N2 As coordinates)
6: Dist = Swr((N1.X – N2.X) ^ 2 + (N1.Y – N2.Y) ^ 2)
7: End Function
8: Sub Distance()
9: Dim coord1 As coordinates
10: Dim coord2 As coordinates
11: Dim Distance As Double
12: coord1.X = InputBox(«Введите координату Х первой точки»)
13: coord1.Y = InputBox(«Введите координату Y первой точки»)
14: coord2.X = InputBox(«Введите координату Х второй точки»)
15: coord1.Y = InputBox(«Введите координату Y второй точки»)
16: Distance = Dist(coord1, coord2)
17: MsgBox Distance
18: End Sub
В строках 1 – 4 определен пользовательский тип данных Coordinates в котором содержится два элемента: координата X и координата Y.
В строках 9 – 10 определены две переменные coord1 и coord2 пользовательского типа данных. В другом случае, без использования новых типов данных нам пришлось бы задавать четыре переменные.
В строках 12 – 15 задаем переменными значения координат.
В строке 16 вызываем функцию Dist, куда передаем две переменные нового типа. Без их использования передавали бы четыре переменные.
Функция Dist определена в строках 5 – 7. Эта функция вычисляет длину вектора и присваивает значение переменной Distance.
Добавим также что для каждого типа данных требуется столько памяти, сколько занимают все его элементы.
10. Создание макросов в AutoCad
10.1. Программа для привязки растра
В AutoCAD нет встроенной программы для привязки растра. Необходимо либо приобретать программы – дополнение к AutoCAD, либо попытаться создать такую программу самостоятельно.
Пример 1.
1: Option Explicit
2: Const MinArray As Byte = 2
3: Option Base 1
4: Declare Function GetOpenFileName Lib “comdlg32.dll”_
5: Alias “GetOpenFileNameA” (pOpenfilename As OPENFILENAME) As Long
6: Type OPENFILENAME
7: IStructSize As Long
8: hwndOwner As Long
9: hInstance As Long
10: IpstrFilter As String
11: IpstrCustomFilter As String
12: nMaxCustFilter As Long
13: nFilterIndex As Long
14: IpstrFile As String
15: nMaxFile As Long
16: IpstrFileTitle As String
17: nMaxFileTitle As Long
18: IpstrIntialDir As String
19: IpstrTitle As String
20: flags As Long
21: nFileOffset As Integer
22: nFileExtension As Integer
23: IpstrDefExt As String
24: ICustData As Long
25: IpfnHook As Long
26: IpTemplateName As String
27: End Type
28: Function ShowOpen() As String
29: Dim strTemp As String
30: Dim VertName As OPENFILENAME
31: VertName.IStructSize = Len(VertName)
32: VertName.IpstrFilter = “Text Files (*.txt)” + Chr$(0)+_
33: “*.txt” + Chr$(0) + “Excel Files(*.xls)” + _
34: Chr$(0) + “*.xls + Chr$(0)
35: VertName.IpstrFile = Space$(254)
36: VertName.nMaxFile = 255
37: VertName.IpstrFileTitle = Space$(254)
38: VertName.nMaxFileTitle = 255
39: VertName.IpstrInitialDir = CurDir
40: VertName.IpstrTitle = «Файл результатов»
41: VertName.flags = 0
42: If GetOpenFileName(VertName) Then
43: strTemp = (Trim(VertName.IpstrFile))
44: ShowOpen = Mid(strTemp, 1, Len(strTemp) – 1)
45: End If
46: End Function
47: Sub Rastr()
48: Dim intFile As Integer
49: Dim strFileName As String
50: Dim NumArray_x() As Double ‘массив значений х растра
51: Dim NumArray_y() As Double ‘массив значений y растра
52: Dim NumArrayX() As Double ‘массив значений X плана
53: Dim NumArrayY() As Double ‘массив значений Y плана
54: Dim Array_Size As Long ‘размер массива
55: Dim X, Y, P, Z As Variant
56: Dim F, N, J, m, S As Integer
57: Z = ThisDrawing.Utility.GetPoint(, vbCrLf & «Укажите левый_
58: нижний угол растра:»)
59: Y= ThisDrawing.Utility.GetDistance(, vbCrLf & «Укажите текущий_
60: масштаб растра:»)
61:S= ThisDrawing.Utility.GetDistance(, vbCrLf & «Введите число_62: точек для привязки растра:»)
63: Array_Size = S
64: If Array_Size < MinArray Then
65: MsgBox «Введите больше точек:»
66: Exit Sub
67: Else
68: ReDim NumArray_x(Array_Size) ‘ объявление динамических массивов
69: ReDim NumArray_y(Array_Size)
70: ReDim NumArrayX(Array_Size)
71: ReDim NumArrayY(Array_Size)
72: End If
73: For N = 1 To Array_Size
74: X = ThisDrawing.Utility.GetPoint(, vbCrLf & «Укажите точку(“_
75: & N & “)на растре:»)
76: NumArray_x(N) = (X(1) – Z(1)) / Y
77: NumArray_y(N) = (X(0) – Z(0)) / Y
78: Next N
79: For N = 1 To Array_Size
80: X = ThisDrawing.Utility.GetPoint(, vbCrLf & «Укажите точку(“_
81: & N & “)на плане:»)
82: NumArrayX(N) = X(1)
83: NumArrayY(N) = X(0)
84: Next N
85: Dim Count As Long
86: Dim mm As Double
87: Dim d_x, d_y, DX, DY As Double
88: Dim m1, a1, a2, a3, a, C1, C2, C3, C4, Cx, Cy As Double
89: mm = 0 ‘переменная для суммирования масштабов
90: a = 0 ‘переменная для суммирования углов
91: Cx = 0 ‘2 переменные для суммирования свободных членов
92: Cy = 0
93: Count = 0
94: For N = 1 To Array_Size – 1
95: For J = N + 1 To Array_size
96 Count = Count + 1 ‘вычисляем приращения координат на растре и на плане
97: d_x = Round(NumArray_x(N) – NumArray_x(J), 3)
98: d_y = Round(NumArray_y(N) – NumArray_y(J), 3)
99: DX = Round(NumArrayX(N) – NumArrayX(J), 3)
100: DY = Round(NumArrayY(N) – NumArrayY(J), 3) ‘вычисляем масштабный фактор
101: m1 = Round((Sqr(DX ^ 2 + DY ^ 2)) / (Sqr(d_x ^ 2 + d_y ^ 2)), 3) ‘вычисляем угол между двумя точками на плане и растре
102: a1 = Round(Atn(d_y / d_x), 6)
103: a2 = Round(Atn(DY / DX), 6) ‘разность углов на плане и растре
104: a3 = a2 – a1 ‘свободные члены
105: C1 = Round(NumArrayX(N) – m1 * (NumArray_x(N) * Cos(a3) +_
106: NumArray_y(N) * Sin(a3)), 3)
107: C1 = Round(NumArrayY(N) – m1 * (NumArray_y(N) * Cos(a3) -_
108: NumArray_x(N) * Sin(a3)), 3)
109: C1 = Round(NumArrayX(J) – m1 * (NumArray_x(J) * Cos(a3) +_
110: NumArray_y(J) * Sin(a3)), 3)
111: C1 = Round(NumArrayY(J) – m1 * (NumArray_y(J) * Cos(a3) +_
112: NumArray_x(J) * Sin(a3)), 3) ‘суммируем масштабный фактор
113: mm = mm + m1 ‘суммируем разности углов
114: a = a + a3 ‘суммируем свободные члены
115: Cx = Cx + C1 + C3
116: Cy = Cy + C2 + C4
117: Next J
118: Next N ‘Начинаем записывать результаты в файл
119: F = FreeFile
120: strFileName = ShowOpen
121: If Not Right(strFileName, 4) = “.txt” Then
122: strFileName = strFileName & “.txt”
123: End If
124: Open strFileName For Append As F
125: Print #F, «Осредненные значения:»
126: Print #F, «Масштаб:», Round(((mm / Count)), 3)
127: Print #F, «Угол поворота:», Round((a / Count), 3)
128: Print #F, «Свободный членX0:», Round((Cx / Count * 2)), 3)
129: Print #F, «Свободный членY0:», Round((Cy / Count * 2)), 3)
130: Print #F, «Ошибки в положении пунктов при пересчета:»
131: For N = 1 To Array_Size
132: Print #F, “Mx(“& N &”):”, Round(((Cx / Count * 2))) +_
133: (mm / Count) * (NumArray_x(N) * Cos(a / Count) + NumArray_y(N) *_
134: Sin(a / Count)) – NumArrayX(N), 3)
135: Print #F, “My(“& N &”):”, Round(((Cy / Count * 2))) +_
136: (mm / Count) * (NumArray_y(N) * Cos(a / Count) + NumArray_x(N) *_
137: Sin(a / Count)) – NumArrayY(N), 3)
138: Next N
139: Print #F, «Указанные точки на плане:»
140: For N = 1 To Array_Size
141: Print #F, “X(“ & N & “):”, Round(NumArrayX(N), 3)
142: Print #F, “Y(“ & N & “):”, Round(NumArrayY(N), 3)
143: Next N
144: Print #F, «Указанные точки на растре:»
145: For N = 1 To Array_Size
146: Print #F, “x(“ & N & “):”, Round(NumArray_x(N), 3)
147: Print #F, “y(“ & N & “):”, Round(NumArray_y(N), 3)
148: Next N
149: Close F
150: End Sub
В строке 1 директива Option Explicit запрещает неявное объявление переменных. То есть все переменные должны быть описаны.
В строке 2 определена константа MinArray = 2, которая затем будет использована для задания минимального размера массива.
В строке 3 директива Option Base 1 указывает на то, что индексы массивов должны начинаться с единицы.
В строках 4 – 5 вызывается функция, которая открывает диалоговое окно Open File. В AutoCAD такое окно не встроено. Однако с самой Windows поставляется с определенным количеством файлов DLL, которые обеспечивают разработчиков сотнями специализированных и очень надежных функций. Перед тем как использовать ту или иную функцию Windows нужно сообщить VBA, где ее искать. Для этого необходимо ввести инструкцию Declare на уровне модуля. Общий синтаксис таков:
Declare Function Name Lib “Libname” [AliasName] (Arguments) [AsType]
Declare Sub Name Lib ““Libname” [AliasName] (Arguments) [AsType]
Где Name – это имя процедуры, а LibName – имя DLL файла. Arguments – представляет собой список необходимых аргументов. Всего данной функции требуется 19 аргументов. Их не все требуется определять, но обязательно нужно передать в функцию. Для передачи такого большого количества переменных удобно использовать типы данных определенные пользователем (строки 6 – 27).Ниже приводится краткая характеристика данных.
Attribute VB_Name = "GetOpenFileName"
Option Explicit ' запрет на неявное объявление переменных
Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long ' объявление функции Windows
Type OPENFILENAME ' объявляем пользовательский тип дананных
lngStructSize As Long 'Размер структуры
hwndOwner As Long 'Дескриптор окна владельца
hInstance As Long 'Дескриптор приложения
strFilter As String 'Строка фильтра
strCustomFilter As String 'Строка с выбранным фильтром
intMaxCustFilter As Long 'Длина буфера для строки выбранного фильтра
'Всегда должна быть равна Len(strCustomFilter)
intFilterIndex As Long 'Индекс строки фильтра
strFile As String 'Полное имя выбранного файла (путь и файл)
intMaxFile As Long 'Длина буфера для полного имени файла
'Всегда должна быть равна Len(strFile)
strFileTitle As String 'Имя выбранного файла
intMaxFileTitle As Long 'Длина буфера для имени выбранного файла
'Всегда должна быть равна Len(strFileTitle)
strInitialDir As String 'Имя начального каталога (при открытии окна)
strTitle As String 'Заголовок диалогового окна
lngFlags As Long 'Флаги диалогового окна
intFileOffset As Integer 'Смещение имени файла
intFileException As Integer 'Смещение расширения файла
strDefExt As String 'Расширение файла по умолчанию
lngCustData As Long 'Данные для обработки
lngfnHook As Long 'Указатель функции обработки
strTemplateName As String 'Имя шаблона диалогового окна
End Type
В строках 28 – 46 определена функция ShowOpen, в которой определены некоторые начальные значения диалогового окна Open File, а также эта функция отображает это самое диалоговое окно. Комментарий к функции приводится ниже.
Function ShowOpen() As String ' функция для открытия диалогового окна OpenFile
Dim strTemp As String
Dim VertName As OPENFILENAME
With VertName
.lngStructSize = Len(VertName) 'Передаем размер созданной структуры
.strFilter = "Text Files (*.txt)" + Chr$(0) + _
"*.txt" + Chr$(0) + "Excel Files(*.xls)" + _
Chr$(0) + "*.xls" + Chr$(0) ' задаем типы расширений для выбираемых файлов
'.strCustomFilter = Space$(254) ' задаем строку фильтра. Максимальное количество символов
'254. Оператор space$ - резервирует строку 254 символа
.intMaxCustFilter = 254 ' задаем максимальное значение символов в строке фильтра
.intMaxFile = 255 'задаем масимальное количество символов в строке с полным именем
'выбираемого файла
.intMaxFileTitle = 254 ' длина буфера для имени файла
.strFile = Space$(254) ' резервируем строку для имени файла
.strInitialDir = "C:\Program Files" ' каталог по умолчанию
.strTitle = "Выбор файла" 'заголовок диалогового окна
.lngFlags = 0 ' 1 - тотько для чтения
End With
If GetOpenFileName(VertName) Then
strTemp = (Trim(VertName.strFile))
ShowOpen = strTemp
End If
'В строке strTemp присваиваем содержимое строки VertName.strFile без всяких пробелов
'до и после имени файла. Для этого вызываем встроенную в Visual Basic функцию Trim.
'После этого функции присваиваем значение strTemp
End Function
Sub DialogBox()
Dim strFileName As String
strFileName = ShowOpen 'вызываем на исполнение функцию ShowOpen
If Not Right(strFileName, 4) = ".txt" Then
strFileName = strFileName & ".txt"
End If
'Если в выбранном имени файла пользователь забыл ввести расширение то автоматически
'добавляем его
Shell PathName:="C:\Windows\notepad.exe " & strFileName
'функция Shell вызывает требуемое приложение и файл
End Sub
Сама функция Open File вызывается в строке 120 головной программы.
В строке 119 переменной F присваиваемый следующий свободный номер файла. В строке 124 открываем файл для добавления записей (Append).
Оператором Print# записываем информацию в файл.
Для построения диалогового окна работы с принтером предлагается следующая программа.
Attribute VB_Name = "Module3"
Public Const LBSELCHSTRING = "commdlg_LBSelChangedNotify"
Public Const SHAREVISTRING = "commdlg_ShareViolation"
Public Const FILEOKSTRING = "commdlg_FileNameOK"
Public Const COLOROKSTRING = "commdlg_ColorOK"
Public Const SETRGBSTRING = "commdlg_SetRGBColor"
Public Const HELPMSGSTRING = "commdlg_help"
Public Const FINDMSGSTRING = "commdlg_FindReplace"
Type PrintDlg
lStructSize As Long
hwndOwner As Long
hDevMode As Long
hDevNames As Long
hdc As Long
flags As Long
nFromPage As Integer
nToPage As Integer
nMinPage As Integer
nMaxPage As Integer
nCopies As Integer
hInstance As Long
lCustData As Long
lpfnPrintHook As Long
lpfnSetupHook As Long
lpPrintTemplateName As String
lpSetupTemplateName As String
hPrintTemplate As Long
hSetupTemplate As Long
End Type
Declare Function PrintDlg Lib "comdlg32.dll" Alias "PrintDlgA" (pPrintdlg As PrintDlg) As Long
Function ShowPrintDlg()
Dim sd As PrintDlg
Dim strTemp As Long
With sd
.lStructSize = Len(sd)
.nCopies = 6
.hdc = 10
.flags = 200
.nFromPage = 1
.nToPage = 2
.nMaxPage = 4
.nMinPage = 1
.hPrintTemplate = 3
.hSetupTemplate = 2
.hInstance = 2
.lpfnPrintHook = 11434324
.lpPrintTemplateName = COLOROKSTRING
.lpSetupTemplateName = LBSELCHSTRING
.lCustData = 12333
End With
strTemp = PrintDlg(sd)
End Function
Sub print_a()
Dim d As Long
d = ShowPrintDlg
End Sub
Ее предлагается изучить самостоятельно.