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

открытие пользовательской карты .sxf (т.е. нуждающейся в классификаторе)

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
открытие пользовательской карты .sxf (т.е. нуждающейся в классификаторе)
 
Здравствуйте!

У меня очень новичковый вопрос.

Каким образом открыть карту .sxf (она нуждается в классификаторе)?

Если написать примерно такой код (это Java c использованием JNA для доступа к плюсовым функциям):
Код
if (pathToMap.endsWith(".sxf")) { // для карты требуется классификатор
    int test = GisAccess.INSTANCE.mapOpenRsc("C:\\path\\to\\classificator\\OSM.rsc");
    assert test != 0;
}
hMap = GisAccess.INSTANCE.mapOpenData(pathToMap, 0);


то в случае обычной карты (не .sxf) карта открывается, а вот в случае .sxf, несмотря на то, что значение переменной test - не ноль, в строке

Код
hMap = GisAccess.INSTANCE.mapOpenData(pathToMap, 0);


происходит ошибка "Ошибка входных данных: C:\\path\\To\\Map\\Map.sxf"

Нигде на форуме, в документации и заголовочных файлах не смог найти: как же правильно открывать карту с классификатором?
 
Цитата
Каким образом открыть карту .sxf (она нуждается в классификаторе)?
Вот таким
Код
// --------------------------------------------------------------
// Экспорт векторной карты из формата SXF
// sxfname  - имя импортируемого файла SXF,
// mapname  - имя паспорта создаваемой карты, указатель на строку длиной 256 байт 
// (поле может быть изменено в диалоге),
// parm     - структура параметров для диалога (см. maptype.h)
// При ошибке возвращает ноль
// --------------------------------------------------------------
_MAPIMP long int WINAPI LoadSxf2Map(char* sxfname, char* mapname,TASKPARM* parm);
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Это устаревшая функция. Рекомендуется применять следующую:

Код
 // Загрузить (импортировать) карту из файла SXF, TXF или DIR с      // 03/05/10
 // использованием Select с преобразованием топокарты к зоне документа
 // Файлы SXF и TXF могут хранить координаты в метрах, радианах или градусах
 // hmap    - идентификатор открытой карты (рекомендуется указывать
 //           для определения текущей зоны топокарты) или 0;
 // sxfname - имя загружаемого файла типа SXF, TXF или DIR;
 // rscname - имя файла классификатора, с которым загружается карта,
 //           имя классификатора можно запросить из SXF (TXF) функцией GetRscNameFromSxf
 //           или из карты; для файла DIR может быть 0;
 // mapname - имя создаваемой карты (обычно совпадает с именем SXF (TXF))
 //           или ноль или указатель на пустую строку (буфер размером MAX_PATH
 //           c нулевым байтом равным нулю) или указатель на папку для размещения
 //           карты. Если имя карты не задано или задана только папка, то карта
 //           создается с именем SXF (TXF) и расширением ".sit". Если namemap
 //           указывает на буфер достаточной длины (size), то в буфер записывается 
 //           имя созданной карты;
 //           Для файла DIR тип общей карты - MPT (проект данных, включающий все 
 //           открытые карты из DIR) или MAP (многолистовая карта);
 // size    - длина буфера, на который указывает переменная namemap или 0. Обычно длина
 //           равна MAX_PATH (256);
 // handle  - идентификатор окна диалога, которому посылаются уведомительные 
 //           сообщения (HWND для Windows, CALLBACK-Функция для Linux);
 // select  - фильтр загружаемых объектов и слоев, если необходима выборочная
 //           обработка данных;
 // frscfromsxf - значение флажка "разрешить использование
 //               имени классификатора, указанного в файле sxf"
 // typesit - тип создаваемых карт в проекте MPT при импорте DIR (1- SIT; -1- SITX)
 // password - пароль для создания защищенного хранилища карты (SITX)
 // psize    - длина пароля в байтах
 // Для добавления открытой карты в документ необходимо вызвать функцию
 // mapAppendData(hmap, namemap).
 // При ошибке возвращает ноль

_MAPIMP long int WINAPI ImportFromAnySxfPro(HMAP hmap, const WCHAR * namesxf, const WCHAR * namersc, WCHAR * namemap, long int size, 
                                            HMESSAGE handle, HSELECT select, long int frscfromsxf, long int typesit, const WCHAR * password, long int psize);
 
Спасибо KFF и Oleg Belenkov за ответы! Уже немного понятнее :)

Применил функцию  ImportFromAnySxf:
Код
int test = GisVecex.INSTANCE.ImportFromAnySxf(hMap,
                pathToMap,
                "C:\\path\\to\\classificator\\OSM.rsc",
                "",
                0,
                0,
                0);
assert test != 0;
hMap = GisAccess.INSTANCE.mapOpenData(pathToMap, 0);


В результате значение переменной test - единица, но снова ошибка в последней строке и ровно та же, что и была раньше: "Ошибка входных данных: C:\\path\\To\\Map\\Map.sxf"

При этом sxf карту беру - скачанную с этого сайта http://gistoolkit.ru/download/osm/ru-spe.sxf.zip,
классификатор - тоже отсюда http://gistoolkit.ru/download/classifiers/osm.zip

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

// mapname - имя создаваемой карты (обычно совпадает с именем SXF (TXF))
//           или ноль или указатель на пустую строку (буфер размером MAX_PATH
//           c нулевым байтом равным нулю) или указатель на папку для размещения
//           карты. Если имя карты не задано или задана только папка, то карта
//           создается с именем SXF (TXF) и расширением ".sit". Если namemap
//           указывает на буфер достаточной длины (size), то в буфер записывается
//           имя созданной карты;

а вы опять открываете файл, который был на входе для импорта данных и не предназначен для mapOpenData
 
Andrey Gheleznyakov, спасибо! Действительно, импорт создает новую карту, и ее и надо открывать. Заработало!
Страницы: 1
Читают тему (гостей: 1)



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

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