如何为未知目的地实施 Google Directions API?

Posted

技术标签:

【中文标题】如何为未知目的地实施 Google Directions API?【英文标题】:How to implement Google Directions API for unknown destination? 【发布时间】:2020-03-13 02:42:11 【问题描述】:

我是 android studio 的初学者,目前正在为我的最终项目创建骑行应用程序。在这些应用程序中,我需要实现地图和方向 API。我搜索教程,但它们都设置了目的地。在我的应用程序中,目的地是未知的。

如果我在用户骑行时显示当前位置(自动)并在地图中画一条线是可能的,请给一个教程?如果我为此项目使用免费 API 密钥,是否有可能?

谢谢...

【问题讨论】:

目的地未知是什么意思?用户需要设置吗? 请查看[doc] (developers.google.com/maps/documentation/android-sdk/start) 用户不设置目的地,取决于他要去哪里。因此,这些应用程序将跟踪用户从他开始的地方到他去的任何地方。对不起我的英语不好。 【参考方案1】:

首先,这个方向的API不是免费的。 第二,您需要为方向 API 路由提供起点和终点。 您可以使用当前位置作为起点,如果您没有目的地,那么您想在哪里画一条线?是指从您当前的位置到哪里?

或者如果您想从起始位置到当前位置绘制一条跟踪线,那么您不需要 Direction API,您只需要实时位置跟踪,并且可以使用当前位置在地图上绘制折线。以下是您的帮助代码。

要将这个库添加到我们的应用程序中,我们需要将以下内容添加到我们的 build.gradle 文件中。

implement 'com.google.maps:google-maps-services:0.1.20'

// 首先初始化地理上下文

private GeoApiContext getGeoContext() 
    GeoApiContext geoApiContext = new GeoApiContext();
    return geoApiContext.setQueryRateLimit(3)
            .setApiKey(getString(R.string.directionsApiKey))
            .setConnectTimeout(1, TimeUnit.SECONDS)
            .setReadTimeout(1, TimeUnit.SECONDS)
            .setWriteTimeout(1, TimeUnit.SECONDS);

// 此代码将从谷歌方向 api 获取从起点到终点的结果

    DateTime now = new DateTime();
    DirectionsResult result = DirectionsApi.newRequest(getGeoContext()).mode(TravelMode.DRIVING).origin(origin)
.destination(destination)
.departureTime(now).await();

//您可以使用此方法在地图上添加标记

private void addMarkersToMap(DirectionsResult results, GoogleMap mMap) 
    mMap.addMarker(new MarkerOptions().position(new LatLng(results.routes[0].legs[0].startLocation.lat, results.routes[0].legs[0].startLocation.lng)).title(results.routes[0].legs[0].startAddress));
    mMap.addMarker(new MarkerOptions().position(new LatLng(results.routes[0].legs[0].endLocation.lat, results.routes[0].legs[0].endLocation.lng)).title(results.routes[0].legs[0].startAddress).snippet(getEndLocationTitle(results)));

// 使用此方法在地图上绘制折线/路线

private void addPolyline(DirectionsResult results, GoogleMap mMap) 
    List<LatLng> decodedPath = PolyUtil.decode(results.routes[0].overviewPolyline.getEncodedPath());
    mMap.addPolyline(new PolylineOptions().addAll(decodedPath));

【讨论】:

感谢您的评论,它有很大帮助,我对我的最终项目感到困惑,因为截止日期和搜索错误的关键字。现在我知道我需要的是使用折线进行实时位置跟踪 您好,升级 api 级别 30 后折线在我的情况下没有绘制有什么解决方案吗?它将方向结果返回为 null

以上是关于如何为未知目的地实施 Google Directions API?的主要内容,如果未能解决你的问题,请参考以下文章

如何为新的 android 版本设置更新优先级

如何为使用未知变量调用的对象获取智能感知?

Kotlinx 序列化 - 如何为未知字段名编写数据类

如何开始实施导航?

如何为人工智能编程选择语言? [关闭]

如何为 xgboost 实施增量训练?