根据坐标数组计算iOSpolyline需要在地图上展示的rect

根据坐标数组计算iOSpolyline需要在地图上展示的rect


// 原生地图根据坐标数组计算需要展示是MKMapRect
- (MKMapRect)calculateMapRect
{
   __block FPCoordinate *minCoordinate = [[FPCoordinate alloc] init];
   __block FPCoordinate *maxCoordinate = [[FPCoordinate alloc] init];

   // 存档坐标点的数组
   [self.points enumerateObjectsUsingBlock:^(FPCoordinate *obj, NSUInteger idx, BOOL *stop) {
       if (idx == 0) {
           minCoordinate.latitude = obj.latitude;
           minCoordinate.longitude = obj.longitude;
           maxCoordinate.latitude = obj.latitude;
           maxCoordinate.longitude = obj.longitude;
       } else {
           minCoordinate.latitude = MIN(obj.latitude, minCoordinate.latitude);
           minCoordinate.longitude = MIN(obj.longitude, minCoordinate.longitude);
           maxCoordinate.latitude = MAX(obj.latitude, maxCoordinate.latitude);
           maxCoordinate.longitude = MAX(obj.longitude, maxCoordinate.longitude);
       }
   }];
   [self.points removeAllObjects];

   // 内部计算是否需要将wgs-84转换为火星坐标
   MKMapPoint p1 = MKMapPointForCoordinate([FPCoordinateTool transformToMars:minCoordinate.coordinate2D]);
   MKMapPoint p2 = MKMapPointForCoordinate([FPCoordinateTool transformToMars:maxCoordinate.coordinate2D]);

   double x = MIN(p1.x, p2.x);
   double y = MIN(p1.y, p2.y);
   double width = ABS(p1.x - p2.x);
   double height = ABS(p1.y - p2.y);

   if (width > MKMapSizeWorld.width / 2) {
       x = x + width;
       width = MKMapSizeWorld.width - width;
   }

   // calculate center coor
   double centerX = minCoordinate.longitude + (maxCoordinate.longitude - minCoordinate.longitude) / 2;
   double centerY = minCoordinate.latitude + (maxCoordinate.latitude - minCoordinate.latitude) / 2;
   self.centerCoor = CLLocationCoordinate2DMake(centerY, centerX);

   return MKMapRectMake(x, y, width, height);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值