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.
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 ô:
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":
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?