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

这篇具有很好参考价值的文章主要介绍了C# NetTopologySuite+ProjNet 任意图形类型坐标转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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);
        }
    }
}

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

 文章来源地址https://www.toymoban.com/news/detail-686182.html

到了这里,关于C# NetTopologySuite+ProjNet 任意图形类型坐标转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Eigen 类型三维点的世界坐标转换为 OpenCV Mat 类型

    cv::Mat WorldPos; :这行代码声明了一个 OpenCV Mat 对象 WorldPos ,用于存储三维点在世界坐标系下的位置。 cv::eigen2cv(pMP-

    2024年02月12日
    浏览(48)
  • C#底层库--任意进制转换器(可自定义顺序字符,2、4、8、16、18进制都支持)

    C#底层库–RegexHelper正则表达式辅助类 本文链接:https://blog.csdn.net/youcheng_ge/article/details/109745286 C#底层库–程序日志记录类 本文链接:https://blog.csdn.net/youcheng_ge/article/details/124187709 C#底层库–排序算法帮助类 本文链接:https://blog.csdn.net/youcheng_ge/article/details/124495730 C#底层库–

    2024年02月06日
    浏览(51)
  • C#数据类型转换

    目录 1.常用的数据类型: ​编辑1.1别名概念例子: 输出结果: 2.数值类型之间的相互转换:  2.1举例: ​编辑输出结果: 用GetType来获取数据类型的时候,就是指向System.Byte和System.Char这个类,相同其它的也是指向不同的类  实数值类型包括byte、short、int、long、fload、double等,根据这

    2024年02月12日
    浏览(42)
  • 【C#学习笔记】类型转换

    我们简单地将值类型分为5种:整数型,浮点型,布尔型,字符型,再加上一个本属于引用类型的字符串。 由于 C# 是在编译时静态类型化的,因此变量在声明后就无法再次声明,或无法分配另一种类型的值,除非该类型可以隐式转换为变量的类型。 隐式转换 :由于这种转换

    2024年02月14日
    浏览(46)
  • C#类型转换

    大体分为三个大类型:整型(其中又分为有符号整型、无符号整型)、浮点型、特殊类型 注意:浮点数在初始化时要在值后加上后缀,双精度浮点数decimal的后缀为“M”、单精度浮点数double和float的后缀为“f”。 作用:将高精度(大范围)转为低精度(小范围) 语法:大变

    2024年02月14日
    浏览(31)
  • 【C#】通用类型转换

    数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。 自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。 例如: 敲黑板: 转换前后的类型必须相兼容 例如:int和double 隐式

    2024年02月11日
    浏览(39)
  • C# 数据类型与类型转换:包含教程与示例

    C# 中的变量必须是指定的数据类型: 数据类型指定了变量值的大小和类型。 使用正确的数据类型对应于相应的变量是重要的;这样可以避免错误、节省时间和内存,还会使您的代码更易于维护和阅读。最常见的数据类型有: 整数类型: int :4 字节,范围从 -2,147,483,648 到 2,

    2024年01月18日
    浏览(42)
  • C#中的数据类型转换

    开发工具与关键技术: MVC 撰写时间:2021/8/18 下面我们来讲C#中数据类型的转换; 1.C#中的数据类型转换分为两种:隐式类型转换以及显式类型转换; (1)隐式类型转换:将存储范围小的数据类型直接转换为存储范围大的数据类型。 例如: 隐式转换大致分为以下几种: 隐式

    2023年04月08日
    浏览(52)
  • C#学习笔记--变量类型的转换

    转换原则 同类型的大的可以装小的,小类型的装大的就需要强制转换。 隐式转换: 同种类型的转换: 不同类型的转换: char类型可以隐式转换成数值型,根据对应的ASCII码来进行转换。 无符号的无法隐式存储有符号的,而有符号的可以存储无符号的。 显示转换 括号强转(注

    2024年02月08日
    浏览(45)
  • VM图像类型转换专题(C#)

    VisionMaster(后简称VM)作为一款功能强大的工业图形图像处理软件,可对工业中遇到的各种图像进行处理,同时还有功能强大的算子以及很全面的例程,作为图像处理的主程序是非常不错的。当前VM提供了VM算法平台、VM SDK开发、算子SDK开发和算子模块开发四种开发模式兼顾各

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包