amap_map/ios/Classes/Model/AMapPolyline.m

105 lines
3.0 KiB
Objective-C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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