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

Дмитрий Шабаков (Все сообщения пользователя)

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 34 След.
Импорт набора растров JPG, Результат импортирования набора растров отличается от результата импортирования одного растра
 
Внесены изменения в программу.
Cоздание временных файлов направлено в папку выходного растра.
После использования временные файлы с диска удаляются.
Изменения  будут доступны в ближайшее время после обновления дистрибутива ГИС Панорама Мини на нашем сайте.

Импорт растров осуществляется в многопоточном  режиме.
Количество растров, импортируемых одновременно, соответствует количеству процессоров на компьютере.
Преобразование растра со сжатием, как выбрать степень сжатия растра
 
[QUOTE][URL=https://gisweb.ru/forum/user/881/]Андрей Уланов[/URL] пишет:
Добрый день!

Необходимо преобразовать множество растров из JPG в RSW с заданной степенью сжатия.


Использую   picexLoadRasterToRswUn, она работает, но сжатие слишком сильное.
Насколько я понимаю, в этой функции нет способа задать степень сжатия растра.Может быть лучше какой-то другой функцией сжимать?[/QUOTE]
[QUOTE][URL=https://gisweb.ru/forum/user/881/]Андрей Уланов[/URL] пишет:
Добавлю, желательно преобразовывать одной функцией, т.е. без последующей оптимизации.
[/QUOTE]

Попробуйте функцию picexLoadJpegToRswAndCompressJPEG_Un:[CODE] // Импорт растровых данных из файла JPEG в файл RSW
 // hmap -  идентификатор открытых данных
 // inputname - имя JPEG-файла;
 // rstname   - имя RSW-файла;
 // meterInElementX - размер в метрах элемента по X
 // meterInElementY - размер в метрах элемента по Y
 // point     - точка привязки растра (в метрах) - положение юго-западного угла растра в районе
 // handle - диалог визуального сопровождения процесса обработки
 // compression - флаг использования сжатия при формировании RST-файла (0/1)
 //              0 - сжатие к блокам изображения не применено
 //              1 - блоки д.б. сжаты по методу LZW
 //              2 - блоки д.б. сжаты по методу JPEG (справедливо для 24 битных растров)
 // compressJpegQuality - степень сжатия блока растра по алгоритму JPEG
 //              Возможные значения: 1 - 100
 //              Рекомендуемое значение: 60
 // flagMessage - параметр не используется
 // Управление диагностическими сообщениями осуществляется вызовом функции mapMessageEnable.
 // Если mapIsMessageEnable() возвращает 0, то диагностические сообщения не выдаются
 // При ошибке возвращает ноль

 _PICIMP long int _PICAPI picexLoadJpegToRswAndCompressJPEG_Un(HMAP hmap, HMESSAGE handle,
   const WCHAR* inputname, const WCHAR* rstname, double* meterInElementX, double* meterInElementY,
   DOUBLEPOINT* point, int compression, int compressJpegQuality, int flagMessage);
[/CODE]
Функции, предназначенные для конвертирования растровых данных, объявлены в следующих заголовочных файлах:[CODE]mappicadd.h
mappicex.h
mappicgdal.h[/CODE]
RAD Studio 11.3. Про компоненты GIS ToolKit. Нужно ли подключать еще отдельно библиотеки MAPAPI или заголовочные файлы
 
[QUOTE][URL=https://gisweb.ru/forum/user/22577/]Сергей[/URL] написал:
То есть подобным же образом можно будет вызвать функции, которые вы привели ниже?.
[/QUOTE]
Подобным образом из библиотеки gis64picex.dll можно вызвать функции, объявленные в заголовочных файлах mappiсex.h и mappicadd.h.

[QUOTE][URL=https://gisweb.ru/forum/user/22577/]Сергей[/URL] написал:
А нужно ли подключать в сам проект файлы каких-то еще библиотек (.lib, .a) через меню Add в Rad Studio?
[/QUOTE]
В проект Rad Studio ничего добавлять не нужно.
Данный метод называется "динамическая загрузка библиотеки", или "динамическое подключение во время выполнения" (runtime dynamic linking).
Динамическое подключение позволяет загружать и выгружать библиотеку DLL всякий раз, когда это необходимо.

Чтобы динамически загрузить DLL, требуются следующие действия:
[LIST=1]
[*]Функцией LoadLibrary выполнить загрузку библиотеки DLL.
[*]Функцией GetProcAddress запросить адрес требуемой API-функции из библиотеки DLL.
[*]Вызвать API-функцию по полученному указателю.
[*]Функцией FreeLibrary освободить загруженную библиотеку DLL.
[/LIST]
RAD Studio 11.3. Про компоненты GIS ToolKit. Нужно ли подключать еще отдельно библиотеки MAPAPI или заголовочные файлы
 
Здравствуйте!
Для экспорта или нарезки растров необходимо вызывать API-функции напрямую из библиотеки gis64picex.dll(gis32picex.dll).

Пример вызова API-функции экспорта в BMP растра RSW с номером 1 в цепочке растров :[CODE]int rswnumber = 1;
String bmpName = L"D:\raster.bmp"

HINSTANCE libInst = LoadLibrary(L"gis64picex.dll");
if (libInst == 0)
{
  ShowMessage("Ошибка загрузки библиотеки gis64picex.dll");
  return;
}

typedef long int (WINAPI * F_Func)(HMAP hmap, HMessage handle, long int rswnumber, const WCHAR* bmpname);

F_Func lpfn_func = (F_Func)GetProcAddress(libInst, "picexLoadRswToBmp");
if (lpfn_func == 0)
{
  ShowMessage("Ошибка запроса адреса функции picexLoadRswToBmp");
  FreeLibrary(libInst);
  return;
}

long int result = lpfn_func(mvMap->MapHandle, 0, rswnumber, bmpName.c_str());

FreeLibrary(libInst);
[/CODE]
Если необходимо сохранить в RSW часть одного растра, то применяются функции нарезки растра:[CODE]mappicadd.h
 // Вырезать изображение растровой карты по прямоугольной области, заданной в метрах
 // hmap          -  идентификатор открытых данных
 // handle        - диалог визуального сопровождения процесса обработки.
 // rstInputName  - имя файла растровой карты;
 // rstOutputName - имя файла формируемой растровой карты;
 // frame         - габариты вырезаемой прямоугольной области(в метрах)
 // flagUpdateRstDuplicates - флаг создания уменьшенной копии (0-нет, 1-да)
 // При ошибке возвращает ноль

 _PICIMP long int _PICAPI LoadCutOfRstByFrameEx(HMAP hmap, HMESSAGE handle, const char* rstInputName,
   const char* rstOutputName, DFRAME* frame, int flagUpdateRstDuplicates);

 _PICIMP long int _PICAPI LoadCutOfRstByFrameExUn(HMAP map, HMESSAGE handle, const WCHAR* rstInputName,
   const WCHAR* rstOutputName, DFRAME* frame, int flagUpdateRstDuplicates);
[/CODE]
Для сохранения в RSW фрагмента документа, состоящего из мозаики растров, предлагаю воспользоваться функциями:[CODE]mappixex.h
 //==========================================================­==============
 // Функции сохранения изображения карты (документа) в RSW и графические форматы
 //==========================================================­==============

 // Сохранить карту в формате RSW
 // hmap       -  идентификатор открытых данных
 // handle     - диалог сопровождения процесса обработки;
 // filename   - имя файла сохраняемого изображения RSW
 // dframe     - фрагмент сохраняемой карты(в метрах на местности)
 // bitcount   - количество бит на пиксель сохраняемого изображения
 // meterInElement - размер пикселя сохраняемого изображения в метрах
 // flagCompress   - Флаг сжатия изображения
 // При ошибке функция возвращает ноль

 _PICIMP long int _PICAPI LoadDocumentImageToRswFile(HMAP hmap, HMESSAGE handle, const WCHAR* filename,
   DFRAME* dframe, int bitCount, double meterInElement, int flagCompress);

 // Сохранить карту в формате BMP, JPEG, PNG
 // hmap       -  идентификатор открытых данных
 // handle     - диалог сопровождения процесса обработки;
 // filename   - имя файла сохраняемого изображения RSW
 // dframe     - фрагмент сохраняемой карты(в метрах на местности)
 // bitcount   - количество бит на пиксель сохраняемого изображения
 // meterInElement - размер пикселя сохраняемого изображения в метрах
 // flagCompress   - При сохранении файла TIFF - Флаг сжатия изображения
 //                    (0- не применять сжатие, 1 - сжатие PackBit)
 //                    При сохранении файла JPG  - Коэффициент качества
 //                    изображения при сжатии JPEG (0-100)
 // При ошибке функция возвращает ноль

 _PICIMP long int _PICAPI LoadDocumentImageToPictureFile(HMAP hmap, HMESSAGE handle, const WCHAR* filename,
   DFRAME* dframe, int bitCount, double meterInElement, int flagCompress);
[/CODE]
Экспорт изображения растра RSW в файлы графических форматов выполняется функциями:
[CODE]mappicadd.h

 // Сохранить растровую карту в формате BMP
 // hmap      - идентификатор документа с открытыми данными
 // handle    - диалог визуального сопровождения процесса обработки
 // rswnumber - номер растра в цепочке растров документа, запрашивается функцией mapGetRstNumberByNameUn
 // bmpname   - имя BMP-файла
 // При ошибке возвращает ноль

 _PICIMP long int _PICAPI picexLoadRswToBmp(HMAP hmap, HMESSAGE handle, long int rswnumber, const WCHAR* bmpname);



mappicex.h

 // Экспорт 24-х битного растра RSW в файл JPEG
 // hmap                -  идентификатор открытых данных
 // handle              - диалог визуального сопровождения процесса обработки
 // rswName             - имя файла 24-х битного растра RSW
 // jpegName            - имя файла JPEG
 // compressJpegQuality - степень сжатия блока растра по алгоритму JPEG
 //              Возможные значения: 10 - 100
 //              Рекомендуемое значение: 60
 // При ошибке возвращает ноль

 _PICIMP long int _PICAPI picexSaveRswToJpegUn(HMAP hmap, HMESSAGE handle, const WCHAR* rswName, const WCHAR* jpegName,
   long int compressJpegQuality);
[/CODE]
Импорт набора растров JPG, Результат импортирования набора растров отличается от результата импортирования одного растра
 
Здравствуйте!
[QUOTE][URL=https://gisweb.ru/forum/user/881/]Андрей Уланов[/URL] пишет:
2) Огромный размер растра.[/QUOTE]
Тестирование выполнялось в ГИС Панорама х64 версии 14.6.0.124.
В качестве тестовых данных применены присланные Вами растры:
dnr_4-4.jpg, dnr_4-4.tab
dnr_4-5.jpg, dnr_4-5.tab

Повторить получение большого размера выходных растров со сжатием JPEG при потоковом импорте файлов jpg + tab не удалось.
Получены растры следующих размеров:
dnr_4-4.rsw - 560 Мб,
dnr_4-5.rsw - 524 Мб.

Устанавливать степень сжатия растра RSW по артефактам JPEG-сжатия не очень правильно.
На закладке "Параметры растра" диалога "Список растров" указаны алгоритм и степень сжатия растра RSW.

11.2 Гб - это размер несжатого растра.
Возможно, по какой то причине сжатие выходного растра не выполнилось  при потоковом импорте файлов jpg + tab.
Пришлите, пожалуйста, журнал диагностики на нашу почту.
Включите журнал диагностики перед потоковым импортом растров - Параметры -> Журнал диагностики -> Запись.
Журнал диагностики создается на диске С:, например, c:\ProgramData\panorama64.User.log.

[QUOTE][URL=https://gisweb.ru/forum/user/881/]Андрей Уланов[/URL] пишет:
1) Плохое качество растра.[/QUOTE]
Артефакты сжатия появились уже в исходном файле dnr_4-4.jpg, изображение в нем тоже сжато по алгоритму JPEG.
При импорте артефакты сжатия jpg-файла никуда не ушли, а при сжатии изображения RSW по алгоритму JPEG ещё и добавились к исходным.

Вот, что пишут в Википедии по поводу алгоритма сжатия JPEG:[QUOTE][URL=https://ru.wikipedia.org/wiki/JPEG)]https://ru.wikipedia.org/wiki/JPEG[/URL]
Алгоритм JPEG сжимает изображение с потерями...
Алгоритм JPEG наиболее эффективен для сжатия фотографий и картин, содержащих реалистичные сцены с плавными переходами яркости и цвета.
Формат JPEG в режиме сжатия с потерями малопригоден для сжатия чертежей, текстовой и знаковой графики, где резкий контраст между соседними пикселами приводит к появлению заметных артефактов.

JPEG (как и другие форматы сжатия с потерями) не подходит для сжатия изображений при многоэтапной обработке, так как искажения в изображения будут вноситься каждый раз при сохранении промежуточных результатов обработки.[/QUOTE]
Чтение информации из TIFF, Возможно ли узнать систему координат tiff файла?
 
[QUOTE][URL=https://gisweb.ru/forum/user/21797/]Andrey Prohorov[/URL] написал:
Спасибо за подробные объяснения, вроде бы начинаю понимать суть, но с чем может быть вызвана ошибка: [I]GdalAccess.Open failure. name - C:\Users\User\Desktop\167.taf  [/I]?
Никак не могу ее побороть, при этом функция LoadGeoTiffParametersUn выполняется корректно, но при запросе данных из GEOTIFFPARAM программа крашится. Пробовал на разных tiff - результат один.[/QUOTE]
Еще раз проверил работу функции LoadGeoTiffParametersUn. Функция работает корректно.
Ниже привожу код применения функции LoadGeoTiffParametersUn. [CODE]int main()
{
 std::cout << "Hello World!\n";

 WCHAR name[MAX_PATH_LONG];
 WcsCopy(name, L"e:\\Data_Test_5\\test.tif", sizeof(name));

 GEOTIFFPARAM tifParam;
 memset(&tifParam, 0, sizeof(tifParam));

 int ret1 = LoadGeoTiffParametersUn(0, name, &tifParam);
 if (ret1 == 0)
   mapMessageBoxUn(0, L"Ошибка запроса параметров проекции растра.", name, MB_OK | MB_TASKMODAL);
 else
   mapMessageBoxUn(0, L"Параметры проекции растра изъяты успешно.", name, MB_OK | MB_TASKMODAL);

 return 0;
}
[/CODE]На вход функции LoadGeoTiffParametersUn подается имя файла TIFF.
Объявление функции LoadGeoTiffParametersUn указано в заголовочных файлах, входящих в состав GTK:[CODE]// Запросить параметры GeoTIFF-файла
//    TifName - имя GeoTIF-файла;
//    DataInformation - структура, которую необходимо заполнить
//    geoTIFFinformation - структура, которую необходимо заполнить
//    Структуры DATAINFORMATION и GEOTIFFINFORMATION описаны в picexprm.h
//
//    Функцию LoadGeoTifInformation рекомендуется вызывать перед началом
//    конвертации TIFF-файла в Rsw для инициализации диалога сопровождения

_PICIMP long int _PICAPI LoadGeoTiffParametersUn(HMESSAGE Handle, const WCHAR * TiffName,
                                             GEOTIFFPARAM * geoTIFFparam);
[/CODE]
Чтение информации из TIFF, Возможно ли узнать систему координат tiff файла?
 
[QUOTE][URL=https://gisweb.ru/forum/user/21797/]Andrey Prohorov[/URL] написал:
Спасибо, функция заработала, но есть ли возможность вывода данных не используя диалог?[/QUOTE]
[CODE]// Запросить параметры GeoTIFF-файла
//    TifName - имя GeoTIF-файла;
//    DataInformation - структура, которую необходимо заполнить
//    geoTIFFinformation - структура, которую необходимо заполнить
//    Структуры DATAINFORMATION и GEOTIFFINFORMATION описаны в picexprm.h
//
//    Функцию LoadGeoTifInformation рекомендуется вызывать перед началом
//    конвертации TIFF-файла в Rsw для инициализации диалога сопровождения

_PICIMP long int _PICAPI LoadGeoTifInformationUn(HMESSAGE Handle, const WCHAR * TiffName,
                                             DATAINFORMATION * information,
                                             GEOTIFFINFORMATION* geoTIFFinformation);
[/CODE]Информацию из структуры GEOTIFFINFORMATION, полученную посредством вызова функции LoadGeoTifInformationUn, применяйте по своему назначению:
записывайте в файл, выводите в консоль, отображайте на форме и т.д.

[QUOTE][URL=https://gisweb.ru/forum/user/21797/]Andrey Prohorov[/URL] написал:
При запросе данных с заполненной структуры получаю "[I]1"[/I] , необходим список для установления системы координат по полученному значению?[/QUOTE]
При успешном выполнении функция LoadGeoTifInformationUn возвращает 1.
При ошибке функция LoadGeoTifInformationUn возвращает ноль.

В своем примере Вы используете поле TypeCS структуры GEOTIFFINFORMATION.

[CODE]// СТРУКТУРА ДЛЯ ПЕРЕДАЧИ ИНФОРМАЦИИ О GeoTIFF-ФАЙЛАХ
typedef struct GEOTIFFINFORMATION
{
 unsigned int StructSize;       // длина СТРУКТУРЫ
 unsigned int TypeCS;           // Тип координатной системы

 unsigned int Spheroid;         // Эллипсоид
 unsigned int Datum;            // Геодезические даты
 unsigned int PrimeMeridian;    //Осевой меридиан

 unsigned int Projection;       // Проекция
 unsigned int Zone;             // Номер зоны

 unsigned int Units;            // Единицы измерения линий (Метры, градусы ...)

 DFRAME       FrameImage;       // Габариты изображения в районе
 double       UnitsInElement_X; // Размер элемента в единицах измерения по оси X
 double       UnitsInElement_Y; // Размер элемента в единицах измерения по оси Y
 double       UnitsInElement_Z; // Размер элемента в единицах измерения по оси Z
 char         Information[256]; // Информация о проекции, имени программы и т.д.
 double       PrecisionInch;    // разрешаюшая способность изображения (т\д)
 double       PrecisionMet;     // разрешаюшая способность изображения (т\м)
 unsigned int UnitsAngular;     // Единицы измерения углов (градусы, радианы ...)

 unsigned int RswWidth;         // Ширина создаваемого файла (при использовании матрицы трансформирования)
 unsigned int RswHeight;        // Высота создаваемого файла (при использовании матрицы трансформирования)
 int          GeoTiffInformationZero;       // Выравнивание
 char         Reserv[236];
}
GEOTIFFINFORMATION;
[/CODE]Поле TypeCS заполняется данными тега GTModelTypeGeoKey (1024) файла TIFF.
Возможные варианты получаемых значений:

ModelTypeProjected = 1 /* Projection Coordinate System */
ModelTypeGeographic = 2 /* Geographic latitude-longitude System */
ModelTypeGeocentric = 3 /* Geocentric (X,Y,Z) Coordinate System */

Значения тегов, а также  структура файла TIFF, описаны в спецификации формата GeoTIFF и других открытых источниках:
[URL=https://gis-lab.info/docs/geotiff-1.8.2.pdf?ysclid=ljzdcr11gj797221174]GeoTIFF Format Specification[/URL]


[QUOTE][QUOTE][URL=https://gisweb.ru/forum/user/21797/]Andrey Prohorov[/URL] написал:
Хочется добиться результата как при открытии файла формата TIF через панораму, и получить строку подобную "PCSCitationGeoKey[3073]=CK-167 / 3-degree Gauss-Kruger CM 93E" .
[/QUOTE]
[URL=https://gisweb.ru/forum/user/168/]Дмитрий Шабаков[/URL] написал:
Также обратите внимание на расширенную структуру GEOTIFFPARAM (maptype.pas).
Заполнение структуры GEOTIFFPARAM осуществляется вызовом функции LoadGeoTiffParametersUn (mappicex.inc).[/QUOTE]
Я уже писал, что для получения полной информации о файле TIFF, необходимо воспользоваться функцией LoadGeoTiffParametersUn.
Структура GEOTIFFPARAM полностью передает содержимое тегов файла TIFF.
Названия полей структуры GEOTIFFPARAM соответствуют спецификации TIFF.

Тег PCSCitationGeoKey(3073), как правило, содержит текстовую информацию о проективной системе координат (Projection Coordinate System).
Сама система координат закодирована набором числовых параметров в соответствующих тегах файла.
Значение тега PCSCitationGeoKey можно увидеть в поле PCSCitationGeoKey структуры GEOTIFFPARAM.
Но дело в том, что файлы TIFF могут содержать различный набор тегов. И теги с текстовой информацией в файле TIFF необязательны.
Например, в тестовом файле TIFF, присланном Вами, тег PCSCitationGeoKey не применяется.

Описание структуры GEOTIFFPARAM:[CODE]typedef struct GEOTIFFPARAM
{
   // Размер данной структуры
   long int    Length;                                                         // 4
#if defined(_M_X64) || defined(BUILD_DLL64)
   int         GeoTiffParamZero;       // Выравнивание
#endif
   TAG_SORTINT GTModelTypeGeoKey;                                              // 4
   TAG_SORTINT GTRasterTypeGeoKey;                                             // 4

// Geographic CS Parameter GeoKeys
   TAG_SORTINT GeographicTypeGeoKey;                                           // 4
   TAG_SORTINT GeogGeodeticDatumGeoKey;                                        // 4
   TAG_SORTINT GeogPrimeMeridianGeoKey;                                        // 4
   TAG_SORTINT GeogLinearUnitsGeoKey;                                          // 4
   TAG_DOUBLE  GeogLinearUnitSizeGeoKey;  // Units: meters                     // 10
   TAG_SORTINT GeogAngularUnitsGeoKey;                                         // 4
   TAG_DOUBLE  GeogAngularUnitSizeGeoKey; // Units: radians                    // 10
   TAG_SORTINT GeogEllipsoidGeoKey;                                            // 4
   TAG_DOUBLE  GeogSemiMajorAxisGeoKey;   // Units: Geocentric CS Linear Units // 10
   TAG_DOUBLE  GeogSemiMinorAxisGeoKey;   // Units: Geocentric CS Linear Units // 10
   TAG_DOUBLE  GeogInvFlatteningGeoKey;   // Units: none                       // 10
   TAG_SORTINT GeogAzimuthUnitsGeoKey;                                         // 4
   TAG_DOUBLE  GeogPrimeMeridianLongGeoKey; // Units =  GeogAngularUnits       // 10

// Projected CS Parameter GeoKeys
   TAG_SORTINT ProjectedCSTypeGeoKey;                                          // 4

// Projection Definition GeoKeys
   TAG_SORTINT ProjectionGeoKey;                                               // 4
   TAG_SORTINT ProjCoordTransGeoKey;                                           // 4
   TAG_SORTINT ProjLinearUnitsGeoKey;                                          // 4
   TAG_DOUBLE  ProjLinearUnitSizeGeoKey;  // Units: meters                     // 10
   TAG_DOUBLE  ProjStdParallelGeoKey;     // Units: GeogAngularUnit            // 10
   TAG_DOUBLE  ProjStdParallel2GeoKey;    // Units: GeogAngularUnit            // 10
   TAG_DOUBLE  ProjOriginLongGeoKey;      // Units: GeogAngularUnit            // 10
   TAG_DOUBLE  ProjOriginLatGeoKey;       // Units: GeogAngularUnit            // 10
   TAG_DOUBLE  ProjFalseEastingGeoKey;    // Units: ProjLinearUnit             // 10
   TAG_DOUBLE  ProjFalseNorthingGeoKey;   // Units: ProjLinearUnit             // 10
   TAG_DOUBLE  ProjFalseOriginLongGeoKey; // Units: GeogAngularUnit            // 10
   TAG_DOUBLE  ProjFalseOriginLatGeoKey;  // Units: GeogAngularUnit            // 10
   TAG_DOUBLE  ProjFalseOriginEastingGeoKey; // Units: ProjLinearUnit          // 10
   TAG_DOUBLE  ProjFalseOriginNorthingGeoKey;// Units: ProjLinearUnit          // 10
   TAG_DOUBLE  ProjCenterLongGeoKey;      // Units: GeogAngularUnit            // 10
   TAG_DOUBLE  ProjCenterLatGeoKey;       // Units: GeogAngularUnit            // 10
   TAG_DOUBLE  ProjCenterEastingGeoKey;   // Units: ProjLinearUnit             // 10
   TAG_DOUBLE  ProjCenterNorthingGeoKey;  // Units: ProjLinearUnit             // 10
   TAG_DOUBLE  ProjScaleAtOriginGeoKey;   // Units: none                       // 10
   TAG_DOUBLE  ProjScaleAtCenterGeoKey;   // Units: none                       // 10
   TAG_DOUBLE  ProjAzimuthAngleGeoKey;    // Units: GeogAzimuthUnit            // 10
   TAG_DOUBLE  ProjStraightVertPoleLongGeoKey; // Units: GeogAngularUnit       // 10

// Vertical CS Parameter Keys
   TAG_SORTINT VerticalCSTypeGeoKey;                                           // 4
   TAG_SORTINT VerticalDatumGeoKey;                                            // 4
   TAG_SORTINT VerticalUnitsGeoKey;                                            // 4

   // TAG_MODELPIXELSCALE 33550 // Размер точки растра по X,Y,Z
   // ModelPixelScaleTag = (ScaleX, ScaleY, ScaleZ)
   double ModelPixelScaleTag[3];                                               // 24
   short int Flag_ModelPixelScaleTag;      // Флаг наличия тэга в файле        // 2
#if defined(_M_X64) || defined(BUILD_DLL64)
   short int GeoTiffParam1Zero[3];       // Выравнивание
#endif
   // TAG_MODELTIEPOINT   33922 // Привязка точки растра
   // ModelTiepointTag = (...,I,J,K, X,Y,Z...), обычно приходит (I,J,K, X,Y,Z) 6 значений
   double ModelTiepointTag[64];                                                // 512

   char   GeogCitationGeoKey[62];  // 62   // GeogCitationGeoKey (Ascii,16): "GSK-2011 Zone 6"
   short int Flag_GeogCitationGeoKey;      // Флаг наличия тэга в файле        // 2

   char   PCSCitationGeoKey [62];  // 62   // PCSCitationGeoKey (Ascii,18): "ГСК-2011 зона 6N "
   short int Flag_PCSCitationGeoKey;       // Флаг наличия тэга в файле        // 2

   char   ModelTiepointZero [7552];                                            // 7552
   short int Flag_ModelTiepointTag;        // Флаг наличия тэга в файле        // 2
                                           // если Тэг TAG_MODELTIEPOINT в файле отсутствует, то Flag_ModelTiepointTag = 0
                                           // если Тэг TAG_MODELTIEPOINT в файле есть, то в Flag_ModelTiepointTag записывается количество значений типа double
#if defined(_M_X64) || defined(BUILD_DLL64)       // 05/12/13
   short int GeoTiffParam2Zero[3];       // Выравнивание
#endif
   // TAG_MODELTRANSFORMATION       33920  // Матрица трансформирования растра // 02/04/11
   // TAG_MODELTRANSFORMATION_34264 34264  // Матрица трансформирования растра
   double ModelTransformationTag[16];                                          // 128
   short int Flag_ModelTransformationTag;  // Флаг наличия матрицы трансформирования в файле        // 2
                                           // В Flag_ModelTransformationTag могут записываться следующие значения:
                                           // 0 - Матрица трансформирования в файле отсутствует
                                           // 1 - массив ModelTransformationTag содержит матрицу трансформирования из тега 33920(TAG_MODELTRANSFORMATION)        // 16/08/13
                                           // 2 - массив ModelTransformationTag содержит матрицу трансформирования из тега 34264(TAG_MODELTRANSFORMATION_34264)  // 16/08/13

   /** Do we have any definition at all?  0 if no geokeys found */
   short int Flag;  // Флаг заполнения хотя бы одной структуры               // 2
#if defined(_M_X64) || defined(BUILD_DLL64) // 05/12/13
         int GeoTiffParam3Zero;            // Выравнивание
#endif

   // 05/03/12 добавлен датум (параметры перехода к WGS-84)7шт.
   // KeyID = 2062; Type = 3/7 * DOUBLE; Values = dX, dY, dZ, Rx, Ry, Rz, dS
   double GeogTOWGS84GeoKey[7];                                                // 56
   short int Flag_GeogTOWGS84GeoKey;       // Флаг наличия тэга в файле        // 2
                                           // если Тэг GeogTOWGS84GeoKey в файле отсутствует, то Flag_GeogTOWGS84GeoKey = 0
                                           // если Тэг GeogTOWGS84GeoKey в файле есть, то в Flag_GeogTOWGS84GeoKey записывается количество значений типа double (3 или 7)

#if defined(_M_X64) || defined(BUILD_DLL64)
   char        GeoTiffParam4Zero[6];       // Выравнивание
#endif
   char        Reserv[8];
}
 GEOTIFFPARAM;
[/CODE]Описание структуры TGEOTIFFPARAM для паскаля в файле maptype.pas из состава GisTool14.
Чтение информации из TIFF, Возможно ли узнать систему координат tiff файла?
 
[QUOTE][URL=https://gisweb.ru/forum/user/21797/]Andrey Prohorov[/URL] написал:
Хочется добиться результата как при открытии файла формата [I]TIF[/I] через панораму, и получить строку подобную [I]"PCSCitationGeoKey[3073]=CK-167 / 3-degree Gauss-Kruger CM 93E" .[/I][/QUOTE]
Также обратите внимание на расширенную структуру GEOTIFFPARAM (maptype.pas).
Заполнение структуры GEOTIFFPARAM осуществляется вызовом функции LoadGeoTiffParametersUn (mappicex.inc).
Чтение информации из TIFF, Возможно ли узнать систему координат tiff файла?
 
[QUOTE][URL=https://gisweb.ru/forum/user/21797/]Andrey Prohorov[/URL] написал:
[QUOTE][URL=https://gisweb.ru/forum/user/21/]Татьяна Софинова[/URL] написал:
Вы собираете  32 - разрядный проект?
Ошибку повторила  для 32  - разрядного приложения, для 64 - работает.[/QUOTE]
64 - тоже выдает ошибку [IMG WIDTH=16 HEIGHT=16]https://gisweb.ru/bitrix/images/main/smiles/5/icon_sad.gif[/IMG]

[/QUOTE]
Для 32-х разрядного приложения предлагаю использовать классическую схему импорта растров.
На первом этапе импортируем файл TIFF в растр RSW (функция picexLoadRasterToRswUn из библиотеки gis32picex.dll).
Затем открываем полученный растр RSW и запрашиваем у него параметры проекции и системы координат.
Ниже привожу исходный код примера, протестированного с положительным результатом на Вашем файле TIFF.[CODE]int main()
{
   WCHAR name[MAX_PATH_LONG];
   WcsCopy(name, L"e:\\Data_Test_5\\test.tif", sizeof(name));

   WCHAR nameOutput[MAX_PATH_LONG];
   WcsCopy(nameOutput, L"e:\\Data_Test_5\\test.rsw", sizeof(nameOutput));

   double meterInPixelX = 1;
   double meterInPixelY = 1;
   DOUBLEPOINT* point = 0;

   long int retcode = 0;
   if (picexLoadRasterToRswUn(0, name, nameOutput, &retcode) == 0)
     return 0;

   HMAP hMap = mapOpenAnyDataPro(nameOutput, 0, 0, 0, 0);
   if (hMap == 0)
     return 0;

   MAPREGISTEREX mapregister;
   DATUMPARAM datumparam;
   ELLIPSOIDPARAM ellipsoidparam;
   long int ttype = 0;
   LOCALTRANSFORM tparm;

   int ret = mapGetRstProjectionDataPro(hMap, 1, &mapregister, &datumparam, &ellipsoidparam, &ttype, &tparm);
   if (ret == 0)
     mapMessageBoxUn(0, L"Ошибка запроса параметров проекции растра.", nameOutput, MB_OK | MB_TASKMODAL);
   else
     mapMessageBoxUn(0, L"Параметры проекции растра изъяты успешно.", nameOutput, MB_OK | MB_TASKMODAL);

   mapCloseData(hMap);
}
[/CODE]
Изменено: Дмитрий Шабаков - 10.07.2023 11:20:06
Чтение информации из TIFF, Возможно ли узнать систему координат tiff файла?
 
[QUOTE][URL=https://gisweb.ru/forum/user/21797/]Andrey Prohorov[/URL] пишет:
64 - тоже выдает ошибку[/QUOTE]
Проверил открытие файла Tiff, присланного Вами, в 64-х разрядном консольном приложении. Версия GIS ToolKit - 14.5.8.3.
Работает без ошибок.
[CODE]int main()
{
   std::cout << "Hello World!\n";

   WCHAR name[MAX_PATH_LONG];
   WcsCopy(name, L"e:\\Data_Test_5\\test.tif", sizeof(name));

   HMAP hMap = mapOpenAnyDataPro(name, 0, 0, 0, 0);

   if (hMap == 0)
     mapMessageBoxUn(0, L"Ошибка !!!", name, MB_OK|MB_TASKMODAL);
   else
     mapMessageBoxUn(0, L"Успешно !!!", name, MB_OK | MB_TASKMODAL);

   mapCloseData(hMap);
}
[/CODE]Не могут ли у Вас при выполнении 64-х разрядного приложения загружаться библиотеки GIS ToolKit старой версии?
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 34 След.



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

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