前言

Geotrellis 已经迭代到了 2.0 版本(截止写作此文时为 2.0.0-SNAPSHOT 版),2.0 版多了很多新的特性,其中最重要的应该就是 COG,COG 是什么鬼?刚看到时我也是一脸懵,认认真真的学习了一天,稍有体会,本文对此进行简单介绍。

一、COG 简介

1.1 什么是 COG

COG 是 Cloud Optimized GeoTIFF's 的简称,从这个名字就能大概猜出他的意义——云端优化的 GeoTIFF。GDAL 官方 WIKI 定义如下:

A cloud optimized GeoTIFF is a regular GeoTIFF file, aimed at being hosted on a HTTP file server, whose internal organization is friendly for consumption by clients issuing HTTP GET range request ("bytes: start_offset-end_offset" HTTP header).

It contains at its beginning the metadata of the full resolution imagery, followed by the optional presence of overview metadata, and finally the imagery itself. To make it friendly with streaming and progressive rendering, we recommand starting with the imagery of the smallest overview and finishing with the imagery of the full resolution level.

简单来说 COG 是规则的 GeoTIFF 文件,只是对普通 GeoTIFF 文件加了些概览等元数据信息,使得可以通过 HTTP 进行局部数据的读取,即需要哪部分的数据就下载哪部分数据。

那么这有什么好处呢?

1.2 COG 的好处

COG 的产生是针对云端文件的(cloud),现在有很多云存储供应商,如 S3、Google Cloud Storage、Azure 等等,GeoTIFF 文件存在云端最大的问题是每次对文件进行处理都需要将其全部取回到本地,处理完成后再上传到云端,这会耗费大量下载和上传的时间、占用存储空间,并且云存储多是根据流量收费,多次下载、上传又会增加网络费用支出。

于是 COG 便应运而生,他以云端为工作流的中心而非本地,不需每次处理 GeoTIFF 文件时将整个文件下载下来,只需要下载需要处理的部分,并且尽量实现数据的云端处理。

1.3 创建 COG

最简单的方式是通过 GDAL 创建 COG,GDAL 无需多言,凡是接触过地理信息的应该都知道此框架,执行如下命令:

gdal_translate in.tif out.tif -co TILED=YES -co COPY_SRC_OVERVIEWS=YES -co COMPRESS=DEFLATE

这样就可以将普通 GeoTIFF 文件转为 COG 文件,而后只需要将其发布为 HTTP 服务即可(文件下载服务),但是此 HTTP 服务必须支持 HTTP range queries,当前 Nginx、Apache 等都是支持此特性的,这也是断点续传的实现方式。当然你也可以直接将其上传到 S3 等云存储,会达到相同的效果。

二、COG 在 Geotrellis 中的应用

2.1 Geotrellis 当前工作流的弊端

在 Geotrellis 中要对一个数据进行处理,首先进行 ETL 操作,将数据 ingest 到其支持的后端中(S3、Hadoop、Accumulo、HBASE 等)形成 Layer 的概念,这样其实在后端中存储的是切割好的不同层级的大量小瓦片;然后再根据需求读出相应的瓦片进行处理或者发送到前端。

到了 2.0 版开发人员意识到一个问题,或者说是早就意识到了这个问题,那就是与 COG 建立的初衷相似,无论是 S3 还是 HDFS 其实都对大量小文件的支持不好、性能不高且占用大量的存储空间,严重影响服务性能。

2.2 COG 支持

于是 Geotrellis 开发人员想到将 COG 运用到此框架中。简单来说不再需要 ETL 操作,或者说是另外一种的 ETL 操作——将普通的 GeoTIFF 文件转换为 COG 文件。在转换的过程中也同样生成对应的元数据,这个元数据里描述的是如何找到x、y、z(SpatialKey 等)请求对应的数据,包括文件名称、存储位置、数据范围(HTTP Range)等,这样就可以通过此范围请求到此数据,并可以对此数据进行其他处理。

有了 COG 的支持,对 Geotrellis 来说无疑是如虎添翼,不仅解决了瓦片数据性能及占用大量存储空间的问题,也解决了瓦片切割耗时长的问题,数据处理不再耗用大量时间,当然任何事情都是辩证的,我猜测在数据读取的时候会比原有方式稍慢(未经过实际测试),这个还是要看系统的需求,平衡各方利弊之后设计满足自身需要的合理解决方案,这也正是一个“资深”程序员应当考虑的事情。

三、总结

本文简单介绍了 COG 以及其在 Geotrellis 中的使用,此处仅是理论和概念探讨,会在后续文章中详细介绍如何在 Geotrellis 中使用 COG。

Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html

geotrellis使用(三十七)COG 基础介绍的更多相关文章

  1. 【转载】salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)

    salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)   salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的.salesfo ...

  2. 【Hadoop离线基础总结】Apache Hadoop的三种运行环境介绍及standAlone环境搭建

    Apache Hadoop的三种运行环境介绍及standAlone环境搭建 三种运行环境 standAlone环境 单机版的hadoop运行环境 伪分布式环境 主节点都在一台机器上,从节点分开到其他机 ...

  3. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  4. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  5. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  6. Node.js 基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  7. Gradle 1.12用户指南翻译——第三十七章. OSGi 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  8. 日志学习系列(三)——NLog基础知识

    前边我们解释了log4net的学习,我们再介绍一下NLog 一.什么是NLog NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码.NLog是一个简单 ...

  9. SQL注入之Sqli-labs系列第三十六关(基于宽字符逃逸GET注入)和三十七关(基于宽字节逃逸的POST注入)

    0X1 查看源码 function check_quotes($string) { $string= mysql_real_escape_string($string); return $string ...

随机推荐

  1. susmote个人网站博客论坛(TexTec | 关注互联网技术,传播极客精神)

    网站地址 www.susmote.com www.textec.club 欢迎您的访问

  2. Logback.xml 给变量指定默认值

    随着通用日志组件转入 Slf4j,logback 也变成了默认的日志实现,像 log4j 一样,logback.xml 中也可以使用系统属性或环境变量,如 ${catalina.home}.在 log ...

  3. 【Docker】 Swarm简单介绍

    [Swarm] Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm ...

  4. oracle 11g数据库 DMP还原数据库

    -------------------------- jd :表空间 -------------------------- --本地登陆 cmd下直接执行 sqlplus/as sysdba; --修 ...

  5. 如何在C#项目中使用NHibernate

    现代化大型项目通常使用独立的数据库来存储数据,其中以采用关系型数据库居多.用于开发项目的高级语言(C#.Java等)是面向对象的,而关系型数据库是基于关系的,两者之间的沟通需要一种转换,也就是对象/关 ...

  6. Be Better , Be Better

    Be Better! 这不是一道题,只是我的flag.初三寒假,一个本应该对着计算机翻天覆雨的假期,我在鬼班撸高中课...其实感触是从初中课得来的.有些事,以前我说是我不懂,现在我不说不是我不懂.Ju ...

  7. .NET Core初体验 在window上构建第一个app

    ASP.NET Core 是一个跨平台,高性能的开源框架,用于构建现代化的,基于云的互联网应用程序.使用 ASP.NET Core ,您可以: 构建Web应用程序和服务,IoT应用程序和移动后端. 在 ...

  8. 4c语言的第0次作业

    1.你认为大学的学习生活.同学关系.师生关系应该是怎样? 我认为大学的学习生活应该是充实有意义的,有对学习的激情又有与伙伴相知的愉悦. 我认为同学关系应该是互相尊重,互相学习,坦诚相待. 我认为师生关 ...

  9. 1013团队Beta冲刺day7

    项目进展 李明皇 今天解决的进度 部分数据传递和使用逻辑测试 林翔 今天解决的进度 服务器端查看个人发布的action,修改已发布消息状态的action,仍在尝试使用第三方云存储功能保存图片 孙敏铭 ...

  10. splinter web测试框架

    1.安装谷歌浏览器驱动(windows把驱动解压放在Python.exe同级目录即可) http://chromedriver.storage.googleapis.com/index.html 注意 ...