ArcGIS Engine基础(31)之使用仿射变换对矢量数据进行空间校正

news2024/11/25 18:33:21

        在生产数据过程中,因每个工程项目都可能有自己的施工坐标系,难免会产生数据提供方与数据使用方采用的坐标系不一致,造成数据在不同坐标系下存在一定偏移、旋转、缩放等,为了让数据能够在新坐标系准确定位,需要进行空间校正,空间校正是针对矢量图的,栅格配准是针对栅格影像的,arcgis中提供的空间校正的方法有:仿射变换、投影变换、相似变换、橡皮页变换等。

        本文介绍的是仿射变换法,仿射变换是空间直角坐标变换的一种,它是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直线”和“平行性”,其可以通过一系列的原子变换的复合来实现,包括平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。

        二维的彷射变换是AffineTransformation2D类,彷射变换主要有两种变换:Conformal Transformation(等角变换)和 Affine Tranformation(真彷射变换),对应的接口机器构造函数为:

IAffineTransformation2D3::DefineConformalFromControlPoints和IAffineTransformation2D::DefineFromControlPoints。其中等角变换要求至少两个已知点,因为他的变换函数使用4参数;而真彷射变换要求至少三个已知点,因为他的变换函数使用6参数。

使用arcgis engine实现代码参考如下:

   public static IAffineTransformation2D3GEN TransformMethodDTto2000{ get; set; }
        public static IAffineTransformation2D3GEN GetTransformMethodDTto2000()
        {
            if (TransformMethodDTto2000 != null) return TransformMethodDTto2000;
            //校正控制点,点位一一对应。
            List<IPoint> fromPoints = new List<IPoint>();
            List<IPoint> toPoints = new List<IPoint>();
            //此处fromPoints为本地坐标系控制点
            fromPoints.Add(new PointClass() { X = 30629.419, Y = 27566.627 });
            fromPoints.Add(new PointClass() { X = 30650.761, Y = 27572.848 });
            fromPoints.Add(new PointClass() { X = 39634.757, Y = 21310.338 });
            fromPoints.Add(new PointClass() { X = 39633.747, Y = 21306.358 });
            fromPoints.Add(new PointClass() { X = 27685.06, Y = 21921.377 });
            fromPoints.Add(new PointClass() { X = 27700.645, Y = 21901.178 });
            fromPoints.Add(new PointClass() { X = 22285.505, Y = 10998.906 });
            fromPoints.Add(new PointClass() { X = 22262.987, Y = 10992.98 });
            fromPoints.Add(new PointClass() { X = 15975.327, Y = 17922.094 });
            fromPoints.Add(new PointClass() { X = 15983.915, Y = 17933.157 });
            //此处toPoints为2000坐标系控制点
            toPoints.Add(new PointClass() { X = 441160.807, Y = 4443411.577 });
            toPoints.Add(new PointClass() { X = 441182.195, Y = 4443417.624 });
            toPoints.Add(new PointClass() { X = 450114.331, Y = 4437083.928 });
            toPoints.Add(new PointClass() { X = 450113.289, Y = 4437079.957 });
            toPoints.Add(new PointClass() { X = 438171.511, Y = 4437790.865 });
            toPoints.Add(new PointClass() { X = 438186.931, Y = 4437770.544 });
            toPoints.Add(new PointClass() { X = 432685.145, Y = 4426913.282 });
            toPoints.Add(new PointClass() { X = 432662.583, Y = 4426907.537 });
            toPoints.Add(new PointClass() { X = 426431.277, Y = 4433886.126 });
            toPoints.Add(new PointClass() { X = 426439.954, Y = 4433897.12 });


            IPoint[] fromPointsArray = fromPoints.ToArray();
            IPoint[] toPointsArray = toPoints.ToArray();
            IAffineTransformation2D3GEN transformMethodDTto2000 = GetAffineTransformation(fromPointsArray, toPointsArray);
            TransformMethodDTto2000 = transformMethodDTto2000;
            return transformMethodDTto2000;
        }
        ///从控制点定义仿射变换方程式
        ///源控制点
        ///目标控制点
        ///返回变换定义
        private static IAffineTransformation2D3GEN GetAffineTransformation(IPoint[] pFromPoints, IPoint[] pToPoints)
        {
            //实例化仿射变换对象
            IAffineTransformation2D3GEN tAffineTransformation = new AffineTransformation2DClass();
            //从源控制点定义参数
            tAffineTransformation.DefineFromControlPoints(ref pFromPoints, ref pToPoints);
            return tAffineTransformation;
        }

坐标点仿射变换:

// 本地坐标转为2000坐标

ITransform2D transform2D = pt as ITransform2D;

 transform2D.Transform(esriTransformDirection.esriTransformForward, transformMethodDTto2000 as ITransformation);

// 2000坐标转为本地坐标

ITransform2D transform2D = pt as ITransform2D;

 transform2D.Transform(esriTransformDirection.esriTransformReverse, transformMethodDTto2000 as ITransformation);

在arcmap中可以打开空间校正工具进行操作,操作时需要同时开启编辑工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154141.html

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

相关文章

kitti数据集理解及可视化

kitti数据集简介 kitti数据集是比较早出来的3D检测方面的数据集&#xff0c;相对来说数据结构简单&#xff0c;适合做单目检测的工作&#xff0c;目前也是业界和学术界常用的公开数据集。 自己最近也在做单目3D检测的工作&#xff0c;所以也分享一些理解&#xff0c;希望能给到…

微服务自动化管理【Docker跨主机集群之Flannel】

环境说明 CentOS7 etcd-v3.4.3-linux-amd64.tar.gz flannel-v0.11.0-linux-amd64.tar.gz 官方文档&#xff1a;https://github.com/coreos/flannel 下载地址&#xff1a;https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz 1.…

verilog学习笔记- 9)流水灯实验

目录 简介&#xff1a; 实验任务&#xff1a; 硬件设计&#xff1a; 程序设计&#xff1a; 下载验证&#xff1a; 简介&#xff1a; LED&#xff0c;又名发光二极管。LED 灯工作电流很小&#xff08;有的仅零点几毫安即可发光&#xff09;&#xff0c;抗冲击和抗震性能好&…

工业互联网安全漏洞分析

声明 本文是学习github5.com 网站的报告而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 研究背景 在政策与技术的双轮驱动下&#xff0c;工业控制系统正在越来越多地与企业内网和互联网相连接&#xff0c;并与新型服务模式相结合&#xff0c;逐步形成…

day01--Python学习笔记之安装及测试

目录 官网下载 1、Python自带简单的开发环境 2、Python的交互式命令行程序 3、官方技术文档 4、安装模块文档 1、Python自带简单的开发环境 在当前中编辑代码 在新文件中编辑代码 2、P…

springboot 使用tomcat详解

1.使用内嵌tomcat启动 创建tomcat对象设置端口设置Context设置servlet 和 路径 2.spring中单独注册servlet和地址的映射关系 Beanpublic ServletRegistrationBean getServletRegistrationBean() {ServletRegistrationBean bean new ServletRegistrationBean(apiServlet);bean…

免费GPU攻略

白嫖kaggle kaggle每周会送38个小时&#xff0c;16GB显存。 验证手机号 根据 kaggle问答可知&#xff0c;需要手机号短信验证&#xff0c;账号才能用GPU。国内的手机号都是可用的。操作如下&#xff1a; 点击右上角头像&#xff0c;点击Account。 到了个人详情页后&#xf…

基于JAVA springboot+mybatis智慧生活分享平台设计和实现

基于JAVA springbootmybatis智慧生活分享平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

【MySQL进阶】执行一条 sql 语句,期间会发生什么

【MySQL进阶】执行一条 sql 语句&#xff0c;期间会发生什么? 文章目录【MySQL进阶】执行一条 sql 语句&#xff0c;期间会发生什么?MySQL 执行流程是怎样的&#xff1f;第一步&#xff1a;连接器第二步&#xff1a;查询缓存第三步&#xff1a;解析 SQL解析器第四步&#xff…

Google Play Install Referrer API 和 Facebook App Ads Referral 集成

介绍&#xff1a;由于需要精准的获取投放广告的数据&#xff08;投放的平台&#xff0c;防止数据的丢失等&#xff09;。我们使用了Google Play Install Referrer API 和Facebook App Ads Referral结合采集数据&#xff0c;然后通过后台服务记录数据。最后服务器记录的数据与Fa…

openwrt tc(traffic contrl)配置及使用

在某些情况下&#xff0c;嵌入式设备需要用到弱网环境进行测试。网上针对tc的配置有很多&#xff0c;但是7688的没找到&#xff0c;所以做个记录&#xff0c;方便大家使用。netem配置 Kernel modules > Network Support > kmod-netemqos-scripts配置> Base system >…

甲氧基聚乙二醇-葡聚糖 mPEG-Dextran结构式;Dextran-PEG科研实验用

甲氧基聚乙二醇-葡聚糖 mPEG-Dextran 中文名称&#xff1a;甲氧基聚乙二醇-葡聚糖 英文名称&#xff1a;mPEG-Dextran 规格&#xff1a;500mg/1g/5g/10g 分散系数&#xff1a;小于等于1.05 分子量&#xff08;PEG&#xff09;&#xff1a;2000&#xff1b;3400&#xff1b…

Jmeter5.0之 dubbo插件安装

我记得之前 这个链接&#xff1a;https://github.com/ningyu1/jmeter-plugins-dubbo/tree/master/dist 能下载现成的dubbo插件&#xff0c;现在这个链接访问后提示404、网上搜索提供了最新的获取方式&#xff0c;1、访问链接&#xff1a;https://github.com/ningyu1/jmeter-plu…

ForkJoin

什么是ForkJoin ForkJoin在JDK1.7&#xff0c;并行执行任务&#xff01;提高效率&#xff0c;大数据量&#xff01; 大数据&#xff1a;Map Reduce&#xff08;把大任务拆分为小任务&#xff09; ForkJoin特点&#xff1a;工作窃取 这个里面维护的都是双端队列 当第一行的任务执…

AJAX

目录1 AJAX 快速入门1.1 介绍1.2 原生 JavaScript 实现 AJAX1.3 原生JS实现AJAX详解1.4 jQuery 的 GET 方式实现 AJAX1.5 jQuery 的 POST方式实现 AJAX1.5 jQuery 的 通用方式实现 AJAX2 JSON 的处理2.1 JSON 回顾2.2 JSON 转换工具的介绍2.3 JSON转换练习3 案例-搜索联想4 案例…

git 切换分支

1. 查看远程分支&#xff0c;查看当前所有git branch -a 2. 查看本地分支git branch * master3. 切换分支 //创建分支 git checkout -b test origin/test //切换分支 git checkout 分支名

iframe 页面间的通信(分享)

文章目录1. 概述2. 页面之间传递数据3. 直接获取父页面的数据4. 获取父级页面源的信息1. 概述 在许多老的项目中使用的都是 iframe 进行的页面嵌套&#xff0c;我这里写了三个页面进行演示红色的页面为最外层&#xff0c;本地开的服务&#xff0c;端口为 5500&#xff0c;而黄色…

官宣了,德云社京剧神童陶阳亮相河南春晚,为什么不是老乡岳云鹏

随着春节的临近&#xff0c;一年一度的央视春晚&#xff0c;也即将拉开大幕与观众见面&#xff0c;不过今年却略有不同。虽然央视春晚还没有开播&#xff0c;互联网上面就一片抵触声音&#xff0c;有人甚至给出了建议&#xff0c;希望省下钱给大家发红包。 与央视春晚形成鲜明对…

未来的分析型数据库是什么样的?

本文来自于 Doris Summit 2022 演讲实录&#xff0c;演讲人&#xff1a;陈明雨十年对于数据库意味着什么&#xff1f;身处在日新月异的时代&#xff0c;我们见惯了技术的兴起与繁荣、变迁与衰落&#xff0c;甚至是朝荣夕灭。信息技术以前所未有的速度更迭&#xff0c;给周遭事物…

从0到1完成一个Vue后台管理项目(十四、对话框封装、接口联通、api优化 很重点(封装思想))

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…