2

ユーザーがMapViewで陸上または海上の経度/緯度のペアを選択しているかどうかを検出する必要があるアプリケーションを実行しています。Google マップ サービスにリクエストを送信することで、この回答を得ることができましたが、オフラインでも動作するようにしたいと考えています。だから私はこれが機能する 2 つの方法を思いつきました。私はビットマップとメモリの領域ではどちらかというと緑色なので、あなたの意見を聞きたいと思いました。

主なアイデアは、カバーしたいマップ エリアの小さな白黒ビットマップ (200x200 ピクセルなど) を保存することです。ユーザーが経度/緯度のペアを選択すると、そのペアが一連の x、y ピクセルに変換され、ピクセル座標が黒のピクセル (陸) または白のピクセル (海/水) を指しているかどうかを確認します。これまでに私が思いついた2つの方法があります。

オプションA

ユーザーが経度/経度のペアを選択しようとしているときにビットマップを遅延読み込みし、getPixel()それが陸地か海域かを確認するために使用します。イメージへの WeakReference を保持し、GC が発生するたびにガベージ コレクションを実行できるようにします。

オプション B

ビットマップの各ピクセル座標ペアを SQLite データベースに保持し、ユーザーが経度/緯度のペアを選択しようとするたびにルックアップを実行します。

私はAが速度的には最高のものだと推測しています (最初にディスクからビットマップを読み取るオーバーヘッドを無視します) が、ビットマップをメモリに保持するのはバッテリの観点からコストがかかりますか?

これを行う方法について他に提案がある場合は、ここに記載したいと思います:)

4

1 に答える 1

1

あなたが言うように、オプションAが最速ですが、ビットマップの使用がバッテリーに影響を与えるとあなたが考える理由について私は混乱しています。

お使いの携帯電話のすべてのメモリは常に1または0を保持します。1と0の間には電力に非常に小さな違いがあります(つまり、小さいことを意味します)が、数百メガバイトまたはギグのメモリ間では、 1と0のランダムな50/50分布。ビットマップをロードするメモリは、ロードする前は1と0でいっぱいで、ロードした後は1と0でいっぱいでした。測定せずに、メモリからビットマップをロードすることの影響は(単にロードしたままにするのではなく、電力を使用するため)、SQLアプローチが使用するメモリ読み取りの同等の数よりもはるかに少ないと思います。

したがって、私の結論は、ビットマップをロードしたままにしておくことはバッテリーに影響を与えず、オプションAが推奨されるということです。

[編集]あなたの質問についてもう少し考えて、あなたは実際に「どちらがより多くの電力を使用するか」、ロードされたビットマップからピクセルを読み取るか、SQLiteテーブルをクエリするかを尋ねていますか?

于 2012-10-14T16:05:45.633 に答える