Google Maps iOS:移动相机以显示集群内的所有标记

Posted

技术标签:

【中文标题】Google Maps iOS:移动相机以显示集群内的所有标记【英文标题】:Google Maps iOS: Move camera to show all markers present inside a cluster 【发布时间】:2019-10-19 18:09:22 【问题描述】:

当调用 didTap 集群函数时,它会将相机缩放到集群中存在的标记之一,但我想显示该集群中的所有标记并将相机聚焦在这些标记上。

我能够在 android 中实现这一点。但是在 ios 中,google utils sdk 没有提供一种方法来获取集群对象中存在的所有项目。

这是安卓代码

mClusterManager
            .setOnClusterClickListener(new 
ClusterManager.OnClusterClickListener<Service_Provider>() 
                @Override
                public boolean onClusterClick(final Cluster<Service_Provider> cluster) 
        LatLngBounds.Builder builder = LatLngBounds.builder();
        for (ClusterItem item : cluster.getItems()) 
           builder.include(item.getPosition());
          Log.w(TAG, "Clicked Cluster Item name: " + item.getTitle());
         
        final LatLngBounds bounds = builder.build();

        map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));
                    return true;
                
            );

到目前为止我在 iOS 中的尝试

func clusterManager(_ clusterManager: GMUClusterManager, didTap cluster: 
GMUCluster) -> Bool 
    print("Did tap cluster")
    let newCamera = GMSCameraPosition.camera(withTarget: cluster.position,
                                             zoom: mapView.camera.zoom +1)
    let update = GMSCameraUpdate.setCamera(newCamera)
    mapView.moveCamera(update)

感谢任何帮助。

TIA

【问题讨论】:

【参考方案1】:
func showBoundBox( _ list : [CLLocationCoordinate2D])
    
    var bounds = GMSCoordinateBounds()
    for location in list 
        bounds = bounds.includingCoordinate(location)
    
        
    let update = GMSCameraUpdate.fit(bounds, withPadding: 100)
    map.animate(with: update)
    

【讨论】:

以上是关于Google Maps iOS:移动相机以显示集群内的所有标记的主要内容,如果未能解决你的问题,请参考以下文章

相机动画和用户相机移动的区别

使相机随着位置的变化而移动(Google Maps Api)

Google Maps SDK iOS - 根据缩放级别计算半径

自 pod 更新以来,iOS 地图左上角的 Google Maps 相机目标

将相机重定向到当前位置 Google Maps API v2

在 Fragment 中恢复 Google Maps 状态