在安卓Google地图上添加数千个标记

6
我正在开发一款基于GoogleMap的Android应用,需要在地图上展示成千上万的标记。目前,我从SQLite数据库加载器中检索每个标记的纬度和经度,并在public void onLoadFinished(final Loader loader, final Cursor cursor)方法中添加标记。然而,这种方法会使用户体验非常糟糕,因为当我添加标记时,应用程序无法响应。那么,如何在GoogleMap上添加成千上万的标记并保持应用程序的响应性呢?由于我必须在主UI线程上添加标记,请问该怎么做?

4
这是一个名为“Android Maps Extensions”的项目,它是对Google Maps Android API库的一个扩展。该项目允许您添加一些额外的功能和选项来改进您的地图应用程序。您可以在GitHub上找到更多有关该项目的信息和文档。 - Lalit Poptani
你尝试过AsyncTask吗? - Juliousraj
我还没有尝试过AsyncTask,但我认为这不会解决问题,因为我仍然需要在onPostExecute()中从UI线程添加标记。 - Hector
Map扩展非常出色,请将其作为适当的答案添加,因为它应该得到更多的赞誉。谢谢Lalit Poptani。 - Hector
2个回答

9
一种可能的方法是只有当标记落入地图的可见区域时才添加Marker
实际上,您需要将对addMarker的调用从onLoadFinished移动到onCameraChange,并且在onLoadFinished中仅创建用于创建这些Marker所需的数据列表。最简单的形式可能是List<MarkerOptions>
Lalit Poptani在上面的评论中提到的Android Maps Extensions可以为您处理,即使您不想使用聚类也可以。您只需像以前一样保留代码,并仅进行调用,如下所示:
googleMap.setClustering(new ClusteringSettings().enabled(false).addMarkersDynamically(true));

使用这个扩展库替换Google Maps Android API v2后。

哦,我的天啊,感谢您提供的聚类扩展链接,我以为它只适用于JS API。 - Thibault D.
1
@thibaultd 这是我写的代码。这里还有另一种方法:https://github.com/twotoasters/clusterkraf - MaciejGórski
@MaciejGórski,我没有看到GoogleMap对象的setClustering方法。这个新库里面没有吗? - Gurupad Mamadapur

0

感谢您抽出时间回答我的问题。然而,“Spatial Lite”链接给了我一个404错误。 - Hector

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接