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

Создание пользовательский карты по rsw

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Создание пользовательский карты по rsw
 
Добрый день.
Ситуация следующая у меня имеется набор карт в формате rsw с привязкой по координатам, которые я буду использовать как подложку. Каталог карт я реализовал как древовидный список т.е. Страна - Область - Город.
Вопрос, пользователь допустим выбрал какой-то город и далее после открытия я хочу создать программно пользовательскую карту в формате sitx и наложить её поверх подложки.
Есть ли возможность реализовать данный функционал? И какими API функции мне необходимы для реализации?
 
  // Создать новую векторную карту
 // mapname - полное имя файла карты (MAP, SIT, SITX)
 // rscname - полное имя файла ресурсов (RSC)
 // Возвращает идентификатор открытой векторной карты
 // Структуры MAPREGISTEREX и LISTREGISTER описаны в mapcreat.h
 // sheetnames - название (UTF-16) листа карты, номенклатуры и файлов даных (для многолистовой карты),
 // для пользовательской карты (не ограниченной рамкой) название листа и номенклатуры совпадает,
 // а название файлов данных совпадает с названием паспорта карты
 // mainname - главное название (UTF-16) многолистовой карты (MAP),
 // для пользовательской карты совпадает с названием листа карты
 // (Запросить главное название карты можно функцией mapGetSiteNameUn)
 // password  - пароль доступа к данным из которого формируется 256-битный код
 // для шифрования данных (при утрате пароля данные не восстанавливаются)
 // (поддерживается для карт с расширением SITX - хранилище в одном файле) или 0
 // size      - длина пароля в байтах (!) или 0
 // hmap, hsite - идентификатор карты, из которой может быть скопирован пароль доступа к данным
 // error     - поле для получения кода ошибки или 0; коды ошибок приведены в maperr.rh
 // После завершения использования карты необходимо освободить ресурсы функцией mapCloseData
 // Возвращает идентификатор открытой векторной карты
 // При ошибке возвращает ноль

_MAPIMP HMAP _MAPAPI mapCreateMapExp(const WCHAR * mapname, const WCHAR * rscname,
                                    MAPREGISTEREX * mapreg, LISTREGISTER * listreg,
                                    SHEETNAMES  * sheetnames, const WCHAR * mainname,
                                    const WCHAR * password, long int size, long int * error,
                                    HMAP hmap, HSITE hsite);
_MAPIMP HMAP _MAPAPI mapCreateMapProEx(const WCHAR * mapname, const WCHAR * rscname,
                                      MAPREGISTEREX * mapreg, LISTREGISTER * listreg,
                                      SHEETNAMES  * sheetnames, const WCHAR * mainname,
                                      const WCHAR * password, long int size, long int * error);
_MAPIMP HMAP _MAPAPI mapCreateMapPro(const WCHAR * mapname, const WCHAR * rscname,
                                    MAPREGISTEREX * mapreg, LISTREGISTER * listreg,
                                    SHEETNAMES  * sheetnames, const WCHAR * mainname,
                                    const WCHAR * password, long int size);
_MAPIMP HMAP _MAPAPI mapCreateMapUn(const WCHAR * mapname, const WCHAR * rscname,
                                   MAPREGISTEREX * mapreg, LISTREGISTER * listreg,
                                   const WCHAR * mainname, const WCHAR * password, long int size);
 
Если все необходимые данные СК и проекции у вас корректно заполнены в rsw можно их использовать для создания карты.
Для этого к уже открытому растру надо добавить новую пользовательскую карту:
Код
  // Создать пользовательскую карту по открытой карте
  // hmap -  идентификатор открытых данных
  // mapname - полное имя файла карты в кодировке UNICODE
  // rscname - полное имя файла ресурсов в кодировке UNICODE
  // Структура CREATESITEUN описана в maptype.h
  // Возвращает идентификатор открытой пользовательской карты
  // После завершения использования карты необходимо освободить ресурсы функцией mapCloseData
  // При ошибке возвращает ноль

_MAPIMP HSITE _MAPAPI mapCreateAndAppendSiteUn(HMAP hmap, const WCHAR * mapname, const WCHAR * rscname,
                                               CREATESITEUN * createsite);


hmap -  идентификатор открытых данных (в данном случае Вашего растра)

Если карта нужна только на период работы приложения, можно создать временную пользовательскую карту (автоматически удаляется после закрытия):
Код
  // Создать временную пользовательскую карту по открытой карте
  // hmap     - идентификатор открытых данных
  // rscname  - полное имя файла ресурсов, если равно 0 - выбирается
  //            из открытой карты
  // inmemory - признак создания карты в оперативной памяти или 0
  // Файлы карты размещаются в рабочей директории системы
  // и имеют уникальные имена, генерируемые автоматически
  // При закрытии пользовательской карты все файлы данных автоматически удаляются
  // Если параметр inmemory не равен 0, то все данные хранятся только в оперативной памяти
  // и освобождаются при закрытии карты
  // Возвращает идентификатор открытой пользовательской карты
  // При ошибке возвращает ноль

_MAPIMP HSITE _MAPAPI mapCreateAndAppendTempSitePro(HMAP hMap, const WCHAR *rscname, long int inmemory);
 
Цитата
// Создать пользовательскую карту по открытой карте
 // hmap -  идентификатор открытых данных
 // mapname - полное имя файла карты в кодировке UNICODE
 // rscname - полное имя файла ресурсов в кодировке UNICODE
 // Структура CREATESITEUN описана в maptype.h
 // Возвращает идентификатор открытой пользовательской карты
 // После завершения использования карты необходимо освободить ресурсы функцией mapCloseData
 // При ошибке возвращает ноль

_MAPIMP HSITE _MAPAPI mapCreateAndAppendSiteUn(HMAP hmap, const WCHAR * mapname, const WCHAR * rscname,
                                              CREATESITEUN * createsite);
Добрый день, подскажите что я должен передать параметру CREATESITEUN * createsite?????
Я пишу на C# c bcgjkmpjdfybt GisToolKit Free ActiveX 14.0.3.0
 
Структура CREATESITEUN описана в maptype.h
Если нет необходимости менять параметры системы координат и т.п., то проще воспользоваться функцией

 // Создать пользовательскую карту по открытой карте
 // hmap -  идентификатор открытой векторной карты
 // mapname - полное имя файла карты
 // rscname - полное имя файла ресурсов
 // issitx  - признак создания карты типа SITX
 // При ошибке возвращает ноль

_MAPIMP HSITE _MAPAPI mapCreateAndAppendSiteForMapUn(HMAP hmap, const WCHAR* mapname, const WCHAR* rscname,
                                                    long int issitx = 0);
 
А если мне необходимо указать лишь масштаб.
Тогда как?  
 
Цитата
Александр Махин написал:
А если мне необходимо указать лишь масштаб.
Тогда как?  

Можно в этом случае  создать карту по основной карте (тогда все параметры будут скопированы из основной карты в новую) - с помощью mapCreateAndAppendSiteForMapUn,
а затем просто изменить базовый масштаб новой карты:

Цитата
 // Изменить базовый масштаб пользовательской карты
 // hMap   - идентификатор открытой основной карты
 // hSite  - идентификатор открытой пользовательской карты
 // При отображении в базовом масштабе пользовательской карты
 // размер условных знаков на карте будет соответствовать их размеру
 // в классификаторе RSC
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetSiteScale(HMAP hMap, HSITE hSite, long int scale);


Если хотите заполнить все параметры для создаваемой карты самостоятельно, то считать их из основной карты (или растра) можно с помощью:
Цитата
 // Запросить паспортные данные векторной карты
 // Структуры MAPREGISTER и LISTREGISTER описаны в mapcreat.h
 // hmap - идентификатор открытых данных
 // sheetnumber - номер листа карты для
 // которого запрашиваются паспортные данные
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetMapInfoPro(HMAP hmap, long int sheetnumber, MAPREGISTEREX *map, LISTREGISTER *sheet,
                                         SHEETNAMES * sheetnames);
_MAPIMP long int _MAPAPI mapGetMapInfoEx(HMAP hmap, long int sheetnumber, MAPREGISTEREX *map, LISTREGISTER *sheet);

После чего по полученным данным заполнить структуру CREATESITEUN и воспользоваться mapCreateAndAppendSiteUn.


Либо, используя полученные параметры (скорректировав их при необходимости), можно создать новую карту как SIT или SITX (см. MAPREGISTEREX.FlagRealPlace), закрыть её и затем добавить к основной:

Скрытый текст



Цитата
Александр Махин написал:
Я пишу на C# c использованием GisToolKit Free ActiveX 14.0.3.0

Посмотрите пример использования компонентов для создания карт:
\GIS ToolKit Active Free 14\Example\MS2015\C#\Newmap\Newmap.sln
 
Спасибо за помощь.  
Страницы: 1
Читают тему (гостей: 1)



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

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