如何使用libgeotiff将坐标写入TIF文件

时间:2011-11-16 16:19:35

标签: c++ c tiff geotiff

我正在尝试使用GeoTiff库创建一个tif文件。我设法使用库的标准TIF函数将所有数据写入普通的tif文件,但我无法弄清楚如何使用这些函数来添加角点的坐标。

我在互联网上寻找了例子,并且能够添加与图像的地理定位相关的信息:模型,光栅,角度单位等。但我看不到任何要添加的键使用“listgeo”转储标记信息时必须获得的角落信息:Corners Coordinate

...
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);
...

如果有可能,有人可以指出我在哪里可以找到关于如何编写这些坐标的文档,或者我需要使用哪个键/函数吗?

干杯。

2 个答案:

答案 0 :(得分:2)

这可能最适合作为评论,但由于它的大小,我会将其作为答案发布。我的GIS知识有点生锈,但让我们来看看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它似乎使用GTIFImageToPCS将图像坐标(0,0)转换为相应的地理坐标,而不是直接查看某个标记。

我敢打赌GTIFImageToPCS只要添加其他信息,例如投影,基准以及可能的图像中心位置(连接点?),它就可以正常工作。

答案 1 :(得分:0)

包含:

#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);