کاربرد Cloud-Optimized GeoTIFF
سیستم اطلاعات جغرافیایی, سامانه اطلاعات جغرافیایی,سامانه اطلاعات مکانی, نرم افزار, ژئوپرتال, ,GIS, WebGIS, Web-GIS,Software, GIS-Software, Geoportal, Mobile-GIS, GeoTIFF, GDAL,Raster, HTTP Range Requests, Caching, CDN, COG, Cloud-Optimized GeoTIFF
Cloud-Optimized GeoTIFF یا COG یک قالب پرونده رستری است که با حفظ سازگاری کامل با استاندارد GeoTIFF، برای تحویل تحت وب بهینهسازی شده است. ایده اصلی COG تکیه بر «ساختار کاشیبندی داخلی» و «مرتبسازی مکانی» دادهها بههمراه ایجاد «سطوح خلاصهسازی یا overview» است تا کلاینتها بتوانند فقط بخشهای لازم تصویر را با استفاده از HTTP Range Request دانلود کنند. این کار باعث کاهش چشمگیر زمان بارگذاری، هزینه انتقال داده و بار روی سرور در سناریوهای WebGIS و ژئوپرتال میشود.
COG چیست و چرا شکل گرفت
COG پاسخی به نیاز ارائه رسترهای حجیم بر بستر وب و کلود است. در روشهای سنتی، سرویسدهنده یا کاربر باید کل فایل GeoTIFF یا بخش بزرگی از آن را دریافت کند تا بتواند یک محدوده کوچک را نمایش دهد. COG با:
- ذخیره بلوکهای تصویر به صورت tile-aligned
- قرار دادن overviews در انتهای فایل
- و مرتبسازی مکانی (internal tiling + spatial ordering)
امکان میدهد مرورگر یا کلاینت نقشه فقط «بخش موردنیاز» را از روی HTTP/HTTPS دریافت کند.
پذیرش و اکوسیستم
- پشتیبانی در GDAL
- ابزارهای اعتبارسنجی مانند cogeo-validator
- سرویسهای عمومی داده نظیر AWS Public Datasets و Microsoft Planetary Computer که بهطور گسترده COG منتشر میکنند
- سازگاری با ایندکسهای کاتالوگی مانند STAC برای کشفپذیری بهتر دادهها
مراجع معتبر
- GDAL:
https://gdal.org - مشخصات COG :
https://www.cogeo.org - Validator و ابزارها:
https://github.com/cogeotiff/cogeo-validator - STAC:
https://stacspec.org - Planetary Computer:
https://planetarycomputer.microsoft.com - AWS Open Data:
https://registry.opendata.aws
ساختار فنی COG به زبان ساده
- GeoTIFF استاندارد با tiling داخلی
- استفاده از overviews برای مقیاسهای کوچکتر
- قرار گرفتن IFD ها و overviews بهگونهای که خواندن «نزدیک به ترتیبی» امکانپذیر شود
- سازگاری کامل به عقب با خوانندههای GeoTIFF
- عدم نیاز به فرمت اختصاصی یا سرور اختصاصی
ویژگیهای کلیدی برای WebGIS
- بارگذاری تدریجی و سریع در زومهای پایین با overviews
- خواندن بخشی از فایل با HTTP Range Request
- قابلیت میزبانی استاتیک روی Object Storage و پشت CDN
COG در برابر GeoTIFF سنتی
- هر COG یک GeoTIFF معتبر است، اما هر GeoTIFF لزوماً COG نیست
- COG بهصورت داخلی tiled و دارای overviews مرتب است
- دسترسی تصادفی کمهزینه برای نماهای کوچک و زومهای پایین
- مناسب برای تحویل روی وب و محیطهای کلود بدون نیاز به سرویسهای سنگین
مزایا برای GIS و WebGIS
- کاهش زمان TTFB و LCP در نقشههای تحت وب
- هزینه کمتر انتقال داده بهواسطه دانلود بخشی از فایل
- مقیاسپذیری با میزبانی استاتیک و CDN
- سادگی استقرار نسبت به سرورهای رستری سنتی
سناریوهای کاربردی
- ژئوپرتالهای سازمانی با رسترهای حجیم
- نمایش سریع پیشنمایش دادهها در کاتالوگها
- پردازش تحلیلی سمت کلاینت یا سرور با دانلود گزینشی بلوکها
- بسترهای Data Lake برای دادههای سنجشازدور
گردش کار تولید COG
گامها بهصورت کلی
- تهیه GeoTIFF اولیه
- تولید overviews مناسب
- اعمال tiling و مرتبسازی مکانی
- فشردهسازی مناسب مانند DEFLATE یا LZW یا ZSTD
- اعتبارسنجی و بهینهسازی نهایی
نمونه دستورات GDAL (نمونهوار)
# تولید COG از GeoTIFF ورودی با GDAL
gdal_translate input.tif output.tif \
-co TILED=YES \
-co COPY_SRC_OVERVIEWS=YES \
-co COMPRESS=DEFLATE
# اگر overviews موجود نیست، میتوان با gdaladdo افزود
gdaladdo -r average output.tif 2 4 8 16
# بهینهسازی نهایی با gdal_translate برای COG
gdal_translate output.tif output_cog.tif \
-co TILED=YES -co COMPRESS=DEFLATE -co BIGTIFF=YES
اعتبارسنجی
pip install cogeo-validator
cogeo-validate output_cog.tif
توجه
- پارامترهای دقیق فشردهسازی و سطوح overview باید با توجه به نوع داده و SLA بارگذاری انتخاب شوند
الگوهای استقرار و سروینگ COG
الگوی ۱ استقرار استاتیک
- ذخیره COG در Object Storage مانند S3
- فعالسازی CDN برای کش
- دسترسی مستقیم کلاینتها با Range Request
الگوی ۲ سروینگ پویا
- استفاده از Tile Server هایی مانند TiTiler یا MapServer یا GeoServer
- تولید کاشیهای وب بهصورت on-the-fly از روی COG
- اعمال کنترل سبکها و reprojection هنگام پاسخدهی
تحویل در مرورگر و کلاینتهای WebGIS
- بارگذاری کاشیها بهصورت XYZ یا WMTS
- ترکیب با لایههای برداری و استایلهای پویا
HTTP و Caching برای COG
COG برای پاسخدهی مؤثر به Range Request نیاز دارد که سرور یا Object Storage از هدر Range پشتیبانی کند و پاسخ 206 Partial Content برگرداند.
نمونه درخواستها
GET /data/output_cog.tif HTTP/1.1
Host: example-cdn.com
Range: bytes=0-16383
Accept: image/tiff
Cache-Control: max-age=86400
نمونه با curl
curl -H "Range: bytes=0-16383" \
-H "Accept: image/tiff" \
-H "Cache-Control: max-age=86400" \
https://example-cdn.com/data/output_cog.tif -o part.bin
نکات پیادهسازی در لایه CDN/Storage
- اطمینان از پشتیبانی Range Request
- تنظیم Cache-Control مناسب برای overviews که بیشتر مصرف میشوند
- استفاده از ETag یا Last-Modified برای اعتبارسنجی کش
شبهکد سروینگ کاشی از COG
function getTile(z, x, y):
# ورودی z x y برای الگوی XYZ
bbox = tileToBBox(z, x, y)
# محاسبه بلوکهای موردنیاز در COG
ranges = computeByteRangesForBBox("output_cog.tif", bbox)
# ادغام رنجها برای به حداقل رساندن درخواستها
merged = mergeRanges(ranges)
# دانلود بخشی از فایل با Range Request
data = []
for r in merged:
chunk = httpRangeGet(URL, r.start, r.end)
data.append(chunk)
# بازسازی کاشی از بلوکها
tileRaster = decodeBlocks(data)
# بازنمائی به WebMercator در صورت نیاز
tileRaster = reprojectIfNeeded(tileRaster, EPSG_3857)
# خروجی به PNG/JPEG
return encodeToPNG(tileRaster)
توجه
- پیادهسازی واقعی توصیه میکند از کتابخانههای موجود مانند GDAL یا Rasterio و سرویسدهندههای آماده نظیر TiTiler استفاده شود
بهترین شیوهها
- انتخاب فشردهسازی متناسب با داده Continuous یا Categorical
- ایجاد overviews تا سطح زوم موردنیاز UX
- نگهداری متادیتا منطبق با STAC برای کشفپذیری
- اعتبارسنجی دورهای و پایش کارایی با اندازهگیری TTFB و tile latency
خطاهای رایج
- تولید نکردن overviews کافی
- انتخاب اندازه بلوک نامناسب که باعث افزایش تعداد Range Request میشود
- میزبانی روی سرویسی که از Range پشتیبانی نمیکند
پیوند با اکوسیستم WebGIS
- یکپارچهسازی با OpenLayers و MapLibre GL بهعنوان TileLayer
- استفاده در ژئوپرتالها برای پیشنمایش سریع
- همنشینی با کاشیهای برداری برای UI واکنشپذیر
نتیجهگیری
COG راهکاری استاندارد و عملی برای تحویل رستر در WebGIS و ژئوپرتالها است که با تکیه بر قابلیتهای HTTP و CDN، تجربه کاربری بهتری ایجاد میکند و هزینهها را کاهش میدهد. با رعایت بهترین شیوهها و استفاده از ابزارهای متنباز بالغ، میتوان مسیر تبدیل، اعتبارسنجی و سروینگ را بهصورت قابل اعتماد و مقیاسپذیر پیادهسازی کرد.
منابع تکمیلی
- OGC WMTS 1.0.0
- RFC 7233 HTTP Range Requests
- TiTiler
- GeoServer Coverage/COG راهنما
- MapLibre GL JS
- OpenLayers Raster و TileLayer