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

Использование функций MAPI (Функции импорта формата SHP)

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

MAPREGISTEREX * mapregX ;
ELLIPSOIDPARAM * ellparmX ;
DATUMPARAM * datumparmX ;
WCHAR * csnameX ;
long int size = 4096 ; // это значение взято абсолютно с потолка

res = (* shpShapeProcReadPrj) (L"C:\\Temp\\testSHP\\XXX.prj", mapregX, ellparmX, datumparmX, csnameX, size) ;
 
Под структуры не выделена память, а только объявлены указатели.
 
Цитата
Andrey Gheleznyakov написал:
Под структуры не выделена память, а только объявлены указатели.
Спасибо, заработало. :)

Для чего в функции shpShapeProcSheetInitEx() используются параметры  RECORDLIST * recitem и SEMFIELDS  * semitem?
Можно ли их использовать для конвертации кодов из .dbf шейпа в коды из классификатора  50t05g.rsc Таблица приравнивания кодов у меня есть.

И в чем различия функций shpShapeProcSheetInitEx(), shpShapeProcSheetInit (), shpShapeProcInit ()?
Изменено: Алексей Антонов - 20.09.2017 12:50:42
 
Цитата
Алексей Антонов написал:
Для чего в функции shpShapeProcSheetInitEx() используются параметры  RECORDLIST * recitem и SEMFIELDS  * semitem?
Можно ли их использовать для конвертации кодов из .dbf шейпа в коды из классификатора  50t05g.rsc Таблица приравнивания кодов у меня есть.
именно для этого:
Цитата
// Создать объект для импорта файлов SHP
// handle - идентификатор получателя сообщений WM_ERROR и WM_OBJECT
// mapname - имя паспорта создаваемой\обновляемой карты
// rscname - имя классификатора создаваемой карты или 0 (если имя не задано, то карта обновляется)
// name    - имя района (листа) карты
// mapreg, ellparm, datumparm - параметры системы координат исходных данных и создаваемой карты (если карта создается)
// nomenclature - номенклатура листа или 0 (используется и для формирования имени файлов листов карт с рамкой)
// recitem - список обрабатываемых атрибутов (имена полей DBF и их ключи в классификаторе - если они разные)
// semitem - список обрабатываемых полей атрибутов или 0 (если нужно обрабатывать не все поля DBF)
// ismap   - признак создания карты (1- многолистовая карта MAP, иначе 0)
// epsgcode - код системы координат, в которой создается карта или 0 (если система совпадает с системой исходных данных)
// При ошибке возвращает ноль

_VECIMP HSHPLOAD _VECAPI shpShapeProcSheetInitEx(HMESSAGE handle, const WCHAR * mapname, const WCHAR * rscname,
                                                const WCHAR * name,
                                                MAPREGISTEREX * mapreg, ELLIPSOIDPARAM * ellparm, DATUMPARAM * datumparm,
                                                const WCHAR * nomenclature,
                                                RECORDLIST * recitem, long int recount,
                                                SEMFIELDS  * semitem, long int semcount, long int ismap, long int epsgcode);

_VECIMP HSHPLOAD _VECAPI shpShapeProcSheetInit(HMESSAGE handle, const WCHAR * mapname, const WCHAR * rscname,
                                              const WCHAR * name,
                                              MAPREGISTEREX * mapreg, ELLIPSOIDPARAM * ellparm, DATUMPARAM * datumparm,
                                              const WCHAR * nomenclature,
                                              RECORDLIST * recitem, long int recount,
                                              SEMFIELDS  * semitem, long int semcount, long int ismap);

_VECIMP HSHPLOAD _VECAPI shpShapeProcInit(HMESSAGE handle, const WCHAR * mapname, const WCHAR * rscname,
                                         const WCHAR * name,
                                         MAPREGISTEREX * mapreg, ELLIPSOIDPARAM * ellparm, DATUMPARAM * datumparm,
                                         RECORDLIST * recitem, long int recount,
                                         SEMFIELDS  * semitem, long int semcount);

Цитата
Алексей Антонов написал:
в чем различия функций shpShapeProcSheetInitEx(), shpShapeProcSheetInit (), shpShapeProcInit ()?

В возможностях, точнее во входных параметрах. Это история развития одной и той же функции.
Самая "продвинутая" - это shpShapeProcSheetInitEx. У нее есть возможность использовать код EPSG для определения паспортных данных карты.
А чуть раньше в shpShapeProcSheetInit был добавлен параметр  ismap   - признак создания карты (1- многолистовая карта MAP, иначе 0).
 
А можно привести более подробное описание структур:

typedef struct  RECORDLIST     // Структура соответствия семантик
{
 WCHAR  value1[1024];
 WCHAR  value2[1024];
 WCHAR  value3[1024];
 WCHAR  value4[1024];
}
 RECORDLIST;

typedef struct  SEMFIELDS
{
 WCHAR     name[1024];
 int       code;
 int       zero;
}
 SEMFIELDS;

Как заполнять данные структуры для преобразования данных:

Например, у меня в .dbf файле есть запись (поля "Nature", "Type", "NOM", есть ещё несколько полей, но они мне не нужны)
  105, 1, CW24

Для которой я должен выполнить подмену из классификатора 50t05g.rsc - Код: 61210000, Ключ: L0061210000, Код семантики: 53 со значением: CW24  
 
Повторю ответ с Вашего соседнего вопроса -

В классификаторе RSC код объекта может быть задан:
1) кодом и  локализацией (например, 12340000 LINE); код может повторяться в серии  однотипных объектов, имеющих разные знаки в зависимости от одной или  двух характеристик;
2) ключом (уникальная строка в пределах классификатора);
3) буквенно-цифровым кодом (аналог цифрового кода, но может содержать любой текст).

Таблицей  перехода служит сам классификатор. Вы можете настроить  буквенно-цифровой код на значения из DBF, указать имя поля с этим  значением
и указать, что регистрация объекта выполняется по буквенно-цифровому коду.
Пример вызова функций импорта из SHP в SDK12\Ready\Mapvectr\myform.cpp
http://gisinfo.ru/download?id=229

Аналогично в классификаторе кроме имени семантики и кода есть поле Ключ, которое должно совпадать с именем DBF.

При правильной настройке RSC импорт из SHP выполняется в автоматическом режиме на сервере (что реализовано в Банке данных ЦК и ДЗЗ).
Страницы: 1
Читают тему (гостей: 1)



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

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