有没有办法在Google Map API v2中显示道路方向?

时间:2013-01-28 00:56:23

标签: android google-maps driving-directions google-direction

我正在寻找使用谷歌和此处的答案,我找到的唯一相关帖子是:

Google Maps Android V2 and Direction API

Get driving directions using Google Maps API v2

但那里没有答案。所以我已经提到了,但我会再说一遍。我正在寻找使用FragmentActivity和SupportMagFragment和LatLng对象而不使用MapView,MapActivity和GeoPoint的Google Map API v2解决方案。

另外我没有使用Overlay对象,所以我无法在地图上绘制方向,有替代方法吗?

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:8)

尝试此解决方案here。你可以在V2上驾驶或步行。

答案 1 :(得分:4)

Overlay确实值得忘记。

可以轻松绘制折线

https://developers.google.com/maps/documentation/android/lines#add_a_polyline

解析JSON响应后,只需遍历你的点:

PolylineOptions rectOptions = new PolylineOptions()
        .add(new LatLng(37.35, -122.0))
        .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
        .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
        .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
        .add(new LatLng(37.35, -122.0)); // Closes the polyline.

// Set the rectangle's color to red
rectOptions.color(Color.RED);

// Get back the mutable Polyline
Polyline polyline = myMap.addPolyline(rectOptions);

答案 2 :(得分:1)

你的问题标题比你的要求更加通用,所以我会以一种我认为有益于那些查看这个问题并希望以不同方式满足你的要求的方式回答这个问题。

如果你没有在地图的上下文中显示方向已经是一个加载的片段,并且已经完成了在地图上显示方向的事情(这可能类似于OP正在做的事情),那么它更容易而且我相信用Intent来做到这一点的标准。

这会启动地图路径活动(通过单独的应用程序 - 启动的应用程序取决于用户的兼容应用程序,默认情况下是谷歌地图),从原始地址(String originAddress绘制方向)到 目的地址(String destinationAddress)通过道路:

// Build the URI query string.
String uriPath = "https://www.google.com/maps/dir/";
// Format parameters according to documentation at:
// https://developers.google.com/maps/documentation/directions/intro
String uriParams = 
    "?api=1" +
    "&origin=" + originAddress.replace(" ", "+")
        .replace(",", "") +
    "&destination=" + destinationAddress.replace(" ", "+")
        .replace(",", "") +
    "&travelmode=driving";
Uri queryURI = Uri.parse(uriPath + uriParams);
// Open the map.
Intent intent = new Intent(Intent.ACTION_VIEW, queryURI);
startActivity(activity, intent, null);

(其中activity只是当前活动的Activity - 通过适用于当前编程环境的任何方式获得。)

以下代码从String对象获取地址LatLng(必须按上述方式处理URI查询String):

/**
* Retrieves an address `String` from a `LatLng` object.
*/
private void getAddressFromLocation(
    final StringBuilder address, final LatLng latlng) {
    // Create the URI query String.
    String uriPath = 
        "https://maps.googleapis.com/maps/api/geocode/json";
    String uriParams = 
        "?latlng=" + String.format("%f,%f",
            latlng.latitude, latlng.longitude) +
        "&key=" + GOOGLE_MAPS_WEB_API_KEY;
    String uriString = uriPath + uriParams;
    // Issue the query using the Volley library for networking.
    RequestFuture<JSONObject> future = RequestFuture.newFuture();
    JSONObject response = null;
    // Required for JsonObjectRequest, but not important here.
    Map<String, String> jsonParams = new HashMap<String, String>();
    JsonObjectRequest request = 
        new JsonObjectRequest(Request.Method.POST, 
            uriString,
            new JSONObject(jsonParams),
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        if (response != null) {
                            String resultString =
                                response.getJSONArray("results")
                                        .getJSONObject(0)
                                        .getString("formatted_address");
                            // Assumes `address` was empty.
                            address.append(resultString);
                        } // end of if
                        // No response was received.
                    } catch (JSONException e) {
                        // Most likely, an assumption about the JSON 
                        // structure was invalid.
                        e.printStackTrace();
                    }
                } // end of `onResponse()`
            }, // end of `new Response.Listener<JSONObject>()`
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e(LOG_TAG, "Error occurred ", error);
                }
            });
    // Add the request to the request queue.
    // `VolleyRequestQueue` is a singleton containing
    // an instance of a Volley `RequestQueue`.
    VolleyRequestQueue.getInstance(activity)
        .addToRequestQueue(request);
}

此请求是异步的,但是it can be made synchronous。 您需要就传递给toString()的实际参数调用address来获取originAddress

答案 3 :(得分:-1)

  问:我正在寻找使用谷歌和这里的答案,而且是唯一的答案   我发现的相关帖子有:Google Maps Android V2和Direction   API Google Map API v2 - 获取行车路线

答案:你的说法,“但那里没有答案。”不是绝对正确的。在这个网站上,你只能找到一些线索。我想你不会得到完美的代码和具体的工具知识在这里。事实上,许多开发人员希望让应用在Google地图上显示路线或路线。但我认为只有使用纯Google Maps API v2才能获得方向。

  问:所以我已经提到了,但我会再说一遍。我是   正在寻找使用Google Map API v2的解决方案   FragmentActivity和SupportMagFragment和LatLng对象,而不是   使用MapView,MapActivtiy和GeoPoint。

答案:以下是a few good sample tutorials (click here)。你可以找到你想要的东西。

  

问:此外我没有使用Overlay对象,所以我无法绘画   地图上的方向,有替代方案吗?也是   有办法做到这一点吗?

答案:在Google Maps API v2中,不再需要恼人的叠加层等。为此,您可以在我上面的链接网站中找到答案。