amap_map/ios/Classes/Model/AMapPolyline.m

105 lines
3.0 KiB
Mathematica
Raw Normal View History

2023-12-22 21:23:24 +08:00
//
// AMapPolyline.m
// amap_map
//
// Created by lly on 2020/11/6.
//
#import "AMapPolyline.h"
#import "AMapConvertUtil.h"
#import "MAPolyline+Flutter.h"
@interface AMapPolyline ()
@property (nonatomic, strong, readwrite) MAPolyline *polyline;
@end
@implementation AMapPolyline
- (instancetype)init {
self = [super init];
if (self) {
_alpha = 1.0;
_visible = YES;
}
return self;
}
- (void)postHookWith:(NSDictionary *)dict {
NSArray *points = dict[@"points"];
NSAssert(points.count > 0, @"polyline传入的经纬度点有误");
//
if (_coords != NULL) {
free(_coords);
_coords = NULL;
}
_coordCount = points.count;
_coords = (CLLocationCoordinate2D*)malloc(_coordCount * sizeof(CLLocationCoordinate2D));
for (NSUInteger index = 0; index < _coordCount; index ++) {
NSArray *point = points[index];
_coords[index] = [AMapConvertUtil coordinateFromArray:point];
}
}
- (MAPolyline *)polyline {
if (_polyline == nil) {
if (self.geodesic) {//线使
_polyline = [[MAGeodesicPolyline alloc] initWithPolylineId:self.id_];
} else {
_polyline = [[MAPolyline alloc] initWithPolylineId:self.id_];
}
[_polyline setPolylineWithCoordinates:_coords count:_coordCount];
}
return _polyline;
}
- (void)dealloc {
if (_coords != NULL) {
free(_coords);
_coords = NULL;
}
}
//polyline
- (void)updatePolyline:(AMapPolyline *)polyline {
NSAssert((polyline != nil && [self.id_ isEqualToString:polyline.id_]), @"更新Polyline数据异常");
if ([self checkCoordsEqualWithPolyline:polyline] == NO) {//polyline
if (_coords != NULL) {
free(_coords);
_coords = NULL;
}
_coordCount = polyline->_coordCount;
_coords = (CLLocationCoordinate2D*)malloc(_coordCount * sizeof(CLLocationCoordinate2D));
for (NSUInteger index = 0; index < _coordCount; index ++) {
_coords[index] = polyline->_coords[index];
}
}
self.width = polyline.width;
self.color = polyline.color;
self.visible = polyline.visible;
self.alpha = polyline.alpha;
NSAssert(self.geodesic == polyline.geodesic, @"是否为大地曲线的变量,不允许动态修改");
self.dashLineType = polyline.dashLineType;
self.joinType = polyline.joinType;
self.capType = polyline.capType;
if (_polyline) {
[_polyline setPolylineWithCoordinates:_coords count:_coordCount];
}
}
- (BOOL)checkCoordsEqualWithPolyline:(AMapPolyline *)newPolyline {
if (_coordCount != newPolyline->_coordCount) {//
return NO;
}
for (NSUInteger index = 0; index < _coordCount; index++) {
if ([AMapConvertUtil isEqualWith:_coords[index] to:newPolyline->_coords[index]] == NO) {
return NO;
}
}
return YES;
}
@end