【Unity】坐标转换经纬度方法(应用篇)

【Unity】坐标转换经纬度方法(应用篇)

解决地图中经纬度坐标转换与unity坐标互转的问题。使用线性变换的方法,理论上可以解决小范围内所以坐标转换的问题。

之前有写过[Unity]坐标转换经纬度方法(原理篇),在实际使用中,由于步骤比较繁琐,基于之前的方法,详细说明使用方法。

案例资源下载地址

一、使用步骤

  • 绑定脚本
  • 建立控制原点和配准点
  • 获得变换二项式
  • 坐标互转方法

1.绑定脚本

导入资源包后可以看见一下目录结构

  • Examples下的坐标转换使用是演示demo

  • Transfromation下的是功能脚本

将ChangeMatrixMgr拖入场景中的任意一个GameObject下即可,演示demo中是放在空物体GameManager下。

2.建立控制原点和配准点

(1)建立控制原点

在目录中找到Prefab下的Piont拖入场景中,并摆放到一个比较特殊容易辨别的位置。(控制点尽量放在地图的中间区域)

随便在网上找到一个获取经纬度的网站,用于获取经纬度。

经纬度查询定位 拾取坐标系统

选择影像图,在地图中找到Piont摆放的位置

这里可以得到该点的经纬度。把经纬度填写到Piont下的组件ChangePoint里的LonLatPoint中,X填纬度,Y填经度

将控制原点Piont拖入ChangeMatrixMgr中的OriginPoint下(红框放入控制点)

(2)建立配准点

配准点的建立和控制点一样,建立后放如GruberPoints数值中。

注意:配准点至少建立两个

3.获得变换二项式

配准点和控制原点建立好后,便可以创建变换的二项式

读取配准点对应的经纬度坐标和本地坐标到数组

  List<DoubleVector2> LonLatPoints;//经纬度坐标点数组
  List<DoubleVector2> LocalPoints;//本地坐标点数组  
void ExtractionCoordinate()
    {
        LonLatPoints = new List<DoubleVector2>();
        LocalPoints = new List<DoubleVector2>();
        int length = GruberPoints.Length;
        for (int i = 0; i < length; i++)
        {
            LonLatPoints.Add(GruberPoints[i].LonLatPoint - OriginPoint.LonLatPoint);
            LocalPoints.Add(GruberPoints[i].LocalPoint - OriginPoint.LocalPoint);
        }
    }

创建二项式

    public DoubleVector4 ToLonLatMatrix;//转经纬度二项式
    public DoubleVector4 ToLocalMatrix;//转本地坐标二项式
    void CreateMatrix()
    {
        ExtractionCoordinate();
        changeMatrixUtil = new ChangeMatrixUtil(LonLatPoints, LocalPoints, errorValue);
        ToLonLatMatrix = changeMatrixUtil.ToLonLatMatrix;
        ToLocalMatrix = changeMatrixUtil.ToLocalMatrix;
    }

二项式的值只需要创建一次,后面可以复用。

可以单独复制赋值,赋值后可以移除配准点,上面的ExtractionCoordinate和CreateMatrix两个方法可以不调用。

二项式只要有值,重新运行也不影响。

4.坐标互转方法

        /// <summary>
        /// 变换坐标
        /// </summary>
        /// <param name="Vector">要转换的坐标</param>
        /// <param name="ChangeMatrix">变换行列式</param>
        /// <param name="BZero">变换后原点坐标</param>
        /// <param name="FZero">要转换的原点坐标</param>
        /// <returns></returns>
        public static DoubleVector2 GetChangeVector(DoubleVector2 Vector, DoubleVector4 ChangeMatrix, DoubleVector2 BZero, DoubleVector2 FZero)

demo

  DoubleVector2 lonLatPoint= DoubleVector2.GetChangeVector(test.LocalPoint, ToLonLatMatrix, OriginPoint.LonLatPoint, OriginPoint.LocalPoint);

经纬度转本地

第一个参数传入经纬度坐标;

第二个参数传入转本地坐标的二项式;

第三个参数传入本地坐标的控制原点;

第四个参数传入经纬度坐标控制原点

本地转经纬度

第一个参数传入本地坐标;

第二个参数传入转经纬度坐标的二项式;

第三个参数传入经纬度坐标控制原点;

第四个参数传入本地坐标的控制原点

二、扩展

1.产生误差的原因

地球是不规则的球体,将球体投影到平面上是不能正交投影的,必然出现位置的偏移,投影方式的不同就会产生不同的坐标系,比如WGS84,GCJ-02等,同样的经纬度在不同的坐标系下位置是不一样的,而且差距很大。

2.报NaN计算出错的原因

当配准点过多时,配准点的位置和出现错误,或者配准点的坐标系不一致,会导致二项式无法求出。

解决方法:

  1. 减少配准点数量
  2. 修改ChangeMatrixMgr下的ErrorValue参数
  3. 检查配准点

置是不一样的,而且差距很大。

2.报NaN计算出错的原因

当配准点过多时,配准点的位置和出现错误,或者配准点的坐标系不一致,会导致二项式无法求出。

解决方法:

  1. 减少配准点数量
  2. 修改ChangeMatrixMgr下的ErrorValue参数
  3. 检查配准点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用percona-xtrabackup备份MySQL数据

xtrabackup备份分为两种 本文参考链接1 本文参考链接2 全量备份 1.备份数据 要创建备份&#xff0c;请xtrabackup使用xtrabackup --backup option. 您还需要指定一个xtrabackup --target-dir选项&#xff0c;即备份的存储位置&#xff0c;如果InnoDB数据或日志文件未存储在同…

Debian 10驱动Broadcom 无线网卡

用lspci命令查询无线网卡品牌&#xff1a; 运行下面代码后&#xff0c;重启即可。 apt-get install linux-image-$(uname -r|sed s,[^-]*-[^-]*-,,) linux-headers-$(uname -r|sed s,[^-]*-[^-]*-,,) broadcom-sta-dkms

Kotlin~Bridge桥接模式

概念 抽象和现实之间搭建桥梁&#xff0c;分离实现和抽象。 抽象&#xff08;What&#xff09;实现&#xff08;How&#xff09;用户可见系统正常工作的底层代码产品付款方式定义数据类型的类。处理数据存储和检索的类 角色介绍 Abstraction&#xff1a;抽象 定义抽象接口&…

泛微E8配置自定义触发流程失败

在新公司接了个配置泛微流程触发的活。因为泛微的官方文档并没有详细的操作指引&#xff0c;在测试环境配置之后、要触发的流程可以手工提交&#xff0c;但是触发一直不成功。简单记录下业务场景和其他处理信息&#xff0c;以供参考。 应用版本 目前使用了泛微 E8 &#xff0…

Spring Clould 注册中心 - Eureka,Nacos

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; Eureka 微服务技术栈导学&#xff08;P1、P2&#xff09; 微服务涉及的的知识 认识微服务-服务架构演变&#xff08;P3、P4&#xff09; 总结&#xff1a; 认识微服务-微服务技…

探索Python中的数据可视化利器:Plotly Express

一、引言 在数据分析和可视化领域&#xff0c;数据的有效呈现是至关重要的。Python作为一种强大的编程语言&#xff0c;提供了多种数据可视化工具和库。其中&#xff0c;Plotly Express是一款受欢迎的数据可视化库&#xff0c;它提供了简单易用的接口和丰富的图表类型&#xf…

keepalived集群

keepalived概述 keepalived软件就是通过vrrp协议来实现高可用功能。 VRRP通信原理 VRRP就是虚拟路由冗余协议&#xff0c;它的出现就是为了解决静态路由的单点故障。 VRRP是通过一种竞选一种协议机制来将路由交个某台VRRP路由器。 VRRP 用IP多播的方式&#xff08;多播地…

【.net】本地调试运行只能用localhost的问题

【.net】本地调试运行只能用localhost的问题 解决方案 找到到项目目录下 隐藏文件夹 .vs /项目名称/config/applicationhost.config <bindings><binding protocol"http" bindingInformation"*:1738:localhost" /></bindings> 再加一条你…

visual studio 2022配置

前提&#xff1a;我linux c 开发 一直在使用vscode 更新了个版本突然代码中的查找所用引用和变量修改名称不能用了&#xff0c;尝试了重新配置clang vc都不行&#xff0c;估计是插件问题&#xff0c;一怒之下改用visual studio 2022 为了同步2个IDE之间的差别&#xff0c;目前…

【计算机视觉|生成对抗】逐步增长的生成对抗网络(GAN)以提升质量、稳定性和变化

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Progressive Growing of GANs for Improved Quality, Stability, and Variation 链接&#xff1a;[1710.10196] Progressive Growing of GANs for Improved Quality, Stability, and Vari…

musl libc ldso 动态加载研究笔记:01

前言 musl 是一个轻量级的标准C库&#xff0c;建立在系统调用之上&#xff0c;可以认为是【用户态】的C 库&#xff0c;与 glibc 或者 uClibc 属于同一类。 基于 musl 的 gcc 工具链包括交叉编译工具链&#xff0c;可以用于编译 Linux 或者其他的操作系统&#xff0c;如当前 L…

JVM——类加载器

回顾一下类加载过程 类加载过程&#xff1a;加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 一个非数组类的加载阶段&#xff08;加载阶段获取类的二进制字节流的动作&#xff09;是可控性最强的阶段&#xff0c;这一步我们可以去完成还可以自定义…

STM32 cubemx CAN

接收用到的结构体如下&#xff1a;CAN概念&#xff1a; 全称Controller Area Network&#xff0c;是一种半双工&#xff0c;异步通讯。 物理层&#xff1a; 闭环&#xff1a;允许总线最长40m&#xff0c;最高速1Mbps&#xff0c;规定总线两端各有一个120Ω电阻&#xff0c;闭环…

IC流程中 DFT 学习笔记(2)

引言 DFT是ASIC芯片设计流程中不可或缺的环节。其主要目的是在芯片前端设计验证完成后插入一些诸如寄存器链等可供测试的逻辑&#xff0c;算是IC后端设计的范畴&#xff0c;属于结构测试而非功能测试。主要是在ASIC芯片流片完成后&#xff0c;通过这些已插入的逻辑&#xff0c…

国家一带一路和万众创业创新的方针政策指引下,Live Market探索跨境产业的创新发展

现代社会&#xff0c;全球经济互联互通&#xff0c;跨境产业也因此而崛起。为了推动跨境产业的创新发展&#xff0c;中国政府提出了“一带一路”和“万众创业、万众创新”的方针政策&#xff0c;旨在促进全球经济的互联互通和创新发展。在这个大环境下&#xff0c;Live Market积…

华为PPPOE配置实验

华为PPPOE配置实验 网络拓扑图拓扑说明电信ISP设备配置用户拨号路由器配置查看是否拨上号是否看不懂&#xff1f; 看不懂就对了&#xff0c;只是记录一下命令。至于所有原理&#xff0c;等想写了再写 网络拓扑图 拓扑说明 用户路由器用于模拟家用拨号路由器&#xff0c;该设备…

github以及上传代码处理

最近在github上传代码的时候出现了&#xff1a; /video_parser# git push -u origin main Username for https://github.com: gtnyxxx Password for https://gtny2010github.com: remote: Support for password authentication was removed on August 13, 2021. remote: Plea…

STM32——SPI外设总线

SPI外设简介 STM32内部集成了硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU的负担 可配置8位/16位数据帧、高位先行/低位先行 时钟频率&#xff1a; fPCLK / (2, 4, 8, 16, 32, 64, 128, 256) 支持多主机模型、主或从操作 可…

HTTP与HTTPS的区别

面试常见问题&#xff0c;HTTPS优化总结易记版&#xff1a; 1、HSTS重定向技术&#xff1a;将http自动转换为https&#xff0c;减少301重定向 2、TLS握手优化&#xff1a;在TLS握手完成前客户端就提前向服务器发送数据 3、会话标识符&#xff1a;服务器记录下与某客户端的会…