我正在研究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);
}
我在想的是,它计算两点之间的直线距离。它不会实时发生。因为车辆是乘公路旅行的。那么有没有更好的解决方案或算法来找出两个地方之间的距离。请任何人帮助我。
答案 0 :(得分:2)
距离取决于公交线路。
如果您的智能交通系统知道公交路线,那么您可以使用该信息。
Google地图是否有这些巴士路线?您可以使用Google Maps API向其询问从原点到目的地的转机路线,但您必须确定哪些选项是正确的,如果有的话。
如果您的实际目标是确定ETA,那么您需要的是过境时间表,而不是距离。 (乘客需要等待公交车到达,公交车可能会在某些站点等待与其他线路相遇,等等。)只要知道相关的公交线路,Google Maps API就可以提供帮助。
答案 1 :(得分:2)
你是对的,计算两个地理位置的直接距离是不够的,因为路线往往不直。在这种情况下,Google map api可以为您提供帮助。
您可以使用Google地图Direction Service。检查以下过境模式:
https://developers.google.com/maps/documentation/javascript/directions#TravelModes
当然,你必须考虑到公共汽车的停止时间和平均速度。由于公交车不会总是有相同的速度,你需要计算平均速度,保持交通信号灯和其他相关的事情(甚至可能是交通拥堵?)。最好是,如果您的预计时间也显示可能的延迟并实时更新(当公交车遇到交通堵塞时,可以添加等待时间和延迟时间)。
答案 2 :(得分:0)
您可以使用下面的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);
}