找到位置距离我的位置180度(南)1公里

时间:2016-05-20 13:38:21

标签: java android geolocation location

我有一个位置(纬度和长度),我想找到下一个位置(纬度和长度),距离我的位置(纬度和长度)180度(南边)1公里。你能给我和算法或函数吗?

3 个答案:

答案 0 :(得分:0)

从Java中的Rosetta code实现开始:

lon1 == lon2

如果你知道dLon == 0,那么很多代码就会消失,因为public static double haversine(double lat1, double lat2) { double dLat = Math.toRadians(lat2 - lat1); return R * dLat; }

length = Radius * angle in radians

(应该熟悉R = 6372.8公式)

因此,如果你知道1,并且你想要的结果是dLat,那么很容易想出dLat = 1.0 / 6372.8; 的值:

1.0 / 6372.8

换句话说,只需从当前纬度中减去180 - 1.0 / 6372.8(并记住小心处理小于handleSubmit(e) { if (e) { e.preventDefault(); } var value = this.refs.num.value; console.log(value); } render() { console.log(this.refs.num ? this.refs.num.value : ''); return ( <form> <input ref="num" type="hidden" name="amount" value="99" /> <a onClick={this.handleSubmit.bind(this)}>submit</a> </form> ); } 的纬度点)。

答案 1 :(得分:0)

要获得简单的解决方案,请查看SimpleLatLng库及其travel()方法:

/**
     * <p>
     * Calculate the end point of traveling along a great-circle path from a
     * given starting point with a given intitial bearing for a known distance.
     * </p>
     * 
     * @param start
     *            the starting point.
     * @param initialBearing
     *            the initial bearing.
     * @param distance
     *            the distance to travel.
     * @param unit
     *            the unit in which distance is measured.
     * @return the end point.
     */
    public static LatLng travel(LatLng start, double initialBearing, double distance,
            LengthUnit unit) {
        double bR = Math.toRadians(initialBearing);
        double lat1R = Math.toRadians(start.getLatitude());
        double lon1R = Math.toRadians(start.getLongitude());
        double dR = distance / LatLngConfig.getEarthRadius(unit);

        double a = Math.sin(dR) * Math.cos(lat1R);
        double lat2 = Math.asin(Math.sin(lat1R) * Math.cos(dR) + a * Math.cos(bR));
        double lon2 = lon1R
                + Math.atan2(Math.sin(bR) * a, Math.cos(dR) - Math.sin(lat1R) * Math.sin(lat2));
        return new LatLng(Math.toDegrees(lat2), Math.toDegrees(lon2));
    }

您只需给它起点,方向,距离和单位,即可获得计算出的位置。您需要获取完整的库,因为此方法使用库声明的某些类。它也有一些其他有用的计算。

可在Apache 2.0 License下找到。

答案 2 :(得分:0)

向南移动,也是由于North,使计算变得简单,因为它避免使用经度。 See

1公里等于0.0088339度。

所以在北半球从位置纬度减去0.0088339并保持经度不变。 对于Southern Hemisphere,请添加0.0088339。