На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Построение матрицы качеств по определенным объектам

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Построение матрицы качеств по определенным объектам
 
Добрый день!

Дано:
Набор объектов
Требуется:
Возможность получать матрицу качеств, описывающую нахождение объекта из набора в каждой элементарной точке с использованием API.

Пути и проблемы:

Путь 1: Заполнение матрицы в ручную
Добавить семантику с кодом "X" и числовым значением "VAL"  каждому объекту из набора. С помощью функции mtrCalcCharacteristic собрать данные в массив и записать их в матрицу качеств функцией mapPutMtqValue. (Уже так делал с функцией mtrCalcIncline и все было отлично).
Проблема:
Вне зависимости от наличия объекта в конкретной точке, функция mtrCalcCharacteristic отдает значение, равное "VAL", возращает НЕ НОЛЬ.
Функция mtrBuildMatrixSurfaceUn работает дольше, чем наши требуемые рамки по времени.
Примечение:
При построении поверхности стоимости через приложение ГИС Панорама по семантике "X" строится верно.

Путь 2: Создание растра в формате TIFF или RSW
Получить растр объектов и обработать для получения матрицы качеств.
Проблема:
Функция LoadMapToBmpUn строит только BMP файлы, хотя в документации указано, что есть возможность TIFF и RSW.
При построении "четких" растров, возникает проблема размера, из-за невозможности поставить битность изображения = 1.
Примечение:
При построении растра через приложение ГИС Панорама имеется возможность строить и RSW и TIFF, задать разрядность.
 
  Для реализации "Путь 2" можно использовать функцию

// Построение растра качеств по векторной карте на заданный
// участок района работ
// При ошибке возвращает ноль
// hMap    - исходная карта для построения растра,
// rstname - полное имя создаваемого растра,
// filtername - полное имя служебного текстового файла
//   Вместе с картой должен располагаться фильтр объектов -
//   служебный текстовый файл map2rsw.ini, содержащий перечень кодов
//   объектов, используемых при построении растра
// mtrparm - параметры создаваемого растра,
// handle   - идентификатор окна диалога, которому посылаются
// сообщения о ходе процесса :
//   0x0581 - сообщение о проценте выполненных работ (в WPARAM),
//   если процесс должен быть принудительно завершен, в ответ
//   должно вернуться значение 0x0581.
// Если handle равно нулю - сообщения не посылаются.

long int MTREXPORT mtrBuildRasterUn(HMAP hMap,       // mtrexapi.h
                                   const WCHAR * rstname,
                                   const WCHAR * filtername,
                                   BUILDMTW * rstparm,
                                   HMESSAGE handle);



Пример служебного текстового файла
(коды объектов карты - площадные линейные точечные векторные и номера цветов палитры,
заносимые в создаваемый растр)

[SQUARE]


31120000     1

31410000     8      

44200000     4      

51140000     4      

71111110     3      

71111100     3      

[LINE]

31410000     2      

31430000     2      

31432000     2    

[POINT]

44100000     6      

44200000     7    

[VECTOR]

44200000     7      

62315000     6      

[PALETTE]

1      0          0        170

2      0        191        239

3      0        126          0

4    113          0         56

5     80          0         80

6     96          0          0

7    255        128         64

8      0         64        239

9    172          0         86

10    255        255          0  
 
Александр Горбунов, к сожалению, функция выдает критическую ошибку "SIGSEGV".
Через ГИС Панорама растр строится замечательно, используя этот же фильтр.

Так же попробовал через mapBuildMtw. Растр строится, но часто появляются артефакты в виде незаполненных местами объектов, или вообще непонятные куски, в которых видны очертания нужного результата.
Через ГИС Панорама с этим же файлом IMH, что при использовании функции mapBuildMtw, все получается в лучшем виде.
 
Если у Вас появляются неправильно заполненные полигоны, это означает, что буфер отображения внутри ядра меньше, чем изображение, которое Вы формируете.
Для исправления этого поведения вызовите mapSetMaxScreenImageSize с указанием размера изображения с запасом. Вызов функции mapSetMaxScreenImageSize должен выполняться до первого открытия данных.
 
Vladimir Letov, спасибо, Ваши рекомендации помогли, все работает!
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности