如何获取Android中两个动态地理位置之间的预计到达时间?

时间:2016-04-06 23:48:31

标签: java android google-maps

有没有聪明的方法(算法,API等),我可以估计两个地理位置之间的到达时间,这些地理位置只是两个人试图在地图上相互接触?

3 个答案:

答案 0 :(得分:2)

Google Maps Directions Api提供了一种方法,可以让您获得两点之间旅行的估计行程时间,因此,如果您知道两个用户位置,则可以使用该位置。

例如,如果您发送https://maps.googleapis.com/maps/api/directions/json?origin=NewYork&destination=LosAngeles&mode=walking部分回复将包括

    duration: {
        text: "37 days 23 hours",
        value: 3278737
    }

实施细节取决于您的应用程序的工作方式,但api肯定是一个起点。

答案 1 :(得分:2)

您的问题无法直接解决。

然而谷歌提供google direction api。这个api给出了 你能够计算从一个地方到另一个地方的距离 并且还给出了估计的时间,但有这些限制 -

  1. 这是静态的而不是动态的。因此,你无法真正计算出你必须提供两个位置的移动人员,这将给出这两个位置的距离。
  2. 这给出了跟随道路的距离。所以你无法真正定义自己的路径。谷歌方向api将为旅行提供距离。
  3. 时间是平均旅行时间。它不会考虑你的旅行速度。
  4. 因此,为了达到你想要的目标,你必须自己做很多事情。主要是计算。

    你需要的api是导航api。但不幸的是谷歌没有提供这个供公众使用。

    希望这个答案可以帮到你。

答案 2 :(得分:1)

已经described by RJ Aylward,您可以使用Google的路线API来估算从一个地方到另一个地方所需的时间,并考虑路线和流量。但是,您不必使用Web API并构建自己的包装器,而是使用Google自身提供的Java implementation,可以通过Maven/gradle存储库获取。

  1. Add the google-maps-services to your app's build.gradle

    dependencies {
        compile 'com.google.maps:google-maps-services:0.2.5'
    }
    
  2. 执行请求并提取持续时间:

    // - Put your api key (https://developers.google.com/maps/documentation/directions/get-api-key) here:
    private static final String API_KEY = "AZ.."
    
    /**
    Use Google's directions api to calculate the estimated time needed to
    drive from origin to destination by car.
    
    @param origin The address/coordinates of the origin (see {@link DirectionsApiRequest#origin(String)} for more information on how to format the input)
    @param destination The address/coordinates of the destination (see {@link DirectionsApiRequest#destination(String)} for more information on how to format the input)
    
    @return The estimated time needed to travel human-friendly formatted
    */
    public String getDurationForRoute(String origin, String destination)
        // - We need a context to access the API 
        GeoApiContext geoApiContext = new GeoApiContext.Builder()
            .apiKey(apiKey)
            .build();
    
        // - Perform the actual request
        DirectionsResult directionsResult = DirectionsApi.newRequest(geoApiContext)
                .mode(TravelMode.DRIVING)
                .origin(origin)
                .destination(destination)
                .await();
    
        // - Parse the result
        DirectionsRoute route = directionsResult.routes[0];
        DirectionsLeg leg = route.legs[0];
        Duration duration = leg.duration;
        return duration.humanReadable;
    }
    
  3. 为简单起见,此代码不处理异常,错误情况(例如找不到路由 - > gt; routes.length == 0),也不会处理多个routeleg 。原点和目的地也可以直接设置为LatLng个实例(请参阅DirectionsApiRequest#origin(LatLng)DirectionsApiRequest#destination(LatLng)

    进一步阅读:android.jlelse.eu - Google Maps Directions API

    这是我在Android - How to get estimated drive time from one place to another?

    给出的答案