iOS判断点是否在多边形面内(高德地图开发)
程序员文章站
2022-03-14 08:24:06
定义两个属性
@interface OutDoorViewController ()
@property (nonatomic, strong) MAMapView *ma...
定义两个属性
@interface OutDoorViewController () @property (nonatomic, strong) MAMapView *maMapView; @property (nonatomic, strong) MAPolygonView *polygonView; @end
初始化指定代理人
self.maMapView = [[MAMapView alloc] initWithFrame:self.view.bounds]; self.maMapView.delegate = self; [self.view addSubview:self.maMapView];
构造一个多边形
//构造多边形数据对象 CLLocationCoordinate2D coordinates[4]; coordinates[0].latitude = 39.810892; coordinates[0].longitude = 116.233413; coordinates[1].latitude = 39.816600; coordinates[1].longitude = 116.331842; coordinates[2].latitude = 39.762187; coordinates[2].longitude = 116.357932; coordinates[3].latitude = 39.733653; coordinates[3].longitude = 116.278255; MAPolygon *polygon = [MAPolygon polygonWithCoordinates:coordinates count:4]; //在地图上添加折线对象 [_maMapView addOverlay:polygon];
- (MAOverlayView *)mapView:(MAMapView *)mapView viewForOverlay:(id )overlay { if ([overlay isKindOfClass:[MAPolygon class]]) { _polygonView = [[MAPolygonView alloc] initWithPolygon:overlay]; _polygonView.lineWidth = 5.f; _polygonView.strokeColor = [UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:0.8]; _polygonView.fillColor = [UIColor colorWithRed:0.77 green:0.88 blue:0.94 alpha:0.8]; //连接类型 _polygonView.lineJoin = kCGLineJoinMiter; return _polygonView; } return nil; }
点击地图区域判断是否在范围内
- (void)mapView:(MAMapView *)mapView didSingleTappedAtCoordinate:(CLLocationCoordinate2D)coordinate { MAMapPoint point = MAMapPointForCoordinate(coordinate); if (MAPolygonContainsPoint(point, _polygonView.polygon.points, 4)) { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"在区域内" preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"返回" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { NSLog(@"在区域内"); }]]; [self presentViewController:alert animated:YES completion:^{ }]; }else{ UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"不在区域内" preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"返回" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { NSLog(@"不在区域内"); }]]; [self presentViewController:alert animated:YES completion:^{ }]; } }
就可以根据在范围内和外进行分别的操作了
end