实际经纬度转换为Unity坐标

如图所示是Unity中的坐标,Position:X、Y、Z物体在是Unity中空间坐标点的位置,Rotation:X、Y、Z是旋转方向,Scales:X、Y、Z是放大缩小方向;

如何将Unity的坐标与地球地面联系在一起呢?

现在定义:Position:X轴作为地球南北方向(纬度)、Y轴作为地球高度(海拔)、Z作为地球东西方向(经度),地球地面的1米就等于X轴或Z轴的1,这样就可以实现真实场景1米对应的Unity中场景也是1(1:1的去还原场景),Y轴同样也是。

如何将地球的经纬与Unity的坐标联系在一起呢?

查找和计算了一下:

地球半径:6371000M
地球周长:2 * 6371000M * π = 40030173
纬度25°地球周长:40030173 * cos38 = 36279658M
任意地球经度周长:40030173M

经度(东西方向)1M实际度:360°/36279658M=1.141255544679108e-5=0.00000992
纬度(南北方向)1M实际度:360°/40030173M=8.993216192195822e-6=0.00000899

感觉这样有点难记,就转换一下计算一下,取一个误差比较小同样都可以接收的误差值:

经度每隔0.00001度,相距相差约1米;(误差值就会在1米级以内)

纬度每隔0.00001度,相距相差约1.1米;

经度每隔0.0001度,相距相差约10米;(误差值就会在10米级以内)

纬度每隔0.0001度,相距相差约11米;

经度每隔0.001度,相距相差约100米;(误差值就会在100米级以内)

纬度每隔0.001度,相距相差约110米;

获取的经纬越精确我们的误差值就越小。

这个跟Unity坐标有什么关系?

根据以上的定义:真实场景相距1米对应的Unity中场景相距1,给1加一个单位就是1米;就可以实现真实场景相距1米也是Unity中的1米,如果是1:500比例地图数据,在Unity中生成地图,那么在Unity中显示相距为1米时,真实相距为500米,这时我们可以通过Scales:X、Y、Z进行放大500倍也可以现实与真实地图1:1参数,这样建立经纬度去确定位置更为简单。

接下来就是我们如何将Unity场景与地球地图想结合起来,使用经纬度去表达在unity的坐标位置

其实经纬度组合起来就是一个二维类型的数据,从以上定义中Unity中坐标Position:X轴作为地球南北方向(纬度)、Y轴作为地球高度(海拔)、Z轴作为地球东西方向(经度),现在我们就将X轴作为维度、Z轴作为经度;

如何去实现这个定义可行?

将Unity中的我们首先在Unity中创建两个点,两个点的位置就是一个正方形的对角线的位置即可,将这两个点的位置分别给一个经纬度(经纬越精确我们的误差值就越小),在通过其和坐标的X,Z轴的值和经纬度的差值,从而计算出坐标。

如图所示:

两个球就是确定位置的关键点,我们先将经纬度分别设好,这样接收的经纬度就可以通过这两个点的经纬度,从而确定出其在场景中的位置。

说通俗一点就是,已知A,B的位置和对应的数值,和 C 的位置,让你求 C 对应的值,是一个道理。

动态设置两个定位点的方法,就是在接收第一个数据的第一时间,设置两个定位点的坐标,就是将第一个接收到的经纬度作为场景的中心,然后通过经纬度各加减多少度,来确定两边的定位点,这样做的好处就是不论服务器发送的是什么样的经纬度我都可以计算出,并且不超出定位点单的范围。

反之,给到Unity坐标点然后得到经纬度也是可以的。

减少误差办法:

  1. 外来导入地图模型
  1. 在导入地图前首先要固定同一个经纬去导出数据(例如:WGS84);
  2. 如果只使用两个点确定一张地图范围,地图必须是去正方形,如取长方形的取四个点(尽量取正方形);
  3. 取点的经纬度时,尽量的取到0.00001,小数点后五位的值,从而误差会在1米内;
  4. 取点时能有确定地图的范围,给到地图的时同时,也要将取的点独立出来,如图所示:;

  1. 经纬度可以给数值,输入到程序中进行计算,但是点在Unity中的坐标位置必须要使用程序获取,再进行计算,这样就避免了认为手动放置获取坐标不够精细的问题;
  2. 这样过程就可以得到整个地图的一个经纬度和在Unity坐标,后续的点(经纬度点)不管时怎么样的都可以在通过该算法进行得到,只要经纬点值取到小数点后五位;误差都是非常小的。

  1. Unity自身生成地图

1、插件直接生成地图,同样也是需要两个点确定正方形一张地图范围;

2、两个点的位置也是地图两个对角位置,新建两个空物体,使空物体的所在的位置在两个对角的位置上;

3、直接将两个点给到程序即可;

4、生成地图的一个经纬度和在Unity坐标,后续的点(经纬度点)不管时怎么样的都可以在通过该算法进行得到,只要经纬点值取到小数点后五位;误差都是非常小的。

精确度高条件:

  1. 统一的经纬数据(例如:WGS84);
  2. 经纬取值(小数点后五位的值);
  3. 程序读取点Unity所在的坐标位置;
  4. 尽量不要手动放置;
  5. 外部生成的地图数据不能与Unity生成的数据混进来一起用;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值