我正在建立一个个人项目,以熟悉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在信息窗口中显示持续时间和距离