Window Functions

کاربرد Cloud-Optimized GeoTIFF

معرفی 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 برای کشف‌پذیری بهتر داده‌ها

مراجع معتبر

ساختار فنی 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

گام‌ها به‌صورت کلی

  1. تهیه GeoTIFF اولیه
  2. تولید overviews مناسب
  3. اعمال tiling و مرتب‌سازی مکانی
  4. فشرده‌سازی مناسب مانند DEFLATE یا LZW یا ZSTD
  5. اعتبارسنجی و بهینه‌سازی نهایی

نمونه دستورات 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، تجربه کاربری بهتری ایجاد می‌کند و هزینه‌ها را کاهش می‌دهد. با رعایت بهترین شیوه‌ها و استفاده از ابزارهای متن‌باز بالغ، می‌توان مسیر تبدیل، اعتبارسنجی و سروینگ را به‌صورت قابل اعتماد و مقیاس‌پذیر پیاده‌سازی کرد.

منابع تکمیلی