3

これは私の最初の投稿なので、私の問題を十分に明確に説明したいと思います:

FragmentActivity クラスを拡張して、HeatMapActivity を作成しています。このアクティビティでは、次のように取得する GoogleMap オブジェクトを使用します。

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

ここで、null チェックなどを行った後、以下に示すように、setUpMap() メソッドに TileOverlay を追加しています。

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

わかりました、これまでのところまったく問題ありません。ヒートマップ オーバーレイ用のタイルを提供するためにTileProviderインターフェイスを実装しました。

画面上のピクセルと緯度/経度の変換に 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 マニフェストに設定されます。

何か案は?ヘルプやヒントをいただければ幸いです。

セブ

4

1 に答える 1

2

ここでの問題は、getTile(およびrenderメソッド) が UI スレッドの外部で呼び出されることです。
これにより、おそらく表示されない例外が発生します。これは、おそらくコード呼び出しによってサイレントに処理されるためですgetTile。これはクラッシュしないのは本当に悪いことなので、誰かが gmaps api の問題に問題を投稿する可能性があります。それを確認するには、try-catch で
呼び出しをラップしてみてください。getProjection

メインスレッドの外部とやり取りするべきではないGoogleMapため、達成したいことを達成する別の方法を見つける必要があります...

getProjectionとにかく、電話をかける必要がある正当な理由は想像できませんgetTile。あなたの本当の問題を説明する別の質問でしょうか?

于 2013-09-02T19:12:56.800 に答える