[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.