.dbf .prj .shp .shx .meta.xml. - это векторные слои в формате SHAPE
Для импорта формата SHAPE есть диалог. Описан здесь -
[URL=https://help13.gisserver.ru/russian/shptomap/index.html]https://help13.gisserver.ru/russian/shptomap/index.html[/URL]
Дополнительная информация здесь -
[URL=https://gistoolkit.ru/download/doc/shapefile.pdf]https://gistoolkit.ru/download/doc/shapefile.pdf[/URL]
Ознакомиться с диалогом можно в Панорама Мини -
[URL=https://gisinfo.ru/download/?id=260]https://gisinfo.ru/download/?id=260[/URL]
Описание функции вызова есть в vectrapi.h -
[CODE] // Импорт данных Shape (исходные данные выбираются из диалогового окна открытия файла)
// hmap - идентификатор открытых данных
// parm - параметры задачи, описание структуры TASKPARM в maptype.h.
// При ошибке возвращает ноль
_MAPIMP long int WINAPI CallImportShp(HMAP hmap, TASKPARMEX * parm);
// Импорт набора данных Shape (исходные данные выбираются из диалогового окна выбора директории)
// hmap - идентификатор открытых данных
// parm - параметры задачи, описание структуры TASKPARM в maptype.h.
// При ошибке возвращает ноль
_MAPIMP long int WINAPI ImportShpSet(HMAP hmap, TASKPARMEX * parm);
// Импорт из ShapeFile набора данных
// handle - окно визуального сопровождения процесса обработки
// mapname - имя файла (полный путь) создаваемой карты
// Если имя не указано - сформируется по имени первого SHP в списке
// Если карта с указанным (или сформированным) именем не существует
// - будет создана
// Если карта уже существует и clear = 1 - выполняется перезапись
// (предварительное удаление старых объектов)
// clear - 0/1 предварительно чистить существующую карту?
// rscname - имя файла (полный путь) классификатора (может = 0, если карта
// уже существует), обязан быть, если карты еще нет
// shiname - имя файла настроек(полный путь) 0 - для набора данных,
// сформированных средствами "Панорама"
// scale - знаменатель масштаба создаваемой карты (может = 0, если карта
// уже существует)
// shppath - путь к папке с набором данных
// charset - таблица кодировки таблицы DBF (0 - ANSI,1 - UTF-8, 2-OEM,
// -1 - неизвестно, опр. автоматически)
// sort - выполнить итоговую сортировку карты (0,1)
// clear - выполнить предварительную очистку карты (0,1)
// Возврат: 1 - нормальное завершение, 0 - загрузка не выполнена, -1 - выполнено с ошибками
// Ошибки, выявленные после создания (или открытия карты) пишутся в LOG карты
_MAPIMP long int WINAPI ShpLoadFolder(HMESSAGE handle,const char *mapname,const char *rscname,const char *shiname,
long int scale,const char *shppath,long int charset,long int sort,long int clear = 0);
// Импорт из ShapeFile набора данных с дополнительным параметром "onlyconfig"
// handle - окно визуального сопровождения процесса обработки
// mapname - имя файла (полный путь) создаваемой карты
// Если имя не указано - сформируется по имени первого SHP в списке
// Если карта с указанным (или сформированным) именем не существует
// - будет создана
// Если карта уже существует и clear = 1 - выполняется перезапись
// (предварительное удаление старых объектов)
// clear - 0/1 предварительно чистить существующую карту?
// rscname - имя файла (полный путь) классификатора (может = 0, если карта
// уже существует), обязан быть, если карты еще нет
// shiname - имя файла настроек(полный путь) 0 - для набора данных,
// сформированных средствами "Панорама"
// scale - знаменатель масштаба создаваемой карты (может = 0, если карта
// уже существует)
// shppath - путь к папке с набором данных
// charset - таблица кодировки таблицы DBF (0 - ANSI,1 - UTF-8, 2-OEM,
// -1 - неизвестно, опр. автоматически)
// sort - выполнить итоговую сортировку карты (0,1)
// clear - выполнить предварительную очистку карты (0,1)
// onlyconfig - загружать только настроенные слои (0,1)
//
// Возврат: 1 - нормальное завершение, 0 - загрузка не выполнена, -1 - выполнено с ошибками
// Ошибки, выявленные после создания (или открытия карты) пишутся в LOG карты
_MAPIMP long int WINAPI ShpLoadFolderEx(HMESSAGE handle,const char *mapname,const char *rscname,const char *shiname,
long int scale,const char *shppath,long int charset,long int sort,
long int clear,long int onlyconfig);
[/CODE]
Если разобрались с настройками параметров импорта и желаете работать без диалогов, то
можете применить функции из vecexapi.h -
[CODE] //========================================================================
// Функции импорта и экспорта формата SHP
//========================================================================
//
// При импорте данных из формата SHP используются файлы формата (shp, prj, dbf, cpg),
// классификатор карты (rsc) и файлы настройки:
//
// rsc.fromshp - содержит имя поля в файлах dbf, определяющее вид объектов,
// и список задач дополнительной обработки импортируемых данных
// c:\Users\Public\Documents\<iniName>\<rscName>.rsc.fromshp
//
// frame - содержит описание паспортных данных номенклатурных листов карт
// c:\Users\Public\Documents\<iniName>\<rscName>.frame
//
// ilb - содержит параметры автоматического подписывания объектов карты
// c:\Users\Public\Documents\<iniName>\<rscName>.ilb
//
// Подробнее см. http://gistoolkit.ru/download/doc/shapefile.pdf
//========================================================================
//
// Пример расположения файлов, используемых при импорте данных из SHP:
//
// c:\Program Files\Panorama\Panorama13\viet25t.rsc
// c:\Users\Public\Documents\Panorama\viet25t.rsc.fromshp
// c:\Users\Public\Documents\Panorama\viet25t.frame
// c:\Users\Public\Documents\Panorama\viet25t.ilb
//
//========================================================================
typedef struct SETTING
{
int IsUpdate; // Признак обновления карты
int Code; // Тип регистрации объекта (1 - по цифровому коду, 2 - по буквенно-цифровому коду, 3 - по символьному ключу)
int Charset; // Кодировка DBF (0 - ANSI, 1 - UTF-8, 2 - OEM-DOS, 3 - ANSI-LATIN)
int Isdirect; // Выполнять контроль направления цифрования
int Isdivision; // Признак обработки подобъектов 0 - создать мультиполигон, 1 - создать подобъекты
int Isosm; // Признак обработки объектов OSM
int IsBL; // Признак обработки геодезических координат
int IsSorted; // Признак необходиости сортировки
int Scale; // Масштаб
int IsFolder; // Слой в отдельную папку
int MapType; // Компоновка карты (мар, мрт, sit)
int Reserve; // Резерв
WCHAR NumberField[16];
WCHAR LabelField[16];
WCHAR AngleField[16];
WCHAR CodeField[16];
WCHAR RscName[MAX_PATH]; // Классификатор
WCHAR Prefix[256]; // Префикс
WCHAR Postfix[256]; // Постфикс
}
SETTING;
typedef struct RECORDLIST // Структура соответствия полей DBF и семантик с учетом слоя
{
WCHAR DbfField[16]; // Имя поля таблицы DBF (может повторятся в разных слоях)
WCHAR FieldName[256]; // Имя атрибута на национальном языке
WCHAR FieldKey[256]; // Длинный ключ семантики или 0
WCHAR LayerName[256]; // Имя слоя (имя файла SHP без пути и расширения)
int ObjectCode; // Код объекта, для которого задана семантика, или
// 0 - если данное поле общее для всех кодов
// -1 - если данный ключ семантики задан для всех остальных кодов объектов
int Reserve; // Резерв
}
RECORDLIST;
typedef struct SEMFIELDS
{
WCHAR name[1024];
int code;
int zero;
}
SEMFIELDS;
typedef struct // Описание заголовка записи
{
int Number; // номер записи большой
int Length; // длина содержимого большой
}
RECORDHEAD;
typedef HANDLE HSHPLOAD;
// Проверить, что файл zip содержит файлы SHP
// Возвращает число найденных файлов SHP в архиве
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpCheckZipContents(const WCHAR * shpzip);
// Выполнить импорт наборов данных SHP из папки, запакованной в ZIP, в один лист карты
// hmap - идентификатор карты, в которую дописываются листы или 0
// (если hmap != 0, то mapname, rscname, iscreate игнорируются)
// handle - идентификатор обработчика сообщений о ходе выполнения импорта данных
// shpzip - имя файла zip, содержащего слои листа карты в формате SHP (любой вложенности)
// mapname - имя файла создаваемой/обновляемой карты
// rscname - имя файла классификатора, с которым создается карта, или 0 (если карта существует)
// epsgcode - код системы координат создаваемой карты или 0 (если карта существует или создается по PRJ)
// iscreate - признак создания карты или 0 (если карта существует)
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpLoadSheetFromZip(HMAP hmap, HMESSAGE handle, const WCHAR * shpzip,
const WCHAR * mapname, const WCHAR * rscname,
long int epsgcode, long int iscreate,
long int * error);
// Выполнить импорт наборов данных SHP из папки в один лист карты
// hmap - идентификатор карты, в которую дописываются листы или 0
// (если hmap != 0, то mapname, rscname, iscreate игнорируются)
// handle - идентификатор обработчика сообщений о ходе выполнения импорта данных
// shpfolder - имя папки, в которой размещены слои листа карты в формате SHP (любой вложенности)
// mapname - имя файла создаваемой/обновляемой карты
// rscname - имя файла классификатора, с которым создается карта, или 0 (если карта существует)
// epsgcode - код системы координат создаваемой карты или 0 (если карта существует или создается по PRJ)
// iscreate - признак создания карты или 0 (если карта существует)
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpLoadSheetFromFolder(HMAP hmap, HMESSAGE handle, const WCHAR * shpfolder,
const WCHAR * mapname, const WCHAR * rscname,
long int epsgcode, long int iscreate);
// Выполнить импорт наборов данных SHP из папки в один лист карты
// При импорте использовать настройки из файла shi
// handle - идентификатор обработчика сообщений о ходе выполнения импорта данных
// shpfolder - имя папки, в которой размещены слои листа карты в формате SHP (любой вложенности)
// mapname - имя файла создаваемой карты (sit/sitx)
// (если карта уже существует, то будет выполнена ее очистка)
// shiname - имя файла настроек shi
// error - код ошибки
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpLoadFromFolderByShi(HMESSAGE handle, const WCHAR *shpfolder,
const WCHAR *mapname, const WCHAR *shiname,
long int *error);
// Определить параметры системы координат из файла PRJ
// Если задана геодезическая система координат в градусах, то возвращает 2
// Для координат в метрах возвращает 1
// Если параметры не были определены и координаты в метрах - возвращает -1
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpShapeProcReadPrj(const WCHAR * prjname,
MAPREGISTEREX * mapreg, ELLIPSOIDPARAM * ellparm, DATUMPARAM * datumparm,
WCHAR * csname, long int size);
// Создать объект для импорта файлов 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);
// Создать объект для импорта файлов SHP
// hmap - идентификатор карты, в которую дописываются листы
// handle - идентификатор получателя сообщений WM_ERROR и WM_OBJECT
// nomenclature - номенклатура листа или 0 (используется и для формирования имени файлов листов карт с рамкой)
// mapreg, ellparm, datumparm - параметры системы координат исходных данных (если они отличаются от параметров карты)
// recitem - список обрабатываемых файлов SHP
// semitem - список обрабатываемых полей атрибутов
// При ошибке возвращает ноль
_VECIMP HSHPLOAD _VECAPI shpShapeProcSheetForMap(HMAP hmap, HMESSAGE handle,
MAPREGISTEREX * mapreg, ELLIPSOIDPARAM * ellparm, DATUMPARAM * datumparm,
const WCHAR * nomenclature,
RECORDLIST * recitem, long int recount,
SEMFIELDS * semitem, long int semcount);
// Запросить идентификатор открытой карты
// hshpload - идентификатор объекта загрузки SHP
// При ошибке возвращает ноль
_VECIMP HMAP _VECAPI shpGetShapeProcMapHandle(HSHPLOAD hshpload);
// Загрузка SHP-файла
// hshpload - идентификатор объекта загрузки SHP
// shpname - имя входного файла SHP
// type - тип объекта в наборе данных
// code - код зарегистрированного объекта
// setting - указатель на структуру настроек диалога SETTING (myform.h)
// error - код ошибки при создании объектов
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpShapeProcLoad(HSHPLOAD hshpload, const WCHAR * shpfilename,
long int code, SETTING * setting, long int * error);
// Загрузить список Shape файлов
// hshpload - идентификатор объекта загрузки SHP
// shplist - список указателей на имена shp-файлов
// count - число файлов в списке
// code - массив кодов объектов для списка shp-файлов
// setting - указатель на структуру настроек диалога SETTING (myform.h)
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpShapeProcLoadList(HSHPLOAD hshpload, const WCHAR ** shplist, long int count,
int * code, SETTING * setting);
// Удалить объект для импорта файлов SHP
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpShapeProcClose(HSHPLOAD hshpload);
// Проверить совпадение параметров систем координат (PRJ) в разных папках (листах) с наборами SHP
// name - имя корневой папки с файлами SHP или с набором папок, содержащих отдельные листы карты
// Если файлы SHP расположены в корневой папке, то сравнивает файлы PRJ в корневой папке,
// если есть набор папок, то сравнивает по одному файлу PRJ в каждой папке, чтобы найти
// разные параметры СК (например, разные зоны)
// При совпадении параметров возвращает 1, иначе - нулевое значение
_VECIMP long int _VECAPI shpCheckSheetProjectEquivalent(const WCHAR * name);
// Запросить общие габариты набора файлов SHP в заданной папке, включая вложенные папки
// frame - габариты, запрашиваются в радианах в системе WGS-84
// Возвращает общее число объектов во всех файлах SHP
// Если для SHP не заданы параметры проекции (PRJ) - возвращает ноль
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpGetShpBorderInFolder(const WCHAR * folder, DFRAME * frame);
// Выполнить импорт набора данных SHP в один лист карты
// hmap - идентификатор карты, в которую дописываются листы или 0
// (если hmap != 0, то mapname, rscname, iscreate игнорируются)
// handle - идентификатор обработчика сообщений о ходе выполнения импорта данных
// shpname - имя файла в формате SHP
// mapname - имя файла создаваемой карты или 0 (если карта существует)
// rscname - имя файла классификатора, с которым создается карта, или 0 (если карта существует)
// epsgcode - код системы координат создаваемой карты или 0 (если карта существует или создается по PRJ)
// iscreate - признак создания карты или 0 (если карта существует)
// error - поле для записи кода ошибки выполнения функции
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpLoadOneShape(HMAP hmap, const WCHAR * shpname,
const WCHAR * mapname, const WCHAR * rscname,
int epsgcode, int iscreate, int scale,
long int * error);
// Обновить описание объекта из SHP
// info - идентификатор обновляемого объекта в памяти
// shpname - имя исходного файла SHP (полный путь)
// onlypoints - признак обновления только координат объекта
// error - коды ошибок выполнения программы (см. maperr.rh)
// Объект изменяется без записи на карту
// При ошибке возвращает ноль
_VECIMP long int _VECAPI vecUpdateObjectFromShp(HOBJ info, const WCHAR * shpname, long int onlypoints, long int * error);
typedef struct MAPTOSHPPARM
{
HMAP hMap; // Идентификатор открытого документа
HSITE hSite; // Идентификатор экспортируемой карты в документе
HSELECT hSelect; // Условия отбора объектов для экспорта в SHP
int DBCode; // Кодовая страница для текста: 1 - OEM(DOS), 2 - ANSI, 3 - UTF8
int Isbl; // Признак сохранения координат в градусах WGS-84
int IsService; // Признак записи в DBF служебных полей "ObjectCode", "ObjectKey", "ObjectName", "ObjectText" (для подписи)
int IsDecode; // Признак записи семантик типа классификатор в раскодированном (текстовом) виде
int IsFolder; // Признак записи файлов, относящихся к одному слою, в отдельные папки
int Reserve; // Резерв, должен быть 0
}
MAPTOSHPPARM;
/* Пример файла схемы для формирования файлов SHP
// dbffields - описание всех семантик, которые записываются в DBF и имена соответствующих полей
// folders - описание папок для группировки слоев карты
// layer - описание слоев, списка входящих объектов и включаемых в SHP атрибутов
// object - описание объекта, включаемого в слой и его атрибутов (на исходной карте объект может быть в любом слое)
<?xml version="1.0" encoding="UTF-8"?>
<maptoshp>
<dbffields>
<field id="код семантики 1" name="имя поля 1"/>
<field id="код семантики 2" name="имя поля 2"/>
...
</dbffields>
<folders>
<layer id="номер слоя 1" name="имя папки слоя 1">
<object key="ключ объекта 1" name ="имя файла 1">
<field id="код семантики 1"/>
...
</object>
...
</layer>
...
<layer id="номер слоя N" name="имя папки слоя N">
</layer>
</folders>
</maptoshp>
*/
// Экспорт векторной карты в формат SHP
// hwnd - идентификатор окна диалога для посылки сообщений WM_OBJECT, WM_ERROR, WM_LIST
// parm - основные параметры для экспорта карты
// shppath - путь к папке для записи файлов SHP
// xmlparm - путь к файлу схемы, описывающей структуру файлов SHP
// (если файл не задан, то структура слоев соответствует исходной карте)
// error - коды ошибок выполнения программы (см. maperr.rh)
// При ошибке возвращает ноль
_VECIMP long int _VECAPI vecSaveMapToShp(HMESSAGE hwnd, MAPTOSHPPARM * parm,
const WCHAR * shppath, const WCHAR * xmlparm,
long int * error);
// Сохранить описание объекта в SHP
// info - идентификатор сохраняемого объекта в памяти
// shpname - имя файла SHP (полный путь), в который будет сохранен объект
// error - коды ошибок выполнения программы (см. maperr.rh)
// При ошибке возвращает ноль
_VECIMP long int _VECAPI vecSaveObjectToShp(HOBJ info, const WCHAR * shpname, long int * error);
[/CODE]