プロバイダーから受け取ったカスタムTIFF画像でgdal2tilesを使用してタイルを生成する方法


10

私たちが持っている高解像度画像のタイルを生成するのに少し苦労しています。現在の画像は非常に大きい(+ 20GB)画像で、GeoTiffファイルとして保存されています。大きなGTiff画像

TMS画像プロバイダーを使用してタイルを提供し、gdal2tilesコマンドラインユーティリティを使用してタイルを生成し、Cesiumで開いて表示します。gdalinfoを使用して、画像の詳細の一部を次に示します。

Driver: GTiff/GeoTIFF
Files: image.tif
Size is 52250, 56119
Coordinate System is:
PROJCS["WGS 84 / UTM zone 35S",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",27],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",10000000],
    UNIT["meters",1],
    AUTHORITY["EPSG","32735"]]
Origin = (606276.000000000000000,7197873.000000000000000)
Pixel Size = (0.500000000000000,-0.500000000000000)
Metadata:
  AREA_OR_POINT=Area
  TIFFTAG_MAXSAMPLEVALUE=13165
  TIFFTAG_MINSAMPLEVALUE=1
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_SOFTWARE=ERDAS IMAGINE
  TIFFTAG_XRESOLUTION=1
  TIFFTAG_YRESOLUTION=1
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (  606276.000, 7197873.000) ( 28d 3'21.59"E, 25d19'55.12"S)
Lower Left  (  606276.000, 7169813.500) ( 28d 3'29.55"E, 25d35' 7.17"S)
Upper Right (  632401.000, 7197873.000) ( 28d18'55.92"E, 25d19'47.60"S)
Lower Right (  632401.000, 7169813.500) ( 28d19' 5.85"E, 25d34'59.57"S)
Center      (  619338.500, 7183843.250) ( 28d11'13.23"E, 25d27'27.58"S)
Band 1 Block=512x512 Type=UInt16, ColorInterp=Gray
Band 2 Block=512x512 Type=UInt16, ColorInterp=Undefined
Band 3 Block=512x512 Type=UInt16, ColorInterp=Undefined
Band 4 Block=512x512 Type=UInt16, ColorInterp=Undefined

私の最初の試みは、gdal_translateを使用して画像を地理参照し、次にgdalwarpを使用して投影をEPSG:3857に変更しました。

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 606275 7197875 28.055987 -25.331974 -gcp 606275 7169814 28.058200 -25.585326 -gcp 632400.5 7197875 28.31553 -25.329876 -gcp 632400.5 7169814 28.318286 -25.583209 image.tif newImage1.vrt
gdalwarp -of VRT -t_srs EPSG:3857 newImage1.vrt newImage2.vrt

ただし、次のエラーの多くが発生します。

エラー1:緯度または経度が制限を超えています

私が試したもう1つの方法は、gdal2tilesを直接使用して、タイルを生成することでした。

gdal2tiles.py image.tif

これにより、タイルが作成された唯一のズームレベルである1つのサブフォルダー(ラベル18)を持つフォルダーが作成されました。ただし、ここで取得した画像は完全に「間違った」「ぼやけた」ものです。

タイルの例:

ここに画像の説明を入力してください

セシウムに読み込んで表示できるように、gdal2tilesを使用して特定の領域のこの画像の大きな画像のタイルを生成するための提案はありますか?

更新

したがって、@ iantの提案を試した後、次のコマンドを使用しました。

gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -co BIGTIFF=YES -t_srs EPSG:3857 image.tif newImage.tif

このコマンドは、次のエラーが発生する最後まで完全に正常に機能しました。

エラー1:TIFFFillTile:行43520、列47104で読み取りエラー。35788250バイトを取得、37421449が必要

このエラーが何を意味するのかわからないので、私はしばらくそれを残しましたが、gdalwarpステップによって生成された最終的なイメージ「newImage.tif」をまだ取得しました。これを使用して、gdal2tiles.pyを呼び出しました

gdal2tiles.py newImage.tif

これにより、サブフォルダーが10〜18のフォルダーが作成されました(以前に取得したズームレベル18だけではありません)。また、コンソールエラーなしでCesiumに完全に正常に読み込まれますが、画像はまだ「正しくない」ように見えます。

セシウムに読み込まれた画像

@ user30184が「...ソースデータはgdal2tilesに適さない」と示唆しているように、私の問題が原因である可能性があると考えています。ただし、プロバイダーがgdalで使用できるものを提供できるようになるまでは、これですべてです。

おそらく、gdalが最後のバンドをアルファチャネルとして解釈しないように、バンドの1つを削除することを検討していました。助言がありますか?


なぜ画像を地理参照するのですか?すでにすべてのCRS情報が含まれています。
AndreJ 2016年

回答:


7

私はあなたがする必要があるすべてはそれを使ってそれを再投影することだと思います:

gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -t_srs EPSG:3857 newImage.tif image.tif

そしてそれを並べます:

gdal2tiles.py newImage.tif

ファイルが非常に大きい場合は、しばらく時間がかかります。


-zパラメータを使用してズームレベルを制御できますが、すでに試しましたか?また、画像には4つのバンドがあり、特に16ビットデータを扱うため、予期しない結果が生じる可能性があることに注意してください。最初にいくつかの前処理が必要な場合があります
user30184

@iantからの返信ありがとうございます。私はこれを試して何が起こるか見てみます。回答の中で、選択したオプションの意味をもう少し説明できますか?ドキュメントによると、-coオプションは「作成オプションを出力形式ドライバーに渡します」。実際にtiffファイルにプロパティを追加していますか?
努力

@ user30184まだ試していません。ズームレベルをどのようにすればよいですか。または、必要に応じて指定できますか?このオプションを省略することで、選択した領域に基づいてスクリプトにズームレベルを決定させると思いました。
努力

@ user30184あなたはまた、4バンドの画像と16ビットのデータで予期しない結果が得られる可能性があると述べました。なぜ正確に?gdalタイル処理に適した形式ではありませんか?もしそうなら、画像はプロバイダーから直接取得されました、正しいフォーマットでファイルを取得するためのステップは何ですか?つまり、GDAL tiffファイルですか?(もし私がそのようなことを言えるなら)
努力

あなたが@iantを提案したように、gdalwarpの実行中に次の問題が発生しました。>>>>>>>>>>>> ERROR 1:TIFFFillTile:Read error at row 43520、col 47104; 35788250バイトを取得しました。予想される37421449エラー1:TIFFReadEncodedTile()が失敗しました。エラー1:pleiades_merge05m_2015-06-19.tif、バンド1:Xオフセット86、Yオフセット109でIReadBlockが失敗しましたエラー1:GetBlockRefがXブロックオフセット86、Yブロックオフセット109で失敗しました>>>>>>>>>>> >これを修正するための提案はありますか?
努力

2

あなたのイメージは、エアバスDSによる4バンド製品の一部だと思います。

http://www.intelligence-airbusds.com/en/4951-which-spectral-mode-do-i-choose

Gdal2tilesは、一般的な視覚画像をpngタイルに分割するために作成されました。このような画像は、バンドごとに8ビットを使用し、1つのバンド(グレースケール)、4つのバンド(reg-green-blue + alpha)の3つのバンド(red-green-blue)を持っています。

ソースデータはgdal2tilesに適していないため、質問は大部分は無関係です。現在の差し迫った問題を回避することはできますが、データを再処理しないと、最終結果はまだ良くありません。

質問に添付した見栄えの悪いタイルの理由は、4番目のデータバンドがアルファチャネルとして解釈されるためです。


@ user30184に感謝します。私はいくつかのリソースを読んでいて、同じような考えに至りました。私たちのプロバイダーに「GDAL互換」のtiffファイルを提供するよう依頼するのが最善だと思いますが、彼らが戻ってくるまで、これですべてです。おそらく、gdalが最後のバンドをアルファチャネルとして解釈しないように、バンドの1つを削除することを検討していました。助言がありますか?
努力

画像から小さなサブセットを切り取るにはgdal_translateを使用gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tifします(nodata領域を回避するために大きなオフセット)。この小さな画像をQGISで開くと、表示設定をすばやく再生できるはずです。アルファチャネルについての私の推測はおそらく間違っています。それ以外の場合、結果は灰色ではなくカラフルに見えるはずです。
user30184

@ user30184に感謝します。私はあなたが提案したとおりにし、QGISで正常に開きました。次のリンクを参照してください。drive.google.com / openid = 0B97NtaPJrVz-anRYQmxjZFludk0問題を「デバッグ」するにはどうすればよいですか?QGISを使用してgdalwarpとgdal2tilesを実行しますか?
努力
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.