2

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

可能であれば、誰かがそれらの座標を書く方法に関するドキュメントをどこで見つけることができるか、またはそれを行うためにどのキー/関数を使用する必要があるかを示すことができますか?

乾杯。

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 に答える