Google Maps iOS SDK 如何检查路径是否在可见区域?

6

有没有可能检查GMSPath的一部分是否在可见区域内?

3个回答

6

路径由坐标组成。而地图视图有一个可见的区域。 您可以轻松检查一个坐标是否在该区域内,而无需转换为像素空间:

- (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
这取决于你需要多精确。

Daij-Djan的回答使用可见区域的轴对齐边界框,如果视图被旋转/倾斜,则边界框将比实际区域大。

Sunny Shah的回答将更加准确,因为它将完全适配视图的可见区域。但是,它可能会更慢,因为它必须将每个点投影到屏幕坐标中。

这两个答案仅检查路径上的点是否在可见区域内。如果路径中有一条线穿过可见区域,但两个端点都在可见区域外,这两个答案都将报告该路径不可见。要解决这个问题,您需要进行某种类型的线与框碰撞测试。


0
使用地图视图的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");
            }
        }

谢谢。我很快会测试它。 - Tim Tuffley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接