防止在谷歌地图上滚动地图区域外

时间:2015-03-18 11:23:44

标签: ios google-maps google-maps-sdk-ios

实际上是在处理iOS版Google地图框架,我想阻止向外滚动一个给定区域。

我最初尝试做的是,实现委托方法:- (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position并将地图位置与右/左角进行比较。但是我在滚动或缩放时遇到的问题很多。

以下是我的实施例子:

 - (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position {  

    if (position.target.latitude > topLat) { 
        GMSCameraPosition *goBackCamera = [GMSCameraPosition cameraWithLatitude:topLat
                                                                      longitude:position.target.longitude
                                                                            zoom:position.zoom
                                                                            bearing:220
                                                                            viewingAngle:0];

        [self.mapView animateToCameraPosition:goBackCamera];
    }

    if (position.target.latitude < bottomLat) {
        GMSCameraPosition *goBackCamera = [GMSCameraPosition cameraWithLatitude:bottomLat
                                                                      longitude:position.target.longitude
                                                                           zoom:position.zoom
                                                                        bearing:220
                                                                   viewingAngle:0];
        [self.mapView animateToCameraPosition:goBackCamera];
    }

    if (position.target.longitude > rightLong) {
        GMSCameraPosition *goBackCamera = [GMSCameraPosition cameraWithLatitude:position.target.latitude
                                                                      longitude:rightLong
                                                                           zoom:position.zoom
                                                                        bearing:220
                                                                   viewingAngle:0];
        [self.mapView animateToCameraPosition:goBackCamera];
    }

    if (position.target.longitude < leftLong) {
        GMSCameraPosition *goBackCamera = [GMSCameraPosition cameraWithLatitude:position.target.latitude
                                                                      longitude:leftLong
                                                                           zoom:position.zoom
                                                                        bearing:220
                                                                   viewingAngle:0];
        [self.mapView animateToCameraPosition:goBackCamera];
    }
}

你没有办法更有效率地解决这个问题吗?

PS:TopLat,RightLong ......意味着最高纬度和经度等

此致

2 个答案:

答案 0 :(得分:0)

我能想到的一种方法是在地图中设置界限,以便使用GMSCoordinateBounds来滚动地图。

接下来你要做的就是在你上面指定的地图部分内设置scroll gesture为真。对于地图的其余部分,滚动手势应为false。

答案 1 :(得分:0)

使用GMSCoordinateBounds(东北坐标,西南坐标)方法。 这可能会有所帮助 GMSCoordinateBounds Class Reference