卜若的代码笔记-高德地图开发的36个小技巧-第四个技巧:计算经纬度的距离

1 懒得写介绍了,如题,直接给你们个操作类吧

package Tool;

import com.amap.api.location.AMapLocation;
import com.amap.api.maps.model.LatLng;

public class DistancePoint {
    public double lon;//经度
    public double lat;//炜度


    @Override
    public String toString() {

        String value = "";
        value += "lon = "+lon+"\n";
        value += "lat = "+lat +"\n";
        return value;
    }
    public LatLng getLatLng(){

        return new LatLng(this.lat,this.lon);
    }
    public DistancePoint(AMapLocation location){

        this.lon = location.getLongitude();
        this.lat = location.getAltitude();
    }
    public static LatLng convertLatLng(DistancePoint p){


        return  new LatLng(p.lat,p.lon);
    }
    public DistancePoint(double lon, double lat){

        this.lon = lon;
        this.lat = lat;
    }

    public static double HaverSin(double theta)
    {
        double v =Math.sin(theta / 2);
        return v * v;
    }


    static double EARTH_RADIUS = 6371.0;//km 地球半径 平均值,千米


    public static double Distance(double lat1,double lon1, double lat2,double lon2)
    {
        //用haversine公式计算球面两点间的距离。
        //经纬度转换成弧度
        lat1 = ConvertDegreesToRadians(lat1);
        lon1 = ConvertDegreesToRadians(lon1);
        lat2 = ConvertDegreesToRadians(lat2);
        lon2 = ConvertDegreesToRadians(lon2);

        //差值
        double vLon = Math.abs(lon1 - lon2);
        double vLat = Math.abs(lat1 - lat2);

        //h is the great circle distance in radians, great circle就是一个球体上的切面,它的圆心即是球心的一个周长最大的圆。
        double h = HaverSin(vLat) + Math.cos(lat1) * Math.cos(lat2) * HaverSin(vLon);

        double distance = 2 * EARTH_RADIUS * Math.asin(Math.sqrt(h));

        return distance;
    }

    public static double Distance(DistancePoint p1,DistancePoint p2){

        return Distance(p1.lon,p1.lat,p2.lon,p2.lat);
    }

    public static double ConvertDegreesToRadians(double degrees)
    {
        return degrees * Math.PI / 180;
    }

    public static double ConvertRadiansToDegrees(double radian)
    {
        return radian * 180.0 / Math.PI;
    }
}
发布了202 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37080133/article/details/103229493