C# NetTopologySuite+ProjNet 任意图形类型坐标转换

news/2025/1/11 15:06:54/

添加引用:NetTopologySuite、ProjNet、ProjNet.SRID

Program.cs文件:

using ProjNet.CoordinateSystems;
using ProjNet.CoordinateSystems.Transformations;
using ProjNet.SRID;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Xsl;
using NetTopologySuite.IO;
using NetTopologySuite.Geometries;namespace Reproject2
{internal class Program{static void Main(string[] args){CoordinateSystem projCs = SRIDReader.GetCSbyID(4527);CoordinateSystem geoCs = SRIDReader.GetCSbyID(4490);CoordinateTransformationFactory ctFactory = new CoordinateTransformationFactory();ICoordinateTransformation transformation = ctFactory.CreateFromCoordinateSystems(projCs, geoCs);Polygon original = new Polygon(new LinearRing(new Coordinate[] {new Coordinate(39498340.1151, 4807100.9600),new Coordinate(39499340.1151, 4809100.9600),new Coordinate(39497340.1151, 4806100.9600),new Coordinate(39498340.1151, 4807100.9600)}));foreach (var coor in original.Coordinates){Console.WriteLine("原始坐标: " + coor.X + " ; " + coor.Y);}Geometry after = Transform(original, transformation.MathTransform);foreach (var coor in after.Coordinates){Console.WriteLine("转换后坐标: " + coor.X + " ; " + coor.Y);}Console.ReadKey();}public static Geometry Transform(Geometry geometry, MathTransform mathTransform){geometry = geometry.Copy();geometry.Apply(new MathTransformFilter(mathTransform));return geometry;}}
}

新增文件:MathTransformFilter.cs,用于完成任意geometry的序列化转坐标。

using NetTopologySuite.Geometries;
using ProjNet.CoordinateSystems.Transformations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Reproject2
{public class MathTransformFilter : ICoordinateSequenceFilter{private readonly MathTransform _mathTransform;public MathTransformFilter(MathTransform mathTransform)=> _mathTransform = mathTransform;public bool Done => false;public bool GeometryChanged => true;public void Filter(CoordinateSequence seq, int i){var (x, y, z) = _mathTransform.Transform(seq.GetX(i), seq.GetY(i), seq.GetZ(i));seq.SetX(i, x);seq.SetY(i, y);seq.SetZ(i, z);}}
}

 


http://www.ppmy.cn/news/1070560.html

相关文章

2023高教社杯数学建模国赛E题思路解析+代码+论文

下文包含:2023高教社杯数学建模国赛E题思路解析代码参考论文等及如何准备数学建模竞赛(7号比赛开始后逐步更新) C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资料,帮助大家取得好成绩。…

低功耗低成本BLE发射器

低功耗低成本BLE发射器MG223基于巨微薪火架构的蓝牙射频、基带和协议栈,根据自研蓝牙基带和蓝牙5.1广播的特点,做了面向无线传感器的简化和创新,使之更加适合广泛的轻量级蓝牙无线传感的应用。MG223符合蓝牙5.1广播发射规范,现已获…

数据库备份和Shell基础测试及AWK(运维)

第一题:简述一下如何用mysql命令进行备份和恢复,请以test库为例,创建一个备份,并再用此备份恢复备份 备份步骤: 备份test库:使用mysqldump命令备份test库,并将备份写入一个.sql文件中。命令示例…

zookeeper启动失败(Error contacting service. It is probably not running.)

问题描述 启动zk时报如下错误: 解决办法 先查日志找找报错原因: 找到zk安装目录下的logs文件夹下的日志文件,查看连接失败原因: 如果是端口问题,修改conf文件,指定端口重新启动即可: 注&a…

antdesign Vue table - 换行

表头换行 customHeaderCell: () > {return {style: {whiteSpace: pre-wrap,},}; }, 列表换行 customCell:() > {return {style: {wordWrap:break-word,wordBreak:break-all,whiteSpace:normal,minHeight:50px,// width:150,}} }

什么是GOTS有机纺织标准认证?

【什么是GOTS有机纺织标准认证?】 1、GOTS认证是什么? 全球有机纺织标准(GOTS)认证,Global Organic Textile Standard,简称GOTS。是由天然纺织品协会(IVN)、日本有机棉协会(JOCA&…

盲盒电商小程序

一、准备阶段 在开始制作盲盒小程序前,你需要在乔拓云平台上创建一个账号,并登录到后台管理页面。在后台管理页面,你可以找到商城管理模块,点击进入商城编辑制作页面。 二、小程序商城模板选择与编辑 1.在商城编辑制作页面&#x…

R语言最简单的计算运行时间的方法

引言 要知道哪种编程的时间短&#xff0c;R语言中应该如何编码呢&#xff1f; 方法很简单&#xff0c;使用运行前Sys.time() 和运行后Sys.time()相减既可以得到运行时间。 代码如下 代码 #### 运行前时间timestart<-Sys.time()####程序运行 x <- rnorm(100000)y <…