如何在mapsapi中获取公共交通的时间



我正在建立一个个人项目,以熟悉API调用等。

我有以下功能:

    public void calculateDistance(House house) {
    DirectionsApiRequest apiRequest = DirectionsApi.newRequest(geoApiContext);
    apiRequest.origin(new LatLng(house.getLat(), house.getLon()));
    apiRequest.destination(biminghamInternationStationLonLat);
    apiRequest.mode(TravelMode.TRANSIT);
    apiRequest.setCallback(new com.google.maps.PendingResult.Callback<DirectionsResult>() {
        @Override
        public void onResult(DirectionsResult result) {
            DirectionsRoute[] routes = result.routes;
            System.out.println("Printing out the results for " + house.getUrlListing());
            for(int i =0 ; i < routes.length; i++)
            {
                DirectionsRoute route = routes[i];
                System.out.println(route);
            }
        }
        @Override
        public void onFailure(Throwable e) {
        }
    });
}

这个函数的作用是获取我提供的自定义House对象的纬度和经度,并基本上计算通过公共交通到达伯明翰国际站所需的时间(因此在apiRequest中使用TRANSIT模式(。

但我不确定我是否正确使用了它?当我在谷歌地图网站上查看从房子所在地到伯明翰国际站需要多长时间;我得到的结果从30-35分钟不等,好吧。但当我尝试调用上面的代码时,它会打印以下内容:

[DirectionsRoute: "", 1 legs, waypointOrder=[], bounds=[52.48039080,-1.72493200, 52.45082300,-1.78392750], 1 warnings]

我不确定如何从api中获得通过公共交通所需的时间。我正在使用API指南。。不确定我是否使用了错误的API,但当查看使用什么API时,这是我所需要的。。

我可以看到您正在使用Java Client for Google Maps Services。为了了解如何使用库,我可以建议查看位于的JavaDoc

https://www.javadoc.io/doc/com.google.maps/google-maps-services/latest/index.html

检查JavaDoc文档,您会发现DirectionsRoute对象包含一个DirectionsLeg[]数组,而方向腿又有一个包含Duration对象的字段。所以你需要循环通过路线的所有路段,并总结路段的持续时间,这将以秒为单位给出完整的路线持续时间。

参考Java客户端库中的同步调用,可以同步调用请求的await()方法来执行请求。

看看以下基于您的代码的示例。它展示了如何同步获取中转方向,并以秒为单位计算第一条路线的持续时间

import com.google.maps.GeoApiContext;
import com.google.maps.DirectionsApiRequest;
import com.google.maps.DirectionsApi;
import com.google.maps.model.DirectionsResult;
import com.google.maps.model.DirectionsRoute;
import com.google.maps.model.DirectionsLeg;
import com.google.maps.model.LatLng;
import com.google.maps.model.TravelMode;

class Main {
  public static void main(String[] args) {
    GeoApiContext context = new GeoApiContext.Builder()
    .apiKey("YOUR_API_KEY")
    .build();
    DirectionsApiRequest apiRequest = DirectionsApi.newRequest(context);
    apiRequest.origin(new LatLng(41.385064,2.173403));
    apiRequest.destination(new LatLng(40.416775,-3.70379));
    apiRequest.mode(TravelMode.TRANSIT);
    long duration = 0;
  
    try {
      DirectionsResult res = apiRequest.await();
      //Loop through legs of first route and get duration
      if (res.routes != null && res.routes.length > 0) {
          DirectionsRoute route = res.routes[0];
          if (route.legs !=null) {
              for(int i=0; i<route.legs.length; i++) {
                  DirectionsLeg leg = route.legs[i];
                  duration += leg.duration.inSeconds;
              }    
          }
      }
    } catch(Exception ex) {
      System.out.println(ex.getMessage());
    }
    System.out.println("Duration (sec): " + duration);
  }
} 

享受吧!

行程持续时间在腿部:

duration表示该航段的总持续时间,作为以下形式的duration对象:

  • 表示持续时间(秒(
  • text包含持续时间的字符串表示
    如果持续时间未知,则这些字段可能未定义

如果响应中有多条支路,则可以通过将每条支路的值相加来获得总持续时间。

相关问题:谷歌地图API V3在信息窗口中显示持续时间和距离

相关内容

  • 没有找到相关文章

最新更新