当前位置: 首页 > news >正文

【GIS教程】使用GDAL-Python将tif转为COG并在ArcGIS Js前端加载-附完整代码

目录

一、数据格式

二、COG特点

三、使用GDAL生成COG格式的数据

四、使用ArcGIS Maps SDK for JavaScript加载COG格式数据


一、数据格式

COG(Cloud optimized GeoTIFF)是一种GeoTiff格式的数据。托管在 HTTP 文件服务器上,可以代替geoserver/arcgis server发布栅格数据,比wms/wmts节省服务器空间和内存。

二、COG特点

  • 在GeoTIFF图片中保存除原始像元数据外的瓦片(tile)和概览(overview)

  • 使用HTTP范围请求获取单一文件的所需部分

三、使用GDAL生成COG格式的数据

已有tif格式的栅格数据,使用gdal.Translate函数。代码如下:

参考:gdal_translate接口文档

from osgeo import gdal, gdalconst'''获取相应统计数据'''
def compute_stat(srcDS):outBand = srcDS.GetRasterBand(1)stat = outBand.ComputeStatistics(True)outBand = Nonestat = Nonedel outBanddel stat# 将文件转为cog
file = "./Data/DSM22000108.tif" # 输入数据
out = "./Data/DSM22000108-COG.tif" #输出数据
cal_area = gdal.Open(file) # 读取# ---------------------
#----写法1:添加多个参数设定COG格式----
options = gdal.TranslateOptions(format="COG",creationOptions=["COMPRESS=DEFLATE","TILING_SCHEME=GoogleMapsCompatible","QUALITY=100","BLOCKSIZE=256","BIGTIFF=YES","NUM_THREADS=ALL_CPUS"],outputType=gdalconst.GDT_Int32
)
# 转换为COG格式数据
desImg = gdal.Translate(out, cal_area, options=options, overwrite=True)#----写法2:使用默认参数----
desImg = gdal.Translate(out, cal_area, format="COG")# ---------------------#计算COG的栅格值,生成xml
n_desImg = gdal.Open(out)
compute_stat(n_desImg)print("out img---------------")
print(n_desImg)n_desImg = None

得到的结果为:

四、使用ArcGIS Maps SDK for JavaScript加载COG格式数据

ArcGIS JS 提供接口ImageryTileLayer可以直接加载。

 【官网示例代码】ImageryTileLayer with COG

我们将GDAL计算得到的COG数据以静态文件形式封装成服务url进行访问。

核心代码:

const url = `http://127.0.0.1:8000/DemData/LocalData/ele-COG.tif`; //封装成自己的文件服务view.graphics.removeAll();
const eleImageLayer = new ImageryTileLayer({ //使用ImageryTileLayer加载COGurl: url, // 文件的url,可访问opacity: 1.0 //透明度
});
map.add(eleImageLayer);//添加到地图

完整代码:可直接使用。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no"><title>ArcGIS JS - Elevation Data</title><link rel="stylesheet" href="https://js.arcgis.com/4.22/esri/themes/light/main.css"><script src="https://js.arcgis.com/4.22/"></script><style>html, body, #viewDiv {padding: 0;margin: 0;height: 100%;width: 100%;}</style>
</head>
<body><div id="viewDiv"><button id="loadElevationData">Load Elevation Data</button><div id="responseMessage"></div></div><script>require(["esri/Map","esri/views/MapView","esri/layers/ImageryTileLayer","dojo/domReady!"], function(Map, MapView, ImageryTileLayer) {// Create a mapconst map = new Map({basemap: "topo-vector"});// Create a view for the mapconst view = new MapView({container: "viewDiv",map: map,center: [0, 0],zoom: 2});// Function to zoom to the layerfunction zoomToLayer(layer) {view.whenLayerView(layer).then(function(layerView) {view.goTo(layerView.fullExtent);});}// Button click event to fetch elevation data and add it to the mapdocument.getElementById('loadElevationData').addEventListener('click', function() {const url = `http://127.0.0.1:8000/DemData/LocalData/ele-COG.tif`; document.getElementById('responseMessage').textContent = "Elevation data loaded successfully." + '/n'+url;view.graphics.removeAll();const eleImageLayer = new ImageryTileLayer({url: url,opacity: 1.0});map.add(eleImageLayer);zoomToLayer(eleImageLayer);});});</script>
</body>
</html>

效果如下:

 

相关文章:

【GIS教程】使用GDAL-Python将tif转为COG并在ArcGIS Js前端加载-附完整代码

目录 一、数据格式 二、COG特点 三、使用GDAL生成COG格式的数据 四、使用ArcGIS Maps SDK for JavaScript加载COG格式数据 一、数据格式 COG&#xff08;Cloud optimized GeoTIFF&#xff09;是一种GeoTiff格式的数据。托管在 HTTP 文件服务器上&#xff0c;可以代替geose…...

VB.net进行CAD二次开发(二)与cad交互

开发过程遇到了一个问题&#xff1a;自制窗口与控件与CAD的交互。 启动类&#xff0c;调用非模式窗口 Imports Autodesk.AutoCAD.Runtime Public Class Class1 //CAD启动界面 <CommandMethod("US")> Public Sub UiStart() Dim myfrom As Form1 New…...

【NLP 11、Adam优化器】

祝你先于春天&#xff0c; 翻过此间铮铮山峦 —— 24.12.8 一、Adam优化器的基本概念 定义 Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种基于梯度的优化算法&#xff0c;用于更新神经网络等机器学习模型中的参数。它结合了动量法&#xff08;Momentum&…...

51单片机应用开发(进阶)---串口接收字符命令

实现目标 1、巩固UART知识&#xff1b; 2、掌握串口接收字符数据&#xff1b; 3、具体实现目标&#xff1a;&#xff08;1&#xff09;上位机串口助手发送多字符命令&#xff0c;单片机接收命令作相应的处理&#xff08;如&#xff1a;openled1 即打开LED1;closeled1 即关…...

redis 怎么样删除list

在 Redis 中&#xff0c;可以使用以下方法删除列表或列表中的元素&#xff1a; 1. 删除整个列表 使用 DEL 命令删除一个列表键&#xff1a; DEL mylist这个命令会删除键 mylist 及其值&#xff08;无论 mylist 是一个列表还是其他类型的键&#xff09;。 2. 删除列表中的部分…...

【数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现快速排序算法。 测试说明 平台会对你编写的代码进行测试&#xff1a; 测试输入示例&#xff1a; 10 6 8 7 9 0 1 3 2 4 5 (说明&#xff1a;第一行是元素个数&a…...

npm或yarn包配置地址源

三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装&#xff1a;yarn install 注意…...

STUN服务器用于内网NAT的方案

在内网中部署 STUN 服务器的场景通常用于处理多层 NAT 或内网客户端之间的通信需求&#xff0c;尤其是在大企业或学校等复杂网络环境下。通过 STUN 服务器&#xff0c;可以帮助客户端设备检测和适配 NAT 转换规则&#xff0c;进而支持 WebRTC 或其他实时通信技术的正常运行。 …...

Linux 简单命令总结

1. 简单命令 1.1. ls 列出该目录下的所有子目录与文件&#xff0c;后面还可以跟上一些选项 常用选项&#xff1a; ・-a 列出目录下的所有文件&#xff0c;包括以。开头的隐含文件。 ・-d 将目录象文件一样显示&#xff0c;而不是显示其下的文件。如&#xff1a;ls -d 指定目…...

Vue.js组件开发:提升你的前端工程能力

Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它允许开发者通过组件化的方式创建可复用且易于管理的代码。在 Vue.js 中开发组件是一个直观且高效的过程&#xff0c;下面我将概述如何创建和使用 Vue 组件&#xff0c;并提供一些最佳实践。 1. 创建基本组件 首先&am…...

使用 Pandas 读取 JSON 数据的五种常见结构解析

文章目录 引言JSON 数据的五种常见结构1. split 结构2. records 结构3. index 结构4. columns 结构5. values 结构 引言 在日常生活中&#xff0c;我们经常与各种数据打交道&#xff0c;无论是从网上购物的订单信息到社交媒体上的动态更新。JSON&#xff08;JavaScript Object…...

C++鼠标轨迹算法(鼠标轨迹模拟真人移动)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

Go mysql驱动源码分析

文章目录 前言注册驱动连接器创建连接交互协议读写数据读数据写数据 mysqlConncontext超时控制 查询发送查询请求读取查询响应 Exec发送exec请求读取响应 预编译客户端预编译服务端预编译生成prepareStmt执行查询操作执行Exec操作 事务读取响应query响应exec响应 总结 前言 go…...

GNSS误差源及差分定位

GNSS误差源&#xff1a; &#xff08;一&#xff09;卫星星历误差 由星历信息所得出的卫星位置坐标与实际位置坐标的偏差就是星历误差。星历信息是由 GPS 地面部分测量计算后传入空间部分的。由于卫星在运动中要受到各种摄动力的作用, 而地面部分又很难精确测量这些作用力,…...

pg数据类型

1、数值类型&#xff1a; smallint 2 字节 小范围整数 -32768 到 32767 integer 4 字节 常用的整数 -2147483648 到 2147483647 bigint 8 字节 大范围整数 -9223372036854775808 到 9223372036854775807 decimal 可变长 用户指定的精度&#x…...

【java】finalize方法

目录 1. 说明2. 调用过程3. 注意事项 1. 说明 1.finalize方法是Java中Object类的一个方法。2.finalize方法用于在对象被垃圾回收之前执行一些清理工作。3.当JVM&#xff08;Java虚拟机&#xff09;确定一个对象不再被引用、即将被回收时&#xff0c;会调用该对象的finalize方法…...

HNU_多传感器(专选)_作业4(构建单层感知器实现分类)

1. (论述题)&#xff08;共1题&#xff0c;100分&#xff09; 假设平面坐标系上有四个点&#xff0c;要求构建单层感知器实现分类。 (3,3),(4,3) 两个点的标签为1&#xff1b; (1,1),(0,2) 两个点的标签为-1。 思路&#xff1a;要分类的数据是2维数据&#xff0c;需要2个输入…...

以太网链路详情

文章目录 1、交换机1、常见的概念1、冲突域2、广播域3、以太网卡1、以太网卡帧 4、mac地址1、mac地址表示2、mac地址分类3、mac地址转换为二进制 2、交换机的工作原理1、mac地址表2、交换机三种数据帧处理行为3、为什么会泛洪4、转发5、丢弃 3、mac表怎么获得4、同网段数据通信…...

vue3 setup语法,子组件点击一个元素打印了这个元素的下标id,怎么传递给父组件,让父组件去使用

问&#xff1a; vue3 setup语法&#xff0c;子组件点击一个元素打印了这个元素的下标id&#xff0c;怎么传递给父组件&#xff0c;让父组件去使用 回答&#xff1a; 在 Vue 3 中&#xff0c;你可以使用 setup 语法糖和组合式 API 来实现子组件向父组件传递数据。具体来说&am…...

《Keras3 minist 手写数字AI模型训练22秒精度达到:0.97》

《Keras3 minist 手写数字AI模型训练22秒精度达到&#xff1a;0.97》 一、修改源码加上如下两条代码二、源码修改如下三、Keras3 minist 训练22秒结束&#xff0c;训练过程截图四、Keras3 minist 源码截图 一、修改源码加上如下两条代码 import os os.environ["KERAS_BAC…...

量子计算连续门集:原理、实现与优化

1. 量子计算中的连续门集&#xff1a;概念与挑战在量子计算领域&#xff0c;门集(gate set)是实现量子算法的基本构建模块。传统量子计算通常依赖于离散的通用门集&#xff0c;如单量子比特门和CNOT门的组合。然而&#xff0c;这种离散门集在实现某些量子算法时存在明显局限——…...

如何用MIKE IO快速上手水文数据分析:Python数据处理终极指南

如何用MIKE IO快速上手水文数据分析&#xff1a;Python数据处理终极指南 【免费下载链接】mikeio Read, write and manipulate dfs0, dfs1, dfs2, dfs3, dfsu and mesh files. 项目地址: https://gitcode.com/gh_mirrors/mi/mikeio MIKE IO是一个功能强大的Python开源库…...

告别91卫图!用QGIS Python脚本批量下载Google/Bing卫星图,附完整代码

开源GIS实战&#xff1a;Python脚本自动化下载Google/Bing卫星影像全攻略 当你在深夜赶制城市规划方案时&#xff0c;突然发现91卫图下载的影像分辨率不足&#xff1b;当科研项目需要批量获取区域卫星数据时&#xff0c;商业软件高昂的授权费用让你望而却步——这可能是每个GIS…...

AutoHotkey v2脚本实现CapsLock长按触发AI编程助手,提升Cursor编辑器效率

1. 项目概述&#xff1a;当CapsLock键成为你的AI编程副驾 作为一名在Windows平台上折腾了十几年效率工具的老码农&#xff0c;我见过太多“快捷键增强”工具&#xff0c;它们要么功能繁杂到记不住&#xff0c;要么侵入性太强干扰正常输入。直到我遇到了“牛马”&#xff08;nm…...

透明背景图片制作方法,一个小程序就能搞定!

最近&#xff0c;我被一个问题烦透了——每次需要制作透明背景图片时&#xff0c;总要在各种工具之间折腾半天。直到我发现了一个神器&#xff0c;才彻底改变了我的工作流程。今天&#xff0c;我就来分享一下我用过的所有透明背景图片制作方法&#xff0c;以及为什么我现在最常…...

3步自动化优化:智能管理Cursor AI开发环境的革命性方案

3步自动化优化&#xff1a;智能管理Cursor AI开发环境的革命性方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tr…...

kkFileView实战:如何优雅地集成到Spring Boot项目并替换默认‘抱歉’图片

kkFileView实战&#xff1a;Spring Boot项目深度集成与定制化改造 在当今企业级应用开发中&#xff0c;文件在线预览功能已成为提升用户体验的关键组件。kkFileView作为一款开源的文件预览解决方案&#xff0c;以其轻量级、高性能和广泛格式支持受到开发者青睐。但对于需要将其…...

2026年三款最值得在线预约小程序,解决您的预约难题

本文围绕在线预约小程序这一核心主题展开&#xff0c;系统梳理了2026年主流平台的特性与差异。内容涵盖微信、支付宝、抖音三大平台的功能对比、适用场景及操作流程解析&#xff0c;并结合实际案例深度剖析技术实现原理。同时提供选型指南与实操建议&#xff0c;帮助用户根据业…...

突破传统命令行限制:PortProxyGUI如何重塑Windows网络配置体验

突破传统命令行限制&#xff1a;PortProxyGUI如何重塑Windows网络配置体验 【免费下载链接】PortProxyGUI A manager of netsh interface portproxy which is to evaluate TCP/IP port redirect on windows. 项目地址: https://gitcode.com/gh_mirrors/po/PortProxyGUI …...

【限时公开】ElevenLabs企业级有声书工作台搭建指南:Webhook自动触发+Notion项目看板+音频质量AI评分模型(含开源评估脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs企业级有声书工作台全景概览 ElevenLabs 企业级有声书工作台&#xff08;Enterprise Audiobook Studio&#xff09;是一套面向出版机构、教育平台与内容工厂的端到端语音生成协同平台&#x…...