Unity 经纬度定位

近期遇到实际的开发需求,对实际获取到的经纬度信息进行映射,但是实际的需求就只是针对局部的坐标进行映射,比如北京市一个城市范围的坐标,所以根本不需要全局的经纬度设定,最后裁定的方案是对经纬度坐标进行一个比值转换的计算处理。

实现的步骤大值分为三步:

1、经纬度的坐标区域划分:

如果只是一个区域的经纬度信息,就直接选取到整个区域的经纬度信息,比如福建省的经纬度信息,这里我选取的经纬度信息是左上角(114.4,28.6)、左下角(114.4,23.2)、右上角(121.57,28.6)、右下角(121.57,23.2)四个顶点,四个顶点划分成一个区域。


2、经纬度信息比值获取

经纬度划分出之后进行经纬度的比值计算,计算的流程步骤为,将获取到的经纬度信息按原点为0的方式做比值的转换,以上述获取的划分的经纬度区间信息为例,假如此刻需要定位的地点的经纬度为(118,25),实际的经纬度比值转换为x轴比值:比值 = (118 - 左上角顶点经度) / (右下角经度 - 左下角 经度),y轴比值:比值 = (25 - 左下角纬度) / (右下角经度 - 左下角纬度)。得出比值之后再针对Unity内的坐标系做比值的运算得到Unity内的世界或者局部坐标系坐标。


3、经纬度比值与Unity坐标的转换

转换的计算公式和获取比值时一样,首先创建四个空物体,将空物体布置在Unity中需要进行经纬度定位区域的四个边界顶点上,即左上角,左下角,右上角,右下角四个位置,此时转化后的横纵坐标为:x坐标 = (右下角空物体x坐标 - 左下角空物体x坐标) * x轴比值 + 左下角空物体x坐标,y坐标 = (左上角空物体y坐标 - 左下角空物体y坐标) * y轴比值 + 左下角空物体y坐标。得到的坐标就是Unity内进行映射的坐标位置,如果是3D的场景空间,可先将旋转角度和Z坐标缓存记录,然后归零,设置完横纵坐标后再重新赋值。核心逻辑代码如下。

private Vector2 GetPos(float x, float y,float z)
    {
        //108.92,34.42/ 108.92,18.5/ 125.5,34.42/ 125.5,18.5
        //计算公式
        //以左下角为坐标原点(org)
        //--- tarX(目标位置x坐标)
        //--- tarY(目标位置y坐标)
        //--- orgX(坐标原点X坐标)
        //--- orgY(目标位置y坐标)
        //--- maxY(边界点y)
        //--- maxX(边界点x)
        //(tarX - orgX) /(maxX - orgX)--- 映射后x轴的坐标比例
        //(tarY - orgY) /(maxY - orgY)--- 映射后y轴的坐标比例
        //tar_pos为顶点空物体的缓存数组


        Vector3 pos = Vector3.one;
        float rateX = (x - left_bottom.x) / (right_bottom.x - left_bottom.x);
        float rateY = (y - left_bottom.y) / (left_top.y - left_bottom.y);
        pos.x = (tar_pos[2].position.x - tar_pos[0].position.x) * rateX + tar_pos[0].position.x;
        pos.y = (tar_pos[1].position.y - tar_pos[0].position.y) * rateY + tar_pos[0].position.y;
        pos.z = z;
        return pos;
    }

实际效果如下,将获取的到经纬度点转化后通过实例化预设展示出转化后的点,因为选取经纬度时数据会有偏差,实际点的位置会有轻微的偏移,不过点的位置基本是准确的。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值