java經緯度工具類

 根據一個經緯度,計算出當前經緯度的半徑,可用於打卡,場合。



import com.alibaba.fastjson.JSON;

import java.lang.*;

/**
 * @author wangwei
 * @version v1.0.0
 * @description 經緯度工具類
 * @date
 */
public class LatLonUtil
{
    private static double PI = 3.14159265;
    private static double EARTH_RADIUS = 6378137;
    private static double RAD = Math.PI / 180.0;

    /// <summary>
    /// 根據提供的經度和緯度、以及半徑,取得此半徑內的最大最小經緯度
    /// </summary>
    /// <param name="lat">緯度</param>
    /// <param name="lon">經度</param>
    /// <param name="raidus">半徑(米)</param>
    /// <returns></returns>
    public static double[] GetAround(double lat, double lon, int raidus)
    {

        Double latitude = lat;
        Double longitude = lon;

        Double degree = (24901 * 1609) / 360.0;
        double raidusMile = raidus;

        Double dpmLat = 1 / degree;
        Double radiusLat = dpmLat * raidusMile;
        Double minLat = latitude - radiusLat;
        Double maxLat = latitude + radiusLat;

        Double mpdLng = degree * Math.cos(latitude * (PI / 180));
        Double dpmLng = 1 / mpdLng;
        Double radiusLng = dpmLng * raidusMile;
        Double minLng = longitude - radiusLng;
        Double maxLng = longitude + radiusLng;
        return new double[] { minLat, minLng, maxLat, maxLng };
    }

    /// <summary>
    /// 根據提供的兩個經緯度計算距離(米)
    /// </summary>
    /// <param name="lng1">經度1</param>
    /// <param name="lat1">緯度1</param>
    /// <param name="lng2">經度2</param>
    /// <param name="lat2">緯度2</param>
    /// <returns></returns>
    public static double GetDistance(double lng1, double lat1, double lng2, double lat2)
    {
        double radLat1 = lat1 * RAD;
        double radLat2 = lat2 * RAD;
        double a = radLat1 - radLat2;
        double b = (lng1 - lng2) * RAD;
        double s = 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)));
        s = s * EARTH_RADIUS;
        s = Math.round(s * 10000) / 10000;
        return s;
    }

    public static void main(String[] args) {
        double a = 31.0152789817;
        double b = 111.5771484375;
        int s = 100;
        double[] data = GetAround(a,b,s);
        System.out.println(JSON.toJSONString(data));;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章