我有一个我想要MKMapView放大的中心位置以及一个位置列表(纬度/经度)。我想根据此位置列表设置缩放级别(距离),以便同时可以看到许多这些位置MKMapView,但具有最小缩放级别(或最大距离),以便我MKMapView不会缩放太多了。
假设我有一个包含 10 个位置的列表,但其中一个位置离我的中心位置太远,如果我显示其中的一个位置MKMapView将被缩小到很多,我该如何计算 的距离参数MKCoordinateRegionMakeWithDistance?
我希望我能很好地解释我的问题,我认为我很难解释它。
谢谢
索伦
我使用以下解决方案解决了它。
我使用大圆距离公式来计算我的中心点和所有找到的纬度/经度点之间的距离,如果这个距离大于我的最小距离和我的最大距离并且大于我设置的“最后找到的距离”这个距离是我的变焦距离。它就像一个魅力,实际上很简单。
这是我的距离计算代码:
-(double)distanceBetweenLocations:(CLLocationCoordinate2D)c1 :(CLLocationCoordinate2D)c2 {
int r = 6371 * 1000;//meters
double dLat = (c2.latitude - c1.latitude) * M_PI / 180;
double dLon = (c2.longitude - c1.longitude) * M_PI / 180;
double lat1 = c1.latitude * M_PI / 180;
double lat2 = c2.latitude * M_PI / 180;
double a = sin(dLat / 2) * sin(dLat / 2) + sin(dLon / 2) * sin(dLon / 2) * cos(lat1) * cos(lat2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
double d = r * c;
return d;
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码,它使用计算出的距离缩放到我的中心点:
-(void)zoomToLocation {
double MAX_DISTANCE = 10000.0;
double MIN_DISTANCE = 600.0;
double zoomDistance = MIN_DISTANCE;
CLLocationCoordinate2D center;
center.latitude = self.searchLocationLatitude;
center.longitude = self.searchLocationLongitude;
BOOL treaterVisible = NO;
for (Treater *treater in treaters) {
CLLocationCoordinate2D c2;
c2.latitude = treater.latitude;
c2.longitude = treater.longitude;
double distance = [self distanceBetweenLocations:center :c2];
if(distance > zoomDistance && distance < MAX_DISTANCE) {
zoomDistance = distance;
treaterVisible = YES;
}
}
if(!treaterVisible) {
zoomDistance = MAX_DISTANCE;
}
CLLocationCoordinate2D location;
location.latitude = self.searchLocationLatitude;
location.longitude = self.searchLocationLongitude;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, zoomDistance, zoomDistance);
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:region];
[self.mapView setRegion:adjustedRegion];
}
Run Code Online (Sandbox Code Playgroud)
只是如果有人需要类似的东西。
最好的问候
Søren
| 归档时间: |
|
| 查看次数: |
4000 次 |
| 最近记录: |