2

我正在尝试使用 GeoTiff 库创建一个 tif 文件。我设法使用库的标准 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);
...

有人可以指出我在哪里可以找到有关如何编写这些坐标的文档,或者如果可能的话,我需要使用哪个键/功能来做到这一点?

干杯。

4

2 回答 2

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它似乎将图像坐标 (0, 0) 转换为相应的地理坐标,GTIFImageToPCS而不是直接查看某个标签。

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

于 2011-11-16T17:45:15.730 回答
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);
于 2020-02-11T22:20:44.740 回答