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

Подключение классификатор к электронной карте

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Подключение классификатор к электронной карте, Подключение классификатор к электронной карте
 
Добрый день.
Подскажите пожалуйста в таком вопросе, у меня есть три шаблона карт абсолютно одинаковые, но там нет классификатор. Теперь мне необходимо программно открыть один из шаблонов карт, а классификатор с другого места.
т.е. Я все это делаю для того, чтобы у всех шаблонов карт был один единственный классификатор.  
 
mapSetCommonRscPath(путь_к_классификаторам); // установить путь для классификатора

// открыть карты
mapOpenMap(карта1, 0);
mapOpenMap(карта2, 0);
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
А разве не надо ещё прописать mapRscOpen()  
 
Цитата
Александр Махин написал:
А разве не надо ещё прописать mapRscOpen()  
Не надо
======================
Поясняю логику работы ядра ГИС Панорама с картами и классификаторами (я уже делал это несколько раз, можете пересмотреть мои сообщения)

Есть карта, если классификатор.
Карта - это база геопространственной информации бинарного формата которая содержит
- район содержащей подробные характеристики проекции, эллипосида, единиц измерения, и разные справочные данные топографического характера
- набор объектов с указанием их типа, внутреннего кода, локализации (запомните этот момент ! ниже буду на него ссылаться -> ***)
- аттрибутивную информацию по каждому объекту (семантики)
- метрическую информацию по каждому объекту (метрика)
- внутренние индексные таблицы

Чтобы показать всё написанное выше на каком то графическом объекте (неважно что это, монитор, файл-картинка, Web страница, память и.т.п) каждой карте нужна ЛЕГЕНДА (то есть,то что обычно находится в нижнем левом углу бумажных карт). Легенда может быть разной для одной и той же карты, её можно подключить переподключить другую и.т.п
По сути, mapOpenMap выполняет открытие "карты" и "легенды карты" и сопоставляет по коду - вид на холсте (***).
Например, если в одно классификаторе река будет синей линией а в другом красным пунктиром, то при переподключении классификатора - вид рек на карте будет динамически меняться. Во мы подогшли к второй составляющей  - классификатора

Классификатор - это база графических аналогов объектов карты (база легенды карты)  который содержит
- палитру цветов допустимую для объектов
- набор слоёв
- набор семантик
- набор самих объектов с их видами, допустимыми и обязательными семантиками, принадлежностью к слоям и.т.п
- подключаемый графические библиотеки (программный код) для специфической отрисовки объект (не обязательно)
- подключаемый аналоги в библиотеках 3D объектов (не обязательно)

Каждый объект карты имеет внутренний код ***
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Сообщение что выше было намного длинней.... Сожрало немного, только 2 последних абзаца.... попробую дописать вторым сообщением ))))
============================
Так вот, исходя из сказанного, открывать мы можем:
1. карту целиком вместе с классификатором - mapOpenMap(карта. 0)... чтобы получить ссылку на классификатор в открытой карте используем функцию mapGetRscIdent(map, map)
2. классификатор отдельно (легенду)  - mapOpenRsc(классификатор)
Открыть отдельно карту без классификатора невозможно... ну разве что как бинарный файл без использования ядра

Структура данных устроена так, что в служебном заголовке каждой карты хранится только имя классификатора. Если в папку с картой "подсунуть" другой классификатор с таким же именем, то при открытии карты - все объекты будут перекодированы. Функция mapSetCommonRscPath о которой я написал выше, решает проблему с "замусориванием" файловой системы классификаторами. Используя её, можно создать несколько папок , в котором будут храниться разные по наполнению но одинаковые по названиям классификаторы. Устанавливая нужный путь mapSetCommonRscPath и открывая карты - можно получить эффект отображения одной и той же карты совершенно с разным видом(например чёрно-белый вариант или цветной).
Порядок действия такой

// закрываем карты
if (map1) mapCloseMap(map1);
if (map2) mapCloseMap(map1);
mapSetCommonRscPath (путь_к_классификаторам); // меняем путь
// переоткрываем карты
map1 = mapOpenMap(карта1, 0);
map2 = mapOpenMap(карта1, 0);

Правило связки классификатора с картой при открытии
Если при открытии карты, ядро "не видит" в текущей директории её классификатора  - оно лезет в папку установленную в mapSetCommonRscPath
для ГИС Панопрама - это папка с установленной ГИС Панорамой
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Это мне давно уже понятно. Я просто хочу использовать один классификатор для всех шаблонов карт.
И подскажите пожалуйста для функции mapSetCommonRsc() нужно передать параметр char rscpath как это сделать если у меня путь c:\ProgramFiles\Frame. rsc?  
 
Цитата
Александр Махин написал:
И подскажите пожалуйста для функции mapSetCommonRsc() нужно передать параметр char rscpath как это сделать если у меня путь c:\ProgramFiles\Frame. rsc?  
чтобы ответить на вопрос, мне нужно знать в каком языке Вы программируете и в какой оболочке
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
C# с использованием Gis Toolkit 12
 
Цитата
Александр Махин написал:
C# с использованием Gis Toolkit 12

Предполагаю, что так.
Перед вызовом необходимо объявить импортируемую функцию.
В нужном месте вызывать, передав параметр как строку.

Цитата
[DllImport("gis64acces.dll", CharSet = CharSet.Unicode)]
public static extern int mapSetCommonRscPathUn(string rscpath);

[DllImport("gis64acces.dll", CharSet = CharSet.Ansi)]
public static extern int mapSetCommonRscPath(string rscpath);
Страницы: 1
Читают тему (гостей: 1)



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

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