当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS判断点是否在多边形面内(高德地图开发)

iOS判断点是否在多边形面内(高德地图开发)

2018年02月24日  | 移动技术网IT编程  | 我要评论

乔布斯演讲稿,俞敏洪演讲稿,水库钓鲫鱼

定义两个属性

@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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网