Android GoogleMap getProjection()不起作用

时间:2013-09-02 17:28:07

标签: java android google-maps

这是我在这里的第一篇文章,所以我希望我能够清楚地解释我的问题:

我正在扩展FragmentActivity类以创建一个HeatMapActivity。在此活动中,我使用GoogleMap对象,我获得如下:

// Try to obtain the map from the SupportMapFragment.
map = ((SupportMapFragment) getSupportFragmentManager()
      .findFragmentById(R.id.heatmap)).getMap();

现在,在执行null-Check等之后,我在setUpMap()方法中添加了TileOverlay,如下所示:

// Configure and add overlay
tileProvider = new HeatMapTileProvider(map);
map.addTileOverlay(new TileOverlayOptions()
      .tileProvider(tileProvider));

好的,到目前为止没问题。我实现了TileProvider接口来为HeatMap覆盖提供切片。

我想使用Projection对象将纬度/经度转换为屏幕上的像素。 Projection对象应该由GoogleMap类的getProjection()方法返回。

所以现在问题是:如果我在HeatMapActivity类中使用以下代码,一切都很好:

System.err.println("Test1: " + map.getProjection().fromScreenLocation(new Point(50,  50)));

但是,如果我将GoogleMap对象转发给TileProvider,分别转发给我使用的渲染器,代码就不再有效了:

public byte[] render(int x, int y, int zoom, GoogleMap map) {
  ...
  System.err.println("Test2: " + map);
  System.err.println("Test3: " + map.getProjection().fromScreenLocation(new Point(50,  50)));
  ...
}

我当然知道,map参数不是null(参见测试2),但是当我调用getProjection()时代码似乎就阻塞了。没有错误出现,如果我不使用Projection对象,其他一切工作正常。我没有任何线索,为什么不允许我从另一个类调用getProjection()而不是活动......

我正在使用Windows的ADT软件包(版本x86_64-20130729),Android SDK版本从8到17,目前在Android 2.3.5上进行测试。将显示地图,包含所需的库,并在android清单中设置权限。

有什么想法吗?任何帮助或提示都表示赞赏。

的Seb

1 个答案:

答案 0 :(得分:2)

此处的问题是getTile(以及您的render方法)在UI线程外部调用。
这将导致异常,您将看不到它,因为它可能由调用getTile的代码静默处理。这真的很糟糕它没有崩溃,所以有人可以在gmaps api问题上发布一个问题 尝试在try-catch中将调用包装到getProjection以查看它。

因为你不应该在主线程之外与GoogleMap交互,你必须找到另一种方法来实现,你想要实现的目标......

无论如何,我可以想象没有充分的理由需要在getProjection中拨打getTile。也许是另一个描述你真实问题的问题?