【问题标题】:How to draw driving route on Google Map Android and apply walking mode when no driving route available like Google Map app?如何在 Google Map Android 上绘制行车路线并在 Google Map 应用程序等没有行车路线时应用步行模式?
【发布时间】:2020-11-19 20:07:50
【问题描述】:

我正在尝试在 Android 上使用 google 方向 API 构建应用程序。 我想将方向模式应用为驾驶,但当没有可用路线时,我想应用点折线,如 Google Map App。

下面是从atabouraya's answer 应用折线模式的示例代码,但它与我想要应用的相反。

public static final int PATTERN_GAP_LENGTH_PX = 20;
public static final PatternItem DOT = new Dot();
public static final PatternItem DASH = new Dash(PATTERN_DASH_LENGTH_PX);
public static final PatternItem GAP = new Gap(PATTERN_GAP_LENGTH_PX);
public static final List<PatternItem> PATTERN_POLYGON_ALPHA = Arrays.asList(GAP, DASH);

 private void drawDashedLeg(GoogleMap googleMap, Route route) {
    PolylineOptions polyOptions = new PolylineOptions();
    polyOptions.color(ContextCompat.getColor(getContext(), R.color.coolgrey));
    polyOptions.addAll(route.getPoints());
    polyOptions.pattern(PATTERN_POLYGON_ALPHA);
    Polyline polyline = googleMap.addPolyline(polyOptions);
    polylines.add(polyline);
}

这里是how to draw curved dashed line on Google Map 的另一个参考,因为他们只关注如何从一个位置到另一个位置绘制曲线。

我的目的是如何绘制从一个位置到另一个位置的路线作为行驶路线,并在没有可用路线时应用步行模式。

任何对此有任何想法的人请帮忙分享。谢谢。

【问题讨论】:

    标签: android google-maps styles polyline


    【解决方案1】:

    对于我的临时解决方案,我只是将折线分成 3 部分:

    1. 从起点(司机的当前位置)到第一条路线(可用的行驶路线)
    2. 从第一条可用的行驶路线到最后一条行驶路线
    3. 从最后可用的行车路线到目的地(商店位置)

    这是我解码 polylinePoint 后的示例代码

    if (routeList.size > 0) {
        val polylineOptionsWalkingStart = getPolylineOptionsConfig(routeI)
        val polylineOptionsWalingEnd = getPolylineOptionsConfig(routeI)
        val polylineOptionsDriving = getPolylineOptionsConfig(routeI)
    
        // Add walking route from origin to first driving route
        polylineOptionsWalkingStart.add(origin, routeList[0]!!)
            .pattern(MapUtil.PATTERN_POLYGON_ALPHA)
    
        // Add walking route from last driving route to destination
        polylineOptionsWalingEnd.add(
            routeList[routeList.size - 1]!!,
            destination
        ).pattern(MapUtil.PATTERN_POLYGON_ALPHA)
    
        // Add driving route from origin to destination
        polylineOptionsDriving.addAll(routeList)
    
        // Adding route for driving and walking mode on the map
        polylineWalkingStart = mMap.addPolyline(polylineOptionsWalkingStart)
        polylineWalkingEnd = mMap.addPolyline(polylineOptionsWalingEnd)
        polylineDriving = mMap.addPolyline(polylineOptionsDriving)
    }
    

    这是我的 PolylineOptions 配置

    private fun getPolylineOptionsConfig(mainRoute: Int): PolylineOptions {
        val polylineOptions = PolylineOptions().width(18f).geodesic(true)
        return when (mainRoute) {
            0 -> {
                polylineOptions.color(Color.parseColor("#B1C001"))
            }
            1 -> {
                polylineOptions.color(Color.parseColor("#0099D8"))
            }
            2 -> {
                polylineOptions.color(Color.parseColor("#1777EB"))
            }
            else -> {
                polylineOptions.color(Color.parseColor("#515C6F"))
            }
        }
    }
    

    这里是折线模式

    private val DOT: PatternItem = Dot()
    val PATTERN_POLYGON_ALPHA = listOf(DOT)
    

    如果您有其他更好的解决方案,请在此处分享您的答案。 无论如何,我希望我的回答能在这种情况下对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-22
      • 2013-10-31
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多