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

news2024/11/23 13:24:05

添加引用: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.coloradmin.cn/o/940050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【会议征稿】2023智能通信与网络国际学术会议(ICN 2023)

2023智能通信与网络国际学术会议(ICN 2023) 2023 International Conference on Intelligent Communication and Networking (ICN2023) 2023智能通信与网络国际学术会议(ICN 2023)将于2023年11月10-12日在中国常州召开。ICN 2023…

507页XX市应急管理局智慧矿山煤矿数字化矿山技术解决方案

导读:原文《507页XX市应急管理局智慧矿山煤矿数字化矿山技术解决方案》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 部分内容: 第一章 项…

打造个人的NAS云存储-通过Nextcloud搭建私有云盘实现公网远程访问

文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文件共享服…

Docker数据管理(数据卷与数据卷容器)

目录 一、数据卷(Data Volumes) 1、概述 2、原理 3、作用 4、示例:宿主机目录 /var/test 挂载同步到容器中的 /data1 二、数据卷容器(DataVolumes Containers) 1、概述 2、作用 3、示例:创建并使用…

Python工具箱系列(四十一)

使用zip批量压缩文件 前文的代码示例了使用gzip对单个文件进行压缩。本文示例使用更通用的zipfile来批量压缩文件。zipfile也是python内置的库,使用起来非常方便。废话不说,直接上代码示例。 import dbm import glob import zipfile# 保存压缩计划的库名…

冲破时代鸿沟,Linus和Eversheet,杰出程序员的创新成果

在80年代末,电脑技术的普及程度与今日相较,犹如鸿沟天堑。那时,计算机对大多数人来说还是稀罕物,尤其在像中国这样的发展中国家。 与如今充满信息的网络环境相比,那个时代没有Web,没有Google等搜索引擎&am…

Mysql--技术文档--B树-数据结构的认知

阿丹解读: B树(B tree)和B树(B-tree)都是常见的自平衡搜索树数据结构,用于在存储和检索大量数据时提供高效的操作。 基本概念-B树/B树 B树(B-tree)和B树(B tree&#x…

提升生产效率,降低运维成本:纺织业物联网网关应用

在众多物联网技术应用中纺织业正逐渐崭露头角。物联网技术通过无线连接纺织设备、PLC、传感器,实现了纺织厂的生产数据信息的远程监控和数据采集、远程管理,为企业提供了更高效、智能的生产方式。智联物联小编在本文中将重点介绍纺织业物联网的应用与通讯…

每天一道动态规划——第二天

通过第一道的动态规划,有没有点感觉了? 一般我们就是先暴力递归,自己多试试,试试感觉就出来了。 然后加缓存,这种傻缓存,一般就是不依赖之前的状态,还有递归。 后面就直接从初始状态把所有的表…

手把手教你搭建Serv-U FTP服务器共享文件并实现外网远程访问「无公网IP」

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 科技日益发展的今天,移动电子设备似乎成了我们生活的主角,智能…

数据分析基础-数据可视化学习笔记04-互动方式

交互方式 交互(Interaction)是指用户与系统、设备或其他用户之间的相互作用、传递信息和交流的过程。在计算机科学、人机交互和用户体验领域,交互是用户与技术之间的核心概念,它决定了用户如何与计算机系统或其他技术进行沟通、操…

批量剪辑系统矩阵分发管理开发软件

一、视频批量剪辑素材要求 抖音的 OAuth API 以https://open.douyin.com/ 开头。 超过 50MB 的视频建议采用分片上传,可以降低网关超时造成的失败。超过 128MB 的视频必须采用分片上传。视频总大小 4GB 以内。单个分片建议 20MB,最小 5MB。 为了更好的观…

1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源

你是否也在朋友圈看过这样的小广告: 「你要悄悄学Python,然后惊艳所有人。」 现在,GitHub上一位博主告诉你:不用学,用sweetviz就行。 这是一个基于Python编写的数据分析软件,只要掌握3种函数用法&#xf…

Elasticsearch 优化

Elasticsearch 优化 2.1硬件选择 Elasticsearch 的基础是 Lucene ,所有的索引和文档数据是存储在本地的磁盘中,具体的 路径可在 ES 的配置文件 ../config/elasticsearch.yml 中配置,如下: #----------------------------…

使用acme,自动续签免费的SSL,无忧http升级https

使用acme自动续签免费的SSL 安装acme.sh颁发域名将证书安装到nginx下配置nginx的ssl自动续签 这里只进行最简单的操作 安装acme.sh 进入你的用户目录,如果你使用root登陆,那么你的用户目录就是 /root/ curl https://get.acme.sh | sh -s emailmyexam…

[Qt开发思想探幽]QObject、模板继承和多继承

[Qt开发思想探幽]QObject、模板继承和多继承 [Qt开发探幽]QObject、模板继承和多继承***1. QObject为什么不允许模板继承:******2.如果需要使用QObject进行多继承的话,子对象引用的父类链至多只能含有一个QObject******3.如果使用模板类和QObject做多继承…

US-P2F-R-C双线圈插头式比例阀放大器

US-P2F-R-C型插头式安装比例放大器控制不带电反馈的单或双比例电磁铁的比例阀,如比例插装阀、比例方向阀、比例压力阀、比例流量阀、比例叠加阀等,带数显区显示及当前参数,如指令、电流、上下斜坡、颤振频率等,指令类型兼容0-10V、…

2023高教社杯数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

揭秘视频号创收计划:松松一个月赚1300+

我是卢松松,点点上面的头像,欢迎关注我哦! 这是卢松松一个月视频号的收益,1300元。自从视频号在五月份推出创作者分成计划以来,许许多多的视频号创作者开始获得了一些收益,这绝对是一项挺不错的进展。 目前…

Prometheus监控(一)

文章目录 监控对于企业和运维工作的重要性监控?告警?数据采集 Prometheus介绍Prometheus相对于老牌监控的优势和不足理想的监控系统的实现监控系统设计(架构师)监控系统的搭建数据采集的编写监控数据分析和算法稳定性测试监控自动…