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

GDAL+C#实现矢量多边形转栅格

1. 开发环境测试

参考C#配置GDAL环境,确保GDAL能使用,步骤简述如下:

  1. 创建.NET Framework 4.7.2的控制台应用

注意:
项目路径中不要有中文,否则可能报错:can not find proj.db

  1. 在NuGet中安装GDAL 3.9.1和GDAL.Native 3.9.1
  2. 测试代码(读取一张影像的长、宽、波段数、坐标系)
using OSGeo.GDAL;
using System;namespace TestGDAL
{internal class Program{static void Main(string[] args){Configure();Test();Console.ReadLine();}public static void Configure(){GdalConfiguration.ConfigureGdal();GdalConfiguration.ConfigureOgr();Gdal.AllRegister();}public static void Test(){Dataset ds = Gdal.Open(@"./测试.tif", Access.GA_ReadOnly);int rasterX = ds.RasterXSize;//影像宽度int rasterY = ds.RasterYSize;//影像高度int bandCount = ds.RasterCount;//波段数double[] tmpD = new double[6];ds.GetGeoTransform(tmpD); //影像坐标变换参数//影像坐标系信息(WKT格式字符串)string proj = ds.GetProjection();//用一个消息弹窗把信息显示出来Console.WriteLine($"宽度={rasterX},高度={rasterY},波段数={bandCount}");Console.WriteLine($"坐标系={proj}");}}
}

2. 多边形转栅格(按包围盒区域)

参考:C#调用GDAL实现矢量转栅格

  1. 用ArcMap创建一个shp面数据,用于后续输入。
    基于投影坐标系WGS_1984_UTM_Zone_50N,绘制了三个面,并添加属性字段Code,该字段将作为栅格数据的值。
    在这里插入图片描述
  2. 示例代码
using OSGeo.GDAL;
using OSGeo.OGR;
using System;
using OSGeo.OSR;
using Driver = OSGeo.GDAL.Driver;namespace TestGDAL
{public class Test2{static string shpPath = @"./polygon.shp";public static void Run(){//初始化GDAL和OGRGdalConfiguration.ConfigureGdal();Gdal.AllRegister();Ogr.RegisterAll();// 获取矢量图层DataSource vectorDS = Ogr.Open(shpPath, 0);Layer vectorLayer = vectorDS.GetLayerByIndex(0);//设置栅格化参数,按1000行1000列来栅格化Envelope extent = new Envelope();vectorLayer.GetExtent(extent, 0);double xMin = extent.MinX;double xMax = extent.MaxX;double yMin = extent.MinY;double yMax = extent.MaxY;int xSize = 1000;int ySize = 1000;double xRes = (xMax - xMin) / xSize;double yRes = (yMax - yMin) / ySize;Console.WriteLine("Extent: " + extent.MaxX + " " + extent.MinX + " " + extent.MaxY + " " + extent.MinY);Console.WriteLine("X resolution: " + xRes);Console.WriteLine("Y resolution: " + yRes);// 创建栅格化输出文件var time = DateTime.Now.ToString("yy-MM-dd HH-mm-ss");string rasterFile = $"./output[{time}].tif";Driver rasterDriver = Gdal.GetDriverByName("GTiff");Dataset rasterDS = rasterDriver.Create(rasterFile, xSize, ySize, 1, DataType.GDT_Float32, null);// 设置栅格化文件参考系SpatialReference rasterSRS = vectorLayer.GetSpatialRef();rasterSRS.ExportToWkt(out string wkt, null);rasterDS.SetProjection(wkt);rasterDS.SetGeoTransform(new double[] { xMin, xRes, 0, yMax, 0, -yRes });Console.WriteLine("Projection:\n " + wkt);//设置属性字段为Codestring[] rasterizeOptions = new string[] { "ATTRIBUTE=" + "Code" };//执行栅格化Gdal.RasterizeLayer(rasterDS, 1, new int[] { 1 }, vectorLayer, IntPtr.Zero, IntPtr.Zero, 1, new double[] { 1 }, rasterizeOptions, null, null);//将结果输出并关闭文件rasterDS.FlushCache();rasterDS.Dispose();vectorDS.Dispose();}}
}
  1. 栅格化效果图

在这里插入图片描述
在这里插入图片描述

3. 多边形转栅格(只保留多边形区域内的栅格)

在前面基础上,如果只想保留多边形内的栅格,也就是想要下面的效果:

在这里插入图片描述
基于上面的测试数据,则可以通过调整栅格化参数来实现:

//执行栅格化
rasterDS.GetRasterBand(1).SetNoDataValue(0);//0值表示没有值
Gdal.RasterizeLayer(rasterDS, 1, new int[] { 1 }, vectorLayer, IntPtr.Zero, IntPtr.Zero, 0, new double[] { 0 }, rasterizeOptions, null, null);

相关文章:

GDAL+C#实现矢量多边形转栅格

1. 开发环境测试 参考C#配置GDAL环境,确保GDAL能使用,步骤简述如下: 创建.NET Framework 4.7.2的控制台应用 注意: 项目路径中不要有中文,否则可能报错:can not find proj.db 在NuGet中安装GDAL 3.9.1和G…...

Python 爬虫实战之爬拼多多商品做数据分析

一、项目背景 在电商领域,拼多多作为一家具有广泛影响力的平台,拥有大量的商品信息和用户数据。通过爬取拼多多商品数据并进行分析,可以了解市场趋势、消费者需求以及竞争对手情况,为企业决策和产品优化提供有力支持。 二、技术准…...

爬虫基础

maven pom <dependencies><!--前端jqury--><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.16.1</version></dependency><!--http工具--><dependency><grou…...

HTML3D旋转相册

文章目录 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐...

[linux]快速入门

学习目标 通过学习能够掌握以下的linux操作 操作系统 按照应用领域的不同, 操作系统可以分为几类 桌面操作系统服务器操作系统移动设备操作系统嵌入式操作系统 不同领域的主流操作系统 桌面操作系统 Windows(用户数量最多)MacOS(操作体验好&#xff0c;办公人士首选)Linux…...

域3:安全工程 第6章 密码学与对称密钥算法

---域3主要包括OSG 6、7、8、9、10 章--- 随着信息化时代的推进&#xff0c;网络安全愈发关键。CISSP认证考试中的第6章&#xff0c;专注于密码学与对称密钥算法&#xff0c;这两者是网络安全的核心。 密码学&#xff0c;历经演变&#xff0c;从古代简单的替代密码到现代的复杂…...

MySQL注入load_file常用路径

在MySQL注入攻击中&#xff0c;攻击者可能会尝试利用LOAD_FILE()函数来读取服务器上的敏感文件。LOAD_FILE()函数允许从服务器的文件系统中读取文件&#xff0c;并将其内容作为字符串返回。然而&#xff0c;这个函数需要满足一定的权限条件&#xff0c;并且文件路径必须是服务器…...

ubuntu20.04版本 快速安装 python3.11(宝宝级攻略)

1.前言 深度学习领域中&#xff0c;Python是首选编程语言&#xff0c;因此安装python进行深度学习是必要的&#xff0c;我在安装时踩过了一些坑&#xff0c;就想出一个宝宝级的攻略&#xff0c;希望能够帮助大家。 本宝宝攻略无论是在双系统下还是在虚拟机的环境下均能安装&a…...

DeepSeek AI 推出 Janus 自回归框架,统一视觉、文本理解与生成的创新解决方案

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…...

NORDIC nPM1100 是一款集成式电源管理

nPM1100 是一款集成式电源管理IC(PMIC)&#xff0c;采用2.1x2.1毫米WLCSP或4.0x4.0 毫米 QFN 封装 &#xff0c;内置线性模式锂离子/锂聚合物电池充电器。它采用高效DC/DC降压调节器&#xff0c;具有可配置的双模式 输出。 nPM1100是一款极其紧凑的PMIC器件&#xff0c;专为空间…...

深入RAG:知识密集型NLP任务的解决方案

在当今知识密集型任务日益增多的时代&#xff0c;如何有效地利用外部知识来增强语言模型的生成能力成为了一个重要的研究方向。RAG技术应运而生&#xff0c;通过从外部记忆源中检索相关信息&#xff0c;RAG不仅提高了模型生成的精准性和相关性&#xff0c;还解决了大型语言模型…...

vue-element-admin顶部导航栏的修改

基于vue-element-admin的顶部一级导航栏的调整&#xff0c;因为一级路由过多导致其他元素被挤到第二行&#xff0c;故现在将原来一级路由数组拆分成两个数组&#xff0c;第二个数组以子菜单显示 关键处调整代码 html <el-menu:active-text-color"variables.menuActiv…...

微信小程序 setData数据量过大的解决与分页加载的实现

我们经常使用setData方法来修改数据&#xff0c;从而达到更新页面的目的。但是当我们通过setData方法设置的数据过大时就会报如下错误。 vdSyncBatch 数据传输长度为 2260792 已经超过最大长度 1048576这是因为setData设置的数据量是有限制的&#xff0c;单次设置的数据大小不…...

体育动画直播嵌入方式以及作用

什么是体育动画直播&#xff1f; 体育动画直播是通过动画技术和实时数据&#xff0c;将体育赛事的进程以动态的方式展现出来。这种形式不仅可以实时呈现比赛的关键时刻&#xff0c;还能够将数据和信息以更生动、有趣的方式传达给观众。比如&#xff0c;在一场足球比赛中&#…...

腾讯云轻量服务器Lighthouse的前世今生

目录 序一、名字的由来二、Lighthouse的定位是什么&#xff0c;与CVM的差异化有哪些三、Lighthouse是如何实现简单易用的四、Lighthouse对于开发者有哪些具体的利好 序 印象中&#xff0c;腾讯云轻量应用服务器Lighthouse是在2020年正式上线的。 在其一经推出后&#xff0c;就…...

java实现redis的消息发送和消费,类似kafka功能

确保在 pom.xml 中添加了 Spring Data Redis 和 Jedis 的依赖。如下所示&#xff1a;<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency&g…...

【软件设计】常用设计模式--代理模式

文章目录 代理模式&#xff08;Proxy Pattern&#xff09;1. 概念2. 模式结构3. UML 类图4.实现方式C# 示例步骤1&#xff1a;定义主题接口步骤2&#xff1a;实现真实主题步骤3&#xff1a;实现代理类步骤4&#xff1a;客户端使用代理模式输出结果&#xff1a; Java 示例步骤1&…...

生命与自由,抑郁的来源

在中国文学史上&#xff0c;有一句极其伟大的话&#xff0c;它点出了所有人痛苦的根源。它出自《我与地坛》&#xff0c;太阳它每时每刻即是夕阳也都是旭日&#xff0c;当他从这一段熄灭着走下山去&#xff0c;收尽苍凉参照之际&#xff0c;也正是它在另一端燃烧着爬上山巅布散…...

CTFHUB技能树之文件上传——双写后缀

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是双写绕过方法 上传06shaungxie.php&#xff0c;内容如下&#xff1a; 这一步其实最好换成.png或者.jpg或者.gif这三个符合文件格式的要求后缀 用burp抓包改包&#xff1a; 将php改成pphphp后再“Forward”&#xff1a; 上传…...

SpringBoot整合HTTPS

文章目录 1_Https 的作用2_获取证书3_配置项4_配置类5_控制类6_启动类 1_Https 的作用 保护用户的隐私信息安全&#xff1a; 在 HTTP 网站数据以明文方式传输&#xff0c;客户的隐私极容易被盗取和泄露&#xff0c;而部署 SSL 证书&#xff0c;数据以 HTTPS 加密传输&#xf…...

动态规划 -- 最长公共子序列

最长公共子序列的结构设序列 X{x1,x2,…,x m} 和 Y{y1,y2,…,y n} 的最长公共子序列为 Z{z1,z2,…,z k}&#xff0c;则有以下结论&#xff1a;若 x my n&#xff0c;则 z kx my n&#xff0c;且 Z k−1&#xff08;即 Z 去掉最后一个元素 z k 后的子序列&#xff09;是 X m−1&…...

【异常】设备时间戳时区偏差问题分析与解决(实际应为上午11点,但数据库存储为晚上7点)

一、问题现象 在生产环境中发现,IoT 设备上报的对话记录时间存在异常。具体表现为: 实际时间:2026年3月30日 上午 11:00 数据库存储时间:2026年3月30日 晚上 19:00 时间偏差:约 8 小时 数据库查询示例: -- 实际应为上午11点,但数据库存储为晚上7点 dialog_time: 2026-…...

WDMHDA:Windows 旧系统高清音频驱动的突破与挑战

【导语&#xff1a;WDMHDA 是一款适用于 Windows 98SE / ME 的高清音频驱动程序&#xff0c;为旧系统的音频功能带来新可能。但目前处于 Alpha 阶段&#xff0c;存在诸多待解决问题&#xff0c;其发展对旧系统音频生态有重要影响。】WDMHDA&#xff1a;旧系统音频驱动新选择WDM…...

网络协议深度解析:从OSI七层模型到TCP/IP实战应用

1. OSI七层模型&#xff1a;网络世界的通用语言 第一次接触OSI七层模型时&#xff0c;我完全被那些专业术语搞晕了。直到后来在实际项目中调试网络问题&#xff0c;才真正理解这个模型的精妙之处。简单来说&#xff0c;OSI模型就像是一本网络通信的"使用说明书"&…...

CLIP-GmP-ViT-L-14图文匹配工具部署教程:Ubuntu 22.04 + Python 3.10 完整环境配置

CLIP-GmP-ViT-L-14图文匹配工具部署教程&#xff1a;Ubuntu 22.04 Python 3.10 完整环境配置 你是不是经常好奇&#xff0c;一张图片到底和哪段文字描述最匹配&#xff1f;比如&#xff0c;你拍了一张自家宠物的照片&#xff0c;想知道AI会觉得它更像“一只可爱的猫”还是“一…...

手把手教你配置:用微型纵向加密搞定IEC-104协议的风光数据安全上传

新能源场站IEC-104协议安全传输实战&#xff1a;微型纵向加密配置全指南 在新能源场站的自动化系统中&#xff0c;IEC-104协议作为电力行业标准通信规约&#xff0c;承担着风机、光伏逆变器与升压站之间关键运行数据传输的重任。然而&#xff0c;传统光纤环网中的明文传输方式存…...

Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示:同一instruct跨语言声线迁移能力验证

Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示&#xff1a;同一instruct跨语言声线迁移能力验证 你有没有想过&#xff0c;同一个声音描述&#xff0c;比如“温柔的成年女性声音”&#xff0c;用中文说出来是一种感觉&#xff0c;用英文、日文说出来&#xff0c;会不会还是同一种感…...

Android崩溃分析进阶:结合addr2line与IDA Pro精准定位SO文件崩溃点

1. 从崩溃日志到问题定位&#xff1a;为什么SO文件这么难缠&#xff1f; 每次看到Android应用崩溃日志里出现"signal 11 (SIGSEGV)"这种字样&#xff0c;我就知道今晚又要加班了。特别是当崩溃发生在SO文件中时&#xff0c;那种无力感就像在漆黑的房间里找一根掉落的…...

Python数据可视化实战:用matplotlib绘制专业级折线图(附完整代码)

Python数据可视化实战&#xff1a;用matplotlib绘制专业级折线图&#xff08;附完整代码&#xff09; 数据可视化是现代数据分析不可或缺的一环&#xff0c;而折线图作为最基础也最常用的图表类型之一&#xff0c;能够直观展示数据随时间或有序类别的变化趋势。对于Python开发者…...

避坑指南:RK3588 SD卡刷机时FAT32转EXT4的完整流程(含工具包)

RK3588大容量镜像烧写实战&#xff1a;突破FAT32限制的EXT4全流程解决方案 当你在RK3588开发板上尝试烧写超过4GB的Ubuntu或Debian镜像时&#xff0c;是否遇到过SD卡工具报错&#xff1f;这不是你的操作问题&#xff0c;而是FAT32文件系统的天然限制。本文将带你深入理解这一技…...