Google Maps for iOS - 如何判断标记是否在屏幕范围内?

Dav*_*ole 9 google-maps ios

我试图找出一种直接的方法来确定在Google Maps for iOS中,如果给定的GMSMarker在可见地图的范围内.在Javascript API中似乎有解决方案,但除了根据这篇文章做一些复杂的推理之外,似乎没有办法.

Dav*_*ole 15

基于Andy有用响应的代码示例:

- (void)snapToMarkerIfItIsOutsideViewport:(GMSMarker *)m{
    GMSVisibleRegion region = _mapView.projection.visibleRegion;
    GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithRegion:region];
    if (![bounds containsCoordinate:m.position]){
        GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:m.position.latitude
                                              longitude:m.position.longitude
                                                   zoom:_mapView.camera.zoom];
        [self.mapView animateToCameraPosition: camera];
    }
}
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 13

使用GMSVisibleRegion检索视口的边界,并使用它创建GMSCoordinateBounds.打电话containsCoordinate,传递标记的位置.如果标记位于视口内,则应返回true,否则返回false.


Gab*_*nyu 5

答案的 swift 4 版本。如果标记在屏幕区域内,则返回布尔值

func isMarkerWithinScreen(marker: GMSMarker) -> Bool {
    let region = self.mapView.projection.visibleRegion()
    let bounds = GMSCoordinateBounds(region: region)
    return bounds.contains(marker.position)
}
Run Code Online (Sandbox Code Playgroud)