从 web api 加载谷歌地图所需的标记,并在相机移动时动态加载其他标记
Posted
技术标签:
【中文标题】从 web api 加载谷歌地图所需的标记,并在相机移动时动态加载其他标记【英文标题】:Load needed markers for google map from web api and load others dynamically as camera move 【发布时间】:2018-07-13 16:08:53 【问题描述】:在我的 android 应用程序中,我想在谷歌地图上动态显示标记。我有很多可以通过我的网络 api 获得的标记位置数据,并且需要根据用户需要查看的内容来加载它们(例如,只需获取属于地图该部分的标记,并在相机以异步模式移动时加载其他标记)。
我进行了很多搜索,但找不到任何直接的解决方案,我的问题是执行此类功能的最佳实践和解决方案是什么?有没有为此提供的指南?
P.S:我使用集群管理器在 android google map 中加载所有标记没有任何问题,但是当标记数量变大时,获取所有标记需要太多时间。
【问题讨论】:
要么更新您的 webapi 以支持空间查询(在相机移动时使用屏幕的 latlngbounds),要么使用 firebase/geofire,然后为每个标记保存键/webapi url,并再次使用屏幕的 latlngbounds 进行更新geofire 查询。 @Andy 感谢您的评论,我更新了我的 api 以获取屏幕位置内的位置... 【参考方案1】:您可以使用 Google 地图聚类 获取更多标记数据。它将为您提供有效的 Google 地图 体验。通过对标记进行聚类,您可以在地图上放置大量标记,而不会使地图难以阅读。
这里是官方文档,你可以关注here
示例代码。
// Declare a variable for the cluster manager.
private ClusterManager<MyItem> mClusterManager;
private void setUpClusterer()
// Position the map.
getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));
// Initialize the manager with the context and the map.
// (Activity extends context, so we can pass 'this' in the constructor.)
mClusterManager = new ClusterManager<MyItem>(this, getMap());
// Point the map's listeners at the listeners implemented by the cluster
// manager.
getMap().setOnCameraIdleListener(mClusterManager);
getMap().setOnMarkerClickListener(mClusterManager);
// Add cluster items (markers) to the cluster manager.
addItems();
private void addItems()
// Set some lat/lng coordinates to start with.
double lat = 51.5145160;
double lng = -0.1270060;
// Add ten cluster items in close proximity, for purposes of this example.
for (int i = 0; i < 10; i++)
double offset = i / 60d;
lat = lat + offset;
lng = lng + offset;
MyItem offsetItem = new MyItem(lat, lng);
mClusterManager.addItem(offsetItem);
通过使用此示例代码,您需要将 api 数据配置为根据您的要求进行聚类并在地图上显示标记。
显然,由于大量标记数据,加载到集群管理器需要时间,并且还取决于您连接的网络。
【讨论】:
感谢您的回答,但我无法理解这对从 web api 加载数据有何帮助?例如我有 100000 个位置数据,我应该先加载所有这些数据吗?我认为它效率不高,而且连接速度慢。 OnCameraIdleListener 是处理api调用的关键...谢谢以上是关于从 web api 加载谷歌地图所需的标记,并在相机移动时动态加载其他标记的主要内容,如果未能解决你的问题,请参考以下文章