根据坐标数组计算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);