通过位置和缩放级别向服务器请求mapkit注释

时间:2014-02-25 00:07:33

标签: ios annotations mkmapview mapkit

我有这个问题:

我有一个API服务器来请求最接近位置(纬度和长度)和距离(km)的点

当用户在地图上进行平移时,我会调用此API。所以我会根据缩放级别来计算距离参数。

我怎样才能获得这个?

此时我有这个MapKit委托方法:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    MKZoomScale currentZoomScale = mapView.bounds.size.width / mapView.visibleMapRect.size.width;
NSLog(@"currentZoom:%f", currentZoomScale);
    [self.dataReader sendServerRequestWithCoordinate:mapView.region.center andDistance:[self getDistanceByZoomLevel:currentZoomScale];

}

- (float) getDistanceByZoomLevel:(MKZoomScale) zoomLevel {
 /// ?????? ////
}

1 个答案:

答案 0 :(得分:0)

您无需根据“缩放级别”或“缩放比例”计算距离。

Map Kit和Core Location具有计算距离给定坐标或地图点的方法和函数。

假设您要使用当前可见地图所涵盖的对角线距离(从左上角到右下角)。

角坐标(CLLocationCoordinate2D s)可以从地图视图的region属性中获取,然后您可以使用distanceFromLocation方法计算两个坐标之间的距离。

角落地图点(MKMapPoint s)可以从地图视图的visibleMapRect属性中获取,然后您可以使用MKMetersBetweenMapPoints函数来获取它们之间的距离。

以下是使用地图点的示例:

MKMapRect vmr = mapView.visibleMapRect;

//vmr.origin is the top-left corner MKMapPoint

MKMapPoint bottomRightMapPoint = 
    MKMapPointMake(vmr.origin.x + vmr.size.width, 
                   vmr.origin.y + vmr.size.height);

CLLocationDistance distanceMeters = 
    MKMetersBetweenMapPoints(vmr.origin, bottomRightMapPoint);

当然,如果您想要公里而不是米,请将distanceMeters除以1000.0。

另外,如果按“距离”你实际上想要半径(距中心点的距离),那么也将distanceMeters除以2.0。