12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- //
- // AMapPolygon.m
- // amap_flutter_map
- //
- // Created by lly on 2020/11/12.
- //
- #import "AMapPolygon.h"
- #import "AMapConvertUtil.h"
- #import "MAPolygon+Flutter.h"
- @interface AMapPolygon ()
- @property (nonatomic, strong,readwrite) MAPolygon *polygon;
- @end
- @implementation AMapPolygon
- - (instancetype)init {
- self = [super init];
- if (self) {
- _visible = YES;
- }
- return self;
- }
- - (void)postHookWith:(NSDictionary *)dict {
- NSArray *points = dict[@"points"];
- NSAssert(points.count > 0, @"polygon传入的经纬度点有误!");
- //如果经纬度点已经有值,需要手动释放内存
- 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];
- }
- }
- - (void)dealloc {
- if (_coords != NULL) {
- free(_coords);
- _coords = NULL;
- }
- }
- - (MAPolygon *)polygon {
- if (_polygon == nil) {
- _polygon = [[MAPolygon alloc] initWithPolygonId:self.id_];
- [_polygon setPolygonWithCoordinates:_coords count:_coordCount];
- }
- return _polygon;
- }
- //更新polyline
- - (void)updatePolygon:(AMapPolygon *)polygon {
- NSAssert((polygon != nil && [self.id_ isEqualToString:polygon.id_]), @"更新AMapPolygon数据异常");
- if ([self checkCoordsEqualWithPolyline:polygon] == NO) {//polyline更新了经纬度坐标
- if (_coords != NULL) {
- free(_coords);
- _coords = NULL;
- }
- _coordCount = polygon->_coordCount;
- _coords = (CLLocationCoordinate2D*)malloc(_coordCount * sizeof(CLLocationCoordinate2D));
- for (NSUInteger index = 0; index < _coordCount; index ++) {
- _coords[index] = polygon->_coords[index];
- }
- }
- self.strokeWidth = polygon.strokeWidth;
- self.strokeColor = polygon.strokeColor;
- self.fillColor = polygon.fillColor;
- self.visible = polygon.visible;
- self.joinType = polygon.joinType;
- if (_polygon) {
- [_polygon setPolygonWithCoordinates:_coords count:_coordCount];
- }
- }
- - (BOOL)checkCoordsEqualWithPolyline:(AMapPolygon *)newPolygon {
- if (_coordCount != newPolygon->_coordCount) {//数量不同,则直接更新
- return NO;
- }
- for (NSUInteger index = 0; index < _coordCount; index++) {
- if ([AMapConvertUtil isEqualWith:_coords[index] to:newPolygon->_coords[index]] == NO) {
- return NO;
- }
- }
- return YES;
- }
- @end
|