Android - Googlemaps - Polyline未显示

时间:2018-04-17 12:41:17

标签: android google-maps

我正在尝试在GoogleMap中建立从一个点到另一个点的路径,但我的多段线有时不会被我的Android项目显示(或绘制)。 当START-END距离非常高时,它会发生。 只是距离问题? 这是我的代码:

@Override
protected void onPostExecute(List<List<HashMap<String, String>>> result) {
    ArrayList<LatLng> points;
    // Traversing through all the routes
    for (int i = 0; i < result.size(); i++) {
        points = new ArrayList<>();
        lineOptions = new PolylineOptions();

        // Fetching i-th route
        List<HashMap<String, String>> path = result.get(i);

        // Fetching all the points in i-th route
        for (int j = 0; j < path.size(); j++) {
            HashMap<String, String> point = path.get(j);

            double lat = Double.parseDouble(point.get("lat"));
            double lng = Double.parseDouble(point.get("lng"));
            LatLng position = new LatLng(lat, lng);

            points.add(position);
        }

        // Adding all the points in the route to LineOptions
        lineOptions.addAll(points);
        lineOptions.width(10);
        lineOptions.color(Color.BLUE);

        Log.d("onPostExecute","onPostExecute lineoptions decoded");

    }

    // Drawing polyline in the Google Map for the i-th route
    if(lineOptions != null) {
        mMap.addPolyline(lineOptions);
    }
    else {
        Log.d("onPostExecute","without Polylines drawn");
    }
}

我哪里错了?

1 个答案:

答案 0 :(得分:0)

看到的一个问题是&#34;遍历的每次迭代。&#34;循环创建一个新的lineOptions。但是你最后只在循环之外使用lineOptions。所以这意味着,如果result有多个条目,那么您只会绘制一条路线 - 最后一条路线。

所以(a)在循环内部移动polyLine的绘制,或者(b)在循环之前仅创建lineOptions一次。

此外,您也可以通过在循环之前移动它来消除每次迭代points的创建,然后在列表上发出.clear()

所以下面的代码假定(a)你想为每条路线绘制polyLine(基于注释&#39;绘制折线......对于第i条路线&#39;):

  @Override
  protected void onPostExecute(List<List<HashMap<String, String>>> result) {
       ArrayList<LatLng> points = new ArrayList<>();
      // Traversing through all the routes
      for (int i = 0; i < result.size(); i++) {
          points.clear();
          lineOptions = new PolylineOptions();

          // Fetching i-th route
          List<HashMap<String, String>> path = result.get(i);

          // Fetching all the points in i-th route
          for (int j = 0; j < path.size(); j++) {
              HashMap<String, String> point = path.get(j);

              double lat = Double.parseDouble(point.get("lat"));
              double lng = Double.parseDouble(point.get("lng"));
              LatLng position = new LatLng(lat, lng);

              points.add(position);
          }

          // Adding all the points in the route to LineOptions
          lineOptions.addAll(points);
          lineOptions.width(10);
          lineOptions.color(Color.BLUE);

          Log.d("onPostExecute","onPostExecute lineoptions decoded");

          // Drawing polyline in the Google Map for the i-th route
          if(lineOptions != null) {
              mMap.addPolyline(lineOptions);
          }
          else {
              Log.d("onPostExecute","without Polylines drawn");
          }

      }

  }