如何计算CLLocationDistance的中心坐标

我想计算我的位置和一些注释之间的中心点。 到目前为止,我已经这样做了:

CLLocation *myLoc = self.locMgr.location; MKPointAnnotation *middleAnnotation = [locationV.annotations objectAtIndex:locationV.annotations.count/2]; CLLocation *someStuiodLoc = [[CLLocation alloc] initWithLatitude:middleAnnotation.coordinate.latitude longitude:middleAnnotation.coordinate.longitude]; CLLocationDistance dist = [myLoc distanceFromLocation:someStuiodLoc]; 

我如何计算“dist”的中心点/坐标?

 #define ToRadian(x) ((x) * M_PI/180) #define ToDegrees(x) ((x) * 180/M_PI) + (CLLocationCoordinate2D)midpointBetweenCoordinate:(CLLocationCoordinate2D)c1 andCoordinate:(CLLocationCoordinate2D)c2 { c1.latitude = ToRadian(c1.latitude); c2.latitude = ToRadian(c2.latitude); CLLocationDegrees dLon = ToRadian(c2.longitude - c1.longitude); CLLocationDegrees bx = cos(c2.latitude) * cos(dLon); CLLocationDegrees by = cos(c2.latitude) * sin(dLon); CLLocationDegrees latitude = atan2(sin(c1.latitude) + sin(c2.latitude), sqrt((cos(c1.latitude) + bx) * (cos(c1.latitude) + bx) + by*by)); CLLocationDegrees longitude = ToRadian(c1.longitude) + atan2(by, cos(c1.latitude) + bx); CLLocationCoordinate2D midpointCoordinate; midpointCoordinate.longitude = ToDegrees(longitude); midpointCoordinate.latitude = ToDegrees(latitude); return midpointCoordinate; } 

U可以使用中点公式( http://www.purplemath.com/modules/midpoint.htm )来计算两个坐标的中点,如果距离小于500英里,则可以近似地逼近实际地理点。 如果你认为地球是球形的,那么将涉及更复杂的点的处理。

我已经在Swift中编写了库函数来计算多个坐标之间的中点,如下所示:

 // /** Degrees to Radian **/ class func degreeToRadian(angle:CLLocationDegrees) -> CGFloat{ return ( (CGFloat(angle)) / 180.0 * CGFloat(M_PI) ) } // /** Radians to Degrees **/ class func radianToDegree(radian:CGFloat) -> CLLocationDegrees{ return CLLocationDegrees( radian * CGFloat(180.0 / M_PI) ) } class func middlePointOfListMarkers(listCoords: [CLLocationCoordinate2D]) -> CLLocationCoordinate2D{ var x = 0.0 as CGFloat var y = 0.0 as CGFloat var z = 0.0 as CGFloat for coordinate in listCoords{ var lat:CGFloat = degreeToRadian(coordinate.latitude) var lon:CGFloat = degreeToRadian(coordinate.longitude) x = x + cos(lat) * cos(lon) y = y + cos(lat) * sin(lon); z = z + sin(lat); } x = x/CGFloat(listCoords.count) y = y/CGFloat(listCoords.count) z = z/CGFloat(listCoords.count) var resultLon: CGFloat = atan2(y, x) var resultHyp: CGFloat = sqrt(x*x+y*y) var resultLat:CGFloat = atan2(z, resultHyp) var newLat = radianToDegree(resultLat) var newLon = radianToDegree(resultLon) var result:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: newLat, longitude: newLon) return result } 

详细的答案可以在这里find