养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

Unity 实用教程 之 快速计算两经纬度间的距离

时间:2024-11-01 22:41:10

Unity实用教程之快速计算两经纬度件的距离。本节介绍,在Unity开葛激握颟发中,获取当前经纬度的信息,并且算出预指定经纬度的距离,具体如下

工具/原料

Unity

方法/步骤

1、打开Unity,新建一个空工程,具体如下图

Unity 实用教程 之 快速计算两经纬度间的距离

2、在场景中,新建一个画布Canas,添加一个Image作为背景,添加一个按钮,和两个Text显示获取到的经纬度信息和两经纬度的距离,具体如下图

Unity 实用教程 之 快速计算两经纬度间的距离

3、保存场景,然后在工程中新建一个脚本,双击打开脚本进行编写代码获取经纬度信息以及计算两个经纬度之间的距离,具体如下图

Unity 实用教程 之 快速计算两经纬度间的距离

4、编写代码,首先获取当前经纬度的距离,代码具体如下图

Unity 实用教程 之 快速计算两经纬度间的距离

Unity 实用教程 之 快速计算两经纬度间的距离

5、然后计算当前经纬度与指定经纬度之间的距离,计算方法具体如下图

Unity 实用教程 之 快速计算两经纬度间的距离

6、脚本具体代码如下:usingSystem.Collec隋茚粟胫tions;usingSystem.Collections.Generic;usin爿讥旌护gUnityEngine;usingUnityEngine.UI;usingSystem;publicclassGetGPS:MonoBehaviour{stringGetGps="";publicTextShowGPS;publicTextdistanceText;privateconstdoubleLAT1=22.72555f;privateconstdoubleLNG1=114.2108f;///<summary>///初始化一次位置///</summary>voidStart(){StartCoroutine(StartGPS());GetGps="N:"+Input.location.lastData.latitude+"E:"+Input.location.lastData.longitude;GetGps=GetGps+"Time:"+Input.location.lastData.timestamp;ShowGPS.text=GetGps;Debug.Log(GetGps);}///<summary>///刷新位置信息(按钮的点击事件)///</summary>publicvoidupdateGps(){StartCoroutine(StartGPS());GetGps="N:"+Input.location.lastData.latitude+"E:"+Input.location.lastData.longitude;GetGps=GetGps+"Time:"+Input.location.lastData.timestamp;ShowGPS.text=GetGps;Debug.Log(GetGps);//计算距离doubledistanceAB=GetDistance(LAT1,LNG1,Input.location.lastData.latitude,Input.location.lastData.longitude);distanceText.text="距离22.72555,114.2108是:"+distanceAB;}///<summary>///停止刷新位置(节省手机电量)///</summary>voidStopGPS(){Input.location.Stop();}///<summary>///StartstheGP.///</summary>///<returns>TheGP.</returns>IEnumeratorStartGPS(){//Input.location用于访问设备的位置属性(手持设备),静态的LocationService位置//LocationService.isEnabledByUser用户设置里的定位服务是否启用if(!Input.location.isEnabledByUser){GetGps="isEnabledByUservalueis:"+Input.location.isEnabledByUser.ToString()+"PleaseturnontheGPS";yieldreturnfalse;}//LocationService.Start()启动位置服务的更新,最后一个位置坐标会被使用Input.location.Start(10.0f,10.0f);intmaxWait=20;while(Input.location.status==LocationServiceStatus.Initializing&&maxWait>0){//暂停协同程序的执行(1秒)yieldreturnnewWaitForSeconds(1);maxWait--;}if(maxWait<1){GetGps="InitGPSservicetimeout";yieldreturnfalse;}if(Input.location.status==LocationServiceStatus.Failed){GetGps="Unabletodeterminedevicelocation";yieldreturnfalse;}else{GetGps="N:"+Input.location.lastData.latitude+"E:"+Input.location.lastData.longitude;GetGps=GetGps+"Time:"+Input.location.lastData.timestamp;Debug.Log("Keyidingwei");yieldreturnnewWaitForSeconds(100);}}#region计算两经纬度间的距离privateconstdoubleEARTH_RADIUS=6378137;///<summary>///计算两点位置的距离,返回两点的距离,单位米///该公式为GOOGLE提供,误差小于0.2米///</summary>///<paramname="lat1">第一点纬度</param>///<paramname="lng1">第一点经度</param>///<paramname="lat2">第二点纬度</param>///<paramname="lng2">第二点经度</param>///<returns></returns>publicstaticdoubleGetDistance(doublelat1,doublelng1,doublelat2,doublelng2){doubleradLat1=Rad(lat1);doubleradLng1=Rad(lng1);doubleradLat2=Rad(lat2);doubleradLng2=Rad(lng2);doublea=radLat1-radLat2;doubleb=radLng1-radLng2;doubleresult=2*Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2)+Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)))*EARTH_RADIUS;returnresult;}///<summary>///经纬度转化成弧度///</summary>///<paramname="d"></param>///<returns></returns>privatestaticdoubleRad(doubled){return(double)d*Math.PI/180d;}#endregion}

7、脚本编译正确后,回到Unity界面,把脚本挂在到摄像机上,并把对应的Text赋值给脚本,按钮添加上“updateGps”函数,具体如下图

Unity 实用教程 之 快速计算两经纬度间的距离

Unity 实用教程 之 快速计算两经纬度间的距离

8、然后导出iOS或者Andorid应用,安装到手机上,点击“刷新信息”按钮,即可显示经纬度信息,并且计算出两个经纬度间的距离,具体如下图

Unity 实用教程 之 快速计算两经纬度间的距离

Unity 实用教程 之 快速计算两经纬度间的距离

9、如是iOS导出,没有显示地理位置,必要擢爻充种的时候,在“Build”前,把“PlayerSettings”的“LocationUsageDescription”填写一下,具体如下图

Unity 实用教程 之 快速计算两经纬度间的距离

10、到此,《Unity实用教程之快速计算两经纬度间的距离》讲解结束,谢谢

© 一点知识