如果有人对实现基于以下内容设置地图标记图标的代码的最有效方法有任何建议,那将非常有帮助:
- 用户定义的过滤器,指示要显示的标记(
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 种不同的标记图标可用。每个过滤器一个 选项[上面给出]和一个特殊情况标记(多重犯罪(,其中:
- CrimePoint
有多个犯罪类别(crimeCategories.size() > 1
(和
- CrimePoint
中包含的多个犯罪类别设置为使用过滤器选项可见
仅当显示一个(或多个(犯罪类别时,才会绘制标记。
任何帮助或建议都会很棒,因为我花了很长时间来处理我需要的逻辑,但没有想出太多。
注意:每次用户更改过滤器选项时,都需要调用此函数来更改地图上的图标并隐藏/显示标记。
首先,您应该考虑更改表示形式。 首先列举犯罪类型:
enum CrimeType { AntiSocialBehaviour, ..., Count }
现在,可以将标志创建为枚举集:
EnumSet<CrimeType> showMarkers = new EnumSet<CrimeType>();
这类似于常规的Java Set
,但效率更高。 如果不需要哈希的功效,请在标记中使用它们,而不是哈希。
要打开和关闭标记,请注意文档中的可见性属性。 更改筛选器标志时,请遍历设置可见性的标记列表。然后使地图片段或视图失效。绘制时间将主导可见性设置时间,因此这是所需的效率。
我从效率问题中推断出你有很多标记。 如果标记太多,以至于映射被重叠混淆,则必须实现合并算法以表示具有多个标记的多个标记。 我之前就这个主题发布了这个问题,但没有收到任何回复。 我在那里解释的解决方案效果很好,尽管没有我想要的那么快(2-3 秒,在 Nexus 平板电脑上大约有 15,000 个标记(。
对于非标准标记外观,请在此处的"更改默认标记。
这很清楚。 如果您有具体问题和显示代码,我们可以为您提供详细信息。