高程值的二维数组生成tiff栅格文件格式

把一个含有高程值的二维数组保存为tiff栅格文件格式

在C#中,将含有高程值的二维数组(假设这些数组是从某种VCT格式或其他格式中获取的Grid数据)保存为带有坐标参考系统的TIFF栅格文件格式,你可以使用GDAL库。不过,需要注意的是,VCT本身并不是GDAL直接支持的一种格式,但我们可以假设你已经有了从VCT或其他格式中提取的高程数据和相应的坐标信息。

以下是一个简化的步骤和示例代码,说明如何使用GDAL在C#中将高程值的二维数组保存为带有坐标参考系统的TIFF文件:

安装GDAL.NET:首先,确保你的C#项目中已经安装了GDAL.NET NuGet包。
准备高程数据和坐标信息:你需要有一个二维数组来存储高程值,以及关于这些高程值如何映射到地理空间的信息(如坐标参考系统和地理变换)。
创建TIFF文件:使用GDAL的Driver来创建一个新的TIFF文件,并设置其坐标参考系统和地理变换。
写入高程数据:将高程数据写入TIFF文件的第一个波段。
保存并关闭文件。
以下是一个示例代码:

using OSGeo.GDAL;  
using OSGeo.OSR;  
using System;  class Program  
{  static void Main(string[] args)  {  // 假设你有一个二维数组,代表高程值  float[,] heightData = new float[100, 100];  // ... 填充heightData数组 ...  // 坐标参考系统(CRS),这里以WGS 84为例  SpatialReference srs = new SpatialReference(null);  srs.ImportFromEPSG(4326); // WGS 84  // 创建TIFF文件  Driver driver = Gdal.GetDriverByName("GTiff");  string filename = "elevation.tif";  Dataset dataset = driver.CreateCopy(filename, null, 0, null, 100, 100, 1, DataType.GDT_Float32, null);  // 设置坐标参考系统  dataset.SetProjection(srs.ExportToWkt());  // 设置地理变换信息  // 假设每个像素代表1度(这只是一个示例,实际值应根据你的数据确定)  // 并且图像的左上角是(0, 90)(北极附近的某个点,注意Y坐标是向下的)  double[] adfGeoTransform = new double[6];  adfGeoTransform[0] = 0;    // 左上角x  adfGeoTransform[1] = 1;    // x像素大小  adfGeoTransform[2] = 0;    // x旋转(通常为0)  adfGeoTransform[3] = 90;   // 左上角y(注意:TIFF中的Y坐标是向下的)  adfGeoTransform[4] = 0;    // y旋转(通常为0)  adfGeoTransform[5] = -1;   // y像素大小(负值因为y坐标向下增加)  dataset.SetGeoTransform(adfGeoTransform);  // 写入高程数据到第一个波段  Band band = dataset.GetRasterBand(1);  band.WriteRaster(0, 0, 100, 100, heightData, 100, 100, 0, 0);  // 刷新并关闭Dataset  dataset.FlushCache();  dataset.Dispose();  Console.WriteLine("TIFF文件已保存,包含坐标参考系统。");  }  
}

注意:

上面的代码示例中,坐标变换信息(adfGeoTransform)和坐标参考系统(CRS)都是简化的。你需要根据你的实际数据来设置这些值。特别是,adfGeoTransform中的像素大小和偏移量应该反映你的高程数据的实际地理覆盖范围。
坐标参考系统(CRS)在这里被设置为WGS 84(EPSG:4326),但你应该使用与你的数据相匹配的CRS。
TIFF文件中的Y坐标是向下的,因此当你设置左上角Y坐标时,你需要注意这一点。
确保在不再需要Dataset对象时调用Dispose()方法来释放资源。

本blog地址:https://blog.csdn.net/hsg77

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【webpack开发环境下的配置】

webpack的五大核心 entry入口output输出loader: 处理非js文件(相当于翻译webpack本身只能理解js)Plugins: 用于其他功能(压缩,优化等)mode: 模式 主要有开发模式和生产环境 实践 下载包 npm i webpack …

华为以客户为中心的战略

2005年,伴随着国际化步伐的加快,华为重新梳理了自己的愿景、使命和发展战略,提出了以客户为中心的战略定位: 为客户服务是华为存在的唯一理由;客户需求是华为发展的原动力。质量好、服务好、运作成本低,优…

mac安装win10到外接固态硬盘

1、制作win10系统 1.1 下载 winToUSB,打开后选择第一个 1.2 选择本地下载镜像, 我用的分区方案是适用于UEFI的GPT模式 1.3 点右下角执行,等待执行完成即可 2、mac系统下载win驱动 2.1 comman空格 搜索启动转换助理,打开后选择…

前端框架入门之Vue _el和data的两种写法 分析MVVM模型

目录 _el与data的两种写法 MVVM模型 _el与data的两种写法 查看vue的实例对象 我们在这边注释掉了el属性 这样的话div容器就绑定不了vue实例 当我们可以在这里写一个定时任务 然后再回头指定 这个mount有挂载的意思 就是把容器对象交给vue实例后 去给他挂载指定的对象 &…

Web前端-Web开发HTML基础2-list

一. 基础 1. 写一个列表标签,生成一个有三条记录的无序列表; 2. 写一个列表标签,生成一个有四条记录的无序列表; 3. 写一个列表标签,生成一个有五条记录的无序列表; 4. 写一个列表标签,生成一个…

深入解析HTTPS与HTTP

在当今数字化时代,网络安全已成为社会各界关注的焦点。随着互联网技术的飞速发展,个人和企业的数据安全问题日益凸显。在此背景下,HTTPS作为一种更加安全的通信协议,逐渐取代了传统的HTTP协议,成为保护网络安全的重要屏…

【概率论三】参数估计

文章目录 一. 点估计1. 矩估计法2. 极大似然法1. 似然函数2. 极大似然估计 3. 评价估计量的标准2.1. 无偏性2.2. 有效性2.3. 一致性 三. 区间估计1. 区间估计的概念2. 正态总体参数的区间估计 参数估计讲什么 由样本来确定未知参数参数估计分为点估计与区间估计 一. 点估计 所…

十四、(正点原子)Linux MISC驱动

misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动。 一…

IDEA启动Web项目总是提示端口占用

文章目录 IDEA启动Web项目总是提示端口占用一、前言1.场景2.环境 二、正文1.场景一:真端口占用2. 场景二:假端口占用 IDEA启动Web项目总是提示端口占用 一、前言 1.场景 IDEA启动Web项目总是提示端口占用: 确实是端口被占用,比如:没有正常…

clion中建立c文件工程,读取或创建sqlite3数据库文件

1.首先前往SQLite官网下载sqlite3所需文件 SQLite Download Page 2.解压文件,将其中的sqlite3.c和sqlite3.h拷贝到你对应的文件工程中 3.修改CMakeLists.txt文件,添加编译选项及连接文件 4.运行代码及查询数据库文件

【NLP自然语言处理】基于BERT实现文本情感分类

Bert概述 BERT(Bidirectional Encoder Representations from Transformers)是一种深度学习模型,用于自然语言处理(NLP)任务。BERT的核心是由一种强大的神经网络架构——Transformer驱动的。这种架构包含了一种称为自注…

【Mamba】Mamba的部署

ubuntu系统安装11.6版本的cuda 可以参考这两篇博客 ubuntu22.04多版本安装cuda及快速切换(cuda11.1和11.8)_ubuntu调整cuda版本 【Linux】在一台机器上同时安装多个版本的CUDA(切换CUDA版本)_linux安装多个cuda 安装CUDA https…

js原生ajax请求

以下是使用 JavaScript 原生的 XMLHttpRequest 对象进行 ajax 请求的示例代码: function ajaxRequest(method, url, data, callback) {var xhr new XMLHttpRequest();xhr.open(method, url, true);if (method POST) {xhr.setRequestHeader(Content-Type, applica…

安全与认证:在Symfony中实现用户登录和权限管理

安全与认证:在Symfony中实现用户登录和权限管理 目录 简介Symfony 安全组件概述用户登录实现 配置安全系统创建用户实体配置用户提供者创建登录表单 权限管理实现 角色与权限配置控制器中的权限检查安全注解的使用 示例项目 项目结构示例代码 总结 1. 简介 在现…

【React打卡学习第一天】

React入门 一、简介二、基本使用1.引入相关js库2.babel.js的作用 二、创建虚拟DOM三、JSX(JavaScript XML)1.本质2.作用3.基本语法规则定义虚拟DOM时,不要写引号。标签中混入JS表达式时要用{}。样式的类名指定不要用class,要用className.内联…

掌握未来:深度解析Xcode Cloud服务的高效使用

掌握未来:深度解析Xcode Cloud服务的高效使用 随着软件开发的不断进步,开发者们越来越需要一个能够提升效率、降低成本的工具。苹果公司推出的Xcode Cloud服务正是为了满足这一需求。本文将详细解析如何使用Xcode Cloud服务,并通过实际代码示…

大语言模型系列:Transformer

在自然语言处理(NLP)领域,Transformer模型自2017年由Vaswani等人在论文《Attention Is All You Need》中提出以来,已成为最具影响力的技术之一。这种模型设计的核心是自注意力机制,它允许模型在处理序列数据时&#xf…

solidity基础语法(以太坊solidity合约)

solidity基础语法(以太坊solidity合约) 1-值类型和取值范围2-引用类型3-引用类型高阶4-固定数组和动态数组 1-值类型和取值范围 https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency https://learnblockchain…

Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库

什么是 Prisma? Prisma 是一个开源的下一代 ORM。它包含了以下部分: Prisma Client: 自动生成、类型安全的查询构建器,用于 Node.js 和 TypeScriptPrisma Migrate: 数据迁移系统Prisma Studio: 查询和编辑数据库中数据的图形化界面 Prisma 客户端可以…

JAVA23种设计模式简介

设计模式 设计模式的类型 创建型模式 隐藏了创建对象的过程,通过逻辑方法进行创建对象,而不是通过new关键字创建对象。 工厂方法模式 定义接口或一个抽象的工厂类,让它实现类(工厂)来决定创建哪一个实例对象。根据每…