GDAL+C#实现矢量多边形转栅格
1. 开发环境测试
参考C#配置GDAL环境,确保GDAL能使用,步骤简述如下:
- 创建.NET Framework 4.7.2的控制台应用
注意:
项目路径中不要有中文,否则可能报错:can not find proj.db
- 在NuGet中安装GDAL 3.9.1和GDAL.Native 3.9.1
- 测试代码(读取一张影像的长、宽、波段数、坐标系)
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实现矢量转栅格
- 用ArcMap创建一个shp面数据,用于后续输入。
基于投影坐标系WGS_1984_UTM_Zone_50N,绘制了三个面,并添加属性字段Code,该字段将作为栅格数据的值。

- 示例代码
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();}}
}
- 栅格化效果图


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(操作体验好,办公人士首选)Linux…...
域3:安全工程 第6章 密码学与对称密钥算法
---域3主要包括OSG 6、7、8、9、10 章--- 随着信息化时代的推进,网络安全愈发关键。CISSP认证考试中的第6章,专注于密码学与对称密钥算法,这两者是网络安全的核心。 密码学,历经演变,从古代简单的替代密码到现代的复杂…...
MySQL注入load_file常用路径
在MySQL注入攻击中,攻击者可能会尝试利用LOAD_FILE()函数来读取服务器上的敏感文件。LOAD_FILE()函数允许从服务器的文件系统中读取文件,并将其内容作为字符串返回。然而,这个函数需要满足一定的权限条件,并且文件路径必须是服务器…...
ubuntu20.04版本 快速安装 python3.11(宝宝级攻略)
1.前言 深度学习领域中,Python是首选编程语言,因此安装python进行深度学习是必要的,我在安装时踩过了一些坑,就想出一个宝宝级的攻略,希望能够帮助大家。 本宝宝攻略无论是在双系统下还是在虚拟机的环境下均能安装&a…...
DeepSeek AI 推出 Janus 自回归框架,统一视觉、文本理解与生成的创新解决方案
❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 🥦 微信公众号ÿ…...
NORDIC nPM1100 是一款集成式电源管理
nPM1100 是一款集成式电源管理IC(PMIC),采用2.1x2.1毫米WLCSP或4.0x4.0 毫米 QFN 封装 ,内置线性模式锂离子/锂聚合物电池充电器。它采用高效DC/DC降压调节器,具有可配置的双模式 输出。 nPM1100是一款极其紧凑的PMIC器件,专为空间…...
深入RAG:知识密集型NLP任务的解决方案
在当今知识密集型任务日益增多的时代,如何有效地利用外部知识来增强语言模型的生成能力成为了一个重要的研究方向。RAG技术应运而生,通过从外部记忆源中检索相关信息,RAG不仅提高了模型生成的精准性和相关性,还解决了大型语言模型…...
vue-element-admin顶部导航栏的修改
基于vue-element-admin的顶部一级导航栏的调整,因为一级路由过多导致其他元素被挤到第二行,故现在将原来一级路由数组拆分成两个数组,第二个数组以子菜单显示 关键处调整代码 html <el-menu:active-text-color"variables.menuActiv…...
微信小程序 setData数据量过大的解决与分页加载的实现
我们经常使用setData方法来修改数据,从而达到更新页面的目的。但是当我们通过setData方法设置的数据过大时就会报如下错误。 vdSyncBatch 数据传输长度为 2260792 已经超过最大长度 1048576这是因为setData设置的数据量是有限制的,单次设置的数据大小不…...
体育动画直播嵌入方式以及作用
什么是体育动画直播? 体育动画直播是通过动画技术和实时数据,将体育赛事的进程以动态的方式展现出来。这种形式不仅可以实时呈现比赛的关键时刻,还能够将数据和信息以更生动、有趣的方式传达给观众。比如,在一场足球比赛中&#…...
腾讯云轻量服务器Lighthouse的前世今生
目录 序一、名字的由来二、Lighthouse的定位是什么,与CVM的差异化有哪些三、Lighthouse是如何实现简单易用的四、Lighthouse对于开发者有哪些具体的利好 序 印象中,腾讯云轻量应用服务器Lighthouse是在2020年正式上线的。 在其一经推出后,就…...
java实现redis的消息发送和消费,类似kafka功能
确保在 pom.xml 中添加了 Spring Data Redis 和 Jedis 的依赖。如下所示:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency&g…...
【软件设计】常用设计模式--代理模式
文章目录 代理模式(Proxy Pattern)1. 概念2. 模式结构3. UML 类图4.实现方式C# 示例步骤1:定义主题接口步骤2:实现真实主题步骤3:实现代理类步骤4:客户端使用代理模式输出结果: Java 示例步骤1&…...
生命与自由,抑郁的来源
在中国文学史上,有一句极其伟大的话,它点出了所有人痛苦的根源。它出自《我与地坛》,太阳它每时每刻即是夕阳也都是旭日,当他从这一段熄灭着走下山去,收尽苍凉参照之际,也正是它在另一端燃烧着爬上山巅布散…...
CTFHUB技能树之文件上传——双写后缀
开启靶场,打开链接: 直接指明是双写绕过方法 上传06shaungxie.php,内容如下: 这一步其实最好换成.png或者.jpg或者.gif这三个符合文件格式的要求后缀 用burp抓包改包: 将php改成pphphp后再“Forward”: 上传…...
SpringBoot整合HTTPS
文章目录 1_Https 的作用2_获取证书3_配置项4_配置类5_控制类6_启动类 1_Https 的作用 保护用户的隐私信息安全: 在 HTTP 网站数据以明文方式传输,客户的隐私极容易被盗取和泄露,而部署 SSL 证书,数据以 HTTPS 加密传输…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
【多线程初阶】单例模式 指令重排序问题
文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…...
Pandas 可视化集成:数据科学家的高效绘图指南
为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...
中国政务数据安全建设细化及市场需求分析
(基于新《政务数据共享条例》及相关法规) 一、引言 近年来,中国政府高度重视数字政府建设和数据要素市场化配置改革。《政务数据共享条例》(以下简称“《共享条例》”)的发布,与《中华人民共和国数据安全法》(以下简称“《数据安全法》”)、《中华人民共和国个人信息…...
LTR-381RGB-01RGB+环境光检测应用场景及客户类型主要有哪些?
RGB环境光检测 功能,在应用场景及客户类型: 1. 可应用的儿童玩具类型 (1) 智能互动玩具 功能:通过检测环境光或物体颜色触发互动(如颜色识别积木、光感音乐盒)。 客户参考: LEGO(乐高&#x…...
