如何计算两个焦点(lat和lng)之间的距离



我正在研究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);
    }

最新更新