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

Открытие файлов .shp .dbf .prj .shx .meta.xml

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Открытие файлов .shp .dbf .prj .shx .meta.xml
 
Здравствуйте!
У меня есть tiff и к нему набор файлов .dbf .prj .shp .shx .meta.xml.
C tiff мне понятно как работать, я его конвертирую в растр.
А вот как мне подгрузить остальные файлы? *.shp я попробовал загрузить используя shpLoadOneShape. Возможно ли подгрузить данные в объекты(HOBJ) уже существующей карты?
Да в целом, как надо поступать с такими данными?
 
.dbf .prj .shp .shx .meta.xml. - это векторные слои в формате SHAPE

Для импорта формата SHAPE есть диалог. Описан здесь -

https://help13.gisserver.ru/russian/shptomap/index.html

Дополнительная информация здесь -

https://gistoolkit.ru/download/doc/shapefile.pdf

Ознакомиться с диалогом можно в Панорама Мини -

https://gisinfo.ru/download/?id=260

Описание функции вызова есть в vectrapi.h -
Код
  // Импорт данных 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);


Если разобрались с настройками параметров импорта и желаете работать без диалогов, то
можете применить функции из vecexapi.h -
Код
 //========================================================================
 //   Функции импорта и экспорта формата 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);
Страницы: 1
Читают тему (гостей: 1)



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

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