我正在研究ITS(智能交通系统)。因此,我必须计算公交车在公交车站的EAT(预计到达时间)。现在我有了两个点(lat,lng),即目前车辆的停车和位置。所以我必须计算距离。接下来我会得到速度,这样我就可以计算出公共汽车站的到达时间。我的问题是,我正在使用这种方法来计算两点之间的距离,
private double distance(double lat1, double lon1, double lat2, double lon2, char unit) {
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;
if (unit == 'K') {
dist = dist * 1.609344;
} else if (unit == 'N') {
dist = dist * 0.8684;
}
return (dist);
}
我想的是,它计算两点之间的直线距离。它不会实时发生。因为车辆通过公路行驶。那么,有没有更好的解决方案或算法来找出两个地方之间的距离呢。请任何人在这方面帮助我。
你是对的,计算两个地理位置的直接距离是不够的,因为路线往往不直。在这种情况下,谷歌地图api可以帮助您。
你可以使用谷歌地图方向服务。检查以下运输模式:
https://developers.google.com/maps/documentation/javascript/directions#TravelModes
当然,你必须考虑公共汽车的停靠时间和平均速度。由于公交车的速度并不总是相同的,所以你需要计算平均速度,考虑红绿灯和其他相关因素(甚至可能会出现交通堵塞?)。如果您的估计时间也显示出可能的延误并实时更新,那将是最好的(当公交车将出现交通堵塞时,in可以将等待时间与延误时间相加)。
距离取决于公交路线。
如果您的智能交通系统知道公交车路线,那么您可以使用该信息。
谷歌地图有这些公交线路吗?你可以使用谷歌地图API向它询问从起点到终点的交通路线,但你必须确定哪些选择是正确的(如果有的话)。
如果您的实际目标是确定ETA,那么您需要的是运输时间表,而不是距离。(乘客需要等待公交车到达,公交车可能会在某些站点等待与其他线路会合,等等。)只要知道相关的公交车线路,谷歌地图API就可以帮助解决这一问题。
您可以使用下面的LatLangTool方法
public static Double getDistanceToLocation(SourceCordinate from, SourceCordinate to) {
LatLng busDeparturePoint = new LatLng(from.latitude, from.longitude);
LatLng busDestinationPoint = new LatLng(to.latitude, to.longitude);
return LatLngTool.distance(busDeparturePoint, busDestinationPoint, LengthUnit.KILOMETER);
}