5

我正在将Google maps v2 api 用于我正在构建的必须在地图上绘制多边形的 Android 应用程序。当多边形数量较少时,一切正常,当多边形数量较大时,地图加载缓慢并且平移和缩放非常慢。我正在使用 SupportMapFragment 并添加如下多边形:

    for(PolygonOptions item : items) { 
            getMap().addPolygon(poly);
    }

有什么方法可以提高大量多边形的性能?

4

2 回答 2

1

我还想在背景的地图上绘制许多多边形,因为加载和组装顶点需要时间。对我有用的解决方案是在 AsyncTask 中加载数据,然后将每个多边形的点传递给 onProgressUpdate 方法中的主 UI 中的方法。

private class AddZonesTask extends AsyncTask<Zone, Zone, Integer> {
  protected Integer doInBackground(Zone... zones) {
    for (Zone zone : zones) {
      Cursor cursor = provider.query( .... );
      List<Points> points = cursorToPointsMethod(cursor);
      zone.add(points);
      publishProgress(zone);
    }
  return zones.length;
  }

  protected void onProgressUpdate(Zone... zones) {
    drawBorder(zones[0]);
  }

  protected void onPostExecute(Integer result) { }
}

然后主 UI 中的 drawBorder 将它们添加到地图对象中。

于 2013-02-05T20:56:36.167 回答
0

Bobbake4 是正确的。Android 要求 addPolygon 位于主线程上。我也有类似的问题。目前我正在实现 asynctask 但似乎没有办法从doInBackground我当前的代码执行 addPolygon 如下:

    private class AddPolygonToMap extends
        AsyncTask<String, Integer, ArrayList<PolygonOptions>> {

    @Override
    protected ArrayList<PolygonOptions> doInBackground(String... urls) {
        publishProgress(1);
        return drawPolygonWithPage(urls[0]);
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        int value = progress[0] + progressBar.getProgress();
        progressBar.setProgress(value);
    }

    @Override
    protected void onPostExecute(ArrayList<PolygonOptions> result) {
        for (int i = 0; i < result.size(); i++) {
            map.addPolygon(result.get(i));
        }
    }
}

理想情况下,我想要 addPolygon 背景......还有其他方法可以完成这项工作吗?

于 2013-02-01T18:10:13.607 回答