//========================================================================
// Функции импорта формата SHP
//========================================================================
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; // Признак необходиости сортировки
WCHAR NumberField[16];
WCHAR LabelField[16];
WCHAR AngleField[16];
WCHAR CodeField[16];
}
SETTING;
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;
typedef HANDLE HSHPLOAD;
// Проверить, что файл zip содержит файлы SHP // 31/07/17
// Возвращает число найденных файлов SHP в архиве
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpCheckZipContents(const WCHAR * shpzip);
// Выполнить импорт наборов данных SHP из папки, запакованной в ZIP, в один лист карты // 27/07/17
// 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 из папки в один лист карты // 27/07/17
// 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);
// Определить параметры системы координат из файла 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 в заданной папке, включая вложенные папки // 24/07/17
// frame - габариты, запрашиваются в радианах в системе WGS-84
// Возвращает общее число объектов во всех файлах SHP
// Если для SHP не заданы параметры проекции (PRJ) - возвращает ноль
// При ошибке возвращает ноль
_VECIMP long int _VECAPI shpGetShpBorderInFolder(const WCHAR * folder, DFRAME * frame); |