1、打开Unity,新建一个空工程,具体如下图
2、在场景中,新建一个画布Canas,添加一个Image作为背景,添加一个按钮,和两个Text显示获取到的经纬度信息和两经纬度的距离,具体如下图
3、保存场景,然后在工程中新建一个脚本,双击打开脚本进行编写代码获取经纬度信息以及计算两个经纬度之间的距离,具体如下图
4、编写代码,首先获取当前经纬度的距离,代码具体如下图
5、然后计算当前经纬度与指定经纬度之间的距离,计算方法具体如下图
6、脚本具体代码如下:usingSystem.Collections;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”函数,具体如下图
8、然后导出iOS或者Andorid应用,安装到手机上,点击“刷新信息”按钮,即可显示经纬度信息,并且计算出两个经纬度间的距离,具体如下图
9、如是iOS导出,没有显示地理位置,必要的时候,在“Build”前,把“Player Settings”的 “Location Usage Description”填写一下,具体如下图
10、到此,《Unity 实用教程 之 快速计算两经纬度间的距离》讲解结束,谢谢