我需要知道從中心地圖到屏幕另一側的距離(以公里爲單位)(並且如果縮放更改距離將會改變)。使用mapkit計算以米爲單位的半徑
我需要這個功能
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
}
任何想法如何,我可以做到這一點來實現此功能?
由於
我需要知道從中心地圖到屏幕另一側的距離(以公里爲單位)(並且如果縮放更改距離將會改變)。使用mapkit計算以米爲單位的半徑
我需要這個功能
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
}
任何想法如何,我可以做到這一點來實現此功能?
由於
的MKMapView具有名爲centerCoordinate(CLLocationCoordinate2D)屬性和區域(MKCoordinateRegion)。區域是一個結構是:
typedef struct {
CLLocationDegrees latitudeDelta;
CLLocationDegrees longitudeDelta;
}MKCoordinateSpan
您應該能夠創造另一個角度來看,基於centerCoordinate,讓我們說,加入latitudeDelta你北緯財產或centerCoordinate,並使用CLLocation的方法計算距離:
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
像這樣的事情
MkMapView * mapView; // init somewhere
MKCoordinateRegion region = mapView.region;
CLLocationCoordinate2D centerCoordinate = mapView.centerCoordinate;
CLLocation * newLocation = [[[CLLocation alloc] initWithLatitude:centerCoordinate.latitude+region.span.latitudeDelta longitude:centerCoordinate.longitude] autorelease];
CLLocation * centerLocation = [[[CLLocation alloc] initWithLatitude:centerCoordinate.latitude:longitude:centerCoordinate.longitude] autorelease];
CLLocationDistance distance = [centerLocation distanceFromLocation:newLocation]; // in meters
而剛剛計算出每一個代表觸發一定的方法(決定你需要時間:MKMapViewDelegate )
由於矩形不是圓形,因此無法獲得半徑。
但是你仍然可以從一個地區的中心獲得最遠的距離。 重複使用與上述相同的想法,但嵌入在一個快速擴展中。
extension MKCoordinateRegion {
func distanceMax() -> CLLocationDistance {
let furthest = CLLocation(latitude: center.latitude + (span.latitudeDelta/2),
longitude: center.longitude + (span.longitudeDelta/2))
let centerLoc = CLLocation(latitude: center.latitude, longitude: center.longitude)
return centerLoc.distanceFromLocation(furthest)
}
}
使用
let radius = mapView.region.distanceMax()
這是一個偉大的答案。 – sudo 2014-03-19 22:03:18
很棒的答案!非常感謝! – Andres 2014-04-25 00:23:34
'centerCoordinate.latitude + region.span.latitudeDelta'必須是'centerCoordinate.latitude + region.span.latitudeDelta/2'才能得到正確的半徑。 – 2014-09-12 12:37:45