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

【NetTopologySuite类库】geojson和shp互转,和自定义对象互转

geojson介绍

1. 示例

在visual studio中使用NuGet中安装了三个库(.net4.7.2环境):

  • NetTopologySuite 2.5
  • NetTopologySuite.IO.Esri.Shapefile 1.2
  • NetTopologySuite.IO.GeoJSON 4.0

1.1 shp数据转geojson

先创建一个shp文件作为例子:

using NetTopologySuite.Geometries;
using NetTopologySuite.IO;
using NetTopologySuite.IO.Esri;
using NetTopologySuite.Features;
using System.Collections.Generic;
using System.IO;//创建一个用于测试的shp文件
var r = new WKTReader();
var geo1 = r.Read("polygon((0 0,0 10,10 10,10 0,0 0))");
var geo2 = r.Read("polygon((10 0,10 10,20 10,20 0,10 0))");
Save("./Tmp/data.shp", geo1, geo2);//工具方法
public static void Save(string shpPath, params Geometry[] geos)
{Directory.CreateDirectory(Path.GetDirectoryName(shpPath));var features = geos.Select(x => new Feature(x, null)).ToList();Shapefile.WriteAllFeatures(features, shpPath);
}

再读取shp,将其转为geojson:

public void TestMethod1()
{//读取shp文件,转geojsonvar features = Shapefile.ReadAllFeatures("./Tmp/data.shp");var modifiedJson = new GeoJsonWriter().Write(features);File.WriteAllText("./Tmp/output.geojson", modifiedJson);
}

生成的geojson:

[{"type": "Feature","bbox": [0.0, 0.0, 10.0, 10.0],"geometry": {"type": "MultiPolygon","coordinates": [[[[0.0, 0.0],[10.0, 0.0],[10.0, 10.0],[0.0, 10.0],[0.0, 0.0]]]]},"properties": {"Id": 1}},{"type": "Feature","bbox": [10.0, 0.0, 20.0, 10.0],"geometry": {"type": "MultiPolygon","coordinates": [[[[10.0, 0.0],[20.0, 0.0],[20.0, 10.0],[10.0, 10.0],[10.0, 0.0]]]]},"properties": {"Id": 1}}
]

1.2 geojson转shp数据

public void TestMethod2()
{var json = File.ReadAllText("./Tmp/output.geojson");var reader = new GeoJsonReader();var features = reader.Read<Feature[]>(json);Shapefile.WriteAllFeatures(features, "./Tmp/data2.shp");
}

1.2 自定义对象转geojson

自定义一个类(里面有属性,有几何Geometry ):

 public class Item{public string Name { get; set; } = "Layer";public Geometry Geo { get; set; }public Dictionary<string, object> Attrs { get; set; }public Item(string name, Geometry geo, Dictionary<string, object> attrs){Name = name;Geo = geo;Attrs = attrs;}}

为该类创建对象数组,并将其转为geojson:

public void TestMethod3()
{var r = new WKTReader();var geo1 = r.Read("polygon((0 0,0 10,10 10,10 0,0 0))");var geo2 = r.Read("polygon((10 0,10 10,20 10,20 0,10 0))");var item1 = new Item("A", geo1, new Dictionary<string, object>(){{ "key", 1}, { "value", 2} });var item2 = new Item("A", geo1, new Dictionary<string, object>(){{ "key", 1}, { "value", 2}});var items = new Item[] {item1, item2 };var modifiedJson = new GeoJsonWriter().Write(items);File.WriteAllText("./Tmp/output2.geojson", modifiedJson);      
}

转成的geojson:

[{"Name": "A","Geo": {"type": "Polygon","coordinates": [[[0.0, 0.0],[10.0, 0.0],[10.0, 10.0],[0.0, 10.0],[0.0, 0.0]]]},"Attrs": {"key": 1,"value": 2}},{"Name": "A","Geo": {"type": "Polygon","coordinates": [[[0.0, 0.0],[10.0, 0.0],[10.0, 10.0],[0.0, 10.0],[0.0, 0.0]]]},"Attrs": {"key": 1,"value": 2}}
]

1.3 geojson转自定义对象

public void TestMethod4()
{var json = File.ReadAllText("./Tmp/output2.geojson");var reader = new GeoJsonReader();var obj = reader.Read<Item[]>(json);
}

相关文章:

【NetTopologySuite类库】geojson和shp互转,和自定义对象互转

geojson介绍 1. 示例 在visual studio中使用NuGet中安装了三个库&#xff08;.net4.7.2环境&#xff09;&#xff1a; NetTopologySuite 2.5NetTopologySuite.IO.Esri.Shapefile 1.2NetTopologySuite.IO.GeoJSON 4.0 1.1 shp数据转geojson 先创建一个shp文件作为例子&…...

【哇! C++】类和对象(三) - 构造函数和析构函数

目录 一、构造函数 1.1 构造函数的引入 1.2 构造函数的定义和语法 1.2.1 无参构造函数&#xff1a; 1.2.2 带参构造函数 1.3 构造函数的特性 1.4 默认构造函数 二、析构函数 2.1 析构函数的概念 2.2 特性 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中…...

Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(一)

Ubuntu20.04本地配置IsaacLab的G1训练环境&#xff08;一&#xff09; 配置Omniverse环境配置IsaacSim配置IsaacLab 写在前面&#xff0c;如果Ubuntu剩余空间低于60G&#xff0c;则空间不足&#xff0c;除非你不需要资产包。但资产包中却包含了G1模型、Go2模型等机器人模型和代…...

浅谈汽车系统电压优缺点分析

汽车电气系统的电压等级选择直接影响整车性能、能效和兼容性。以下是 12V、24V、48V 系统的简单介绍&#xff0c;包括技术特点、优缺点及典型应用场景。 汽车电气系统的发展随着车辆电子设备的增多和对能效要求的提高&#xff0c;电压等级也在逐步提升&#xff0c;从传统的12V…...

Springboot基础篇(4):自动配置原理

1 自动配置原理剖析 1.1 加载配置类的源码追溯 自动配置的触发入口&#xff1a; SpringBootApplication 组合注解是自动配置的起点&#xff0c;其核心包含 EnableAutoConfiguration&#xff0c;该注解使用AutoConfigurationImportSelector 实现配置类的动态加载。 启动类的注…...

Dify 开源大语言模型应用开发平台使用(一)

文章目录 一、创建锂电池专业知识解答应用1.1 应用初始化二、核心功能模块详解2.1 知识库构建2.2 工作流与节点编排节点类型说明工作流设计示例:锂电池选型咨询2.3 变量管理三、测试与调试3.1 单元测试3.2 压力测试3.3 安全验证四、部署与优化建议4.1 部署配置4.2 持续优化结论…...

机器学习深度学习基本概念:logistic regression和softmax

逻辑回归用来处理二分类问题 softmax用来处理多分类问题&#xff1a;比如llm在generate的时候&#xff0c;每个batch里面的一个样本的一个一次generate就是softmax生成一个大小为vocab_size的向量的概率分布&#xff0c;然后再采样 逻辑回归&#xff08;logistic regression&…...

OpenCV计算摄影学(16)调整图像光照效果函数illuminationChange()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对选定区域内的梯度场应用适当的非线性变换&#xff0c;然后通过泊松求解器重新积分&#xff0c;可以局部修改图像的表观照明。 cv::illuminati…...

Git - 补充工作中常用的一些命令

Git - 补充工作中常用的一些命令 1 一些场景1.1 场景11.2 场景21.3 场景31.4 场景41.5 场景51.6 场景61.7 场景71.8 场景81.9 场景91.10 场景101.11 场景111.12 场景121.13 场景131.14 场景141.15 场景15 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\-…...

使用Python的requests库调用API并处理JSON响应的详细步骤

1. 安装request库 pip install requests 2. 发送GET请求 import requests# 定义API地址 url "https://api.example.com/data"# 发送GET请求 response requests.get(url)# 检查HTTP状态码 if response.status_code 200:# 解析JSON响应data response.json()prin…...

Mybatis如何通过databaseId属性支持不同数据库的不同语法

目录 一、前言 二、如何配置 三、源码解读 四、自定义 一、前言 在一次项目功能测试中&#xff0c;发现有个sql在其他嵌入式数据库中执行正常&#xff0c;但是在mysql中执行失败&#xff0c;发现是因为有个字段在mysql中是关键字&#xff0c;需要使用反引号&#xff08;&…...

android edittext 防止输入多个小数点或负号

有些英文系统的输入法,或者定制输入法。使用xml限制不了输入多个小数点和多个负号。所以代码来控制。 一、通过XML设置限制 <EditTextandroid:id="@+id/editTextNumber"android:layout_width="wrap_content"android:layout_height="wrap_conten…...

windows部署spleeter 版本2.4.0:分离音频的人声和背景音乐

windows部署spleeter 版本2.4.0&#xff1a;分离音频的人声和背景音乐 一、Spleeter 是什么&#xff1f; Spleeter 是由法国音乐流媒体公司 Deezer 开发并开源的一款基于深度学习的音频分离工具。它能够将音乐中的不同音轨&#xff08;如人声、鼓、贝斯、钢琴等&#xff09;分…...

深度学习、宽度学习、持续学习与终身学习:全面解析与其在大模型方面的应用

目录 引言&#xff1a; 1. 深度学习&#xff08;Deep Learning&#xff09; 1.1 深度学习的基本概念 1.2 深度学习的数学原理 1.3 深度学习的特点 1.4 深度学习在大模型中的应用 2. 宽度学习&#xff08;Wide Learning&#xff09; 2.1 宽度学习的基本概念 2.2宽度学习…...

【量化科普】Arbitrage,套利

【量化科普】Arbitrage&#xff0c;套利 &#x1f680;量化软件开通 &#x1f680;量化实战教程 什么是套利&#xff1f; 套利&#xff08;Arbitrage&#xff09;是金融市场中的一种交易策略&#xff0c;指的是在不同市场或不同形式中同时买入和卖出相同或相似的金融产品&a…...

删除已加入 .gitignore却仍被git追踪的文件

.gitignore 文件只会影响未被跟踪的文件&#xff0c;而已经被 Git 跟踪的文件不会因为被添加到 .gitignore 而停止被跟踪。 eg&#xff1a;例如在创建.gitignore文件前&#xff0c;已经将sync.sh文件推送到远程分支&#xff0c;因此该文件已被git追踪。 去掉sync.sh文件追踪的步…...

pytest框架 核心知识的系统复习

1. pytest 介绍 是什么&#xff1a;Python 最流行的单元测试框架之一&#xff0c;支持复杂的功能测试和插件扩展。 优点&#xff1a; 语法简洁&#xff08;用 assert 替代 self.assertEqual&#xff09;。 自动发现测试用例。 丰富的插件生态&#xff08;如失败重试、并发执…...

Spring Cloud Alibaba学习 5- Seata入门使用

Spring Cloud Alibaba学习 5- Seata入门使用 Seata是Spring Cloud Alibaba中用于分布式事务管理的解决方案 一. Seata的基本概念 1. Seata的三大角色 1> TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态&#xff0c;驱动全局事务提交或回滚。TC作…...

WebAssembly技术及应用了解

WebAssembly&#xff08;Wasm&#xff09;是一种为Web设计的高效、低级的二进制指令格式&#xff0c;旨在提升Web应用的性能并支持多种编程语言。以下是对其核心概念、优势、应用场景及开发流程的系统介绍&#xff1a; 1. 核心概念 二进制格式&#xff1a;Wasm采用紧凑的二进制…...

Deepseek中的MoE架构的改造:动态可变参数激活的MoE混合专家架构(DVPA-MoE)的考虑

大家好,我是微学AI,今天给大家介绍一下动态可变参数激活MoE架构(Dynamic Variable Parameter-Activated MoE, DVPA-MoE)的架构与实际应用,本架构支持从7B到32B的等多档参数动态激活。该架构通过细粒度难度评估和分层专家路由,实现“小问题用小参数,大问题用大参数”的精…...

NodeJS学习笔记

NodeJS软件安装 node环境安装&#xff1a; https://nodejs.org 安装好后的node通常在C:\Program Files\nodejs验证安装是否成功 node -v npm -v 进入REPL模式命令行模式 nodeNodeJS在REPL模式和编辑器使用 windos在dos下常用命令 windos命令&#xff1a; 1、cmd dos系统2、…...

【交通网络拓扑图实现原理深度解析】

交通网络拓扑图实现原理深度解析 简易demo地址 背景故事&#xff1a;交通网络调度可视化的演进 1. 项目背景 在现代城市轨道交通系统中&#xff0c;交通网络线路的可视化展示一直是一个重要而复杂的问题。传统的交通网络线路图往往采用静态图片方式展示&#xff0c;这种方式…...

【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?

https://time.geekbang.org/column/article/118826 2.6 渲染流程&#xff08;下&#xff09;&#xff1a;HTML、CSS和JavaScript&#xff0c;是如何变成页面的&#xff1f; 2.5介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段&#xff0c;2.6讲解渲染流水线后面的阶段…...

NO2.C++语言基础|C++和Java|常量|重载重写重定义|构造函数|强制转换|指针和引用|野指针和悬空指针|const修饰指针|函数指针(C++)

6. C 和 Java 区别&#xff08;语⾔特性&#xff0c;垃圾回收&#xff0c;应⽤场景等&#xff09; 指针&#xff1a; Java 语⾔让程序员没法找到指针来直接访问内存&#xff0c;没有指针的概念&#xff0c;并有内存的⾃动管理功能&#xff0c;从⽽有效的防⽌了 C 语⾔中的指针…...

【CSS】---- 纯 CSS 实现无限滚动轮播

1. 前言 仅使用 CSS 创建一个具有无限滚动轮播的动画,无需 JavaScript。首先是无限滚动轮播动画效果在我们常见的开发中都是借用 JavaScript 实现,如果纯粹使用 CSS,我觉得还是一个比较有趣的。 2. 效果预览 3. 效果分析 一屏展示了三个图片元素;动画依次向左移动;三个图…...

软考架构师笔记-计算机网络

1.9 计算机网络 OSI/RM 七层模型 物理层 二进制传输(中继器、集线器) (typedef) 数据链路层 传送以帧为单位的信息(网桥、交换机、网卡) 网络层 分组传输和路由选择(三层交换机、路由器)ARP/RARP/IGMP/ICMP/IP 传输层 端到端的连接(TCP/UDP)在前向纠错系统中&#xff0c;当接…...

Spring MVC 页面重定向返回后通过nginx代理 丢失端口号问题处理

Spring MVC页面重定向通过Nginx代理后出现端口丢失问题&#xff0c;通常由以下原因及解决方案构成&#xff1a; #‌# 一、Nginx配置问题&#xff08;核心原因&#xff09;‌ ‌1. Host头传递不完整‌ Nginx默认未将原始请求的端口信息传递给后端&#xff0c;导致应用生成重定向…...

道可云人工智能每日资讯|亚马逊云业务部门成立智能体人工智能团队

道可云元宇宙每日简报&#xff08;2025年3月6日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 《杭州市富阳区未来产业培育行动计划(2025-2026年)》发布 3月3日&#xff0c;杭州市富阳区经信局正式发布了《杭州市富阳区未来产业培育行动计划(2025-2026年)》&…...

算力100问☞第72问:算力与算法、数据的关系是什么?

目录 1、数据是基础 2、算法是核心 3、算力是保障 4、三者的关系 5、实际应用中的体现 算力、算法和数据是人工智能和计算机科学领域的三个核心要素,它们之间相互依赖、相互促进,共同构成了现代计算系统的基础。以下是它们之间的关系: 1、数据是基础 定义:数据是信息…...

AI-Ollama本地大语言模型运行框架与Ollama javascript接入

1.Ollama Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;平台&#xff0c;旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型&#xff0c;支持文本生成、翻译、代码编写、问答等多种…...