使用LatLng Google地图的类型不兼容

时间:2017-06-14 07:53:24

标签: java android google-maps android-studio

首次制作Android应用程序并尝试将谷歌方向的折线添加到Google地图上。

已导入: com.google.android.gms.maps.model.LatLng

我想解码折线点。 试图使用PolylineEncoding类中的decode但是从以下位置导入: com.google.maps.model.LatLng

这导致类型不兼容,那么如何确保您使用兼容类型?或者其他方法将此折线解码为特定的LatLng类型而不重写算法?

1 个答案:

答案 0 :(得分:0)

尝试将此结果传递给drawPath()方法

 public void drawPath(String result) {
    if (line != null) {
        googleMap.clear();
    }
    googleMap.addMarker(new MarkerOptions().position(Dloca));
    //googleMap.addMarker(new MarkerOptions().position(loc));
    try {
        // Tranform the string into a json object
        final JSONObject json = new JSONObject(result);
        JSONArray routeArray = json.getJSONArray("routes");
        JSONObject routes = routeArray.getJSONObject(0);
        JSONObject overviewPolylines = routes
                .getJSONObject("overview_polyline");
        String encodedString = overviewPolylines.getString("points");
        List<LatLng> list = decodePoly(encodedString);

        for (int z = 0; z < list.size() - 1; z++) {
            LatLng src = list.get(z);
            LatLng dest = list.get(z + 1);
            line = googleMap.addPolyline(new PolylineOptions()
                    .add(new LatLng(src.latitude, src.longitude),
                            new LatLng(dest.latitude, dest.longitude))
                    .width(5).color(Color.BLUE).geodesic(true));
        }

        dialog.dismiss();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

private List<LatLng> decodePoly(String encoded) {

    List<LatLng> poly = new ArrayList<LatLng>();
    int index = 0, len = encoded.length();
    int lat = 0, lng = 0;

    while (index < len) {
        int b, shift = 0, result = 0;
        do {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lat += dlat;

        shift = 0;
        result = 0;
        do {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lng += dlng;

        LatLng p = new LatLng((((double) lat / 1E5)),
                (((double) lng / 1E5)));
        poly.add(p);
    }

    return poly;
}

此代码会根据您的路线来源和目的地位置返回谷歌地图中的行。