Vijay YD
Vijay YD

Reputation: 534

Is there any way to calculate speed of current ride in Android Maps V2

I am able to draw a polyline from start position dynamically while driving or walking and i just need to calculate the speed of the current ride for certain intervals.

Please suggest me how to calculate the speed with GPS/Network services.

Upvotes: 0

Views: 6491

Answers (2)

Ridcully
Ridcully

Reputation: 23655

Speed: Distance traveled divided by the time of travel.

So to calculate the current speed, calculate the distance between the two last locations you've got (by Location.distanceTo()) and divide by the time needed for that distance, which is the difference of the time-stamps of the locations.

Or, simply use Location.getSpeed()

Upvotes: 2

Pratik Dasa
Pratik Dasa

Reputation: 7439

Check below code, done by me, and its working well. In this lots of code related your stuff, because I have did exactly same as your requirement. So you can use all the code given below. And if you find it unncessory, then dont use it.

@Override
    public void onLocationChanged(Location location) {

        try {
            if (location != null) {

                if (current_lat != null && current_lat > 0) {
                    latitude = current_lat;
                }
                if (current_long != null && current_long > 0) {
                    longitude = current_long;
                }
                current_lat = location.getLatitude();
                current_long = location.getLongitude();
                distanceBetweenTwoPoint = getDistance(latitude, longitude, current_lat, current_long);
                if ((current_lat > 0 && current_long > 0) && distanceBetweenTwoPoint > IjoomerApplicationConfiguration.track_DistanceBetweenPoints_IN_METERS) {
                    if (location.hasSpeed()) {
                        speedInKm = location.getSpeed() * 3.6;
                    } else {
                        speedInKm = 0.0;
                    }
                    row = new HashMap<String, String>();
                    row.put(TRACKID, IN_TRACKID + "");
                    row.put(LATITUDE, current_lat.toString());
                    row.put(LONGITUDE, current_long.toString());
                    row.put(SPEED, speedInKm + "");
                    row.put(TIMESTAMP, System.currentTimeMillis() + "");
                    row.put(STATUS, status);

                    distance = distance + (distanceBetweenTwoPoint / 1000);
                    row.put(DISTANCE, "" + distance);
                    dataProvider.InsertRow("TrackDetail", row);
                    row.put(LASTKNOWNLATITUDE, latitude.toString());
                    row.put(LASTKNOWNLONGITUDE, longitude.toString());
                    int seconds = (int) ((System.currentTimeMillis() - trackStartTime) / 1000) % 60;
                    int minutes = (int) (((System.currentTimeMillis() - trackStartTime) / (1000 * 60)) % 60);
                    int hours = (int) (((System.currentTimeMillis() - trackStartTime) / (1000 * 60 * 60)) % 24);

                    row.put(DURATION, String.valueOf(hours) + " : " + String.valueOf(minutes) + " : " + String.valueOf(seconds));
                    setNotification(speedInKm, String.valueOf(hours) + " : " + String.valueOf(minutes) + " : " + String.valueOf(seconds));
                    if (status.equalsIgnoreCase("1")) {

                        builder.append("|" + current_lat + "," + current_long);
                        trackDuration = String.valueOf(hours) + " : " + String.valueOf(minutes) + " : " + String.valueOf(seconds);
                        if (speedInKm > maxSpeed) {
                            maxSpeed = speedInKm;
                        }
                        totalSpeed = totalSpeed + speedInKm;
                        ++totalTrackPoint;
                        sendBrodcastToActivity();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

Upvotes: 1

Related Questions