安卓(JAVA)已知两点经纬度,求出一条线上定距(比如隔20米或30一个点)的经纬度。

简介: 安卓(JAVA)已知两点经纬度,求出一条线上定距(比如隔20米或30一个点)的经纬度。

首先思考,已知两个经纬度,需要求出用户输入的定距来确定每一个点的经纬度,应该先确定从两个点的哪一个开始计算,这个自己定。然后需要根据两个点的经纬度来算出线的角度(相对于正北方向),最后进行计算。

既然已经有了思路,那么就一步一步来。

首先算出线的角度。我写了一个方法,可以直接照搬。

/**
     * 已知两点经纬度求方位角
     */
    public static double getAngle(double lon1, double lat1, double lon2,
                                  double lat2) {
        double fLat = Math.PI * (lat1) / 180.0;
        double fLng = Math.PI * (lon1) / 180.0;
        double tLat = Math.PI * (lat2) / 180.0;
        double tLng = Math.PI * (lon2) / 180.0;
        double degree = (Math.atan2(Math.sin(tLng - fLng) * Math.cos(tLat), Math.cos(fLat) * Math.sin(tLat) - Math.sin(fLat) * Math.cos(tLat) * Math.cos(tLng - fLng))) * 180.0 / Math.PI;
        if (degree >= 0) {
            return degree;
        } else {
            return 360 + degree;
        }
    }


注意,lon1,lon2是经度,lat1,lat2是纬度。但是百度地图的LatLon(经纬度)new 的时候应该先放纬度,再放经度。

求出角度之后我写了一个工具类,已知一个点的经纬度,还有方向,还有相对于正北方向的角度,还有用户输入的距离,就可以算出我们所需要的经纬度。工具类代码:

public class AngleUtil {
    /**
     * 求B点经纬度
     * @param A 已知点的经纬度,
     * @param distance   AB两地的距离  单位km
     * @param angle  AB连线与正北方向的夹角(0~360)
     * @return  B点的经纬度
     */
    private final static double Rc=6378137;
    private final static double Rj=6356725;
    private double m_RadLo,m_RadLa;
    private double Ec;
    private double Ed;
    public AngleUtil(double longitude,double latitude){
        m_RadLo=longitude*Math.PI/180.;
        m_RadLa=latitude*Math.PI/180.;
        Ec=Rj+(Rc-Rj)*(90.- latitude)/90.;
        Ed=Ec*Math.cos(m_RadLa);
    }
    public static LatLng getMyLatLng(AngleUtil A, double distance, double angle){
        double dx = distance*Math.sin(Math.toRadians(angle));
        double dy= distance*Math.cos(Math.toRadians(angle));
        double bjd=(dx/A.Ed+A.m_RadLo)*180./Math.PI;
        double bwd=(dy/A.Ec+A.m_RadLa)*180./Math.PI;
        return new LatLng(bwd,bjd);
    }
}

其实很简单,就两个方法,三角函数就不用说了吧,,,初中数学。。。直接也可以照搬使用。需要获取一条线上多个点的话直接循环就可以了。


目录
打赏
0
0
0
0
11
分享
相关文章
安卓(JAVA)已知两点经纬度,求出一条线上几等分的点的经纬度。
安卓(JAVA)已知两点经纬度,求出一条线上几等分的点的经纬度。
133 0
根据地球上任意两点的经纬度计算两点间的距离
根据地球上任意两点的经纬度计算两点间的距离
412 2
安卓基于百度地图计算两个经纬度点的直线距离并只保留两位小数
安卓基于百度地图计算两个经纬度点的直线距离并只保留两位小数
429 0
【百度地图API】如何根据摩卡托坐标进行POI查询,和计算两点距离
原文:【百度地图API】如何根据摩卡托坐标进行POI查询,和计算两点距离 摘要: 百度地图API有两种坐标系,一种是百度经纬度,一种是摩卡托坐标系。在本章你将学会: 1、如何相互转换这两种坐标; 2、使用该坐标进行反地址解析; 3、坐标附近全部POI的查询; 4、计算两点间的距离。
2052 0
利用JS实现的根据经纬度计算地球上两点之间的距离
最近用到了根据经纬度计算地球表面两点间距离的公式,然后就用JS实现了一下。 计算地球表面两点间的距离大概有两种办法。 第一种是默认地球是一个光滑的球面,然后计算任意两点间的距离,这个距离叫做大圆距离(The Great Circle Distance)。
949 0
如何判断一个GPS点是否在以另一个GPS点为圆心100米为半径的圆内(Java代码)
题目乍一看,无从下手,仔细想了一下,原来只需要判断两个GPS点的直线距离是否 500) { return true; } return false; }  待续
1598 0
Java根据两点经纬度计算距离
这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”。
百度地图API开发:map.getDistance计算两点之间的距离(直线距离)
百度地图API开发:map.getDistance计算两点之间的距离(直线距离)
1041 0