从web api加载谷歌地图所需的标记,并在摄像机移动时动态加载其他标记

时间:2018-02-03 07:03:55

标签: android google-maps android-maps-v2

在我的Android应用程序中,我想动态地在谷歌地图上显示标记。我通过我的网络API提供了大量的标记位置数据,需要根据用户需要查看来加载它们(例如,只需获取属于地图部分的标记,然后在摄像机移动时加载其他标记异步模式)。

我经常搜索但找不到任何直接的解决方案,我的问题是做这种功能的最佳做法和解决方案是什么?是否有任何提供的指导?

P.S:使用集群管理器在Android谷歌地图中加载所有标记时没有任何问题,但是当标记数量变大时,需要花费太多时间来获取所有标记。

1 个答案:

答案 0 :(得分: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数据配置为群集,并在地图上显示标记。

由于标记数据量很大,显然需要时间加载到集群管理器中,并且还取决于您连接的网络。