美文网首页Unity3D
Unity3d判断是否到达目的地

Unity3d判断是否到达目的地

作者: 稚琦 | 来源:发表于2018-02-06 09:24 被阅读0次

    因为自己本身对JAVA不是很了解,所以高德的java api基本上是看不懂的,一开始想直接用高德的web api 设立一个地理围栏,然后进行判断,但是最后请求的时候地理围栏列表一直返回为空。

    错误的返回值.png

    地理围栏确定已创建,就是最后判断时返回的时候没有值,一直找不到哪里有问题。

    如果会使用高德的地理围栏,则可以忽略以下部分。

    既然没法直接得到,那就在本地算。

    计算两个经纬度直接的距离的方法:

    private const double EARTH_RADIUS = 6378137;
    /// <summary>
    /// 计算两点位置的距离,返回两点的距离,单位:米
    /// 该公式为GOOGLE提供,误差小于0.2米
    /// </summary>
    /// <param name="lng1">第一点经度</param>
    /// <param name="lat1">第一点纬度</param>        
    /// <param name="lng2">第二点经度</param>
    /// <param name="lat2">第二点纬度</param>
    /// <returns></returns>
    public static double GetDistance(double lng1, double lat1, double lng2, double lat2)
    {
        double radLat1 = Rad(lat1);
        double radLng1 = Rad(lng1);
        double radLat2 = Rad(lat2);
        double radLng2 = Rad(lng2);
        double a = radLat1 - radLat2;
        double b = radLng1 - radLng2;
        double result = 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;
        return result;
    }
    
    /// <summary>
    /// 经纬度转化成弧度
    /// </summary>
    /// <param name="d"></param>
    /// <returns></returns>
    private static double Rad(double d)
    {
        return (double)d * Math.PI / 180d;
    }
    

    通过Unity接入高德地图的方法可以实时获得设备当前位置,以经纬度显示。然后通过高德地图web api的逆地理编码进行坐标转换,即可得到当前位置信息。

    高德开放平台查询目的地坐标,或者可以直接用地理编码获取目的地的经纬度坐标。

    然后调用计算两个经纬度直接的距离的方法计算出当前位置距离目标点位置的距离

    //计算当前经纬度与目标经纬度的距离
    double distance = PublicFunction.GetDistance(当前经度, 当前纬度, 目标点经度, 目标点纬度);
    
    //判断距离
    if (distance <= THE_TARGET_RADIUS)
    {
        Debug.Log("进入目标范围!");
    }
    else
    {
        Debug.Log("距离目标范围:" + distance + "米");
    }
    

    相关文章

      网友评论

        本文标题:Unity3d判断是否到达目的地

        本文链接:https://www.haomeiwen.com/subject/cewwzxtx.html