我有两个MKCoordinateRegion
个对象。根据这些对象的值,我在地图上制作了两个annotations
。
然后我计算这两个位置之间的距离:
CLLocationCoordinate2D pointACoordinate = [ann coordinate];
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude];
CLLocationCoordinate2D pointBCoordinate = [ann2 coordinate];
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude];
float distanceMeters = [pointBLocation distanceFromLocation:pointALocation];
distanceMeters = distanceMeters / 1000;
但我不确定我得到的价值是否正确。
这些值是空气距离吗?是否可以根据道路获得距离 ?我需要距离用户必须带车。
答案 0 :(得分:4)
这些值是空中距离。
使用Apple SDK无法找到基于道路的距离。尝试直接询问Google API http://code.google.com/intl/fr-FR/apis/maps/index.html
答案 1 :(得分:4)
使用CLLocation而不是CLLocationCoordinate: -
CLLocation有一个名为
的init方法-(id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude.
然后使用
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
获取Road上两个CLLocation对象之间的距离。
您将获得的距离以公里为单位。
答案 2 :(得分:2)
@coolanilkothari所说的几乎是正确的,除了在ios 3.2中不推荐使用getDistanceFrom的事实。这就是苹果文档所说的..
getDistanceFrom:
返回从接收者位置到的距离(以米为单位) 指定的位置。 (在iOS 3.2中不推荐使用。使用 distanceFromLocation:替代方法。) - (CLLocationDistance)getDistanceFrom:(const CLLocation *)location Parameters
位置
The other location.
返回值
两个位置之间的距离(以米为单位)。讨论
此方法通过跟踪测量两个位置之间的距离 它们之间的一条线跟随地球的曲率。该 产生的弧线是一条平滑的曲线并没有考虑在内 两个位置之间的特定高度变化。可用性
Available in iOS 2.0 and later. Deprecated in iOS 3.2.
在CLLocation.h中声明
答案 3 :(得分:2)
从iOS7开始,您可以通过以下方式获取该信息:
+ (void)distanceByRoadFromPoint:(CLLocationCoordinate2D)fromPoint
toPoint:(CLLocationCoordinate2D)toPoint
completionHandler:(MKDirectionsHandler)completionHandler {
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
request.transportType = MKDirectionsTransportTypeAutomobile;
request.source = [self mapItemFromCoordinate:fromPoint];
request.destination = [self mapItemFromCoordinate:toPoint];
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * routeResponse, NSError *routeError) {
MKRoute *route = [routeResponse.routes firstObject];
CLLocationDistance distance = route.distance;
NSTimeInterval expectedTime = route.expectedTravelTime;
//call a completion handler that suits your situation
}];
}
+ (MKMapItem *)mapItemFromCoordinate:(CLLocationCoordinate2D)coordinate {
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
MKMapItem *item = [[MKMapItem alloc] initWithPlacemark:placemark];
return item;
}
答案 4 :(得分:1)