有没有可能检查GMSPath的一部分是否在可见区域内?
有没有可能检查GMSPath的一部分是否在可见区域内?
路径由坐标组成。而地图视图有一个可见的区域。 您可以轻松检查一个坐标是否在该区域内,而无需转换为像素空间:
- (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");
}
}
}
Daij-Djan的回答使用可见区域的轴对齐边界框,如果视图被旋转/倾斜,则边界框将比实际区域大。
Sunny Shah的回答将更加准确,因为它将完全适配视图的可见区域。但是,它可能会更慢,因为它必须将每个点投影到屏幕坐标中。
这两个答案仅检查路径上的点是否在可见区域内。如果路径中有一条线穿过可见区域,但两个端点都在可见区域外,这两个答案都将报告该路径不可见。要解决这个问题,您需要进行某种类型的线与框碰撞测试。
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");
}
}