Как записать координату в файл TIF с помощью libgeotiff

Я пытаюсь создать файл tif, используя библиотеку GeoTiff. Мне удалось записать все данные в обычный tif-файл с помощью стандартной TIF-функции библиотеки, но я не могу понять, как использовать функции для добавления координат углов.

Например, я посмотрел в Интернете и дошел до того, что смог добавить информацию о геолокации изображения: модель, растр, угловая единица и т. д. Но я не вижу никаких клавиш для добавления информации об углах. что я должен получить при сбросе информации о теге с помощью «listgeo»: Координата углов

...
GTIFKeySet(gtif, GeogCitationGeoKey, TYPE_ASCII, 7, "WGS 84");
GTIFKeySet(gtif, GeogAngularUnitsGeoKey, TYPE_SHORT, 1, 9102);
GTIFKeySet(gtif, GeogSemiMajorAxisGeoKey, TYPE_DOUBLE, 1, 6378137.0);
GTIFKeySet(gtif, GeogInvFlatteningGeoKey, TYPE_DOUBLE, 1, 298.257223563);
...

Может ли кто-нибудь указать, где я могу найти документацию о том, как написать эти координаты, или какую клавишу/функцию мне нужно использовать для этого, если это возможно?

Ваше здоровье.


person PyrO_70    schedule 16.11.2011    source источник


Ответы (2)


Это, вероятно, лучше всего подходит в качестве комментария, но из-за его размера я опубликую его как ответ. Мои знания ГИС несколько заржавели, но давайте посмотрим, как listgeo выводит информацию об углах:

static void GTIFPrintCorners( GTIF *gtif, GTIFDefn *defn, FILE * fp_out,
                              int xsize, int ysize, int inv_flag, int dec_flag )

{
    printf( "\nCorner Coordinates:\n" );
    if( !GTIFReportACorner( gtif, defn, fp_out,
                            "Upper Left", 0.0, 0.0, inv_flag, dec_flag ) )
    {
        printf( " ... unable to transform points between pixel/line and PCS space\n" );
        return;
    }

    // Ommited ...
}

Глядя на GTIFReportACorner, кажется, что он преобразует координаты изображения (0, 0) в соответствующие географические координаты, используя GTIFImageToPCS вместо того, чтобы смотреть непосредственно на какой-то тег.

Могу поспорить, что GTIFImageToPCS будет работать нормально, если вы добавите другую информацию, такую ​​как проекция, датум и, возможно, местоположение центра изображения (точки привязки?).

person Vitor Py    schedule 16.11.2011

Включают :

#include <tiffio.h>
#include <geotiff/xtiffio.h>
#include <geotiff/geotiffio.h>

С использованием

struct TiePoint{
    double rasterX;
    double rasterY;
    double longitude;
    double latitude;
};

а также

std::vector<TiePoint> tiePoints;

Откройте файл с помощью:

TIFF* tiff = XTIFFOpen("filename.tiff", "w");
GTIF* geotiff = GTIFNew( tiff);

И пишите пункты так:

int length = 6*tiePoints.size();
double data33922[length];
for(int index=0; index<tiePoints.size(); index++){
    data33922[index*6 + 0] = tiePoints.at(index).rasterX;
    data33922[index*6 + 1] = tiePoints.at(index).rasterY;
    data33922[index*6 + 2] = 0;
    data33922[index*6 + 3] = tiePoints.at(index).longitude;
    data33922[index*6 + 4] = tiePoints.at(index).latitude;
    data33922[index*6 + 5] = 0;
}
TIFFSetField(tiff,TIFFTAG_GEOTIEPOINTS,length,data33922);

Закончите с:

GTIFWriteKeys(gtif);
GTIFFree(gtif);
TIFFClose(file);
person user1145922    schedule 11.02.2020