Google Maps iOS SDK会检查路径是否位于可见区域

时间:2014-05-13 05:30:20

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

是否可以检查GMSPath的一部分是否在可见区域?

3 个答案:

答案 0 :(得分:5)

路径由坐标组成。 mapview有一个可见区域。 您可以轻松检查坐标是否在一个区域内,甚至不会进入像素空间:

- (void)checkPath:(GMSPath*)path {
    GMSVisibleRegion visibleRegion = _googleMap.projection.visibleRegion;
    GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithRegion: visibleRegion];

    for(int i = 0; i < path.count; i++) {
        CLLocationCoordinate2D coordinate=[path coordinateAtIndex:i];
        if([bounds containsCoordinate:coordinate]) {
            NSLog("Visible");
        }
    }
}

答案 1 :(得分:1)

这取决于你需要它的准确程度。

Daij-Djan's answer使用可见区域的轴对齐边界框,如果旋转/倾斜视图,该边界框将大于实际区域。

Sunny Shah's answer将更准确,因为它将完全适合视图的可见区域。然而,它可能会更慢,因为它必须将每个点投影到屏幕坐标。

这两个答案都只检查路径上的某个点是否在可见区域内。如果路径中有一条线穿过可见区域,但两个顶点位于可见区域之外,则这两个答案都会将路径报告为不可见。要解决这个问题,你需要某种线对盒碰撞测试。

答案 2 :(得分:0)

使用mapview的pointForCoordinate方法查看路径的给定点是否在屏幕上

for (int i = 0; i < path.count; i++) {
            CLLocationCoordinate2D coordinate=[path coordinateAtIndex:i];
            CGPoint markerPoint = [mapView_.projection pointForCoordinate:coordinate];

            if (markerPoint.x >= 0 && markerPoint.y >= 0 && markerPoint.x <= mapView_.frame.size.width && markerPoint.y <= mapView_.frame.size.height) {
                NSLog(@"Visible");
            }
        }