Добрый вечер, господа разработчики.Мне необходимо открыть основную карту, затем добавить две пользовательские карты и ещё добавить граф дорог. Всё эти карты имеют разные классификаторы. Всё классификаторы от этих карт я переместил в отдельный каталог (так я облегчил объем каталогов самих карт + сделал централизованное обновление классификаторов для них). Вот теперь при открытии и добавлении карт есть ли возможность указать программно, что эта карта должна использовать классификатор, который находится в таком та каталоге с таким то именем, а эта карта вот этот классификатор?
Имя классификатора задается при создании карты. При открытии и добавлении не указывается. Классификаторы с расширением RSC или RSCZ с одним именем считаются одним классификатором и открываются с любым расширением.
Контроль доступности классификатора можно выполнить функцией:
Код
// Найти классификатор в текущей папке, папке приложения или общей папке классификаторов
// name - имя классификатора (только имя или полный путь, автоматически ищутся файлы rsc и rscz)
// size - размер буфера для записи полного пути найденного классификатора,
// если размер равен нулю, то имя классификатора не перезаписывается найденным путем
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapFindRsc(WCHAR * name, long int size);
Установить путь к общей папке классификаторов (для автоматического поиска при открытии/добавлении карт) можно функцией:
Код
// Установить путь к общим файлам классификаторам (RSC)
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapSetCommonRscPathUn(const WCHAR* rscpath);
// Запросить путь к общим файлам классификаторам (RSC)
// При ошибке возвращает пустую строку
_MAPIMP const WCHAR* _MAPAPI mapGetCommonRscPathUn();
При необходимости частого открытия/закрытия разных карт можно заблаговременно открыть их классификаторы для ускорения доступа:
Код
// Открыть классификатор в общем списке классификаторов для ускорения
// последующего открытия/закрытия карт с этим классификаторов при потоковой обработке
// name - имя файла классификатора
// При ошибке возвращает ноль, иначе идентификатор классификатора карты
_MAPIMP HRSC _MAPAPI mapOpenCommonRscUn(const WCHAR * name);
Добрый день, подскажите я в первую очередь открываю основную карту, далее к ней добавляю пользовательскую карту и еще добавляю граф ЖД дорог и граф АВТО дорог. Как мне программно сделать: 1. Пользовательскую карту сделать основной, чтобы на нее объекты наносились. 2. На всех картах кроме пользовательской отключить редактирование и поиск.
Сразу просьба на будущее: задавать новые вопросы по новым темам в новых ветках. А также каждый раз указывать, каким инструментарием в какой среде разработки Вы пользуетесь.
Основной является карта (или растр, или матрица), которая открывается первой. Остальные добавляются к ней. Изменить основную карту нельзя, только переоткрыть данные в другом порядке.
Но! К Вашему вопросу основная карта никак не относится. Речь о том, чтобы сделать доступным или недоступным выбор объектов на определенных картах и запрерить или разрешить их редактирование.
1. Редактирование Во-первых, карту сразу можно открыть/добавить в режиме редактирования или только чтения. За это отвечает параметр mode методов TMapView.MapOpenPro и TMapView.AppendDataPro соответственно. Во-вторых, для пользовательской карты можно включить или выключить флаг возможности редактирования программно: TMapSite.SiteEditFlag В-третьих, если мы говорим о программной реализации, то это Вы сами управляете тем, разрешать ли редактирование объекта или нет. Вы сами контролируете к какой карте относится редактируемый объект и можно ли выполнять такую операцию. Это наиболее правильный вариант, так как варианты "во-первых" и "во-вторых" просто выдадут ошибку уже при попытке сохранения объекта на карту, а что происходит до этого и какие режимы запускаются у Вас в программе они не знают.
2. Выбор объектов Поиск/выбор объектов на карте отвечает контексту заданных условий поиска и выделения. Это не только разрешает/запрещает определенные карты, а также влияет на состав объектов (например, можно сказать - выбирать только площадные объекты слоя "гидрография"). Управление контекстом условий поиска выполняется с помощью класса TMapSelect. Включить для карты условия поиска - TMapSelect.SetSeekSelect, перед этим надо эти условия задать.