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

Oleg Belenkov (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Oleg Belenkov
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 377 След.
mapGetActualMtrFrame
 
[CODE] // Запросить фактические габариты отображаемой матрицы в метрах в районе работ
 // При отображении матрицы по рамке возвращаются габариты рамки
 // hMap -  идентификатор открытых данных
 // number - номер матрицы в списке открытых матриц
 // frame  - адрес структуры, в которой будут размещены габариты матрицы в метрах
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetActualMtrFrame(HMAP hMap, DFRAME *frame, long int number);
[/CODE]
Габариты возвращаются в системе координат документа.
Если первой открыта карта, то система документа соответствует карте.

Система координат документа может быть изменена. См. mapSetDocProjection
Некорректная работа функции shpLoadFromFolderByShi.
 
С тестовыми данными, которые есть у нас, такая ситуация не повторяется.
Ваших данных у нас нет для проверки.
Может в DBF не заполнены соответствующие семантики (поля), например.
Хранение выносок на карте
 
Семантика объекта может ссылаться на различные файлы.
Эти файлы могут располагаться:
- в поддиректории карты или рядом с картой (в семантику записывается относительный путь - \xxx\yyy.png). В этом случае они копируются с картой без потерь;
- в сетевой директории (\\server\\xxxx\yyy.png). В этом случае перемещение карты не нарушает ссылку.
- на ГИС Сервере (HOST#server#2047#ALIAS#yyy.png). В этом случае перемещение карты не нарушает ссылку.

Размещение - Рабочий стол\Безымянный.png  - не позволяет переносить папку с картой на другой компьютер. Так нельзя размещать данные.
Как понять какой функцией конвертировать растр tif
 
Вы можете читать любой растр средствами GDAL и сохранять его в RSW целиком или полосками функциями rstapi.h:

Например:[CODE] // Запись прямоугольного участка растра
 // hMap    - идентификатор открытой векторной карты
 // number  - номер файла в цепочке
 // bits    - указатель на начало изображения битовой области
 // left    - смещение слева в элементах (выравнено на границу байта)
 // top     - смещение сверху в элементах
 // width   - ширина в элементах (выравнено на границу байта)
 // height  - высота в элементах
 // begining  - начало изображения:
 //   ==  1  - (bits - указатель на первую строку битовой области)
 //   == -1  - (bits - указатель на послелнюю строку битовой области,
 //                          в BMP изображение хранится снизу - вверх)
 // widthinbyte    - ширину прямоугольного участка растра в байтах
 // Принцип выравнивания:
 // при ElementSize() == 1 (бит) - left,width кратны 8,
 //                   == 4 (бит) - left,width кратны 2
 // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapPutRstFrame(HMAP hMap, long int number, char* bits, long int left, long int top,  long int width, long int height,
                                       long int begining/* = 1*/,  long int widthinbyte /*= 0*/);
[/CODE]
Сложные многоканальные tiff можно дополнить RSW-заголовком без преобразования для отображания в MAPAPI:

Например:

[CODE]// Загрузка растровой карты из Tiff(GeoTiff) в RSW
// Изображение в RSW не переносится, в RSW записываются заголовки, палитра, УК.
//    hmap -  идентификатор открытых данных
//    PcxName - имя PCX-файла;
//    RstName - имя RST-файла;
//    meterInElementX - размер в метрах элемента по X
//    meterInElementY - размер в метрах элемента по Y
//    point       - привязка растра
//    mapreg      - параметры проекции
//    handle      - диалог визуального сопровождения процесса обработки.
//    compression - флаг использования сжатия при формировании RST-файла (0/1)
//    flagMessage - параметр не используется
//                  Управление диагностическими сообщениями осуществляется
//                  вызовом функции mapMessageEnable.
//                  Если mapIsMessageEnable() возвращает 0, то
//                  диагностические сообщения не выдаются.
//    При ошибке возвращает ноль
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состония процесса
//       WPARAM - текущее состоние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
//    -  (WM_ERROR) Извещение об ошибке
//       LPARAM - указатель на структуру ERRORINFORMATION
//       Структура ERRORINFORMATION описана в picexprm.h,
//       WM_PROGRESSBAR и WM_ERROR - в maptype.h
_PICIMP long int _PICAPI picexLoadTiffAccessToRswUn(HMESSAGE handle, int enableMessage,  const WCHAR * TiffName, const WCHAR * RstName,
                                          double* meterInPixelX, double* meterInPixelY, DOUBLEPOINT *point);

[/CODE]
В mappicex.h описаны и другие функции для импорта растров без диалогов.

Например:[CODE]

// Загрузка растровых данных посредством библиотеки GDAL
// обрабатываются файлы графических форматов (IMG, PNG, GIF)
//    Map - карта,содержащая векторные данные
//    inputname - имя загружаемого файла
//    rstname   - имя RST-файла
//    meterInElementX - размер в метрах элемента по X
//    meterInElementY - размер в метрах элемента по Y
//    point     - точка привязки растра (в метрах)
//                (положение юго-западного угла растра в районе)
//    Handle - диалог визуального сопровождения процесса обработки.
//    compression - флаг использования сжатия при формировании RST-файла (0/1)
//    flagMessage - параметр не используется
//                   Управление диагностическими сообщениями осуществляется
//                   вызовом функции mapMessageEnable.
//                   Если mapIsMessageEnable() возвращает 0, то
//                   диагностические сообщения не выдаются.
//    flagWorkLog - флаг ведения журнала
//                          (при ==1, выполняется ведения журнала
//                           при == 0, не выполняется ведения журнала)
//    При ошибке возвращает ноль
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состония процесса
//       WPARAM - текущее состоние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
//    -  (WM_ERROR) Извещение об ошибке
//       LPARAM - указатель на структуру ERRORINFORMATION
//       Структура ERRORINFORMATION описана в picexprm.h,
//       WM_PROGRESSBAR и WM_ERROR - в maptype.h

_PICIMP long int _PICAPI picexLoadGdalFileToRswPro(const WCHAR* inputname,  const WCHAR* rstname, double* meterInPixelX, double* meterInPixelY,
                                                                                DOUBLEPOINT *point, long int compression, long int compressJpegQuality, EVENTSTATE callevent, void* eventparm);

_PICIMP long int _PICAPI picexLoadGdalFileToRswUn(HMESSAGE handle, TASKPARM* parm,  const WCHAR  * inputname, const WCHAR  * rstname,
                                                                               double* meterInPixelX, double* meterInPixelY, DOUBLEPOINT *point, long int compression, long int flagMessage, long int flagWorkLog);[/CODE]
Создание, открытие, отображение карты, Создание, открытие, отображение карты
 
Про выбор масштаба отображения Вам ответили в другой ветке форума -
[URL=https://gisweb.ru/forum/messages/forum4/topic11136/message84883/11136-masshtabirovanie-karty-v-okne-otobrazheniya#message84883]https://gisweb.ru/forum/messages/forum4/topic11136/message84883/11136-masshtabirovanie-karty-v-okne-...[/URL]

Компоненты ГИС Конструктора рашают все эти вопросы автоматически. Если Вы пытаетесь реализовать их функционал
самостоятельно, то изучите немного соответствующие предметы - картографию, геометрию ...

Отображение карты ничем не отличается от отображения графического файла. Например, BMP.
Текущий размер этого файла в точках и соответствующий размер в метрах на местоности можно запросить:
[CODE]
// Запросить размеры общего изображения карты в пикселах
// для текущего масштаба
// hmap - идентификатор открытых данных
// В переменную width заносится ширина изображения (dx),
// в переменную height - высота (dy)

_MAPIMP void _MAPAPI mapGetPictureSize(HMAP hmap, long int *width, long int *height);
_MAPIMP void _MAPAPI mapGetPictureSizePro(HMAP hmap, double * width, double * height);

_MAPIMP long int _MAPAPI mapGetPictureHeight(HMAP hMap);
_MAPIMP long int _MAPAPI mapGetPictureWidth(HMAP hMap);

// Запросить ширину пиксела изображения карты в метрах на местности
// для текущего масштаба изображения
// При ошибке возвращает ноль

_MAPIMP double _MAPAPI mapGetPixelWidth(HMAP hMap);

// Запросить высоту пиксела изображения карты в метрах на местности
// для текущего масштаба изображения
// При ошибке возвращает ноль

_MAPIMP double _MAPAPI mapGetPixelHeight(HMAP hMap);

// Запросить габариты района (всех видов карт)
// hmap - идентификатор открытых данных
// dframe - указатель на заполняемую структуру
// Запрашиваются координаты углов района в метрах или радианах на местности
// в картографической системе или в пикселах относительно верхнего левого угла
// района
// place  - запрашиваемая система координат (PP_PICTURE, PP_PLANE, PP_GEO)
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetTotalBorder(HMAP hmap, DFRAME *dframe, long int place);[/CODE]
Не видно векторную карту
 
Вы включили отображение растра над картой. В версии 13 для этого используется другая команда. (см. Помощь\Горячие клавиши)

Нажмите эту комбинацию еще раз.
Или войдите по кнопке с главного меню в диалог Список данных, закладка Растры, выберите мышкой растр, нажмите правую кнопку мышки (или кнопку Свойства)
и в меню снимите галочку в пункте Над картой.

Масштаб меняется кнопками клавиатуры > <, колесиком мышки с CTRL, кнопками на главной панели.
Создание, открытие, отображение карты, Создание, открытие, отображение карты
 
Чтобы получить ответ - нужно задать вопрос.
Открытие файлов .shp .dbf .prj .shx .meta.xml
 
.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]
Ещё раз об отображении объектов
 
Как говорил кот Матроскин - "Что-бы продать что-то ненужное, сперва нужно купить что-то ненужное"

Например, заполним список объектов:[CODE] // Заполнить список объектов всеми номерами объектов, которые есть
 // на листе
 // select - контекст условий поиска
 // list   - номер листа, с которого берутся объекты
 // Связь с картой (hMap, hSite) устанавливается при создании контекста
 // или при чтении контекста с карты
 // Возвращает число объектов, занесенных в список для листа
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetSampleAllObjects(HSELECT select, long int list);

 // Заполнить список объектов всеми номерами объектов, которые имеют
 // заданный внутренний код
 // Поиск объектов выполняется на той карте, где был создан контекст
 // условий поиска или с которой он был заполнен (mapGetSiteViewSelect(),
 // mapGetSiteSeekSelect())
 // select - контекст условий поиска
 // code   - внутренний код объекта (mapObjectCode)
 // При ошибке возвращает "0"

_MAPIMP long int _MAPAPI mapSelectSampleByObject(HSELECT select, long int code);[/CODE]теперь из этого списка уберем некоторый объект:
[CODE] // Отключить доступ к заданному объекту заданного листа карты
 // select   - контекст условий поиска
 // listname - имя листа карты
 // key      - уникальный номер объекта в карте
 // В контексте условий поиска должна быть установлена карта
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapUnselectSampleUn(HSELECT select, const WCHAR *listname, long int key);
_MAPIMP long int _MAPAPI mapUnselectSample(HSELECT select, const char *listname, long int key);

 // Отключить доступ к заданному объекту заданного листа карты
 // select - контекст условий поиска
 // list   - номер листа карты,
 // key    - уникальный номер объекта в карте
 // В контексте условий поиска должна быть установлена карта.
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapUnselectSampleByList(HSELECT select, long int list, long int key);

 // Отключить доступ к заданному объекту заданного листа карты
 // select - контекст условий поиска
 // list   - номер листа карты,
 // number - номер объекта в листе
 // В контексте условий поиска должна быть установлена карта
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapUnselectSampleByNumber(HSELECT select, long int list, long int number);
[/CODE]
Или отберем объекты, которые хотим отключить:[CODE] // Установить доступ к заданному объекту заданного листа карты
 // select   - контекст условий поиска
 // listname - имя листа карты,
 // key - уникальный номер объекта в карте
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSelectSampleUn(HSELECT select, const WCHAR *listname, long int key);
_MAPIMP long int _MAPAPI mapSelectSample(HSELECT select, const char *listname, long int key);[/CODE]
инвертируем список объектов (запишем в него те объекты, которых не было в списке, а те что были - уберем):
[CODE] // Инвертировать список отобранных объектов в контексте условий поиска
 // select - контекст условий поиска
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapInvertSample(HSELECT select);[/CODE]
Недостаток этих методов - много памяти под списки для больших карт и лишнее время на заполнения списка.

Или отберем объекты, которые хотим отключить - mapSelectSample ...

Установим признак обратного отбора:

[CODE] // Установить/запросить признак инвертирования условий поиска
 // select - контекст (описание условий) поиска/отображения
 // flag   - признак инвертирования
 // Возвращает установленное значение

_MAPIMP long int _MAPAPI mapSetInversionSelect(HSELECT select, long int flag);

_MAPIMP long int _MAPAPI mapGetInversionSelect(HSELECT select);
[/CODE]
Недостаток этого метода - инвертируются все условия - слои, объекты, семантика...
Создание, открытие, отображение карты, Создание, открытие, отображение карты
 
Не совсем то:[CODE]mapreg.AxisMeridian = mapGetAxisMeridianByZone(nz); (nz=7)
mapreg.ZoneNumber = mapreg.AxisMeridian; (0.680678 )[/CODE]скорее
[CODE]mapreg.ZoneNumber = nz;
mapreg.AxisMeridian = mapGetAxisMeridianByZone(mapreg.ZoneNumber); [/CODE]
Для СК-42 есть более простой способ заполнения -[CODE] // Запросить параметры проекции и системы координат по коду EPSG
 // Если код EPSG задает геодезическую систему координат,
 // то устанавливается проекция Широта\Долгота и соответствующие
 // параметры эллипсоида и датум
 // Если код EPSG задает плоскую прямоугольную систему координат,
 // то все параметры устанавливаются из базы EPSG
 // epsgcode  - код EPSG, для СК-42 зоны 2-32 : 28402-28432, для СК-95 зоны 4-32: 20004-20032
 // mapreg    - параметры системы координат и проекции
 // datum     - параметры пересчета с эллипсоида рабочей системы координат
 //             к WGS84
 // ellipsoid - параметры пользовательского эллипсоида для рабочей
 //             системы координат
 // Для геодезических систем координат возвращает 2,
 // для плоских прямоугольных возвращает 1.
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetParametersForEPSG(long int epsgcode, MAPREGISTEREX * mapreg,DATUMPARAM * datum, ELLIPSOIDPARAM * ellipsoid);[/CODE]Для зоны 7 код EPSG равен 28400 + 7

SEANAUTIC и MERCATORMAP - это разные вещи.

Можно взять параметры по коду EPSG 3857 ("World Mercator"):
[CODE]mapGetParametersForEPSG(3857, &mapreg, &datum, &ellipsoid);[/CODE]затем заменить эллипсоид:
[CODE]mapreg.EllipsoideKind = KRASOVSKY42;
mapGetEllipsoidParameters(KRASOVSKY42, &ellipsoid);[/CODE]Хотя такую систему на практике не применяют.

Но если нужна система для морских карт ("Mercator 2SP"), тогда можно так:
[CODE]mapRegisterFromMapType(SEANAUTIC, &mapreg);[/CODE]затем заменить эллипсоид -

[CODE]mapreg.EllipsoideKind = KRASOVSKY42;
mapGetEllipsoidParameters(KRASOVSKY42, &ellipsoid);[/CODE]
Судя по параметрам Вам нужна прямая коническая равнопромежуточная проекция Каврайского с параллелями 47 и 62 градуса -
[CODE]mapreg.MainPointParallel = tmp->geo.B_kavr_map; (0.942478 )
mapreg.AxisMeridian = tmp->geo.L_kavr_map; (0.658862 )
mapreg.FirstMainParallel = tmp->geo.first_latitude_map; (0.820305 )
mapreg.SecondMainParallel = tmp->geo.second_latitude_map; (1.0821 )
[/CODE]
Есть прямая равнопромежуточная коническая проекция - CONICALEQUIDISTANT. Вероятно, нужно использовать ее для Вашей задачи.
[CODE]memset(&mapreg, 0, sizeof(mapreg));
mapreg.Length = sizeof(mapreg);

mapRegisterFromMapType(GEOGRAPHIC, &mapreg);

mapreg.MaterialProjection = CONICALEQUIDISTANT;
mapreg.EllipsoideKind = KRASOVSKY42;
mapreg.MainPointParallel = tmp->geo.B_kavr_map; // (0.942478 )
mapreg.AxisMeridian = tmp->geo.L_kavr_map; // (0.658862 )
mapreg.FirstMainParallel = tmp->geo.first_latitude_map; // (0.820305 )
mapreg.SecondMainParallel = tmp->geo.second_latitude_map; // (1.0821 )  

mapGetEllipsoidParameters(KRASOVSKY42, &ellipsoid);[/CODE]
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 377 След.



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

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