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

使用NetTopologySuite读写gpkg文件

直接上代码:

优势是什么?纯C#开发,不存在兼容和字符问题。

using NetTopologySuite;
using NetTopologySuite.Features;
using NetTopologySuite.Geometries;
using CdIts.NetTopologySuite.IO;
using CdIts.NetTopologySuite.IO.GeoPackage.FeatureReader;
using CdIts.NetTopologySuite.IO.GeoPackage.FeatureWriter;
using CdIts.NetTopologySuite.IO.GeoPackage.Features;
using CdIts.NetTopologySuite.IO.GeoPackage;namespace WinFormsApp1
{public partial class Form1 : Form{// Define the path for the GeoPackage filestring path = @"D:\temp\test测试.gpkg";public Form1(){InitializeComponent();}private void btnWriter_Click(object sender, EventArgs e){// Ensure the directory existsDirectory.CreateDirectory(Path.GetDirectoryName(path));var writer = new GeoPackageFeatureWriter(path);// Define the spatial reference system (SRID 4326 for WGS84)var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(4543);var point1 = geometryFactory.CreatePoint(new Coordinate(10, 20));var point2 = geometryFactory.CreatePoint(new Coordinate(52, 80));var point3 = geometryFactory.CreatePoint(new Coordinate(150, 60));Feature feature1 = new Feature();feature1.Attributes = new AttributesTable();feature1.Attributes.Add("id", "1");feature1.Geometry = point1;Feature feature2 = new Feature();feature2.Attributes = new AttributesTable();feature2.Attributes.Add("id", "2");feature2.Geometry = point2;Feature feature3 = new Feature();feature3.Attributes = new AttributesTable();feature3.Attributes.Add("id", "3");feature3.Geometry = point3;Feature[] pointFeatures = { feature1, feature2, feature3 };writer.AddLayer(pointFeatures, "testPoint");Coordinate coordinate1 = new Coordinate(10, 20);Coordinate coordinate2 = new Coordinate(52, 80);Coordinate coordinate3 = new Coordinate(150, 60);Coordinate[] coordinates1 = { coordinate1, coordinate2 };var line1 = geometryFactory.CreateLineString(coordinates1);Feature featureLine1 = new Feature();featureLine1.Attributes = new AttributesTable();featureLine1.Attributes.Add("id", "1");featureLine1.Geometry = line1;Coordinate[] coordinates2 = { coordinate2, coordinate3 };var line2 = geometryFactory.CreateLineString(coordinates2);Feature featureLine2 = new Feature();featureLine2.Attributes = new AttributesTable();featureLine2.Attributes.Add("id", "2");featureLine2.Geometry = line2;Coordinate[] coordinates3 = { coordinate1, coordinate3 };var line3 = geometryFactory.CreateLineString(coordinates3);Feature featureLine3 = new Feature();featureLine3.Attributes = new AttributesTable();featureLine3.Attributes.Add("id", "3");featureLine3.Geometry = line3;Feature[] lineFeatures = { featureLine1, featureLine2, featureLine3 };writer.AddLayer(lineFeatures, "testLine");/Coordinate[] coordinates = { coordinate1, coordinate2, coordinate3, coordinate1 };var polygon = geometryFactory.CreatePolygon(coordinates);Feature polygonFeature = new Feature();polygonFeature.Attributes = new AttributesTable();polygonFeature.Attributes.Add("id", "1");polygonFeature.Geometry = polygon;Feature[] polygonFeatures = { polygonFeature };writer.AddLayer(polygonFeatures, "testPolygon");writer.Close();}private void btnReader_Click(object sender, EventArgs e){var reader = new GeoPackageFeatureReader(path);IList<GeoPackageFeatureInfo> featureInfoes = reader.GetFeatureInfos();List<string> tableNames = new List<string>();foreach(var info in featureInfoes){if(tableNames.Contains(info.TableName) == false){tableNames.Add(info.TableName);}}foreach (var name in tableNames){Feature[] features = reader.ReadFeatures(name);foreach (var feature in features){Geometry geo = feature.Geometry;MessageBox.Show($"{geo.Centroid.X},{geo.Centroid.Y}");}}}}
}

相关文章:

使用NetTopologySuite读写gpkg文件

直接上代码&#xff1a; 优势是什么&#xff1f;纯C#开发&#xff0c;不存在兼容和字符问题。 using NetTopologySuite; using NetTopologySuite.Features; using NetTopologySuite.Geometries; using CdIts.NetTopologySuite.IO; using CdIts.NetTopologySuite.IO.GeoPackag…...

什么是http?列出常见方法并解他们?

HTTP 方法是客户端&#xff08;通常是浏览器&#xff09;用来向服务器表明其意图的方式。常见的 HTTP 方法有以下几种&#xff1a; 一、GET 解释&#xff1a;用于请求指定的资源。它是最常见的 HTTP 方法之一。GET 方法应该只用于获取数据&#xff0c;而不应该有任何副作用。例…...

通过修改注册表来提高导出图像的分辨率(PPT尝试)

通过修改注册表来提高 PowerPoint 导出图片的分辨率&#xff0c;可以导致导出的图片尺寸大于您期望的 1920 x 1080 像素。例如&#xff0c;将 ExportBitmapResolution 设置为 300 DPI&#xff0c;可能会导致输出图像的尺寸变得非常大&#xff0c;比如 10240 x 5760 像素。这是因…...

OpenCV 环境配置

首先下载opencv&#xff0c;在opencv官网进行下载。 按照上面的步骤&#xff0c;点击进去 滑至底部&#xff0c;不切换至不同页&#xff0c;选择合适的版本进行下载(Window系统选择Windows版本进行下载)。 接下来以4.1.2版本为例&#xff1a; 点击之后会进入这个页面&#xff…...

使用通义千问模拟ChatGPT-o1进行思考,并以类似于ChatGPT-o1的形式输出

prompt 你是ChatGPT O1&#xff0c;旨在通过第一性原理思维和基于证据的推理来解决用户问题。你的目标是提供清晰、循序渐进的解决方案、基础概念&#xff0c;并从头开始构建答案。 ### 指导原则&#xff1a; 以下是为大模型采用这种方法而设计的系统提示&#xff1a; 1. 理解…...

维生素对于生活的重要性

在探索健康奥秘的旅途中&#xff0c;维生素作为人体不可或缺的微量营养素&#xff0c;扮演着至关重要的角色。它们虽不直接提供能量&#xff0c;却是酶促反应、细胞代谢、免疫功能乃至心理健康的基石。今天&#xff0c;让我们一同深入探讨人体所需补充的维生素&#xff0c;这些…...

STM32学习--4-1 OLED显示屏

接线图 OLED.c #include "stm32f10x.h" #include "OLED_Font.h"/*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) #define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))/*引脚初始化*/ void …...

原生 App 上架 Mac App Store 过程总结

随着 macOS 系统的普及&#xff0c;越来越多的开发者希望将他们的原生应用程序发布到 Mac App Store&#xff0c;以便触达更广泛的用户群体。在这篇文章中&#xff0c;我们将详细总结原生 App 上架 Mac App Store 的整个过程&#xff0c;包括必要的准备工作、开发流程、测试、申…...

[实时计算flink]双流JOIN语句

Flink SQL支持对动态表进行复杂而灵活的连接操作&#xff0c;本文为您介绍如何使用双流JOIN语句。 背景信息 实时计算的JOIN和传统批处理JOIN的语义一致&#xff0c;都用于将两张表关联起来。区别为实时计算关联的是两张动态表&#xff0c;关联的结果也会动态更新&#xff0c…...

metahuman如何导入UE5

1.启动 通过EPIC启动UE5(UE5内置有Bridge, 但是UE4是需要单独下在Bridge软件) 2.打开Quixel Bridge 在window(窗口)中打开Quixel Bridge 3.Bridge界面 在弹出的Bridge界面选择模型 需要先下载&#xff0c;然后再导入 4.下载模型 点击需要的模型右上方的绿色箭头下载 5.下…...

Python知识点:基于Python技术,如何使用TensorFlow进行自动驾驶模型训练

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 使用TensorFlow进行自动驾驶模型训练的Python技术详解 自动驾驶技术是人工智能领…...

Django的请求与响应

Django的请求与响应 1、常见的请求2、常见的响应3、案例 1、常见的请求 函数的参数request是一个对象&#xff0c;封装了用户发送过来的所有请求相关数据。 get请求一般用来请求获取数据&#xff0c;get请求也可以传参到后台&#xff0c;但是传递的参数显示在地址栏。 post请求…...

[java]Iterable<Integer> 和Iterator<Integer>的区别和用法

Iterable<Integer> 和 Iterator<Integer> 在 Java 中都是用于处理集合数据的重要接口&#xff0c;但它们的角色和用途有所不同。以下是它们之间的主要区别&#xff1a; 1. 接口角色 Iterable<T>&#xff1a;这是一个接口&#xff0c;它定义了如何获取一个…...

JavaScript进行数据可视化:D3.js入门

在数据驱动的世界中&#xff0c;数据可视化是理解和传达数据信息的重要手段。D3.js是一个强大的JavaScript库&#xff0c;它允许开发者将数据转换为可交互的图形和图表。本文将为您介绍D3.js的基本概念、特点以及如何入门使用它进行数据可视化。 D3.js简介 什么是D3.js&#…...

字符串拼接方法性能对比和分析

对字符串进行拼接主要有三种方法&#xff1a; 1.加号 2.concat方法 3.StringBuilder或者StringBuffer的append方法 下面看下性能对比&#xff0c;测试方法为各循环十万次&#xff0c;对比耗费时间。 测试性能 1.”"拼接 long start System.currentTimeMillis();String …...

[Halcon矩阵] 通过手眼标定矩阵计算相机旋转角度

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…...

推荐几本编程入门书目

对于编程入门&#xff0c;推荐以下几本书籍&#xff0c;这些书籍覆盖了不同的编程语言&#xff0c;适合零基础的学习者逐步掌握编程基础&#xff1a; 1. 《Python编程快速上手——让繁琐工作自动化》 特点&#xff1a;以简单易懂的方式介绍了Python的基础知识和编程概念&#…...

每天一个数据分析题(五百零五)- 提升方法

提升方法&#xff08;Boosting&#xff09;&#xff0c;是一种可以用来减小监督式学习中偏差的机器学习算法。基于Boosting的集成学习&#xff0c;其代表算法不包括&#xff1f; A. Adaboost B. GBDT C. XGBOOST D. 随机森林 数据分析认证考试介绍&#xff1a;点击进入 题…...

华为云ECS部署DR模式的LVS

1 概述 LVS是linux内核模块&#xff0c;用于4层的负载均衡&#xff0c;它有多个工作模式&#xff0c;例如NAT模式、DR模式。 DR模式的数据流是这样的&#xff1a; client ---> Director Server&#xff08;即LVS服务器&#xff0c;带VIP&#xff09; ---> Real Serve…...

如何在 Jupyter Notebook 执行和学习 SQL 语句(上)

在Jupyter Notebook中使用SQL&#xff0c;你可以通过以下步骤创建一个数据库并连接到该数据库&#xff1a; 1. 安装SQLite和SQLAlchemy SQLite 是一个轻量级的数据库系统&#xff0c;适合本地小型项目。SQLAlchemy 是一个强大的数据库连接工具&#xff0c;可以在Jupyter中方便…...

数据结构-5.7.二叉树的层次遍历

一.演示&#xff1a; 1.初始化队列&#xff1a; 2.根结点入队&#xff1a; 3.判断队列是否为空&#xff0c;此时有根结点&#xff0c;说明不为空&#xff0c;则队头结点即根结点出队并访问&#xff0c;再先进它的左结点&#xff0c;最后进它的右结点&#xff1a; 4.之后对进来…...

RISC-V知识点目录

分支预测 分支预测概述https://blog.csdn.net/zhangshangjie1/article/details/136947089?sharetypeblogdetail&sharerId136947089&sharereferPC&sharesourcezhangshangjie1&spm1011.2480.3001.8118分支指令的方向预测https://blog.csdn.net/zhangshangjie1/a…...

C++11 新特性 学习笔记

C11 新特性 | 侯捷C11学习笔记 笔者作为侯捷C11新特性课程的笔记进行记录&#xff0c;供自己查阅方便 文章目录 C11 新特性 | 侯捷C11学习笔记1.Variadic TemplatesC11支持函数模板的默认模板参数C11在函数模板和类模板中使用可变参数 可变参数模板1) 可变参数函数模板2) 可变…...

Go 语言中的格式化占位符

在 Go 语言中&#xff0c;fmt 包提供了大量的格式化占位符&#xff0c;用于格式化输出不同类型的数据。选择合适的占位符&#xff0c;可以确保输出的内容格式正确、清晰易懂。 常见的占位符&#xff1a; 基本类型 %v&#xff1a;按值的默认格式输出。适用于任何类型。%v&…...

QD1-P5 HTML 段落标签(p)换行标签(br)

本节视频 www.bilibili.com/video/BV1n64y1U7oj?p5 ‍ 本节学习 HTML 标签&#xff1a; p标签 段落br标签 换行 ‍ 一、p 标签-段落 1.1 使用 p 标签划分段落 <p>段落文本</p>示例 <!DOCTYPE html> <html><head><meta charset"…...

Django的模板语法

Django的模板语法 1、初步认识2、原理 1、初步认识 本质上&#xff1a;在HTML中写一些占位符&#xff0c;由数据对这些占位符进行替换和处理。 在views.py中用字典&#xff08;键值对&#xff09;的形式传参&#xff0c;在html文件中用两个花括号来显示单独的值 列表、元组等数…...

【在Linux世界中追寻伟大的One Piece】信号捕捉|阻塞信号

目录 1 -> 信号捕捉初识 2 -> 阻塞信号 2.1 -> 信号其他相关常见概念 2.2 -> 在内核中的表示 2.3 -> sigset_t 2.4 -> 信号集操作函数 2.5 -> sigprocmask 2.6 -> sigpending 3 -> 捕捉信号 3.1 -> 内核如何实现信号的捕捉 3.2 ->…...

信息系统运维管理方案,运维建设文档,运维平台建设方案,软件硬件中间件运维方案,信息安全管理(原件word,PPT,excel)

建设方案目录&#xff1a; 1、智慧运维系统建设背景 2、智慧运维系统建设目标 3、智慧运维系统建设内容 4、智慧运维系统建设技术 5、智慧运维系统建设流程 6、智慧运维系统建设收益 企业对运维管理的需求&#xff1a; 1、提高运维效率&#xff1a;降低运维成本&#xff0c;提高…...

多元统计实验报告内容

1 实验内容 实验目的: 利用R软件进行一些简单的数学运算,通过对简单统计量函数的操作了解R语言的基本操作过程,从而对R语言形成初步的认识。 实验项目名称: R语言软件的安装。R语言中赋值语句的练习。 在R中<-表示赋值,c()表示数组,X1<-c()即表示将一组数据赋…...

使用机器学习边缘设备的快速目标检测

论文标题&#xff1a;Fast Object Detection with a Machine Learning Edge Device 中文标题&#xff1a;使用机器学习边缘设备的快速目标检测 作者信息&#xff1a; Richard C. Rodriguez, MSDA Information Systems and Cyber Security Department, The University of Tex…...