{"id":10185,"date":"2026-03-11T19:36:52","date_gmt":"2026-03-11T22:36:52","guid":{"rendered":"https:\/\/www.fernandoquadro.com.br\/html\/?p=10185"},"modified":"2026-03-13T17:19:18","modified_gmt":"2026-03-13T20:19:18","slug":"publicando-rasters-com-cog-s3-minio-geoserver","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2026\/03\/11\/publicando-rasters-com-cog-s3-minio-geoserver\/","title":{"rendered":"Publicando rasters com COG + S3\/MinIO + GeoServer"},"content":{"rendered":"<p>\nQuando trabalhamos com <strong>ortomosaicos ou rasters muito grandes<\/strong>, um dos principais desafios \u00e9 como armazenar e publicar esses dados com boa performance, sem sobrecarregar o servidor GIS.\n<\/p>\n<p>\nUma arquitetura moderna que vem sendo cada vez mais utilizada \u00e9 baseada em:\n<\/p>\n<ul>\n<li><a href=\"https:\/\/www.fernandoquadro.com.br\/html\/2026\/03\/13\/o-que-e-cog-e-por-que-ele-esta-mudando-a-forma-de-publicar-rasters\/\" target=\"_blank\">Cloud Optimized GeoTIFF (COG)<\/a><\/li>\n<li>MinIO ou Google Cloud Storage ou Amazon S3 (Object Storage)<\/li>\n<li>GeoServer<\/li>\n<\/ul>\n<p>\nEssa combina\u00e7\u00e3o permite que o <strong>GeoServer leia diretamente rasters armazenados em object storage<\/strong>, sem precisar copi\u00e1-los para o servidor.\n<\/p>\n<p>\nNeste post vou mostrar um <strong>passo a passo simples e pr\u00e1tico<\/strong> para implementar essa arquitetura:\n<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/03\/ChatGPT-Image-11-de-mar.-de-2026-19_22_34.png\" alt=\"\" width=\"1420\" height=\"572\" class=\"aligncenter size-full wp-image-10195\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/03\/ChatGPT-Image-11-de-mar.-de-2026-19_22_34.png 1420w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/03\/ChatGPT-Image-11-de-mar.-de-2026-19_22_34-300x121.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/03\/ChatGPT-Image-11-de-mar.-de-2026-19_22_34-1024x412.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/03\/ChatGPT-Image-11-de-mar.-de-2026-19_22_34-768x309.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/03\/ChatGPT-Image-11-de-mar.-de-2026-19_22_34-600x242.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/03\/ChatGPT-Image-11-de-mar.-de-2026-19_22_34-945x381.png 945w\" sizes=\"auto, (max-width: 1420px) 100vw, 1420px\" \/><\/p>\n<p>\nO ponto principal aqui \u00e9 que o GeoServer n\u00e3o precisa armazenar o raster localmente. Ele apenas acessa o arquivo COG diretamente no storage.\n<\/p>\n<p>\n<strong>Importante<\/strong>: O plugin COG (HTTP ou S3) j\u00e1 deve ter sido instalado no GeoServer.\n<\/p>\n<h2>1. Converter o raster para COG<\/h2>\n<p>\nO primeiro passo \u00e9 converter o raster tradicional para <strong>Cloud Optimized GeoTIFF (COG)<\/strong>. Isso pode ser feito utilizando o GDAL.\n<\/p>\n<pre>\r\ngdal_translate ortomosaico.tif ortomosaico_cog.tif \\\r\n-of COG \\\r\n-co COMPRESS=LZW \\\r\n-co BLOCKSIZE=512 \\\r\n-co BIGTIFF=YES \\\r\n-co OVERVIEWS=IGNORE_EXISTING\r\n<\/pre>\n<h3>Par\u00e2metros importantes<\/h3>\n<table>\n<thead>\n<tr>\n<th>Par\u00e2metro<\/th>\n<th>Fun\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>-of COG<\/td>\n<td>gera um Cloud Optimized GeoTIFF<\/td>\n<\/tr>\n<tr>\n<td>COMPRESS=LZW<\/td>\n<td>compress\u00e3o sem perdas<\/td>\n<\/tr>\n<tr>\n<td>BLOCKSIZE=512<\/td>\n<td>otimiza\u00e7\u00e3o para leitura em blocos<\/td>\n<\/tr>\n<tr>\n<td>BIGTIFF=YES<\/td>\n<td>necess\u00e1rio para arquivos grandes<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>2. Verificar se o COG foi criado corretamente<\/h2>\n<p>\nDepois da convers\u00e3o, \u00e9 importante verificar se o arquivo foi gerado corretamente.\n<\/p>\n<pre>\r\ngdalinfo ortomosaico_cog.tif\r\n<\/pre>\n<p>No resultado deve aparecer algo como:<\/p>\n<pre>\r\nLAYOUT=COG\r\n<\/pre>\n<p>E tamb\u00e9m a presen\u00e7a de <strong>overviews<\/strong>:<\/p>\n<pre>\r\nOverviews: 28676x21832, 14338x10916, ...\r\n<\/pre>\n<p>\nIsso confirma que o arquivo est\u00e1 otimizado para leitura em nuvem.\n<\/p>\n<h2>3. Subir o arquivo para o storage (S3 ou MinIO)<\/h2>\n<p>\nAgora precisamos enviar o arquivo para um <strong>Object Storage<\/strong>.\n<\/p>\n<p>Voc\u00ea pode utilizar:<\/p>\n<ul>\n<li>MinIO (self-hosted)<\/li>\n<li>Amazon S3<\/li>\n<li>Google Cloud Storage<\/li>\n<\/ul>\n<p>\nNo caso do MinIO, \u00e9 comum utilizar o cliente <strong>mc<\/strong>.\n<\/p>\n<h3>Instalar o cliente MinIO (caso voc\u00ea n\u00e3o tenha): <\/h3>\n<pre>\r\nwget https:\/\/dl.min.io\/client\/mc\/release\/linux-amd64\/mc\r\nchmod +x mc\r\nsudo mv mc \/usr\/local\/bin\/\r\n<\/pre>\n<h3>Configurar o acesso ao servidor<\/h3>\n<pre>\r\nmc alias set minio http:\/\/SEU_SERVIDOR:9000 ACCESS_KEY SECRET_KEY\r\n<\/pre>\n<h3>Enviar o raster para um bucket<\/h3>\n<pre>\r\nmc cp ortomosaico_cog.tif minio\/rasters\/\r\n<\/pre>\n<p>\nAp\u00f3s o upload, o arquivo ficar\u00e1 acess\u00edvel em algo como:\n<\/p>\n<pre>\r\nhttp:\/\/servidor:9000\/rasters\/ortomosaico_cog.tif\r\n<\/pre>\n<p><!--p>\n<strong>Importante:<\/strong> o bucket precisa permitir leitura p\u00fablica, ou o GeoServer n\u00e3o conseguir\u00e1 acessar o raster.\n<\/p-->\n<h2>4. Configurar o raster no GeoServer<\/h2>\n<p>\nAgora vamos configurar o raster no GeoServer.\n<\/p>\n<p>Acesse a interface administrativa:<\/p>\n<pre>\r\nhttp:\/\/seu-servidor:8080\/geoserver\r\n<\/pre>\n<h3>Criar um novo Store<\/h3>\n<p>V\u00e1 em:<\/p>\n<pre>\r\nStores \u2192 Add new Store\r\n<\/pre>\n<p>Escolha:<\/p>\n<pre>\r\nGeoTIFF \/ Cloud Optimized GeoTIFF\r\n<\/pre>\n<h3>Informar a URL do COG<\/h3>\n<p>No campo de URL informe o caminho do arquivo:<\/p>\n<pre>\r\nhttp:\/\/servidor:9000\/rasters\/ortomosaico_cog.tif\r\n<\/pre>\n<p>Salve o store.<\/p>\n<h2>5. Publicar a Layer<\/h2>\n<p>\nAp\u00f3s salvar o store, o GeoServer detectar\u00e1 automaticamente o raster.\n<\/p>\n<p>Basta clicar em:<\/p>\n<pre>\r\nPublish\r\n<\/pre>\n<p>Configure:<\/p>\n<ul>\n<li>Bounding Box<\/li>\n<li>CRS<\/li>\n<li>Nome da layer<\/li>\n<\/ul>\n<p>Depois salve.<\/p>\n<h2>6. Testar o servi\u00e7o<\/h2>\n<p>\nAgora o raster j\u00e1 pode ser acessado via:\n<\/p>\n<ul>\n<li>WMS<\/li>\n<li>WCS<\/li>\n<li>WMTS<\/li>\n<\/ul>\n<p>Exemplo de endpoint WMS:<\/p>\n<pre>\r\nhttp:\/\/servidor:8080\/geoserver\/wms\r\n<\/pre>\n<p>\nOu diretamente pelo <strong>Layer Preview<\/strong> do GeoServer.\n<\/p>\n<h2>7. Por que essa arquitetura \u00e9 interessante?<\/h2>\n<h3>Escalabilidade<\/h3>\n<p>\nO storage pode crescer independentemente do GeoServer.\n<\/p>\n<h3>Performance<\/h3>\n<p>\nO COG permite leitura parcial do raster utilizando <strong>HTTP Range Requests<\/strong>.<br \/>\nOu seja, o cliente solicita apenas a parte da imagem que precisa.\n<\/p>\n<h3>Integra\u00e7\u00e3o com cloud<\/h3>\n<p>\nA mesma arquitetura funciona com diversos servi\u00e7os de object storage.\n<\/p>\n<ul>\n<li>Amazon S3<\/li>\n<li>MinIO<\/li>\n<li>Google Cloud Storage<\/li>\n<\/ul>\n<h2>8. Conclus\u00e3o<\/h2>\n<p>\nA combina\u00e7\u00e3o de <strong>COG + Object Storage + GeoServer<\/strong> \u00e9 hoje uma das formas mais eficientes de publicar rasters grandes em ambientes WebGIS. Essa abordagem permite:\n<\/p>\n<ul>\n<li>separar armazenamento e servi\u00e7o<\/li>\n<li>escalar facilmente<\/li>\n<li>melhorar a performance de acesso aos dados<\/li>\n<\/ul>\n<p><\/p>\n<p>\nE o melhor: tudo pode ser implementado utilizando software open source.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando trabalhamos com ortomosaicos ou rasters muito grandes, um dos principais desafios \u00e9 como armazenar e publicar esses dados com boa performance, sem sobrecarregar o servidor GIS. Uma arquitetura moderna que vem sendo cada vez mais utilizada \u00e9 baseada em:&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2026\/03\/11\/publicando-rasters-com-cog-s3-minio-geoserver\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":10198,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[208],"class_list":["post-10185","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-geoserver"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=10185"}],"version-history":[{"count":18,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10185\/revisions"}],"predecessor-version":[{"id":10264,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10185\/revisions\/10264"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/10198"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=10185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=10185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=10185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}