【问题标题】:Calculate Distance traveled android using location manager [duplicate]使用位置管理器计算距离Android [重复]
【发布时间】:2017-01-18 22:49:02
【问题描述】:

我目前正在开发一个简单的健身应用程序,该应用程序允许用户跟踪他/她的表现(跑步、步行)。我一直在使用位置管理器来获得非常好的移动速度。但是我需要获取行驶距离,如何使用位置管理器(经纬度)来获取距离?

谢谢

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_track);

    start = (Button) findViewById(R.id.btnStart);
    speed = (TextView) findViewById(R.id.txtSpeed);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);


    //initialize location listener
    locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            getSpeed(location);
            double lat2 = location.getLatitude();
            double lng2 = location.getLongitude();
        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {
        }

        //get the speed from the given location updates
        public void getSpeed(Location location) {
            currentSpeed = (location.getSpeed() * 3600 / 1000);
            String convertedSpeed = String.format("%.2f", currentSpeed);
            speed.setText(convertedSpeed + "Km/h");
        }
    };

【问题讨论】:

  • 请勿转发问题!

标签: android


【解决方案1】:

您可能会找到每个连续纬度和经度之间的距离并继续添加。

这里的距离以公里(km)为单位

private double distance(double lat1, double lon1, double lat2, double lon2) {
    double theta = lon1 - lon2;
    double dist = Math.sin(deg2rad(lat1)) 
                    * Math.sin(deg2rad(lat2))
                    + Math.cos(deg2rad(lat1))
                    * Math.cos(deg2rad(lat2))
                    * Math.cos(deg2rad(theta));
    dist = Math.acos(dist);
    dist = rad2deg(dist);
    dist = dist * 60 * 1.1515;
    return (dist);
}

private double deg2rad(double deg) {
    return (deg * Math.PI / 180.0);
}

private double rad2deg(double rad) {
    return (rad * 180.0 / Math.PI);
}

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    相关资源
    最近更新 更多