Here MKGeodesicPolyline will solve your problem. Add an MKGeodesicPolyline object instead of MKPolyline .
In your code, remove the two lines below:
let polyline = MKPolyline(coordinates: &coordinates, count: locations.count) map.add(polyline)
And add these lines:
let geodesic = MKGeodesicPolyline(coordinates: coordinates, count: 2) map.addOverlay(geodesic)
Swift 5.0:
func createPolyline(mapView: MKMapView) { let point1 = CLLocationCoordinate2DMake(-73.761105, 41.017791); let point2 = CLLocationCoordinate2DMake(-73.760701, 41.019348); let point3 = CLLocationCoordinate2DMake(-73.757201, 41.019267); let point4 = CLLocationCoordinate2DMake(-73.757482, 41.016375); let point5 = CLLocationCoordinate2DMake(-73.761105, 41.017791); let points: [CLLocationCoordinate2D] points = [point1, point2, point3, point4, point5] let geodesic = MKGeodesicPolyline(coordinates: points, count: 5) map.addOverlay(geodesic) UIView.animate(withDuration: 1.5, animations: { () -> Void in let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01) let region1 = MKCoordinateRegion(center: point1, span: span) self.map.setRegion(region1, animated: true) }) }
Target Code C:
- (void) createGeoPolyline { CLLocationCoordinate2D point1 = { -73.761105, 41.017791 }; CLLocationCoordinate2D point2 = { -73.760701, 41.019348 }; CLLocationCoordinate2D point3 = { -73.757201, 41.019267 }; CLLocationCoordinate2D point4 = { -73.757482, 41.016375 }; CLLocationCoordinate2D point5 = { -73.761105, 41.017791 }; CLLocationCoordinate2D points[] = {point1, point2, point3, point4, point5}; MKGeodesicPolyline *geodesic = [MKGeodesicPolyline polylineWithCoordinates:&points[0] count:5]; [self.mapView addOverlay:geodesic]; [UIView animateWithDuration:1.5 animations:^{ MKCoordinateRegion region; region.center = point1; MKCoordinateSpan span; span.latitudeDelta = 0.01; span.longitudeDelta = 0.01; region.span = span; [self.mapView setRegion:region animated:YES]; }]; }
The code above Objective-C works fine, and it will display below:

But if you try Swift code, this will not happen. I tried my best to solve this, but that will not change. Maybe this is a bug in the MapKit framework.