Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >cesium使用tif切片的几种方法

cesium使用tif切片的几种方法

原创
作者头像
治电小白菜
发布于 2024-12-27 03:16:35
发布于 2024-12-27 03:16:35
8630
举报
文章被收录于专栏:技术综合技术综合

最近在学习cesium的使用,所以调研了几种使用的方法

方法汇总

  1. 对tif进行切片,通过静态服务器(nginx)提供服务
  2. 直接对整张tif进行解析渲染
  3. 使用geoserver基于tif提供wms服务

方法一:对tif进行切片,通过静态服务器(nginx)提供服务

1. GDAL工具介绍

GDAL是一个用于栅格和矢量地理空间数据格式的转换库。我们主要使用其中的一个工具gdal2tiles,这是一个生成包含TMS瓦片、KML文件和简单网页查看器的目录的工具。

2. GDAL工具安装

进入网址根据不同系统查看

这里以macos为例,直接使用brew安装

代码语言:bash
AI代码解释
复制
brew install gdal

3. 进行切片

例如有一个hf.tif,我们使用gdal2tiles对他进行切片

代码语言:bash
AI代码解释
复制
gdal2tiles --zoom=0-10 --xyz  hf.tif output
  • --zoom=0-10 设置放大层级为0-10
  • --xyz 生成XYZ瓦片(OSM滑动地图标准)而不是TMS。在默认模式(TMS)下,y=0的瓦片是最南端的瓦片,而在XYZ模式下(OGC WMTS也使用该模式),y=0的瓦片是最北端的瓦片。
  • output 生成的切片文件存放到output文件夹

4. 提供服务

生成后的切片,通过nginx提供服务就行了

代码语言:txt
AI代码解释
复制
server {
    listen 8889;
    server_name  localhost;
    location /map {
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT';
        add_header 'Access-Control-Allow-Headers' '*';
        alias html/tiles;
        if ($request_method = 'OPTIONS') {
            return 200;
        }
    }
}

5. cesium中使用

代码语言:js
AI代码解释
复制
const tmsLayer = viewer.scene.imageryLayers.addImageryProvider(
    new Cesium.UrlTemplateImageryProvider({
        url: 'http://localhost:8889/map/{z}/{x}/{y}.png',
        credit: layer.name
    })
)

方法二:直接对整张tif进行解析渲染

1. TIFFImageryProvider介绍

用来在Cesium中加载GeoTIFF/COG(Cloud optimized GeoTIFF)的插件。是一个GitHub上的开源插件,前往仓库查看。插件核心基于geotiff.js,从各种不同的(Geo) TIFF 文件类型读取(地理空间)元数据和原始数组数据。

2. 使用方法

具体可以查看插件的文档

安装依赖

代码语言:bash
AI代码解释
复制
#npm
npm install --save tiff-imagery-provider

#yarn
yarn add tiff-imagery-provider

#pnpm
pnpm add tiff-imagery-provider

下面示例是渲染一个tif,并使用单波段伪彩色对其进行上色。如果遇到坐标不兼容问题,可以使用proj4将tif坐标系转换成EPSG:4326

代码语言:js
AI代码解释
复制
const providertif = await TIFFImageryProvider.fromUrl('/hf.tif', {
    renderOptions: {
        single: {
        "colors": [
            [1, "rgb(154, 206, 127)"],
            [2, "rgb(163, 214, 245)"],
            [3, "rgb(255, 251, 177)"],
            [4, "rgb(193, 114, 97)"],
            [5, "rgb(220, 100, 120)"],
            [6, "rgb(49, 173, 105)"]
        ],
        type: "discrete",
        useRealValue: true // use real value in colors stops
        }
    },
    projFunc: (code) => {
        // 坐标系转换事例
        if (code === 32649) {
        proj4.defs("EPSG:32649", "+proj=utm +zone=49 +datum=WGS84 +units=m +no_defs +type=crs");
        return {
            project: proj4("EPSG:4326", "EPSG:32649").forward,
            unproject: proj4("EPSG:4326", "EPSG:32649").inverse
        }
        }
    }
})
// 由于库的类型定义冲突,所以暂时忽略https://github.com/hongfaqiu/TIFFImageryProvider/issues/42
// @ts-ignore
const tifLayer = viewer.scene.imageryLayers.addImageryProvider(providertif)

方法三:使用geoserver基于tif提供wms服务

1. geoserver介绍

GeoServer是一款用来采用Java编写的,允许用户分享与编辑地理空间数据的开源软件。

2. 安装

这里使用podman进行安装(docker同理)

代码语言:shell
AI代码解释
复制
podman run -it -p8080:8080 \
  --mount type=bind,src=~/geoserver,target=/opt/geoserver_data \
  docker.osgeo.org/geoserver:2.25.4

配置路径/opt/geoserver_data映射到~/geoserver,方便后续将tif放入系统中。

镜像启动后访问链接 http://localhost:8080/geoserver

默认用户名/密码:admin / geoserver

3. geoserver跨域问题处理

由于geoserver的服务需要浏览器调用使用,所以需要解决跨域问题

1) 进入镜像终端
代码语言:shell
AI代码解释
复制
podman exec -it 镜像id /bin/bash
2) 安装vim
代码语言:shell
AI代码解释
复制
chmod 777 /tmp && apt-get update && apt install vim -y
3) 编辑tomcat配置文件
代码语言:shell
AI代码解释
复制
vim /usr/local/tomcat/webapps/geoserver/WEB-INF/web.xml

直接到文件中粘贴

代码语言:xml
AI代码解释
复制
<filter>
    <filter-name>cross-origin</filter-name>
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
    <init-param>
    <param-name>chainPreflight</param-name>
    <param-value>false</param-value>
    </init-param>
    <init-param>
    <param-name>allowedOrigins</param-name>
    <param-value>*</param-value>
    </init-param>
    <init-param>
    <param-name>allowedMethods</param-name>
    <param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value>
    </init-param>
    <init-param>
    <param-name>allowedHeaders</param-name>
    <param-value>*</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>cross-origin</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
4) 下载指定jetty版本

a. 访问对应geoserver版本的pom文件,查看jetty版本,我这里是2.25.4

https://github.com/geoserver/geoserver/blob/2.25.4/src/pom.xml

b. 下载指定jetty的jar包

https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-servlets/9.4.55.v20240627

https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-util/9.4.55.v20240627

右键获取链接,到镜像中wget下载即可

image
image
image
image
代码语言:shell
AI代码解释
复制
cd /usr/local/tomcat/webapps/geoserver/WEB-INF/lib
wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-servlets/9.4.55.v20240627/jetty-servlets-9.4.55.v20240627.jar
wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-util/9.4.55.v20240627/jetty-util-9.4.55.v20240627.jar
5)重启镜像
代码语言:shell
AI代码解释
复制
podman restart 7f8b0dedd3d3
image
image

4. 使用geoserver基于tif提供wms服务

1)添加新的工作空间

例如起名test,url可以暂时随便写

2)添加新的存储仓库

数据源选择GeoTIFF - Tagged Image File Format with Geographic information

工作空间选择刚刚创建的test,数据源名称填写例如hftest,将hf.tif放置到刚刚镜像映射的目录~/geoserver下,例如我创建了个tif文件夹存放,这样连接参数浏览文件时就可以查看到。

点击保存后,进行发布

进入到编辑图层页面,可以先直接点击保存即可

3)图层预览

可以在图层预览页面看到刚刚发布的图层

可以点击常用格式下的OpenLayers预览图层

4)cesium中使用
代码语言:js
AI代码解释
复制
 const tifLayer = new Cesium.WebMapServiceImageryProvider({        
  url: 'http://localhost:8080/geoserver/test/wms',        // geoserver服务地址
  layers: 'test:hf',                                // 工作区名:图层名
  parameters: {
    service: 'WMS',
    format: 'image/png',
    srs: 'EPSG:4326',
    transparent: true,
  }
})
viewer.imageryLayers.addImageryProvider(tifLayer)

总结

几种方法各有利弊,

  1. 对tif进行切片,通过静态服务器(nginx)提供服务 对tif进行切片需要一定的时间,如果对效率没要求的可以。
  2. 直接对整张tif进行解析渲染 需要页面下载整张tif图,tif一般都几十M或者上百M往上,加载会有延迟,并且解析时会导致浏览器卡顿。
  3. 使用geoserver基于tif提供wms服务 只需要导入发布即可使用服务,但是需要独立部署这套系统,如果需要集成现有系统,需要对接其api实现,有一定学习成本。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
高效访问海量地图数据--用OpenLayers访问GeoServer发布的地图
上一篇文章中,我们介绍了用GeoServer手动发布本地Shapefile地图,那么如何在谷歌地图中展示GeoServer发布好的地图呢? 大伙先来看看本文实现最终结果: 地图放大后: 一、解决Geo
我叫刘半仙
2018/06/11
4.6K0
【Python】GDAL基本操作/遥感大图显示
遥感图像往往尺寸较大,无法用默认的图像浏览器加载。 GDAL是空间数据处理的开源包,支持多种数据格式的读写。 遥感图像是一种带大地坐标的栅格数据,因此,可以借用GDAL对遥感图像进行读写,本文就来记录一些相关操作。
zstar
2023/02/10
2.6K0
GeoWebCache的配置与使用
最近在做一个开源GIS的demo的工作,工作中涉及到了地图瓦片,选取的开发环境是geoserver+openlayers,那么地图瓦片自然而然也就使用geowebcache,geowebcache就相当于是openlayer和geoserver之间的中介,首先,geowebcache会根据你的配置信息,把相应的地图图层切好图,存放在磁盘中,然后在使用openlayer加载地图服务的时候,把地图服务的地址指向geowebcache,geowebcache接收到这些请求后,会根据请求的位置和比例尺在切片目录中找到对应的瓦片,然后返回给你,省去了动态生成地图的过程,速度大幅度提高,而且由于请求的图片资源是事先生成好的,浏览器加载这些图片之后,下一次再去请求同样的图片,就会从浏览器的缓存中拉去,速度进一步提高!
牛老师讲GIS
2018/10/23
3.6K0
GeoWebCache的配置与使用
Cesium笔记(3):基本控件简介—ImageryProvider地图瓦片地图配
cesiumjs中可定制多种图层,可以使用互联网上很多地图提供商的图层数据,也可以使用自己的地图数据。Cesium支持多种标准化格式的GIS瓦片服务,可以把栅格图层绘制到地球的表面——cesiumjs的地图图层本质上是一些瓦片数据,这些图层的亮度、对比度、色相均可以动态调整。
周陆军
2020/06/06
5.3K0
Cesium入门之六:Cesium加载影像图层(ArcGIS、Bing、Mapbox、高德地图、腾讯地图、天地图等各类影像图)
在Cesium中,加载影像图层主要通过ImageryLayer、ImageryProvider和ImageryLayerCollection三个类来实现;首先我们先来认识下这三个类
九仞山
2023/10/14
15.4K0
Cesium入门之六:Cesium加载影像图层(ArcGIS、Bing、Mapbox、高德地图、腾讯地图、天地图等各类影像图)
Cesium基础使用介绍
前言 最近折腾了一下三维地球,本文简单为大家介绍一款开源的三维地球软件——Cesium,以及如何快速上手Cesium。当然三维地球重要的肯定不是数据显示,这只是数据可视化的一小部分,重要的应该是背后的数据生成及处理等。本文先为大家介绍这简单的部分。 一、 Cesium简介 Github地址:https://github.com/AnalyticalGraphicsInc/cesium。官方介绍如下: An open-source JavaScript library for world-class 3D
魏守峰
2018/04/28
7.1K0
Cesium基础使用介绍
Cesium笔记(3):基本控件简介—ImageryProvider地图瓦片地图配
cesiumjs中可定制多种图层,可以使用互联网上很多地图提供商的图层数据,也可以使用自己的地图数据。Cesium支持多种标准化格式的GIS瓦片服务,可以把栅格图层绘制到地球的表面——cesiumjs的地图图层本质上是一些瓦片数据,这些图层的亮度、对比度、色相均可以动态调整。
周陆军博客
2023/05/14
4.5K0
让GIS三维可视化变得简单-Cesium地球初始化
开发中我们通常会需要一个干净的三维地球实例,本文将介绍 Cesium 如何初始化一个地球,包括地图控件的显示隐藏以及一些常用影像和标注的加载
山月
2021/04/07
3.3K0
让GIS三维可视化变得简单-Cesium地球初始化
Cesium中Clock控件及时间序列瓦片动态加载
前言 前面已经写了两篇博客介绍Cesium,一篇整体上简单介绍了Cesium如何上手,还有一篇介绍了如何将Cesium与分布式地理信息处理框架Geotrellis相结合。Cesium的强大之处也在于其可以将时间运用到3维地球上,可以根据此时间进行动画、轨迹记录、地球的光照等等所有与时间相关的可视化效果。本文介绍Cesium中的Clock控件以及如何动态加载时间序列瓦片。 一、 Clock控件 1.1 控件显示和隐藏 这里说的Clock控件包含两部分,Animation控件和Timeline控件,这二者基本是
魏守峰
2018/04/28
4.3K0
Cesium中Clock控件及时间序列瓦片动态加载
Geoserver2.11矢量切片与OL3中的调用展示
GIS的底图一直使用金字塔技术进行切图,使用户能够快速访问指定级别的地图或者影像。但是切图本身是一张图片,无法进行交互。于是又引入了矢量图层用来显示矢量点线面,这通常需要先获取矢量地理数据,然后通过前端将其绘制成不同元素便能通过鼠标进行响应交互了。
牛老师讲GIS
2018/10/23
2K0
Geoserver2.11矢量切片与OL3中的调用展示
Cesium几个案例介绍
前言 本文为大家介绍几个Cesium的Demo,通过这几个Demo能够对如何使用Cesium有进一步的了解,并能充分理解Cesium的强大之处和新功能。其他的无需多言,如果还不太了解什么是Cesium
魏守峰
2018/04/28
13.1K1
Cesium几个案例介绍
通过dem2terrain生成MapboxGL地形服务
MapboxGL在2的版本之后通过地形服务开始支持三维的展示了,之前也有文章“mapboxGL2中Terrain的离线化应用”对该服务进行过说明与分析。前些天在翻公众号的时候翻到了dem2terrain可以生成地形服务,同时做了一些优化,今天就给大家分享一下如何使用dem2terrain生成MapboxGL地形服务。
牛老师讲GIS
2024/12/30
1420
通过dem2terrain生成MapboxGL地形服务
Node实现切片的拼接和地图的导出
本文讲述在node中,使用canvas实现根据出图范围和级别,拼接瓦片并叠加geojson矢量数据,并导出成图片。
牛老师讲GIS
2022/09/21
9320
Node实现切片的拼接和地图的导出
geotrellis使用(三十五)Cesium加载geotrellis TMS瓦片
前言 做任何事情都不是想象中的那么简单。好久没有更新技术博客了,跟最近瞎忙有很大关系,虽说是瞎忙也抽空研究了些技术。 主要是前端渲染,像原生的WebGL和Cesium。WebGL写了几篇博客,自我感觉还可以。Cesium是一个封装好的WEB端3D Earth框架,有了WebGL的基础之后切换到Cesium按理说一切应该是顺理成章,简单的测试了几个功能之后发现确实非常好,简单的几行代码就可以实现Google Earth的功能,当然Google Earth重要的绝对不是他的渲染框架。 前期做了很多Geotrel
魏守峰
2018/05/02
2.4K0
geotrellis使用(三十五)Cesium加载geotrellis TMS瓦片
巧用Arcgis Server的REST接口实现OL2中WMS添加过滤
在实际的应用中,很多时候我们需要对展示的图层进行属性或者空间的过滤,在Geoserver发布的WMS中,可以通过CQL_FILTER来设置过滤条件,但是Arcgis Server发布的WMS不支持CQL_FILTER的过滤,这样就无法实现对展示的图层进行过滤。好在Arcgis Server的REST接口中,EXPORT接口实现了图层的导出功能,并可添加过滤条件,借于此,本文通过扩展OL2图层,结合EXPORT接口,实现Geoserver中CQL_FILTER的功能。
牛老师讲GIS
2018/10/23
8020
巧用Arcgis Server的REST接口实现OL2中WMS添加过滤
地科Python数据分析案例 | 绘制黄土高原局部区域的沟壑覆盖度分析图
黄土高原位于中国中部偏北部,为中国四大高原之一。黄土高原是世界上水土流失最严重和生态环境最脆弱的地区之一,除许多石质山地外,大部分区域为厚层黄土覆盖,经流水长期强烈侵蚀,逐渐形成千沟万壑、地形支离破碎的特殊自然景观。
陈南GISer
2023/11/03
1.1K0
地科Python数据分析案例 | 绘制黄土高原局部区域的沟壑覆盖度分析图
你真的了解SpringMVC吗?
用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller 调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果 找到相应的View视图,渲染数据后最终响应给浏览器
用户11097514
2024/05/30
1130
你真的了解SpringMVC吗?
转换Arcgis Server REST接口实现OL2直接调用
本文讲解如何通过Arcgis Server REST 的导出地图(Export)接口,实现在OL2中直接以WMS的方式调用Arcgis Server REST服务。
牛老师讲GIS
2018/10/23
8190
转换Arcgis Server REST接口实现OL2直接调用
Comput Geosci (2022) | 地球科学人工智能研究评述
有地球人工智能理论和基础设施的突破将把地球科学带入下一个阶段: 地球人工智能。地球科学界必须赶上观测数据集爆炸的步伐,以可承受的成本和足够的准确性迅速建立可用的人工智能模型。地球人工智能的研究和开发仍处于初级阶段,从数据到模型到操作的所有重大挑战都可以在从学术界到政府和工业界的所有部门中获得无数机会。地球人工智能的未来是光明的,对整个人类社会和地球系统极为有益,它应该将我们的文明推进到其下一个史诗般的阶段,并将地球转变成一个更可持续、更健康的星球。
气象学家
2022/03/28
2.2K0
Comput Geosci (2022) | 地球科学人工智能研究评述
推荐阅读
相关推荐
高效访问海量地图数据--用OpenLayers访问GeoServer发布的地图
更多 >
LV.3
治电科技全干工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档