从坐标数组计算平均速度
Calculate average speed from array of Coordinates
//Global var
ArrayList<LatLng> points = new ArrayList<>();
//---------------------------------------- ------------------------------------------
public void onLocationChanged(final Location location) {
//Adds a marker on the current position found in LatLng
myCoordinates = new LatLng(location.getLatitude(), location.getLongitude());
//Sets the marker to the position of LatLng and zooms the camera in on the location
LocationMarker.setPosition(myCoordinates);
mMap.moveCamera(CameraUpdateFactory.newLatLng(myCoordinates));
float zoomLevel = 12.0f;
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myCoordinates, zoomLevel));
//Adds marker on each location update
points.add(myCoordinates);
mMap.addMarker(new MarkerOptions().position(points.get(0))
.title("Starting Location")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));
//Draws a polyline between the location updates stored in points.
mMap.addPolyline(new PolylineOptions()
.addAll(points)
.width(5)
.color(Color.RED));
//gets speed from Location and converts it to Km/h
speedText.setText(String.format("%.0f - Km/h", location.getSpeed() * 3.6));
}
这是我的 onLocationChanged 函数。这会在每次更新时将坐标存储到我的名为 points 的数组中。它还在每次更新时绘制折线,计算我在 km/h 中的速度,并在我的数组位置 [0] 添加一个标记,这是我的起始位置。这一切都很好,非常适合我需要它做的事情。
是否可以由此计算出平均速度?
您只需要创建另一个全局列表并插入 getSpeed() 的值;
speedArray.add(Double.parseDouble(location.getSpeed()));
并创建一个在 onLocationChanged 结束时调用的函数,它每次都会计算平均速度;
是的,是的。但是你需要记录更多的数据,比如:
- 之前的位置坐标。
- 位置样本的当前时间。
根据以上信息,您可以使用以下公式:
speed = distance / time
其中 distance
将是 currentGPSPoint - previousGPSPoint
和 time = currentTime - previousTime
这将为您提供两个位置之间的平均速度。如果您需要总体平均值,您可以保存所有计算出的速度并计算平均值。或者只存储初始位置并始终计算从初始位置到当前位置的速度。
//Global var
ArrayList<LatLng> points = new ArrayList<>();
//---------------------------------------- ------------------------------------------
public void onLocationChanged(final Location location) {
//Adds a marker on the current position found in LatLng
myCoordinates = new LatLng(location.getLatitude(), location.getLongitude());
//Sets the marker to the position of LatLng and zooms the camera in on the location
LocationMarker.setPosition(myCoordinates);
mMap.moveCamera(CameraUpdateFactory.newLatLng(myCoordinates));
float zoomLevel = 12.0f;
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myCoordinates, zoomLevel));
//Adds marker on each location update
points.add(myCoordinates);
mMap.addMarker(new MarkerOptions().position(points.get(0))
.title("Starting Location")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW)));
//Draws a polyline between the location updates stored in points.
mMap.addPolyline(new PolylineOptions()
.addAll(points)
.width(5)
.color(Color.RED));
//gets speed from Location and converts it to Km/h
speedText.setText(String.format("%.0f - Km/h", location.getSpeed() * 3.6));
}
这是我的 onLocationChanged 函数。这会在每次更新时将坐标存储到我的名为 points 的数组中。它还在每次更新时绘制折线,计算我在 km/h 中的速度,并在我的数组位置 [0] 添加一个标记,这是我的起始位置。这一切都很好,非常适合我需要它做的事情。
是否可以由此计算出平均速度?
您只需要创建另一个全局列表并插入 getSpeed() 的值;
speedArray.add(Double.parseDouble(location.getSpeed()));
并创建一个在 onLocationChanged 结束时调用的函数,它每次都会计算平均速度;
是的,是的。但是你需要记录更多的数据,比如:
- 之前的位置坐标。
- 位置样本的当前时间。
根据以上信息,您可以使用以下公式:
speed = distance / time
其中 distance
将是 currentGPSPoint - previousGPSPoint
和 time = currentTime - previousTime
这将为您提供两个位置之间的平均速度。如果您需要总体平均值,您可以保存所有计算出的速度并计算平均值。或者只存储初始位置并始终计算从初始位置到当前位置的速度。