Cách sử dụng gdal2tiles trên hình ảnh tiff tùy chỉnh nhận được từ các nhà cung cấp để tạo gạch


10

Tôi đã phải vật lộn một chút để tạo ra các ô cho hình ảnh có độ phân giải cao mà chúng ta có. Hình ảnh hiện tại chúng tôi có là một hình ảnh rất lớn (+ 20GB), được lưu dưới dạng tệp GeoTiff.Hình ảnh GTiff lớn

Tôi muốn tạo các ô bằng cách sử dụng tiện ích dòng lệnh gdal2tiles, sau đó mở và xem nó trong Caesium, sử dụng nhà cung cấp hình ảnh TMS để cung cấp các ô. Sử dụng gdalinfo, đây là một số chi tiết của hình ảnh:

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

Nỗ lực đầu tiên của tôi là sử dụng gdal_translate để định vị hình ảnh, sau đó sử dụng gdalwarp để thay đổi phép chiếu thành EPSG: 3857, theo yêu cầu của Caesium (xem tham chiếu API)

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

Tuy nhiên, tôi nhận được nhiều lỗi sau:

LRI 1: vĩ độ hoặc kinh độ vượt quá giới hạn

Một phương pháp khác tôi đã thử là sử dụng trực tiếp gdal2tiles và tạo các ô:

gdal2tiles.py image.tif

Điều này tạo ra một thư mục với một thư mục con (được dán nhãn 18) là mức thu phóng duy nhất mà tại đó các ô được tạo. Tuy nhiên, những hình ảnh mà tôi nhận được ở đây là hoàn toàn "sai" và "mờ".

Một ví dụ về một trong những ô:

nhập mô tả hình ảnh ở đây

Bất kỳ đề xuất nào để tạo gạch cho hình ảnh này hình ảnh lớn của một khu vực cụ thể bằng gdal2tiles để tôi có thể tải và xem nó trong Caesium?

Cập nhật

Vì vậy, sau khi thử đề xuất của @ iant, tôi đã sử dụng các lệnh sau:

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

Lệnh này hoạt động hoàn toàn tốt cho đến cuối cùng khi tôi gặp lỗi sau:

LRI 1: TIFFFillTile: Đọc lỗi ở hàng 43520, col 47104; nhận được 35788250 byte, dự kiến ​​37421449

Không chắc lỗi này có nghĩa gì, tôi đã để nó ở hiện tại và vẫn có một hình ảnh cuối cùng "newImage.tif", được tạo bởi bước gdalwarp. Sử dụng cái này tôi gọi là gdal2tiles.py

gdal2tiles.py newImage.tif

Điều này tạo ra một thư mục có các thư mục con 10-18 (và không chỉ một mức thu phóng 18 như tôi đã nhận được trước đó). Nó cũng đọc hoàn toàn tốt vào Caesium, không có bất kỳ lỗi giao diện điều khiển nào, nhưng hình ảnh vẫn trông "sai":

Hình ảnh được tải vào Caesium

Tôi đang xem xét vấn đề của mình có thể là do @ user30184 đã đề xuất "... dữ liệu nguồn không phù hợp với gdal2tiles." Tuy nhiên cho đến khi nhà cung cấp của chúng tôi có thể cung cấp cho chúng tôi một cái gì đó để sử dụng với gdal, đây là tất cả những gì tôi có.

Tôi đã xem xét có lẽ loại bỏ một trong các băng tần để tránh gdal xen vào băng tần cuối cùng dưới dạng kênh alpha. Bất kỳ đề xuất?


Tại sao bạn muốn georeference hình ảnh? Nó đã có tất cả thông tin CRS bên trong.
AndreJ

Câu trả lời:


7

Tôi nghĩ rằng tất cả những gì bạn cần làm là từ chối nó bằng cách sử dụng:

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

và sau đó xếp nó:

gdal2tiles.py newImage.tif

Nếu tập tin của bạn rất lớn, nó sẽ mất một lúc.


Bạn có thể kiểm soát mức thu phóng với tham số -z, bạn đã thử chưa? Và lưu ý rằng hình ảnh của bạn có 4 băng tần có thể dẫn đến kết quả không mong muốn đặc biệt là vì bạn xử lý dữ liệu 16 bit. Một số tiền xử lý có thể cần thiết trước tiên
dùng49584

Cảm ơn bạn đã phản hồi của bạn @iant. Tôi sẽ thử điều này và xem những gì sẽ xảy ra. Có lẽ bạn có thể giải thích thêm một chút trong câu trả lời của bạn về các tùy chọn bạn đã chọn có nghĩa là gì? Theo tài liệu, tùy chọn -co "chuyển tùy chọn tạo cho trình điều khiển định dạng đầu ra". Vì vậy, bạn có hiệu lực thêm nhiều thuộc tính vào tập tin tiff?
nỗ lực

@ user30184 Tôi chưa thử mà chưa có. Làm thế nào để tôi biết mức độ phóng to nên là gì? Hoặc tôi có thể chỉ định chúng như tôi muốn? Tôi nghĩ rằng bằng cách bỏ tùy chọn này ra, tôi sẽ để kịch bản xác định mức thu phóng dựa trên khu vực được chọn.
nỗ lực

@ user30184 bạn cũng đã đề cập rằng tôi có thể nhận được kết quả không mong muốn với hình ảnh 4 dải và dữ liệu 16 bit. Tại sao chính xác? Nó không phải là định dạng chính xác để xử lý gạch gdal? Nếu vậy, hình ảnh được lấy trực tiếp từ nhà cung cấp, các bước để có được tệp ở định dạng chính xác là gì? Cụ thể là một tập tin tAL GDAL? (Nếu tôi có thể nói điều gì đó như thế)
nỗ lực vào

Tôi gặp các vấn đề sau khi chạy gdalwarp như bạn đề xuất @iant: >>>>>>>>>>>> LRI 1: TIFFFillTile: Đọc lỗi ở hàng 43520, col 47104; đã nhận được 35788250 byte, dự kiến ​​37421449 LRI 1: TIFFReadEncodingTile () không thành công. LRI 1: pleiades_merge05m_2015-06-19.tif, băng 1: IReadBlock không thành công ở X offset 86, Y offset 109 ERROR 1: GetBlockRef thất bại ở khối X bù 86, khối Y bù 109 >>>>>>>>>>> > Bất kỳ đề xuất để khắc phục điều này?
nỗ lực

2

Tôi cho rằng hình ảnh của bạn là một số sản phẩm 4 băng tần của Airbus DS:

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

Gdal2tiles được tạo để chia các hình ảnh phổ biến, trực quan thành các khối png. Những hình ảnh như vậy sử dụng 8 bit trên mỗi băng tần và chúng có một băng tần (thang độ xám), 3 dải (đỏ-lục-lam) gồm 4 dải (reg-green-blue + alpha).

Tôi muốn nói rằng câu hỏi của bạn ở mức độ lớn không liên quan vì dữ liệu nguồn của bạn không phù hợp với gdal2tiles. Bạn có thể khắc phục các vấn đề tức thời mà bạn gặp phải ngay bây giờ nhưng kết quả cuối cùng vẫn sẽ không tốt nếu bạn không xử lý lại dữ liệu của mình.

Lý do gạch không đẹp mắt mà bạn đính kèm với câu hỏi của bạn có thể là do dải dữ liệu thứ tư được hiểu là kênh alpha.


Cảm ơn bạn @ user30184, tôi đã đọc một số tài nguyên và có một suy nghĩ tương tự. Tôi nghĩ rằng tốt nhất là yêu cầu các nhà cung cấp của chúng tôi cung cấp cho chúng tôi các tệp tiff "tương thích GDAL", nhưng cho đến khi họ quay lại với chúng tôi, đây là tất cả những gì chúng tôi có. Tôi đã xem xét có lẽ loại bỏ một trong các băng tần để tránh gdal xen vào băng tần cuối cùng dưới dạng kênh alpha. Bất kỳ đề xuất?
nỗ lực

Sử dụng gdal_translate để cắt một tập hợp con nhỏ từ hình ảnh gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tifsẽ làm điều đó (bù đắp lớn để tránh các khu vực gật đầu). Mở hình ảnh nhỏ này bằng QGIS và bạn sẽ có thể chơi với các cài đặt xem nhanh. Tôi đoán về kênh alpha có lẽ sai, nếu không thì kết quả sẽ trông sặc sỡ, không phải màu xám.
dùng49584

Cảm ơn @ user30184, tôi đã làm như bạn đề xuất và mở thành công trong QGIS. Xem liên kết này: drive.google.com/open?id=0B97NtaPJrVz-anRYQmxjZFludk0 Làm thế nào bây giờ tôi có thể "gỡ lỗi" vấn đề của mình? Sử dụng QGIS để làm gdalwarp và gdal2tiles?
nỗ lực
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.