我有这个问题:
我有一个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 {
/// ?????? ////
}
答案 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。