引言 由于将geotiff文件转为WRF所需的二进制文件,需要在服务器上编译安装convert_geotiff。 convert_geotiff依赖安装 GeoTIFF和LibTIFF,各种库的安装还是configure、make、make install这三板斧,另外在安装好相关库以后记得设置环境变量。 $ cmake --version cmake version 3.23.0 geotiff 包下载路径: http://download.osgeo.org/geotiff/libgeotiff/ /geotiff/lib" . /convert_geotiff出现如下错误: .
四、总结 以上就是使用Geotrellis实现导出定制的GeoTiff的方法,由于时间紧,可能还有很多没有注意的细节,会在后续中进一步研究,并更新该文或者另设新篇。
前言 在上一篇文章中我讲了如何直接将Geotiff文件发布为TMS服务,在其中只讲了单幅Geotiff的操作,其实单幅这种量级的数据对Geotrellis来说就是杀鸡焉用牛刀,Geotrellis针对的是大数据量的操作 在进行完单幅Geotiff的操作后,就去出差了一周,这一周也没闲着,稍有空隙便在思索这个问题,并抽空写那么两行,回来一调试果然可以,于是就有了本文。 下面我来介绍如何对大量Geotiff实时进行TMS服务化操作。 一、总体效果 上次使用的是北京首都国际机场影像数据,这次我又下载了部分北京市区影像数据,来看一下总体显示效果。 ? 三、总结 本文简单讲述了如何使用Geotrellis将大量Geotiff文件发布为TMS服务,针对大批量的数据才是Geotrellis的核心所在,然而只有也只要掌握了对单一数据的处理将能很快实现大批量的数据
首先pip安装scikit-image包,或者直接使用pycharm安装 scikit-image包含一下相关子模块,这里我们使用io模块实现格式转换,输入的geotiff具有很多个波段。 skimage.io import imagecodecs # to open a tiff file for reading: inputgeotiff_path=r"D:\gt00cls00.tif" #geotiff 运行错误记录:scikit-image ValueError: <COMPRESSION.LZW: 5> requires the 'imagecodecs' package 在使用scikit-image包对geotiff tiff转mat)提示以下问题: ValueError: <COMPRESSION.LZW: 5> requires the 'imagecodecs' package 开始以为这个问题是由于输入图像是geotiff
前言 在上两篇文章中我介绍了如何直接将Geotiff(一个或者多个)发布为TMS服务。这中间其实我遇到了一个问题,并且这个问题伴随Geotrellis的几乎所有使用案例,下面我详细讲述。
本文介绍如何基于Geotrellis直接将Geotiff发布为TMS服务。 一、效果预览 闲话不多说,先来看一下效果。 2.1 读取Geotiff文件 使用Spark读取Geotiff文件,并将其转成RDD。 filePath表示tiff文件的存放位置,最好是将tiff文件存储于HDFS中,第二行便得到了需要的rdd,其类型为RDD[(ProjectedExtent, MultibandTile)],其实此处已经完成了Geotiff 三、总结 本文简单讲述了如何使用Geotrellis直接将Geotiff发布为TMS服务,操作较为繁琐,对Geotrellis的综合性知识要求较高。
•使用mix_2_GeoTiff.py[3]将MIX清单转换为GeoTiff格式。•使用meic_2_GeoTiff.py[4]将MEIC清单转换为GeoTiff格式。 •upper_raster_dir:上层GeoTiff所在目录路径。 •bottom_raster_dir:下层GeoTiff所在目录路径。 •output_dir:输出GeoTiff目录路径。 •upper_label:上层GeoTiff标签。 •bottom_label:下层GeoTiff标签。 •output_label:输出GeoTiff标签。 •upper_year:上层GeoTiff的年份。 •bottom_year:下层GeoTiff的年份。 •output_year:定义输出GeoTiff的年份。 /PREP/mix_2_GeoTiff.py [4] meic_2_GeoTiff.py: ../PREP/meic_2_GeoTiff.py [5] calculate-pmc.py: ..
其实 writeCOGLayer 方法已经帮我们实现了这一步,只需要传入一个 GeoTiff 的 merge 方法即可。 merge 的类型为 (GeoTiff[V], GeoTiff[V]) => GeoTiff[V],V 为 Tile 或者 MultibandTile 类型,其实就是如何将两个 GeoTiff 合并成一个 GeoTiff。 这就很简单了,只需要写一个此方法即可,如下: def merge(v1: GeoTiff[V], v2: GeoTiff[V]) = { val tile: V = v2.tile merge 如下: def merge(v1: GeoTiff[V], v2: GeoTiff[V]) = { val tile: V = v2.tile merge v1.tile val extent
/PREP/meic_2_GeoTiff.py即可。 •geotiff_dir:GeoTIFF文件所在目录路径。•inventory_label:原始清单文件名中的{LABEL}。•inventory_year:原始清单文件名中的{YYYY}。 •sectors:分配部门,部门为GeoTIFF文件名中所提到的{SECTOR}。 修改namelist.input中的geotiff_dir为新的GeoTIFF目录,重新运行第四步和第五步即可。 /Create-CMAQ-Emission-File.py [3] MEIC转GEOTIFF工具: ../PREP/meic_2_GeoTiff.py [4] allocator: ..
一、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 简单来说 COG 是规则的 GeoTIFF 文件,只是对普通 GeoTIFF 文件加了些概览等元数据信息,使得可以通过 HTTP 进行局部数据的读取,即需要哪部分的数据就下载哪部分数据。 于是 COG 便应运而生,他以云端为工作流的中心而非本地,不需每次处理 GeoTIFF 文件时将整个文件下载下来,只需要下载需要处理的部分,并且尽量实现数据的云端处理。 简单来说不再需要 ETL 操作,或者说是另外一种的 ETL 操作——将普通的 GeoTIFF 文件转换为 COG 文件。
当我们将一个Byte有符号类型的Getiff数据使用Geotrellis(版本0.10.1)自带的Etl类导入Accumulo中的时候,如果参数中的path(输入路径)为文件夹,其中包含多个geotiff 文件的话,导入的过程会丢掉NODATA值,并且即使强制指定cellType为int8,切片的过程重采样-128也会参与运算,而其他Geotiff类型不存在该问题。 三、解决方案 所以上一篇中有关数据导入的解决方案就变成了以下两点: 如果需导入的Geotiff为单个文件,不存在该问题,所以可以考虑将多个文件合成单个文件。 四、总结 此BUG有了上述解决方案,但是并没有完全搞清楚造成此BUG的原因,这几天分析调试了无数次,没有发现问题,初步考虑是在Geotiff生成rdd的过程中数据出现了问题,最近几天比较忙
一、直接操作本地Geotiff 如果不想将tiff数据切割成瓦片存放到集群中,也可以直接使用Geotrellis操作本地geotiff文件,可以直接使用SinglebandGeoTiff读取单波段的 val geotiff = SinglebandGeoTiff("data/test.tif") 然后使用geotiff.tile就可以像处理普通瓦片那样处理整幅tiff图像。 二、Geotiff数据处理需要注意的细节 如果需要将geotiff数据切割并上传到集群首先需要处理的是geotiff的数据类型、无数据值等元数据信息,即前期处理数据的时候需要将tiff文件处理到合适的情况以方便在程序中使用
HDF和NetCDF栅格数据集特点 HDF和NetCDF数据都可能包含数据子集(一个文件中包含多个子文件),我们需要找出需要的子集数据,然后就可以像普通的GeoTIFF影像那样进行读写和操作了. GDAL读取实例 下面的例子读取MODIS地标反射率(Surface Reflectance)数据中的第一波段,然后转为GeoTIFF进行存储. 最后我们使用CreateCopy()方法将该子数据集存储为GeoTIFF格式的数据。 所以,总结一下,我们读取HDF或者NetCDF数据子集的时候,最主要的是取出想要处理的子数据集的完整路径。 然后就像读取普通GeoTIFF影像那样对子数据集进行读取就OK了. from osgeo import gdal root_ds = gdal.Open('example.hdf') # 返回结果是一个 ) # 取出第12个数据子集(MODIS反射率产品的第一个波段) arr_bnd1 = band_1.ReadAsArray() # 将数据集中的数据转为ndarray # 创建输出数据集,转为GeoTIFF
在这个教程中,我们将学习如何使用three.js渲染土耳其最高的Ağrı山脉的数字高程模型(DEM)数据,使用的工具包括Three.js、geotiff、webpack和QGIS。 this.scene.add(this.light); } 用DEM数据生成山的模型 我们要渲染的几何形状不是使用Blender、Maya等软件建模的,相反,我们将使用DEM数据直接用js生成一个3D模型,借助于"geotiff "库: import * as GeoTIFF from "geotiff"; setupTerrainModel() { const readGeoTif = async () => { ... }; readGeoTif(); } 首先读取图像文件: const rawTiff = await GeoTIFF.fromUrl(terrain , image.height, image.width - 1, image.height - 1 ); 在setupTerrainModel函数实现中,将剪裁的图像添加到项目后,我们使用geotiff
转换为WPS格式 使用openwfm的小程序 convert_geotiff , 下载地址为:https://github.com/openwfm/convert_geotiff 编译时需要先用yum安装 configure CPPLAGS=/usr/include/libgeotiff --prefix=/yourinstallpath make && make install 安装后需要将编译出的convert_geotiff convert_geotiff -w 4 -t 1500 -u "meters MSL" -d "3s topography" -b 0 -m -32768 ouput.tif 最后将topo_3s
导入栅格数据 您可以使用资产管理器或 命令行界面 (CLI)以 GeoTIFF 或 TFRecord 格式上传图像或其他地理配准栅格数据集。 上传图片资源 地理信息论坛 在代码编辑器中,您可以将最大 10 GB 的GeoTIFF图像文件上传到您的 Earth Engine 用户文件夹。(对于较大的文件,请使用命令行上传选项。) 要使用代码编辑器上传 GeoTIFF,请选择左上角的资产选项卡,单击按钮,然后选择图像上传。Earth Engine 会显示一个与图 1 类似的上传对话框。 单击SELECT按钮并导航到本地文件系统上的 GeoTIFF。 在您的用户文件夹中为图像提供适当的资产 ID(尚不存在)。
3.10.0-1160.25.1.el7.x86_64 (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) 其中需要在linux上安装convert_geotiff ,具体安装过程可见安装convert_geotiff步骤详解。 转为geogrid二进制格式 cd DEM/Yunnan/ convert_geotiff -w 4 -t 1500 -u "meters MSL" -d "3s topography" -b 0 -m 1500表示输出单个瓦片文件的长度和宽度,-u "meters MSL"表示单位,-d "3s topography"数据描述,-b 0生成的单个瓦片文件的halo大小,-m -32768表示缺测值,即geotiff
前言 上一篇中简单介绍了 COG 的概念和 Geotrellis 中引入 COG 的原因及简单的原理,本文为大家介绍如何在 Geotrellis 中使用 COG 来写入和读取 GeoTIFF数据。 minZoom.getOrElse(0), maxTileSize ) val layers: Map[ZoomRange, RDD[(K, GeoTiff foldLeft(List[(ZoomRange, RDD[(K, GeoTiff[V])])]()) { case (acc, range) => if(acc.isEmpty) layers 是 Map[ZoomRange, RDD[(K, GeoTiff[V])]] 对象,ZoomRange 即为上述元数据中的每层的 zoom 最大和最小值,RDD[(K, GeoTiff[V
更方便的是如果这个科学实验与气象、水文、温度等地理信息稍微沾点边的,完全也可以用 nc 进行存储, GeoTiff 顶多能多存几个波段(此处波段可以认为是气象、水文等不同信号),而 nc 可以存储不同波段的长时间观测结果 所以看到这里,各位应该已经明白了,可以直接使用 GDAL 处理 nc 数据,比如直接使用 gdalwarp 将某个 SUBDATASET 转成 GeoTiff 等等,此处暂且不表,各位只需要查阅一下 gdalwarp 其实任何数据都是相通的,我们可以采用此种方式处理完后转为 GeoTiff 等,当然我们也可以直接采用 GeoTiff 的处理流程来进行处理。 当然第一种方式就是使用 netCDF4 处理完之后,使用此框架写入 GeoTiff,但是这样不太优雅,而且使用了两个框架,明显过于麻烦,我们直接使用此框架从读数据开始处理。 这样我们就可以继续将此数据使用 numpy 等框架进行处理,处理完之后更重要的是要写入 GeoTiff 中(直白的说就是添加空间信息)。
一、原始数据处理 geotrellis支持geotiff的栅格数据(矢量数据还未研究),可以将geotiff直接缓存至hadoop框架下的Accumulo NOSQL数据库,并建立金字塔等,具体处理过程在 3 def serviceRoute = get { 4 pathPrefix("gt") { 5 pathPrefix("tms")(tms) ~ 6 path("geoTiff ")(geoTiff) 7 } ~ 8 pathEndOrSingleSlash { 9 getFromFile(staticPath + "/index.html") 10 当只请求IP及相应端口时会请求index.html,请求gt/tms时交给tms控制器,gt/geotiff交给geotiff控制器,其他会去匹配静态地址,如图片、 js、css等。