是否可以检查GMSPath的一部分是否在可见区域?
答案 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");
}
}