0

以下に基づいてマップ マーカー アイコンを設定するためのコードを実装するための最も効率的なアプローチについて、誰かが何か提案があれば非常に役に立ちます。

  • 表示するマーカーを指定するユーザー定義のフィルタ( boolean)
  • HashMap<String, Integer>マーカーに関連付けられた に含まれるキー- でclass CrimePoint

ユーザーによって定義されたフィルター オプション:

    boolean displayAntiSocialBehaviourMarkers;
    boolean displayBurglaryMarkers;
    boolean displayCriminalDamageArsonMarkers;
    boolean displayDrugsMarkers;
    boolean displayOtherTheftMarkers;
    boolean displayPubDisorderWeaponsMarkers;
    boolean displayRobberyMarkers;
    boolean displayShopliftingMarkers;
    boolean displayVehicleCrimeMarkers;
    boolean displayViolentCrimeMarkers;
    boolean displayOtherCrimeMarkers;

各マーカーはCrimePoint、マーカーをプロットするために必要なすべての情報を含むクラスである で作成されます

犯罪ポイント クラス変数:

private final Double latitude;
private final Double longitude;
private final String title;

//SNIPPET
//The HashMap storing the categories associated with this CrimePoint.
//Category name is the key and the number of crimes in that category is the Value
//
private Map<String, Integer> crimeCategories;

//An integer to hold the references to the icon image to use
//Example: R.drawable.image002;
private int iconResource;

マーカー アイコン:

マップで使用できる12の異なるマーカー アイコンがあります。[上記の] フィルター オプションごとに 1 つと特殊なケース マーカー (複数犯罪) の場合:
-CrimePointに複数の犯罪カテゴリ ( crimeCategories.size() > 1)があり、かつ
- に含まれる複数の犯罪カテゴリCrimePointがフィルター オプションを使用して表示されるように設定されている

マーカーは、表示されている (または複数の) CrimeCategory がある場合にのみ描画されます。

私はこれに必要なロジックに取り組むのに何年も費やしてきましたが、あまり思い付いていないので、どんな助けや提案も素晴らしいでしょう.

注: ユーザーがフィルター オプションを変更するたびに、この関数を呼び出してマップ上のアイコンを変更し、マーカーを非表示/表示する必要があります。

4

1 に答える 1

0

まず、表現の変更を検討する必要があります。犯罪の種類の列挙から始めます。

enum CrimeType { AntiSocialBehaviour, ..., Count }

これで、フラグを列挙セットとして作成できます。

EnumSet<CrimeType> showMarkers = new EnumSet<CrimeType>();

これは通常の Java のように機能しますSetが、より効率的です。ハッシュの力が必要ない場合は、ハッシュではなくマーカー内で使用してください。

マーカーのオンとオフを切り替えるには、ドキュメントの可視性属性に注意してください。フィルタ フラグが変更された場合、可視性を適切に設定するマーカーのリストをトラバースします。次に、マップ フラグメントまたはビューを無効にします。描画時間は可視性の設定時間よりも優先されるため、これは必要なだけ効率的です。

効率に関する質問から、多くのマーカーがあると推測しています。オーバーラップによってマップが混乱するほど多くのマーカーがある場合は、マージ アルゴリズムを実装して、複数のマーカーを 1 つのマーカーで表す必要があります。この件に関して以前にこの質問を投稿しましたが、応答がありませんでした。私のソリューションは、私が望むほど速くはありませんが、非常にうまく機能すると説明しました (Nexus タブレットで約 15,000 のマーカーで 2 ~ 3 秒)。

非標準のマーカーの外観については、こちらの「デフォルト マーカーの変更」のドキュメントを参照してください

それはかなり明確です。特定の質問があり、コードを表示する場合は、詳細をサポートできます。

于 2013-03-11T20:21:35.150 に答える