我正在尝试使用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);
...
如果有可能,有人可以指出我在哪里可以找到关于如何编写这些坐标的文档,或者我需要使用哪个键/函数吗?
干杯。
答案 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);